suchen
HeimWeb-FrontendHTML-TutorialCSS > CSS3 中的层叠上下文初探_html/css_WEB-ITnose

前言:关于层叠上下文,笔者还没有去阅读更详细的 W3C 规范来了解更本质的原理(表打我,等我校招拿到 offer 了我就读好伐 T_T)。一直听说 CSS3 里的层叠上下文有新情况,但没找到很好的参考资料,故自己实战一把。鉴于笔者水平有限,如有任何遗漏或者错误,则恳请读者斧正。

1 CSS2.1 中规定的层叠上下文

Background and borders ? of the element forming the stacking context. The lowest level in the stack.

Negative Z-Index ? the stacking contexts of descendants elements with negative z-index.

Block Level Boxes ? in-flow non-inline-level non-positioned descendants.

Floated Boxes ? non-positioned floats

Inline Boxes ? in-flow inline-level non-positioned descendants.

Z-index: 0 ? positioned elements. These form new stacking contexts.

Positive Z-index ? positioned elements. The highest level in the stack.

图文来源:http://webdesign.tutsplus.com/articles/what-you-may-not-know-about-the-z-index-property--webdesign-16892

现在该笔者上场翻译了!在解释上面术语之前,需要阐明两个术语:“定位”指的是 position 为 relative 、absolute 、fixed 的元素,“非定位”则相反。

  • 背景和边框:建立层叠上下文元素的背景和边框。层叠中的最低级

  • 负 Z-index:z-index 为负的后代元素建立的层叠上下文

  • 块级盒:文档流内非行内级非定位后代元素

  • 浮动盒:非定位浮动元素(笔者注:即排除了 position: relative 的浮动盒)

  • 行内盒:文档流内行内级非定位后代元素

  • Z-index: 0:定位元素。这些元素建立了新层叠上下文(笔者注:不一定,详见后文)

  • 正 Z-index:(z-index 为正的)定位元素。层叠的最高等级

引文如上所表。但笔者提醒各位读者一点,“Z-index: 0”级的定位元素不一定就会建立新的层叠上下文。因为:

CSS2.1:(z-index: auto)The stack level of the generated box in the current stacking context is 0. The box does not establish a new stacking context unless it is the root element.

当定位元素 z-index: auto,生成盒在当前层叠上下文中的层级为 0。但该盒不建立新的层叠上下文,除非是根元素。

规范是这样,但 IE6-7 有个 BUG,定位元素即便 z-index: auto 照样创建层叠上下文。

以上是基于 CSS2.1 的层叠上下文介绍。下面要阐述的是在 CSS3 新环境下,层叠上下文的新变化。

2 CSS3 带来的变化

