我的下拉菜单子项与父元素重叠有问题。请检查我的小提琴,以了解问题: Fiddle example
HTML code:
<div id="main_category_menu">
<ul id="menu">
<li>
<a href="#">Category</a>
<div class="menu-container">
<h3>Text goes here</h3>
Items count: tralala<hr/>
<ul class="menu_category">
<li class="menu_subcategory">
<a href="browse.php?id=76">
Advertising(0)
</a>
</li>
<li class="menu_subcategory">
<a href="browse.php?id=76">
Blalala(0)
</a>
</li>
<li class="menu_subcategory">
<a href="browse.php?id=76">
Super megatron(0)
</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
CSS代码:
#main_category_menu{
width: 100%;
}
#menu ul, #menu li {
line-height:22px;
text-align:left;
font-size:14px;
}
#menu {
list-style:none;
width:100%;
margin:0 auto;
height:45px;
padding:5px 30px;
}
#menu li {
float:left;
display:block;
position:relative;
text-align:center;
padding:4px 10px;
margin:7px 30px 0 0;
border:none;
}
#menu li:hover {
border:1px solid #b7b7b7;
border-bottom: none;
padding:4px 9px;
background: yellow;
border-radius:5px 5px 0 0;
-moz-border-radius:5px 5px 0 0;
-webkit-border-radius:5px 5px 0 0;
z-index: 10;
}
#menu li a {
font-size:14px;
color: #444444;
display:block;
outline:0;
text-decoration:none;
}
#menu li:hover a {
color:#161616;
}
#menu .menu-container{
margin:0px auto;
float:left;
position:absolute;
left:-999em;
text-align:left;
padding:10px 5px;
border:1px solid #b7b7b7;
background-color: #ffffff;
border-radius:0 5px 5px 5px;
-moz-border-radius:0 5px 5px 5px;
-webkit-border-radius:0 5px 5px 5px;
}
#menu .menu-container {
width:280px;
background: transparent url('logo.gif') no-repeat right bottom;
}
#menu li:hover .menu-container{
top:auto;
left:-1px;
}
#menu p, #menu h2, #menu h3, #menu ul li {
line-height:21px;
font-size:12px;
text-align:left;
}
#menu p {
line-height:18px;
margin-bottom:10px;
color:#F2E8E8;
}
#menu h3, #menu h2 {
font-size:11px;
margin:7px 0 14px 0;
padding-bottom:5px;
text-transform:uppercase;
color: #999999;
}
#menu li:hover div a {
color: #666666;
font-size: 11px;
padding-left: 6px;
}
#menu li:hover div a:hover {
color: #FAFAFA;
background:#99DE00;
}
#menu li ul {
list-style:none;
padding:0;
margin-bottom:12px;
}
#menu li ul li {
float: none;
font-size: 12px;
line-height: 24px;
margin: 0;
padding: 0;
position: relative;
text-align: left;
width: 100%;
}
#menu li ul li:hover {
background: none;
border: medium none;
margin: 0;
padding: 0;
}
我需要这样: Result image example
试图添加z-index;但它不适用于我的。任何建议都会受到批评。 谢谢! :)
答案 0 :(得分:3)
问题在于堆栈(订单)。
由于li
包含.menu-container
且li
已有堆叠上下文,.menu-container
会在其中创建子上下文,并且永远不会在其下方显示。您需要做的是从堆叠顺序中取出li
,然后在.menu-container
下面显示负z-index
。但是,如果li
的祖先不在堆叠环境中,则您的.menu-container
可能会显示在网页内容下方。因此,您可能应该让li
的父级拥有z-index
并附带位置,以便将其置于堆叠顺序。
我不确定这是否在IE6 / IE7上正常工作。
Here is a forked JSFiddle showing the changes.(li
不再有z-index
,而.menu-container
现在有z-index
;现在父ul#menu
也被置于.menu-container
进入堆叠顺序,以便{{1}}不会显示在页面内容下方
答案 1 :(得分:2)
您可以使用:after
这样的伪元素来实现此目的:
#menu > li:hover:after {
content: '';
background: yellow;
position: absolute;
top: 100%;
width: 100%;
height: 4px;
left: 0;
margin-top: -4px;
z-index: 2;
}
您可以使用其他元素(例如div的div)代替:after
,而不是添加到标记。
答案 2 :(得分:0)
答案 3 :(得分:0)
像之前或之后使用部分边框的东西会帮助你检查这个小提琴
#menu .menu-container:before{
content: '';
width: 222px;
margin-left: 64px;
height: 1px;
background: #b7b7b7;
position: absolute;
top: -0.5px;
}
答案 4 :(得分:-1)
#menu li:hover {
border:1px solid #b7b7b7;
border-bottom: none;
padding:4px 9px;
padding-bottom: 0px !important;
background: yellow;
border-radius:5px 5px 0 0;
-moz-border-radius:5px 5px 0 0;
-webkit-border-radius:5px 5px 0 0;
z-index: 10;
}
很容易尝试这个: FIDDLE