몇 가지 흥미로운 CSS 주제에 대해 이야기해 보겠습니다. (3) - 스택 순서와 스택 컨텍스트에 대해 얼마나 알고 있나요?
이 시리즈는 몇 가지 흥미로운 CSS 주제를 논의하는 첫 번째 시리즈이며, 일부 주제는 문제 해결을 위한 아이디어를 넓히기 위해 고안되었습니다. 또한 쉽게 간과할 수 있는 몇 가지 CSS 세부 사항도 포함합니다.
문제 해결 시 호환성은 고려되지 않습니다. 질문이 거칠고 제약이 없습니다. 문제 해결에서 익숙하지 않다고 생각되는 CSS 속성이 있으면 빨리 공부하세요. .
계속 업데이트하고, 계속 업데이트하고, 계속 업데이트하고, 중요한 것을 세 번 말하세요.
모든 주제는 내 Github에 요약되어 있습니다.
3. 스태킹 레벨과 스태킹 컨텍스트에 대해 얼마나 알고 있나요?
z-index
는 아주 단순해 보이지만 z-index
의 레벨에 따라 캐스케이딩의 우선순위가 결정됩니다. 사실 더 깊이 들어가 보면 그 안에 뭔가가 숨겨져 있다는 것을 알 수 있습니다.
다음 질문을 보고 동일한 상위 div
태그 아래에 포함된 두 개의 div
A와 B를 정의하세요. HTML 구조는 다음과 같습니다.
<div class="container"> <div class="inline-block">#divA display:inline-block</div> <div class="float"> #divB float:left</div> </div>
CSS
의 정의는 다음과 같습니다.
.container{ position:relative; background:#ddd; } .container > div{ width:200px; height:200px; } .float{ float:left; background-color:deeppink; } .inline-block{ display:inline-block; background-color:yellowgreen; margin-left:-100px; }
대략 설명하면 공통 상위 컨테이너를 가진 두 DIV가 겹쳐진다는 뜻입니다. display:inline-block
가 위에 쌓인 건가요, 아니면 float:left
가 위에 쌓인 건가요?
여기서 DOM의 순서는 display:inline-block
을 먼저 생성한 다음 float:left
을 생성하는 것입니다. 물론 다음과 같이 두 DOM의 순서를 바꿀 수도 있습니다.
<div class="container"> <div class="float"> #divB float:left</div> <div class="inline-block">#divA display:inline-block</div> </div>
会发现,无论顺序如何,始终是 display:inline-block
的 div
叠在上方。
Demo戳我。
这里其实是涉及了所谓的层叠水平(stacking level),有一张图可以很好的诠释:
运用上图的逻辑,上面的题目就迎刃而解,inline-blcok
的 stacking level
比之 float
要高,所以无论 DOM 的先后顺序都堆叠在上面。
不过上面图示的说法有一些不准确,按照 W3官方 的说法,准确的 7 层为:
-
the background and borders of the element forming the stacking context.
-
the child stacking contexts with negative stack levels (most negative first).
-
the in-flow, non-inline-level, non-positioned descendants.
-
the non-positioned floats.
-
the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.
-
the child stacking contexts with stack level 0 and the positioned descendants with stack level 0.
-
the child stacking contexts with positive stack levels (least positive first).
稍微翻译一下:
-
形成堆叠上下文环境的元素的背景与边框
-
拥有负
z-index
的子堆叠上下文元素 (负的越高越堆叠层级越低) -
正常流式布局,非
inline-block
,无position
定位(static除外)的子元素 -
无
position
定位(static除外)的 float 浮动元素 -
正常流式布局,
inline-block
元素,无position
定位(static除外)的子元素(包括 display:table 和 display:inline ) -
拥有
z-index:0
的子堆叠上下文元素 -
拥有正
z-index:
的子堆叠上下文元素(正的越低越堆叠层级越低)
所以我们的两个 div
的比较是基于上面所列出来的 4 和 5 。5 的 stacking level
更高,所以叠得更高。
不过!不过!不过!重点来了,请注意,上面的比较是基于两个 div
都没有形成 堆叠上下文
这个为基础的。下面我们修改一下题目,给两个 div
,增加一个 opacity
:
.container{ position:relative; background:#ddd; } .container > div{ width:200px; height:200px; opacity:0.9; // 注意这里,增加一个 opacity } .float{ float:left; background-color:deeppink; } .inline-block{ display:inline-block; background-color:yellowgreen; margin-left:-100px; }
데모가 나를 찔렀다.
에서는 inline-block
의 div
가 더 이상 float
의 div
위에 쌓일 필요는 없지만 HTML 코드에서 DOM의 쌓인 순서와 관련이 있음을 알 수 있습니다. 나중에 추가된 div는 먼저 추가된 div 위에 겹칩니다.
여기서 핵심은 추가된 opacity:0.9
이 두 div에 대해 stacking context(堆叠上下文)
개념을 생성한다는 것입니다. 이때, 2개를 쌓기 위해서는 z-index가 필요합니다. z-index가 높을수록 stacking 수준이 높아집니다.
스태킹 컨텍스트는 창(컴퓨터 화면)이나 웹 페이지를 바라보는 사용자를 기준으로 가상의 Z축을 따라 확장되는 HTML 요소의 3차원 개념으로, HTML 요소는 자체 속성에 따라 우선순위가 지정됩니다. 주문은 누적 컨텍스트에서 공간을 차지합니다.
그렇다면 어떻게 요소 형성을 촉발할 수 있을까요 堆叠上下文
? MDN에서 발췌한 방법은 다음과 같습니다.
- 루트 요소(HTML),
- "자동"이 아닌 Z-색인 값을 사용한 절대/상대 위치 지정,
- "auto" 이외의 z-index 값을 갖는 플렉스 항목, 즉 상위 요소 표시: flex|inline-flex,
- 불투명도 속성값이 1보다 작은 요소(불투명도 사양 참조),
- 변형 속성 값이 "none"이 아닌 요소,
- mix-blend-mode 속성 값이 "normal"이 아닌 요소,
- 필터 값이 "none"이 아닌 요소,
- 관점 값이 "없음"이 아닌 요소,
- 격리 속성이 "격리"로 설정된 요소,
- 위치: 고정
- 속성 값을 직접 지정하지 않더라도 will-change에서 CSS 속성을 지정하세요.
- -요소 , webkit-overflow-scrolling 속성이 "touch"로 설정됨
그래서 위의 두 div에 opacity 속성을 추가하는 목적은 스태킹 컨텍스트를 형성하는 것입니다. 즉, 불투명도를 추가하고 위에 나열된 속성을 바꾸면 동일한 효과를 얻을 수 있습니다.
스태킹 컨텍스트에서는 위에 설명된 규칙에 따라 해당 하위 요소도 스택됩니다. 특히 하위 요소의 z-index 값은 상위 계단식 컨텍스트에서만 의미가 있다는 점을 언급할 가치가 있습니다. 즉, 상위 요소의 z-index
는 상위 요소의 다른 형제 요소보다 낮으며 하위 요소 z-index
의 높이가 아무리 높아도 쓸모가 없습니다.
위의 stacking-level
과 stacking-context
을 이해하는 것이 CSS의 계단식 순서를 이해하는 열쇠입니다.
모든 주제는 내 Github에 요약되어 있으며 더 많은 교류가 있기를 바라며 블로그에 게시되었습니다.
아직 궁금한 점이나 제안사항이 있으면 더 많은 내용을 소통할 수 있습니다. 글의 내용이 제한되어 있고 잘못된 부분이 있으면 이 글을 마치겠습니다. 기사로 알려주세요.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.
