【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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)