Возникли проблемы с чистой CSS-навигацией

#css #navigation

#css #навигация

Вопрос:

Скриптуйте здесь:http://jsfiddle.net/csaltyj/3A78u /

Я хочу, чтобы меню sub-sub nav совпадало с верхней частью его родительского элемента (следовательно, top: 0), но по какой-то причине оно совпадает с родительским элементом родительского элемента. Я не уверен, что происходит .. есть идеи?

HTML:

 <div id="nav">
    <ul>
        <li><a>Item One</a></li>
        <li><a>Item Two</a>
            <ul>
                <li><a>Item two has babies</a></li>
                <li><a>Baby #2</a>
                    <ul>
                        <li><a>Sub-babies</a></li>
                        <li><a>This is fun</a></li>
                        <li><a>Last Item</a></li>
                    </ul>
                </li>
                <li><a>SubSub</a>
                    <ul>
                        <li><a>Another Item</a></li>
                        <li><a>Another!</a></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
  

CSS:

 #nav {
    height: 40px;
}

#nav ul {
    list-style: none;
    font-family: Arial, sans-serif;
    font-size: 0.8em;
}

/* When mousing over any LI, reveal its UL if any */
#nav > ul li:hover > ul {
    display: block;
}

/* For all links */
#nav a {
    text-decoration: none;
    color: #000;
}

/* Main nav styling */
#nav > ul > li > a {
    padding: 1em;
}

#nav a:hover {
    color: red;
}

#nav > ul > li {
    float: left;
    border: 1px solid #999;
}

/* Subnav styling */
#nav > ul ul {
    display: none;
    position: absolute;
    font-size: 1em;
    background: #eee;
    padding: 0.5em;
    border: 1px solid #999;
}

/* Subsubnav styling */
#nav > ul ul ul {
    left: 50px;
    top: 0;
    width: 150px;
    position: absolute;
}

#content {

}
  

Ответ №1:

Вам нужно добавить position: relative элементы «уровня 2» li :

 #nav > ul ul li {
    position: relative
}
  

Вот версия, в которой все дочерние элементы выстроены в ряд: http://jsfiddle.net/3A78u/2 /

Если бы вы хотели использовать > , это было бы #nav > ul > li > ul > li .

Комментарии:

1. Это работает, но создает странную проблему с прозрачностью: jsfiddle.net/csaltyj/3A78u/3

Ответ №2:

Свойство ‘top’ относится к первому нестатически расположенному родительскому элементу. В данном случае это элемент UL (который абсолютно позиционирован). Вам нужно добавить ‘position:relative;’ к элементам списка, чтобы элементы внутри были выровнены относительно него.