Search code examples
htmlcssz-index

Understanding z-index: How does this element appear in front of its parent's sibling?


Why is the red div in front of the green div when I remove z-index from .wrapperRed?

It feels like z-index is inherited up the chain.

If I change the z-index of the green div to 6, it stays in front of the red one even after removing the line described in the first sentence.

.wrapperRed {
  height: 200px;
  width: 200px;
  position: absolute;
  z-index: 1; /* Why is the red div in front of the green one, if this z-index is deleted? */
}

.red {
  position: absolute;
  height: 100%;
  width: 100%;
  background-color: red;
  z-index: 5;
}

.green {
  height: 200px;
  width: 200px;
  background-color: green;
  position: absolute;
  top: 100px;
  left: 100px;
  z-index: 1;
}
<div class="wrapperRed">
  <div class="red"></div>
</div>
<div class="green"></div>


Solution

  • When you remove z-index from .wrapperRed, the element defaults to z-index: auto.

    In this case, both .red and .green participate in the same stacking context because positioned elements do not create a stacking context when z-index is auto (reference).

    Learn more about z-index and stacking contexts here: Basics of the CSS z-index property