我有两层菜单-一个ul和另一个嵌套的ul,-一个带有下拉子菜单的菜单,例如:
<div id="menu">
<ul>
<li>Menu item</li>
<li>Menu item
<ul>
<li>Sub Menu item</li>
<li>Sub Menu item</li>
</li>
</ul>
<li>Menu item
<ul>
<li>Sub Menu item</li>
<li>Sub Menu item</li>
</li>
</ul>
</li>
</ul>
</div>
第一个ul以内联方式显示,而第二个ul以块方式显示,并使用JQuery隐藏和显示。
我有以下CSS来将子菜单ul定位在它们各自的父菜单li下:
#menu UL LI {
list-style-type: none;
display: inline;
padding: 10px;
position: relative;
}
#menu UL LI UL {
display: none;
z-index: 999;
position: absolute;
}
#menu UL LI UL LI {
display: block;
width: 100px;
}
我的问题是,在FireFox和IE中,子菜单项不会出现在它们各自的父项下。然而,它在Chrome和Safari中运行良好。
我认为这是正确的方法,但有人知道更好的方法吗?
要达到您想要的状态,需要进行几个小的更改:
#menu ul li {
+ display: inline-block;
- padding: 10px;
+ padding: 0 10px 0 10px;
}
#menu ul li ul li {
+ padding: 10px;
}
无需重新发明轮子,更灵活:http://net.tutsplus.com/tutorials/html-css-techniques/how-to-build-a-kick-butt-css3-mega-drop-down-menu/
演示:http://nettuts.s3.amazonaws.com/819_megamenu/demo/index.html
此外,如果您不打算使用灵活的布局,请设置固定宽度。当浏览器缩小时,您的网站会崩溃。
使其位于正确位置的最简单方法是将其定位到父LI。
将left: 0
添加到您的#menu UL LI UL
Css声明中,它就会开始按照您的意愿运行。
如果您从站点复制了标记,那么可能是这个错误。你的开始和结束标签不匹配。我在这里解决了这个问题:
<div id="menu">
<ul>
<li>Menu item</li>
<li>Menu item
<ul>
<li>Sub Menu item</li>
<li>Sub Menu item</li>
</ul>
</li>
<li>Menu item
<ul>
<li>Sub Menu item</li>
<li>Sub Menu item</li>
</ul>
</li>
</ul>
</div>
我刚刚对你的css做了一些快速修改,这可能会帮助你。
#menu ul
{
background: blue;
}
#menu ul li
{
list-style-type: none;
width: 100px;
}
#menu ul > li
{
display: inline-block;
position: relative;
padding: 10px;
height: 20px;
background: red;
}
#menu li > ul
{
display: none;
position: absolute; left: 0px; top: 40px; z-index: 999;
background: yellow;
}
#menu li > ul > li
{
display: block;
background: green;
}