总的来说变化可以归为两点,我们之后一一探讨:

  • CSS3 中许多属性会创建局部层叠上下文

  • tranform 属性改变绝对定位子元素的包含块

  • 2.1 产生新层叠上下文的情况

    以下情况会产生新的层叠上下文:

    • 根元素(HTML)

    • 绝对或相对定位且 z-index 值不为 auto

    • 一个伸缩项目 Flex Item,且 z-index 值不为 auto,即父元素 display: flex|inline-flex

    • 元素的 opacity 属性值小于 1

    • 元素的 transform 属性值不为 none

    • 元素的 mix-blend-mode 属性值不为 normal

    • 元素的 filter 属性值不为 normal

    • 元素的 isolation 属性值为 isolate

    • position: fixed

    • will-change 中指定了上述任意属性,即便你没有直接定义这些属性

    • 元素的 -webkit-overflow-scrolling 属性值为 touch

    以上列表译自:

    https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context,提醒广大读者,别看中文版,因为中文版并非实时跟进更新的,且翻译不太准确

    2.2 提升层叠上下文中的层级

    以上元素建立新层叠上下文的同时,也会提升元素自身所在层叠上下文中的层级。

    我们以 opacity 为例。来看下 CSS3 规范中的话:

    If an element with opacity less than 1 is not positioned, implementations must paint the layer it creates, within its parent stacking context, at the same stacking order that would be used if it were a positioned element with ‘z-index: 0’ and ‘opacity: 1’. If an element with opacity less than 1 is positioned, the ‘z-index’ property applies as described in [CSS21], except that ‘auto’ is treated as ‘0’ since a new stacking context is always created.

    如果元素 opacity 小于 1 且未定位,则必须在其父层叠上下文中,按其在定位了的、z-index: 0 且 opacity: 1 的情况中的层叠顺序绘制。如果 opacity 小于 1 且已定位,z-index 属性按 CSS2.1 应用,但 auto 要视为 0,因为新的层叠上下文总是创建了的。

    如下案例:

    div {    width: 100px;    height: 100px;}#box1 {    position: absolute;    background: red;    top: 40px;    left: 40px;}#box2 {    background: blue;}<body>    <div id="box1"></div>    <div id="box2"></div><body>

    以上 CSS 和 HTML 片段中,由于 box1 是绝对定位(层级为“Z-index: 0”级),而 box2 是文档流内块级盒(层级为“块级盒”级),因此 box1 会层叠在 box2 之上。下面添加如下 CSS 规则:

    #box2 {    opacity: .5;}

    这时候, box2 则会层叠在 box1 之上了。因为 box2 的 opacity 为 0.5(小于 1),故视其为“Z-index: 0”级,也就和 box1 同级了。同级情况下,按照二者在源代码中的顺序,居后的 box2 又重新占领高地了。

    读者可以取下面规则之任意一条实验,都能达到同样效果:

    #box2 {    transform: scale(1);    mix-blend-mode: difference;    isolation: isolate;    -webkit-filter: blur(5px);}

    2.3 transform 改变绝对定位子元素包含块

    transform 除了建立新的局部层叠上下文外,还会干一件事:改变绝对定位子元素的包含块。须注意的是,固定定位也是绝对定位的一种。

    什么是包含块?有时候一些盒子根据矩形盒计算自身定位和大小,此矩形盒即包含块。更多详情请阅读视觉格式化模型详述。

    固定定位元素

    固定定位元素的包含块由视口创建(如果读者了解视觉格式化模型详述的信息,也就知道这一点:在计算其“静态位置”的时候,则以初始化包含块作为其计算包含块)。现在我们看以下源代码:

    div {    width: 100px;    height: 100px;}#fixed {    position: fixed;    width: 100%;    height: 100%;    top: 0;    left: 0;    background: blue;}#transform {    background: red;    padding: 20px;}<body>    <div id="transform">        <div id="fixed"></div>    </div></body>

    这个时候,以视口为包含块进行定位和大小计算, fixed 将会铺满整个屏幕。

    但现在,我们加上如下规则:

    #transform {    transform: scale(1);}

    此时,fixed 的包含块不再是视口,而是 transform 的内边距盒的边缘盒了。故此时 fixed 的宽高均为 140px。

    绝对定位元素

    我们举一个例子:

    #relative {    position: relative;    width: 100px;    height: 100px;    background: green;}#absolute {    position: absolute;    width: 100%;    height: 100%;    top: 0;    left: 0;    background: blue;}#transform {    background: red;    width: 50px;    height: 50px;}<div id="relative">    <div id="transform">        <div id="absolute"></div>    </div></div>

    此时 absolute 的包含块为 relative 的内边距盒的边缘盒。由此 absolute 的宽高均为 100px。然后我们添加如下规则:

    #transform {    transform: scale(1);}

    由于 transform 创建了局部层叠上下文,absolute 的包含块不再是 relative 而是 transform 了,根据这一新的包含块,得新宽和高为 50px。

    Stellungnahme
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Die Zukunft von HTML: Evolution und TrendsDie Zukunft von HTML: Evolution und TrendsMay 13, 2025 am 12:01 AM

    Die Zukunft von HTML wird sich in einer semantischen, funktionaleren und modularen Richtung entwickeln. 1) Die Semantisierung macht den Tag den Inhalt klarer und verbessert die SEO und den barrierefreien Zugang. 2) Die Funktionalisierung führt neue Elemente und Attribute ein, um die Benutzerbedürfnisse zu erfüllen. 3) Modularität unterstützt die Komponentenentwicklung und verbessert die Wiederverwendbarkeit der Code.

    Warum sind HTML -Attribute für die Webentwicklung wichtig?Warum sind HTML -Attribute für die Webentwicklung wichtig?May 12, 2025 am 12:01 AM

    HtmlattributesarecrucialinwebdevelopmentforcontrollingBehavior, Aussehen und Funktionalität

    Was ist der Zweck des ALT -Attributs? Warum ist es wichtig?Was ist der Zweck des ALT -Attributs? Warum ist es wichtig?May 11, 2025 am 12:01 AM

    Das ALT -Attribut ist ein wichtiger Bestandteil des Tags in HTML und wird verwendet, um alternative Text für Bilder bereitzustellen. 1. Wenn das Bild nicht geladen werden kann, wird der Text im ALT -Attribut angezeigt, um die Benutzererfahrung zu verbessern. 2. Bildschirmleser verwenden das ALT -Attribut, um sehbehinderte Benutzer zu helfen, den Inhalt des Bildes zu verstehen. 3. Search Engines Index Text im ALT -Attribut zur Verbesserung des SEO -Rankings von Webseiten.

    HTML, CSS und JavaScript: Beispiele und praktische AnwendungenHTML, CSS und JavaScript: Beispiele und praktische AnwendungenMay 09, 2025 am 12:01 AM

    Die Rollen von HTML, CSS und JavaScript in der Webentwicklung sind: 1. HTML wird zum Erstellen von Webseitenstruktur verwendet. 2. CSS wird verwendet, um das Erscheinungsbild von Webseiten zu verschönern. 3.. JavaScript wird verwendet, um eine dynamische Interaktion zu erreichen. Durch Tags, Stile und Skripte erstellen diese drei zusammen die Kernfunktionen moderner Webseiten.

    Wie setzen Sie das Lang -Attribut auf dem  -Tag ein? Warum ist das wichtig?Wie setzen Sie das Lang -Attribut auf dem -Tag ein? Warum ist das wichtig?May 08, 2025 am 12:03 AM

    Das Einstellen der Lang -Attribute eines Tags ist ein wichtiger Schritt zur Optimierung der Web -Barrierefreiheit und der SEO. 1) Stellen Sie das Lang -Attribut im Tag ein, z. B.. 2) Setzen Sie in mehrsprachigen Inhalten Lang -Attribute für verschiedene Sprachteile, wie z. 3) Verwenden Sie Sprachcodes, die den ISO639-1-Standards entsprechen, wie z. B. "EN", "FR", "ZH" usw. Das korrekte Einstellen des Lang-Attributs kann die Zugänglichkeit von Webseiten und Suchmaschinenrankings verbessern.

    Was ist der Zweck von HTML -Attributen?Was ist der Zweck von HTML -Attributen?May 07, 2025 am 12:01 AM

    HtmlattributesareessentialforenHancingWebelements'Functionality und Interaktion

    Wie erstellt man eine Liste in HTML?Wie erstellt man eine Liste in HTML?May 06, 2025 am 12:01 AM

    Tocreatealistinhtml, usefornorderedListsandfororderedLists: 1) ForunorderedLists, WrapitemsinanduseforeachItem, RenderingasabulletedList.2) ForderedLists, UseinDFornumnedLists, anpassbar mit

    HTML in Aktion: Beispiele für die Website -StrukturHTML in Aktion: Beispiele für die Website -StrukturMay 05, 2025 am 12:03 AM

    HTML wird verwendet, um Websites mit klarer Struktur zu erstellen. 1) Verwenden Sie Tags wie und definieren Sie die Website -Struktur. 2) Beispiele zeigen die Struktur von Blogs und E-Commerce-Websites. 3) Vermeiden Sie häufige Fehler wie eine falsche Verschachtelung des Etiketts. 4) Optimieren Sie die Leistung, indem Sie HTTP -Anforderungen reduzieren und semantische Tags verwenden.

    See all articles

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heißer Artikel

    Nordhold: Fusionssystem, erklärt
    3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
    Mandragora: Flüstern des Hexenbaum
    3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    Herunterladen der Mac-Version des Atom-Editors

    Herunterladen der Mac-Version des Atom-Editors

    Der beliebteste Open-Source-Editor

    mPDF

    mPDF

    mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

    Dreamweaver Mac

    Dreamweaver Mac

    Visuelle Webentwicklungstools

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung