兄弟绝对元素的z-index

时间:2016-07-26 17:24:02

标签: html css position z-index

我试图理解为什么这个例子中的蓝色div并不总是在顶部?也就是说红色div#2如何在蓝色孩子1的顶部。

body {
  padding: 30px;
}
.red1 {
  position: absolute;
  z-index: 1;
  width: 400px;
  height: 200px;
  background: red;
}
.red2 {
  position: absolute;
  z-index: 1;
  width: 400px;
  height: 200px;
  top: 250px;
  background: red;
}
.blue {
  z-index: 9;
  padding: 10px;
  text-align: center;
  color: white;
  text-transform: uppercase;
  position: absolute;
  top: 100px;
  left: 100px;
  width: 150px;
  height: 130px;
  background: blue;
}
<div class="red1">
  <div class="blue">
    blue child 1
  </div>
</div>
<div class="red2">
  <div class="blue">
    blue child 2
  </div>
</div>

FIDDLE

3 个答案:

答案 0 :(得分:2)

因为.red1.red2形成了不同的堆叠上下文。

一个堆叠上下文中的元素不会与另一个堆叠上下文中的元素一起参与。

如果您.red2 z-index: -1,则会得到您期望的行为(the root element forms a stacking context)。

那是因为.red1.red2都是绝对定位的,没有定位祖先。这意味着根元素是它们的直接祖先,Basics of the CSS z-index property

此处有更多详情:

答案 1 :(得分:0)

堆栈上下文(无论是本地的还是根的)都遵循一组确定元素的堆栈和绘制顺序的规则。堆叠上下文的子级按以下顺序从下到上绘制。如果您下单,您将看到更改。意思是div.red2,然后是div.red1

答案 2 :(得分:0)

body {
  padding: 30px;
}
.red1 {
  position: absolute;
  z-index: 1;
  width: 400px;
  height: 200px;
  background: red;
}
.red2 {
  position: absolute;
  z-index: 1;
  width: 400px;
  height: 200px;
  top: 250px;
  background: red;
}
.blue {
  z-index: 9;
  padding: 10px;
  text-align: center;
  color: white;
  text-transform: uppercase;
  position: absolute;
  top: 100px;
  left: 100px;
  width: 150px;
  height: 130px;
  background: blue;
}
<div class="red2">
  <div class="blue">
    blue child 2
  </div>
</div>
<div class="red1">
  <div class="blue">
    blue child 1
  </div>
</div>