【Css】Z-index에 대해 No-1(stacking context)
처음에
css에서 요소의 스택 순서를 결정하는 z-index. 단지 z-index에 값을 지정하는 것만으로는 작동하지 않는 장면이 있습니다. 그 원인과 이유에 대해 배운 내용을 써 보았습니다.
※내용에 실수등이 있는 경우는 지적을 잘 부탁드립니다.
z-index란?
MDN의 공식 문서에는 다음과 같이 해설되어 있습니다.
CSS의 z-index 속성은 위치 지정 요소와 그 자손 요소 또는 플렉스 항목의 z 순서를 정의합니다. 보다 큰 z-index 를 가지는 요소는 보다 작은 요소 위에 겹칩니다.
요컨대 같은 적층 컨텍스트(stacking context)내의 요소끼리의 적층 레벨을 지정해, 표시되는 상하의 위치 관계를 지정하는 프로퍼티입니다. 여기서 중요한 개념은 stacking context입니다.
단순히 z-index 값을 높이는 것만으로 요소의 겹침 정도는 변하지 않습니다.
요소는 설명한 순서대로 아래에서 위로 쌓입니다.
<body>
<div class="red"></div>
<div class="blue"></div>
<div class="yellow"></div>
</body>
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
이것을 빨간색 위에 파란색, 그 위에 노란색이 쌓여 있습니다.
이 상태에서 파랑을 맨 아래로 하고, 다음에 빨강, 노랑이 오도록 z-index를 지정해 보겠습니다.
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
z-index: 2; //追記
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
z-index: 1; //追記
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
z-index: 3; //追記
}
결과는 이전과 동일합니다. 이런 식으로 z-index를 지정하는 것만으로는 요소의 스택 순서를 변경할 수 없습니다.
Context란?
요소가 쌓이기 위해서는 토대(베이스)가 되는 것이 필요합니다. 집이 세우려면 토대가 되는 지면이 없으면 안 되네요. 그것과 마찬가지로 요소는 무언가의 기초 위에 쌓입니다. css에서는 스택의 개념으로 context라는 것이 있습니다. 같은 context(기초)의 요소끼리만 z-index는 적용되지 않습니다.
html은 계층 구조이며 요소에는 반드시 부모와 자식 관계가 있습니다. 요소의 적층 순서는 부모 요소가 context(토대)이며, 그 context상의 같은 계층의 형제 요소(siblings)끼리에만 적용됩니다. 앞의 예에서 말하면 body 요소의 context상에 red, blue, yellow라는 3개의 형제 요소가 있으므로, 적층 순서가 정해지는 것입니다.
<body> //bodyタグが親要素でありcontextを生成している
<div class="red"></div> //bodyが生成するcontext内にある
<div class="blue"></div>
<div class="yellow"></div>
</body>
만약 다음과 같이 레드 안에 bule가 있고 blue 안에 한층 더 yellow가 있었다면 어떻게 될까요?
<body>
<div class="red">
<div class="blue">
<div class="yellow"></div>
</div>
</div>
</body>
CSS의 설명은 다음과 같습니다.
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
결과적으로는 노란색만 되어 버렸습니다.
이 이유는 body 태그의 컨텍스트에 red가 있고 red 태그의 컨텍스트에 더 blue가 있고 blue 태그의 컨텍스트에 yellow가 있기 때문입니다. 토대가 각각 body,red,blue와 다르기 때문에 집(red,blue,yellow)도 그 3개의 토대를 기준으로 세우고 있습니다(stacking). 즉, 요소의 적층 순서는 부모 요소를 기준으로 한 동일한 컨텍스트 내에서 결정됩니다.
참고 사이트
htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / cs / u b / Cs / ~ 어서 x
htps : // 코 s. 코 m / r 치 c ぇ s / 부이 ld ぇ b 해서 s / 오페라 치온 / cs s / 4- 레 아소 s ~ . HTML
htps : // 그럼 아안. 이. jp / ぇ bp 로즈 c 치온 / f 롱텐 d / ~ 어서 x /
htps : // 이 m / 17296 / ms / 42 62989193504d512c7
Reference
이 문제에 관하여(【Css】Z-index에 대해 No-1(stacking context)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/redrabbit1104/items/328003a9e90d5183ef9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
MDN의 공식 문서에는 다음과 같이 해설되어 있습니다.
CSS의 z-index 속성은 위치 지정 요소와 그 자손 요소 또는 플렉스 항목의 z 순서를 정의합니다. 보다 큰 z-index 를 가지는 요소는 보다 작은 요소 위에 겹칩니다.
요컨대 같은 적층 컨텍스트(stacking context)내의 요소끼리의 적층 레벨을 지정해, 표시되는 상하의 위치 관계를 지정하는 프로퍼티입니다. 여기서 중요한 개념은 stacking context입니다.
단순히 z-index 값을 높이는 것만으로 요소의 겹침 정도는 변하지 않습니다.
요소는 설명한 순서대로 아래에서 위로 쌓입니다.
<body>
<div class="red"></div>
<div class="blue"></div>
<div class="yellow"></div>
</body>
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
이것을 빨간색 위에 파란색, 그 위에 노란색이 쌓여 있습니다.
이 상태에서 파랑을 맨 아래로 하고, 다음에 빨강, 노랑이 오도록 z-index를 지정해 보겠습니다.
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
z-index: 2; //追記
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
z-index: 1; //追記
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
z-index: 3; //追記
}
결과는 이전과 동일합니다. 이런 식으로 z-index를 지정하는 것만으로는 요소의 스택 순서를 변경할 수 없습니다.
Context란?
요소가 쌓이기 위해서는 토대(베이스)가 되는 것이 필요합니다. 집이 세우려면 토대가 되는 지면이 없으면 안 되네요. 그것과 마찬가지로 요소는 무언가의 기초 위에 쌓입니다. css에서는 스택의 개념으로 context라는 것이 있습니다. 같은 context(기초)의 요소끼리만 z-index는 적용되지 않습니다.
html은 계층 구조이며 요소에는 반드시 부모와 자식 관계가 있습니다. 요소의 적층 순서는 부모 요소가 context(토대)이며, 그 context상의 같은 계층의 형제 요소(siblings)끼리에만 적용됩니다. 앞의 예에서 말하면 body 요소의 context상에 red, blue, yellow라는 3개의 형제 요소가 있으므로, 적층 순서가 정해지는 것입니다.
<body> //bodyタグが親要素でありcontextを生成している
<div class="red"></div> //bodyが生成するcontext内にある
<div class="blue"></div>
<div class="yellow"></div>
</body>
만약 다음과 같이 레드 안에 bule가 있고 blue 안에 한층 더 yellow가 있었다면 어떻게 될까요?
<body>
<div class="red">
<div class="blue">
<div class="yellow"></div>
</div>
</div>
</body>
CSS의 설명은 다음과 같습니다.
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
결과적으로는 노란색만 되어 버렸습니다.
이 이유는 body 태그의 컨텍스트에 red가 있고 red 태그의 컨텍스트에 더 blue가 있고 blue 태그의 컨텍스트에 yellow가 있기 때문입니다. 토대가 각각 body,red,blue와 다르기 때문에 집(red,blue,yellow)도 그 3개의 토대를 기준으로 세우고 있습니다(stacking). 즉, 요소의 적층 순서는 부모 요소를 기준으로 한 동일한 컨텍스트 내에서 결정됩니다.
참고 사이트
htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / cs / u b / Cs / ~ 어서 x
htps : // 코 s. 코 m / r 치 c ぇ s / 부이 ld ぇ b 해서 s / 오페라 치온 / cs s / 4- 레 아소 s ~ . HTML
htps : // 그럼 아안. 이. jp / ぇ bp 로즈 c 치온 / f 롱텐 d / ~ 어서 x /
htps : // 이 m / 17296 / ms / 42 62989193504d512c7
Reference
이 문제에 관하여(【Css】Z-index에 대해 No-1(stacking context)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/redrabbit1104/items/328003a9e90d5183ef9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<body>
<div class="red"></div>
<div class="blue"></div>
<div class="yellow"></div>
</body>
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
z-index: 2; //追記
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
z-index: 1; //追記
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
z-index: 3; //追記
}
요소가 쌓이기 위해서는 토대(베이스)가 되는 것이 필요합니다. 집이 세우려면 토대가 되는 지면이 없으면 안 되네요. 그것과 마찬가지로 요소는 무언가의 기초 위에 쌓입니다. css에서는 스택의 개념으로 context라는 것이 있습니다. 같은 context(기초)의 요소끼리만 z-index는 적용되지 않습니다.
html은 계층 구조이며 요소에는 반드시 부모와 자식 관계가 있습니다. 요소의 적층 순서는 부모 요소가 context(토대)이며, 그 context상의 같은 계층의 형제 요소(siblings)끼리에만 적용됩니다. 앞의 예에서 말하면 body 요소의 context상에 red, blue, yellow라는 3개의 형제 요소가 있으므로, 적층 순서가 정해지는 것입니다.
<body> //bodyタグが親要素でありcontextを生成している
<div class="red"></div> //bodyが生成するcontext内にある
<div class="blue"></div>
<div class="yellow"></div>
</body>
만약 다음과 같이 레드 안에 bule가 있고 blue 안에 한층 더 yellow가 있었다면 어떻게 될까요?
<body>
<div class="red">
<div class="blue">
<div class="yellow"></div>
</div>
</div>
</body>
CSS의 설명은 다음과 같습니다.
.red {
width: 100px;
height: 100px;
background-color: red;
margin-bottom: -50px;
}
.blue {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: -50px;
}
.yellow {
width: 100px;
height: 100px;
background-color: yellow;
}
결과적으로는 노란색만 되어 버렸습니다.
이 이유는 body 태그의 컨텍스트에 red가 있고 red 태그의 컨텍스트에 더 blue가 있고 blue 태그의 컨텍스트에 yellow가 있기 때문입니다. 토대가 각각 body,red,blue와 다르기 때문에 집(red,blue,yellow)도 그 3개의 토대를 기준으로 세우고 있습니다(stacking). 즉, 요소의 적층 순서는 부모 요소를 기준으로 한 동일한 컨텍스트 내에서 결정됩니다.
참고 사이트
htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / cs / u b / Cs / ~ 어서 x
htps : // 코 s. 코 m / r 치 c ぇ s / 부이 ld ぇ b 해서 s / 오페라 치온 / cs s / 4- 레 아소 s ~ . HTML
htps : // 그럼 아안. 이. jp / ぇ bp 로즈 c 치온 / f 롱텐 d / ~ 어서 x /
htps : // 이 m / 17296 / ms / 42 62989193504d512c7
Reference
이 문제에 관하여(【Css】Z-index에 대해 No-1(stacking context)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/redrabbit1104/items/328003a9e90d5183ef9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Css】Z-index에 대해 No-1(stacking context)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/redrabbit1104/items/328003a9e90d5183ef9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)