由于您已经为 创建了新的堆叠上下文,因此对其子项的.parent
设置只会更改它们相对于同一块的其他子项的堆叠顺序。z-index
一个元素不能在它自己的堆叠上下文后面分层。要将子级放在其父级之后,让其z-index
工作相对于文档(或其他位于 DOM 更上层的共同祖先)。
堆叠上下文由...由任何...
元素形成,其位置值是绝对或相对,z-index 值不是 auto。
—堆叠上下文
.box {
position: relative;
/* Generate new stacking context here */
}
.parent {
width: 200px;
height: 100px;
background: #168bf5;
margin: 0 0 0 40px;
/* position: relative; */
/* Do not generate new stacking context here */
}
.child {
position: relative;
width: 100px;
height: 200px;
background: #32d19c;
margin: 0 0 0 -40px;
z-index: -1;
}
<div class="box">
<div class="parent">
parent
<div class="child">child</div>
</div>
</div>
在您链接的示例.box
中,该元素设置为display:flex
. 当元素“是 flex 容器的子元素,z-index 值不是 auto”(堆叠上下文)时,也会创建堆叠上下文。我们可以从中删除z-index
值.parent
以避免给它一个新的堆叠上下文。
.box {
display: flex;
}
.parent {
width: 200px;
height: 100px;
background: #168bf5;
margin: 0 0 0 40px;
/* z-index: 1; */
/* Do not generate a new stacking context here */
}
.child {
width: 100px;
height: 200px;
background: #32d19c;
margin: 0 0 0 -40px;
position: relative;
z-index: -1;
}
<div class="box">
<div class="parent">
parent
<div class="child">child</div>
</div>
</div>