原有一dom结构如下:
<div class="box">
<div class="top">
</div>
<div class="bottom">
<ul>
<li>
<div class="cover"></div>
</li>
<li>
<div class="cover"></div>
</li>
</ul>
</div>
</div>
其css部分如下:
.top{
position: relative;
width: 100%;
height: 40px;
background-color: antiquewhite;
z-index: 1;
}
/*省略部分代码*/
.bottom{
width: 100%;
height: 200px;
background-color: aliceblue
}
.bottom ul{
width: 100%;
height: 100%;
}
.bottom ul li{
position: relative;
width: 80%;
height: 30px;
margin-bottom: 2px;
}
.bottom ul li .cover{
position: absolute;
width: 100%;
height: 100%;
top:0;
left: 0;
z-index: 3;
background-color: aquamarine;
}

原样式
想在top中添加一个相对定位的ul,如下:
<div class="top">
<ul>
<li></li>
<li></li>
</ul>
</div>
.top ul{
position: absolute;
width: 80%;
left: 20px;
top:10px;
z-index: 4;
}
.top ul li{
width: 80%;
height: 30px;
margin-bottom: 2px;
background-color: blueviolet;
}
期望是这个样子的:

预期效果
然而得到的结果是这个样子的:

开始结果
在浏览器中查看top中的ul的z-index值为4

`top`里的`ul`样式
bottom中的cover的z-index值为3

`bottom`下的`cover`
当元素之间重叠的时候,z-order 决定哪一个元素覆盖在其余元素的上方显示。 通常来说 z-index 较大的元素会覆盖较小的一个。
按照上面的理论来说,top的ul应该显示在上面,然后实际情况却相反。甚至top的ul的z-index值设置成 999 还是依旧在下面,那么问题出现在哪里呢?是否和其父元素的z-index值有关呢?

`top`
此处top的z-index值为1,将其改为4,OK;将其改为3,则否。而无论怎么修改top中ul的z-index值都不会影响到结果。
此处可以将top和bottom下的cover看做是同一层级的比较,z-index值相同时,后面的覆盖前面的;不同时,值大的覆盖值小的。
另一方面,将bottom设置成如下:

`bottom`
发现
top的ul依旧被bottom下的cover覆盖,无论cover的z-index值是否为-1。
由此可知:在同一个dom元素下(如这里的box),两个元素的z-index值的比较,实际是其设置了z-index值父元素的比较(或者说“仅拼爹”)。