垂直3级下拉菜单

时间:2012-02-04 14:45:06

标签: css drop-down-menu

我有一个带有3级子菜单的垂直css菜单有问题。最后一个子菜单没有对齐,我不知道问题出在哪里。

这是一个演示http://jsfiddle.net/pPckk/1/ 如果你不能打开jsfiddle,这里是代码:

<div id="global-nav">
        <ul class='parent'>
            <li class="smt"><a href="#">cat1</a></li>

            <li class="c1">
                <ul class='child child1'>
                    <li class="smt"><a href="#">cat1.1</a></li>

                    <li class="smt"><a href="#">cat1.2</a></li>

                    <li class="c1">
                        <ul class='child child2'>
                            <li class="smt"><a href="#">cat1.2.1</a></li>

                            <li class="c1">
                                <ul class='child child3'>
                                    <li class="smt"><a href="#">cat1.2.1.1</a></li>
                                </ul>
                            </li>
                        </ul>
                    </li>

                    <li class="smt"><a href="#">cat1.3</a></li>

                    <li class="smt"><a href="#">cat1.4</a></li>
                </ul>
            </li>

            <li class="smt"><a href="#">cat2</a></li>

            <li class="c1">
                <ul class='child child1'>
                    <li class="smt"><a href="#">cat2.1</a></li>
                </ul>
            </li>
        </ul>
    </div>
#nav, #nav ul {
    line-height: 1.5em;
    list-style-position: outside;
    list-style-type: none;
    margin: 0;
    padding: 0;
    position: relative;
}
#nav a:link, #nav a:active, #nav a:visited {
    background-color: #333333;
    border: 1px solid #333333;
    color: #FFFFFF;
    display: block;
    padding: 0 5px;
    text-decoration: none;
}
#nav a:hover {
    background-color: #FFFFFF;
    color: #333333;
}
#nav li {
    position: relative;
    width: 100px;
}
#nav ul {
    display: none;
    left: 100px;
    position: absolute;
    width: 192px;
    top:0;
}
#nav li ul a {
    float: left;
    width: 192px;
}
#nav ul ul {
    top:0;
}
#nav li ul ul {
    left: 192px;
    top:25px;
    margin: 0 0 0 13px;
}
#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul {
    display: none;
}
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul {
    display: block;
}

2 个答案:

答案 0 :(得分:2)

添加

#nav li ul ul ul {
    left: 192px;
    top:0px;
    margin: 0 0 0 13px;
}

你完成了......

以下是我所拥有的,它的工作完美...... Yipee !!!我第一次这样做并且工作!!!

<html>
<head>
<style>
#nav, #nav ul {
    line-height: 1.5em;
    list-style-position: outside;
    list-style-type: none;
    margin: 0;
    padding: 0;
    position: relative;
}

#nav a:link, #nav a:active, #nav a:visited {
    background-color: #333333;
    border: 1px solid #333333;
    color: #FFFFFF;
    display: block;
    padding: 0 5px;
    text-decoration: none;
}

#nav a:hover {
    background-color: #FFFFFF;
    color: #333333;
}
#nav li {
    position: relative;
    width: 100px;
}

#nav ul {
    display: none;
    left: 100px;
    position: absolute;
    width: 192px;
    top:0;
}

#nav li ul a {
    float: left;
    width: 192px;
}

#nav ul ul {
    top:0;
}

#nav li ul ul {
    left: 192px;
    top:25px;
    margin: 0 0 0 13px;
}

#nav li ul ul ul {
    left: 192px;
    top:0px;
    margin: 0 0 0 13px;
}


#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{
    display: none;
}
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul {
    display: block;
}
</style>
</head>
<body>
<ul id="nav">
<li><a href="#">cat1</a><ul class="jaccordion">
<li><a href="#">cat1.1</a><ul class="jaccordion"></ul></li>
<li><a href="#">cat1.2</a><ul class="jaccordion">
<li><a href="#">cat1.2.1</a><ul class="jaccordion">
<li><a href="#">cat1.2.1.1</a><ul class="jaccordion"></ul></li></ul></li></ul></li>
<li><a href="#">cat1.3</a><ul class="jaccordion"></ul></li>
</ul></li>
<li><a href="#">cat2</a><ul class="jaccordion">
<li><a href="#">cat2.1</a><ul class="jaccordion"></ul></li></ul></li>
</ul>
</body>
</html>

答案 1 :(得分:0)

问题是以下规则:

#nav li ul ul {
    left: 192px;
    top:25px;
    margin: 0 0 0 13px;
}

因为它不仅适用于第二级,也适用于第三级。 为第三级别ul添加规则以更正该规则。

我建议在这样的菜单中使用uls上的类:<ul class="first-level">... 这样可以实现更精确的样式并缩短选择器。