CSS多级下拉不起作用

时间:2014-03-06 19:27:53

标签: html css menu

好的 - 我放弃了!我没有太多的CSS经验,但我正在尝试创建一个简单的CSS多级下拉菜单。我几乎让它工作,但无法找出一件事......当我将鼠标悬停在顶级菜单上时,所有子级别菜单(第二和第三)显示该项目。有人可以告诉我,我做错了什么?我尝试了很多解决方案 - 这就是我所处的位置。非常感谢任何帮助:)

#ddmenu {
font-size: .9em; 
display: block;
width: 100%;
height: 30px;
margin: 0 auto;
padding: 0 15px;
background: #fff;
border-radius: 2px;
border: 1px solid rgba(0, 0, 0, 0.15);
box-shadow: 0 1px 1px rgba(20, 20, 20, 0.2);
cursor: pointer;
outline: none;
font-weight: bold;
color: #8aa8bd;
z-index: 5000;
}

#ddmenu ul {
z-index: 1000;
position: absolute;
top: 25px;
width: 180px;
background: #fff;
display: none;
margin: 0;
padding: 7px 0;
list-style: none;
border-radius: 3px;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
}

#ddmenu li {
font-size: 0.9em; 
display: block;
position: relative;
float: left;
text-shadow: 1px 1px 0 #fff;
z-index: 5000;
line-height: 30px;
color: #6c87c0;
padding: 0 10px;
white-space: none;
}

#ddmenu li a {
display: block;
float: left;
font-weight: bold;
text-decoration: none;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear;
}

#ddmenu li:hover > a {
color: #7180a0;
background: #d9e2ee;
}

/* level 3+ list */
#ddmenu ul ul {
left: 180px;
top: -3px;
}

HTML是:

<ul id="ddmenu">
    <li><a href="javascript: void(0);">Home</a>
      <ul>
        <li><a href="javascript: void(0);">New</A></LI>
        <li><a href="javascript: void(0);">Show All</A></LI>
      </ul>
    </LI>
    <LI><a href="javascript: void(0);">Layers</a>
        <ul>

            <li><A HREF="javascript: void(0);">Trans 1</A>
            <UL>            
                <li><A HREF="javascript: void(0);">sub one</A></LI>             
                <li><A HREF="javascript: void(0);">sub two</A></LI>             
                <li><A HREF="javascript: void(0);">sub three</A></LI>               
            </UL>
            </li>

            <li><A HREF="javascript: void(0);">Trans 2</A>
            <UL>            
                <li><A HREF="javascript: void(0);">sub one</A></LI>         
            </UL>
            </li>
        </ul>   
    </LI>
</ul>

2 个答案:

答案 0 :(得分:0)

假设您正在查看纯CSS菜单(不太确定您要对所有javascript: void(0);执行什么操作,但如果您刚刚测试设置#的类型较少),则会显示你错过了如何展示的东西。我无处可见:hover { display: block;}(或其他东西)。为了让自己更简单,我倾向于使用CSS来使菜单先工作,然后让它看起来更好(包括转换)。所以我把代码条纹回到正确显示菜单所需的CSS,我会让它看起来更好看,但这大致是我通常所做的:

#ddmenu li {
    list-style-type: none;
    position: relative;            
}

#ddmenu > li {
    display: inline;
}

#ddmenu ul {
    padding: 0;
    margin: 0;
    position: absolute;
    top: 100%;
    left: 0;
    display: none;
}

#ddmenu li:hover > ul {
    display: block;
}

#ddmenu ul li ul {
    top: 0;
    left: 100%;            
}

和HTML:

<ul id="ddmenu">
    <li>
        <a href="#">Home</a>
        <ul>
            <li><a href="#">New</a></li>
            <li><a href="#">Show All</a></li>
        </ul>
    </li>
    <li>
        <a href="#" class="layerhomelink">Layers</a>
        <ul>

            <li>
                <a href="#">
                    Trans 1
                </a>
                <ul>
                    <li><a href="#">sub one</a></li>
                    <li><a href="#">sub two</a></li>
                    <li><a href="#">sub three</a></li>
                </ul>
            </li>

            <li>
                <a href="#">
                    Trans 2
                </a>
                <ul>
                    <li><a href="#">sub one</a></li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

宽度可能还需要根据您的需要进行调整。这在大多数浏览器中应该没问题,包括回到IE 8

所以下一步,放回样式(让它看起来更漂亮的位),我将其分成以下内容:

 #ddmenu a {
        padding: .5em;
        font-weight: bold;
        text-decoration: none;
        -webkit-transition: all 0.2s linear;
        -moz-transition: all 0.2s linear;
        -o-transition: all 0.2s linear;
        transition: all 0.2s linear;
    }

    #ddmenu {
        font-size: .9em;
        height: 30px;
        margin: 0 auto;
        padding: 0 15px;
        background: #fff;
        border-radius: 2px;
        border: 1px solid rgba(0, 0, 0, 0.15);
        box-shadow: 0 1px 1px rgba(20, 20, 20, 0.2);
        cursor: pointer;
        outline: none;
        font-weight: bold;
        color: #8aa8bd;
    }

        #ddmenu ul {
            width: 180px;
            background: #fff;
            margin: 0;
            padding: 7px 0;
            border-radius: 3px;
            border: 1px solid rgba(0, 0, 0, 0.2);
            box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
        }

        #ddmenu li {
            font-size: 0.9em;
            text-shadow: 1px 1px 0 #fff;
            line-height: 30px;
            color: #6c87c0;
            padding: 0 10px;
            white-space: nowrap;
        }

            #ddmenu li li a {
                display: block;               
            }

            #ddmenu li:hover > a {
                color: #7180a0;
                background: #d9e2ee;
            }
一切都应该是好的。最终我通常将css组合在一起,但有时候将它们分开(表格来自FUNCTION)更加清晰,即使在不同的CSS文件中也是如此,这样你就可以重新设置菜单主题,而不会破坏它的功能。

我发现尝试使用浮动和定位进行CSS菜单加倍,并且令人困惑。这纯粹是使用定位,父元素是位置相对的,除了让你的子元素绝对位于其中之外,它实质上什么也没做。我使用百分比宽度,然后正确定位子菜单,无论宽度和字体/像素大小不同,因此您不会对像素进行细粒度的战争。但请注意,将边距或填充放在错误的位置可能会改变菜单,因此可能需要进行调整。我会小步骤(一次一个样式规则),并在所有浏览器中测试你所改变的内容,只是为了确保你不会无意中改变菜单行为。

无论如何希望有所帮助

答案 1 :(得分:0)

第一个下拉级别的快速修复方法是:

只需添加一个

#ddmenu li:hover ul{
    display: block;
}

但我建议你从头开始构建它,首先是HTML结构,然后是CSS,没有任何效果(边框等)。