css hover влияет на несвязанный элемент

0

Я пытаюсь показать соответствующее подменю, когда пользователь наводит курсор на элемент в главном меню. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь общего родителя для селектора hover, чтобы сделать свою магию, но тогда это, похоже, испортило мой стиль. Любые предложения о том, что forgo javascript/jquery будут оценены, поскольку я использую это как костыль слишком много для вещей, которые я, вероятно, должен решать с помощью CSS.

HTML

<div id="header">
    <div id="header_headline">
        Heading
    </div>
    <div id="menu">
        <div id="menu_inset">
            <a href="#" class="menu_item" id="menu_item_home">HOME</a>
            <a href="#" class="menu_item" id="menu_item_profile">PROFILE<div class="sub_menu_arrow"></div></a>
            <a href="#" class="menu_item" id="menu_item_projects">PROJECTS<div class="sub_menu_arrow"></div></a>
            <a href="#" class="menu_item" id="menu_item_news">NEWS</a>
            <a href="#" class="menu_item" id="menu_item_contacts">CONTACT</a>
        </div>
    </div>
    <div id="sub_menu">
        <div class="sub_menu_inset" id="sub_menu_profile">
            <a href="#">1</a>
            <a href="#">2</a>
            <a href="#">3</a>               
        </div>
        <div class="sub_menu_inset" id="sub_menu_projects">
            <a href="#">1</a>
            <a href="#">2</a>
            <a href="#">3</a>               
            <a href="#">4</a>               
        </div>
    </div>
</div>

CSS:

html, body {
    width: 100%;
    height: 100%;
    border: 0;
    padding: 0;
    margin: 0;
    font-family: 'Pathway Gothic One', sans-serif;
    color: #212121;
}

a {
    text-decoration: none;
    color: #212121;
}

#header {
    width: 100%;
}

#header_headline {
    margin: 1em 1em 1em 1em;
    font-size: 2em;
    text-transform: uppercase;
}

#menu {
    margin-top: 1em;
    width: 100%;
    text-align: center;
    white-space: nowrap;
}

#menu_inset {
    display: inline-block;
    word-spacing: 5em;
}

.menu_item {
    position: relative;
}

.menu_item:hover .sub_menu_arrow {
    display: inline-block;
}

#menu_item_profile:hover ~ #sub_menu_profile {
    display: inline-block;
}

#menu_item_people:hover ~ #sub_menu_people {
    display: inline-block;
}

.sub_menu_arrow {
    position: absolute;
    display: none;
    left: 0;
    width: 100%;
    bottom: -1.05em;
}
.sub_menu_arrow:after {
    content: '';
    margin: 0 auto;
    border-width: 0 .5em .5em;
    border-style: solid;
    border-color: #CCCCCC transparent;
    display: block;
    width: 0;
}

#sub_menu {
    margin-top: 1em;
    background-color: #CCCCCC;
    width: 100%;
    text-align: center;
    white-space: nowrap;
    position: relative;
    height: 2em;
}

.sub_menu_inset {
    display: none;
    top: 0.5em;
    position: absolute;
    left: 0;
    width: 100%;
    background-color: #CCCCCC;
    word-spacing: 5em;
}

http://jsfiddle.net/u9v0mcvo/

  • 0
    Зачем использовать div? Вы можете использовать ul, li и использовать вложенный список для создания меню и подменю. Этот HTML не так структурирован.
Теги:

2 ответа

0
Лучший ответ

Вам необязательно использовать элементы <ul> и <li>. Хотя, следует избегать вложенности <a> тегов в <a> тегов. Я думаю, что это то, что вы могли бы попытаться выполнить (наведите указатель мыши на проект):

http://jsfiddle.net/u9v0mcvo/1/

Создавая только CSS-всплывающие подсказки, всплывающие подсказки и т.д., Он помогает вложить изначально скрытый элемент в элемент, который отвечает за его открытие.

0

Ваше меню должно быть <ul> а подменю должно быть <ul> внутри <li> s. Затем под-ul следует позиционировать абсолютно и отображать: none. верхний уровень <li> должен иметь: зависание, которое изменяет внутренний <ul> на блок блокировки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню