Stapelkontext
Stapelkontext ist eine dreidimensionale Konzeptualisierung von HTML-Elementen entlang einer imaginären z-Achse relativ zum Benutzer, der angenommen wird, das Ansichtsfenster oder die Webseite zu betrachten. Der Stapelkontext bestimmt, wie Elemente entlang der z-Achse übereinander geschichtet werden (denken Sie daran als die "Tiefen"-Dimension auf Ihrem Bildschirm). Der Stapelkontext bestimmt die visuelle Reihenfolge, in der sich überlappende Inhalte dargestellt werden.
Elemente innerhalb eines Stapelkontextes werden unabhängig von Elementen außerhalb dieses Stapelkontextes gestapelt, was sicherstellt, dass Elemente in einem Stapelkontext nicht die Stapelreihenfolge von Elementen in einem anderen beeinflussen. Jeder Stapelkontext ist völlig unabhängig von seinen Geschwistern: Nur Nachfolgeelemente werden bei der Stapelverarbeitung betrachtet.
Jeder Stapelkontext ist eigenständig. Nachdem die Inhalte eines Elements gestapelt sind, wird das gesamte Element als eine einzige Einheit in der Stapelordnung des übergeordneten Stapelkontextes betrachtet.
Innerhalb eines Stapelkontextes werden Kindelemente gemäß der z-index
-Werte aller Geschwister gestapelt. Die Stapelkontexte dieser verschachtelten Elemente haben nur in diesem übergeordneten Element Bedeutung. Stapelkontexte werden atomar als eine einzige Einheit im übergeordneten Stapelkontext behandelt. Stapelkontexte können in andere Stapelkontexte eingebettet werden und zusammen eine Hierarchie von Stapelkontexten bilden.
Die Hierarchie von Stapelkontexten ist eine Teilmenge der Hierarchie von HTML-Elementen, da nur bestimmte Elemente Stapelkontexte erzeugen. Elemente, die ihre eigenen Stapelkontexte nicht erzeugen, werden vom übergeordneten Stapelkontext assimiliert.
Merkmale, die Stapelkontexte erzeugen
Ein Stapelkontext wird im Dokument durch jedes Element in den folgenden Szenarien gebildet:
-
Root-Element des Dokuments (
<html>
). -
Element mit einem
position
-Wertabsolute
oderrelative
und einemz-index
-Wert ungleichauto
. -
Element mit einem
position
-Wertfixed
odersticky
. -
Element mit einem
container-type
-Wertsize
oderinline-size
gesetzt (siehe Container-Abfragen). -
Element, das ein Flexelement mit einem
z-index
-Wert ungleichauto
ist. -
Element, das ein Grid-Element mit
z-index
-Wert ungleichauto
ist. -
Element mit einem
opacity
-Wert kleiner als1
. -
Element mit einem
mix-blend-mode
-Wert ungleichnormal
. -
Element mit einem der folgenden Eigenschaften ungleich
none
: -
Element mit dem
isolation
-Wertisolate
. -
Element mit einem
will-change
-Wert, der eine Eigenschaft spezifiziert, die einen Stapelkontext auf einem nicht-initialen Wert erzeugen würde. -
Element mit einem
contain
-Wert vonlayout
oderpaint
, oder ein zusammengesetzter Wert, der einen dieser Werte umfasst (d.h.contain: strict
,contain: content
). -
Element im Top-Layer und das entsprechende
::backdrop
. Beispiele umfassen Fullscreen- und Popover-Elemente. -
Element, das Stapelkontext-erzeugende Eigenschaften (wie
opacity
) animiert hat unter Verwendung von@keyframes
, wobeianimation-fill-mode
aufforwards
gesetzt ist.
Verschachtelte Stapelkontexte
Stapelkontexte können in andere Stapelkontexte eingebettet werden und zusammen eine Hierarchie von Stapelkontexten bilden.
Das Root-Element eines Dokuments ist ein Stapelkontext, der in den meisten Fällen verschachtelte Stapelkontexte enthält, von denen viele zusätzliche Stapelkontexte enthalten werden. Innerhalb jedes Stapelkontextes werden Kindelemente nach denselben Regeln gestapelt, die in Using z-index
erklärt werden. Wichtig ist, dass die z-index
-Werte seiner Kinderstapelkontexte nur innerhalb des Stapelkontextes des Elternteils Bedeutung haben. Stapelkontexte werden atomar als eine einzige Einheit im übergeordneten Stapelkontext behandelt.
Um die Darstellungsreihenfolge von gestapelten Elementen entlang der z-Achse zu ermitteln, betrachten Sie jeden Indexwert als eine Art "Versionsnummer", wobei Kindelemente kleinere Versionsnummern unterhalb der größeren Versionsnummer des Elternteils darstellen.
Um zu demonstrieren, wie die Stapelreihenfolge jedes Elements an der Stapelreihenfolge ihrer übergeordneten Stapelkontexte teilnimmt, betrachten wir eine Beispielseite mit sechs Container-Elementen. Es gibt drei benachbarte <article>
-Elemente. Das letzte <article>
enthält drei benachbarte <section>
-Elemente, mit den <h1> und <code>
dieses dritten Artikels, die zwischen den ersten und zweiten benachbarten <section>
-Elementen erscheinen.
<article id="container1">
<h1>Article element #1</h1>
<code>
position: relative;<br />
z-index: 5;
</code>
</article>
<article id="container2">
<h1>Article Element #2</h1>
<code>
position: relative;<br />
z-index: 2;
</code>
</article>
<article id="container3">
<section id="container4">
<h1>Section Element #4</h1>
<code>
position: relative;<br />
z-index: 6;
</code>
</section>
<h1>Article Element #3</h1>
<code>
position: absolute;<br />
z-index: 4;
</code>
<section id="container5">
<h1>Section Element #5</h1>
<code>
position: relative;<br />
z-index: 1;
</code>
</section>
<section id="container6">
<h1>Section Element #6</h1>
<code>
position: absolute;<br />
z-index: 3;
</code>
</section>
</article>
Jedes Containerelement hat eine opacity
von weniger als 1
und eine position
von entweder relative
oder absolute
gesetzt. Diese Eigenschaft-Wert-Paare erzeugen einen Stapelkontext, wenn das Element einen z-index
-Wert ungleich auto
hat.
section,
article {
opacity: 0.85;
position: relative;
}
#container1 {
z-index: 5;
}
#container2 {
z-index: 2;
}
#container3 {
z-index: 4;
position: absolute;
top: 40px;
left: 180px;
}
#container4 {
z-index: 6;
}
#container5 {
z-index: 1;
}
#container6 {
z-index: 3;
position: absolute;
top: 20px;
left: 180px;
}
Die CSS-Eigenschaften für Farben, Schriftarten, Ausrichtung und Boxmodell wurden aus Gründen der Kürze verborgen.
Die Hierarchie von Stapelkontexten im obigen Beispiel ist wie folgt:
Root │ ├── ARTICLE #1 ├── ARTICLE #2 └── ARTICLE #3 │ ├── SECTION #4 ├──── ARTICLE #3 content ├── SECTION #5 └── SECTION #6
Die drei <section>
-Elemente sind Kinder von ARTICLE #3. Daher wird das Stapeln der Abschnittselemente vollständig innerhalb von ARTICLE #3 gelöst. Sobald das Stapeln und Darstellen innerhalb von ARTICLE #3 abgeschlossen ist, wird das gesamte ARTICLE #3-Element für das Stapeln im Root-Element im Verhältnis zu seinen Geschwister-<article>
-Elementen übergeben.
Durch den Vergleich der z-index
als "Versionsnummern", können wir sehen, wie ein Element mit einem z-index
von 1
(SECTION #5) über einem Element mit einem z-index
von 2
(ARTICLE #2) gestapelt wird, und wie ein Element mit einem z-index
von 6
(SECTION #4) unter einem Element mit einem z-index
von 5
(ARTICLE #1) gestapelt wird. SECTION #4 wird unter ARTICLE #1 dargestellt, weil ARTICLE #1's z-index (5
) innerhalb des Stapelkontextes des Root-Elements gültig ist, während SECTION #4's z-index (6
) innerhalb des Stapelkontexts von ARTICLE #3 (z-index: 4
) gültig ist. Daher ist SECTION #4 unter ARTICLE #1, weil SECTION #4 zu ARTICLE #3 gehört, das einen niedrigeren z-index-Wert hat (4-6
ist weniger als 5-0
).
Aus dem gleichen Grund wird ARTICLE #2 (z-index: 2
) unter SECTION #5 (z-index
: 1) dargestellt, weil SECTION #5 zu ARTICLE #3 (z-index: 4
) gehört, das einen höheren z-index-Wert hat (2-0
ist weniger als 4-1
).
ARTICLE #3's z-index ist 4
, aber dieser Wert ist unabhängig vom z-index
der drei darin verschachtelten Abschnitte, weil sie zu einem anderen Stapelkontext gehören.
In unserem Beispiel (sortiert nach der endgültigen Darstellungsreihenfolge):
- Root
-
ARTICLE #2: (
z-index
: 2), was zu einer Darstellungsreihenfolge von2-0
führt -
ARTICLE #3: (
z-index
: 4), was zu einer Darstellungsreihenfolge von4-0
führt- SECTION #5: (
z-index
: 1), gestapelt unter einem Element (z-index
: 4), was zu einer Darstellungsreihenfolge von4-1
führt - SECTION #6: (
z-index
: 3), gestapelt unter einem Element (z-index
: 4), was zu einer Darstellungsreihenfolge von4-3
führt - SECTION #4: (
z-index
: 6), gestapelt unter einem Element (z-index
: 4), was zu einer Darstellungsreihenfolge von4-6
führt
- SECTION #5: (
-
ARTICLE #1: (
z-index
: 5), was zu einer Darstellungsreihenfolge von5-0
führt
-
Weitere Beispiele
Weitere Beispiele umfassen eine 2-stufige Hierarchie mit z-index
auf der letzten Ebene, eine 2-stufige HTML-Hierarchie, z-index
auf allen Ebenen, und eine 3-stufige HTML-Hierarchie, z-index
auf der zweiten Ebene.