position: absolute로 인해 겹쳐진 요소들의 순서는 z-index 속성으로 변경할 수 있다.
z-index 속성값은 음수와 양수 모두 가능하며 더 큰 숫자를 가진 요소가 위로 올라온다.
z-index 값을 주기 위해서는 반드시 해당 요소의 position 속성이 relative, absolute, fixed 중 하나에 해당되어야 한다.
<div class="wrap">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</div>
우선 z-index가 기본값 auto일 때는 더 나중에 선언된 요소가 위로 올라온다.
만약 순서를 반대로 뒤집고자 한다면,
.wrap{
position: relative;
}
.wrap div{
width: 200px;
height: 200px;
position: absolute;
}
.box1{
background: darkorange;
top: 100px;
left: 300px;
z-index: 3;
}
.box2{
background: darkorchid;
top: 160px;
left: 230px;
z-index: 2;
}
.box3{
background: darkgreen;
top: 220px;
left: 160px;
z-index: 1;
}
이렇게 각 box에 원하는 순서에 맞게 z-index 값을 주면 순서가 변경된다.
또 하나 알아두어야 할 점은, z-index 값은 같은 depth인 형제요소끼리 비교하는 것이 원칙이기 때문에 만약 자식요소가 큰 z-index 값을 가졌더라도 부모요소의 z-index 값에는 영향을 주지 않는다.
예를 들어,
<div class="wrap">
<div class="box1"></div>
<div class="box2"></div>
<div class="box3">
<div class="box4"></div>
</div>
</div>
.wrap{
position: relative;
}
.wrap div{
width: 200px;
height: 200px;
position: absolute;
}
.box1{
background: darkorange;
top: 100px;
left: 300px;
z-index: 3;
}
.box2{
background: darkorchid;
top: 160px;
left: 230px;
z-index: 2;
}
.box3{
background: darkgreen;
top: 220px;
left: 160px;
z-index: 1;
}
.box4{
background: darkkhaki;
top: 50px;
left: 50px;
z-index: 999;
}
box4가 999의 z-index 값을 가졌지만 그의 부모요소인 box3의 z-index 값은 1이기 때문에 아래의 사진과 같이 box4는 위로 올라올 수 없다.