CSS z-index没有正确堆叠

时间:2011-09-27 13:43:32

标签: css z-index

我在使用CSS z-index堆栈时遇到了麻烦。

HTML:

<ul>
    <li><a href="#">Title 1</a></li>
    <li class="dropMenu"><a href="#">Title 2</a>
        <div class="containerDropDown">
            <ul class="menu">
                <li><a href="#">Lorem ipsum link</a></li>
                <li><a href="#">Lorem ipsum dolor sit met link amet ipsum link</a></li>
                <li><a href="#">Dolor sit amet link</a></li>
                <li><a href="#">Lorem ipsum link</a></li>
                <li><a href="#">Dolor sit amet link</a></li>
                <li><a href="#">Lorem ipsum link</a></li>
            </ul>
        </div>
    </li>
    <li><a href="#">Title 3</a></li>
    <li><a href="#">Title 4</a></li>
    <li><a href="#">Title 5</a></li>
</ul>

CSS:

li.dropMenu {
    z-index:100;
}
.dropMenu:hover {   
    padding-bottom:9px;
    border:1px solid #575a5d;
    border-bottom:0;
    background-color:#434749;
    position:relative;
    -moz-box-shadow:0 0 5px #000;
    -webkit-box-shadow:0 0 5px #000;
    box-shadow:0 0 10px #000;
    z-index:100;
}
.dropMenu:hover a {
    padding:0 9px;
    color:#8f6f4d;
}
.dropMenu ul {
    width:198px;
    left:-999em;
    padding:16px 0 0 0;
    border:1px solid #575a5d;
    background-color:#434749;
    position:absolute;
    -moz-box-shadow:0 0 5px #000;
    -webkit-box-shadow:0 0 5px #000;
    box-shadow:0 0 5px #000;
}
.dropMenu:hover ul {
    /*top:32px;*/
    top:10px;
    left:-1px;
    z-index:20;
}
.dropMenu ul li {
    display:block;  
    width:100%;
    padding:0;
    z-index:70;
}
.dropMenu:hover ul li a,
.dropMenu ul li a{
    display:block;
    padding:0 30px 22px 30px;
    font-size:0.8em;
    color:#d0cfcb;
    background:transparent url("/images/background/dropDownMenu-arrow.gif") no-repeat 21px 4px; 
} 

我需要让li.dropMenu拥有比其子ul更高的堆叠顺序。我试图改变z-index但没有运气。有没有人知道任何解决方案?我正在尝试创建一个简单的下拉菜单,但是孩子UL似乎始终位于父li.dropMenu之上。

我正在为孩子ul提供一个盒子阴影,但因为它始终位于顶部,阴影覆盖li.dropMenu

5 个答案:

答案 0 :(得分:8)

您需要在CSS中为要使用position的每个元素设置static属性(z-index除外)。

答案 1 :(得分:4)

您需要li.dropMenu positionz-index才能正常工作。

尝试

li.dropMenu {
    z-index:100;
    position:relative;
}

更多信息:

  

z-index指定位置值为1的框的堆栈级别   绝对的,固定的或相对的。

http://reference.sitepoint.com/css/z-index

答案 2 :(得分:3)

你遇到的问题是绝对定位的元素相对于它最近的祖先放置有非静态(即相对的,绝对的,固定的)定位。因此,您的子z-index仅应用于父元素的上下文中,而不是与其进行比较。解决方案:将父级的内容放在子级的兄弟中:

<ul>
    <li><a href="#">Title 1</a></li>
    <li class="dropMenu">
        <div class="parentItemHolder"><a href="#">Title 2</a></div>
        <div class="containerDropDown">
            <ul class="menu">
                <li><a href="#">Lorem ipsum link</a></li>
                <li><a href="#">Lorem ipsum dolor sit met link amet ipsum link</a></li>
                <li><a href="#">Dolor sit amet link</a></li>
                <li><a href="#">Lorem ipsum link</a></li>
                <li><a href="#">Dolor sit amet link</a></li>
                <li><a href="#">Lorem ipsum link</a></li>
            </ul>
        </div>
    </li>
    <li><a href="#">Title 3</a></li>
    <li><a href="#">Title 4</a></li>
    <li><a href="#">Title 5</a></li>
</ul>

使用CSS(注意,为简洁起见,我删除了一些原文):

.dropMenu {
    position: relative;
}
.dropMenu:hover div.parentItemHolder {   
    padding-bottom:9px;
    border:1px solid #575a5d;
    border-bottom:0;
    background-color:#434749;
    position:relative;
    -moz-box-shadow:0 0 5px #000;
    -webkit-box-shadow:0 0 5px #000;
    box-shadow:0 0 10px #000;
    z-index:100;
}
.dropMenu ul {
    width:198px;
    display: none; /* using display: none; instead of left: -999em; */
    padding:16px 0 0 0;
    border:1px solid #575a5d;
    background-color:#434749;
    -moz-box-shadow:0 0 5px #000;
    -webkit-box-shadow:0 0 5px #000;
    box-shadow:0 0 5px #000;
}
.dropMenu:hover ul {
    display: block;
    position: absolute;
    z-index:20;
}

答案 3 :(得分:1)

z-index仅适用于定位元素(位置:绝对,位置:相对或位置:固定)。

答案 4 :(得分:1)

首先删除z-indices

然后您应该定位兄弟姐妹a.containerDropDown,或删除.containerDropDown,而只需使用ul

然后你只需要添加:

.dropMenu>a{position:relative;z-index:2}

比尝试使子z-index小于父级要容易得多。

做了一个小提琴:http://jsfiddle.net/filever10/TbJt3/