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:

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.

html
<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.

css
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 von 2-0 führt

    • ARTICLE #3: (z-index: 4), was zu einer Darstellungsreihenfolge von 4-0 führt

      • SECTION #5: (z-index: 1), gestapelt unter einem Element (z-index: 4), was zu einer Darstellungsreihenfolge von 4-1 führt
      • SECTION #6: (z-index: 3), gestapelt unter einem Element (z-index: 4), was zu einer Darstellungsreihenfolge von 4-3 führt
      • SECTION #4: (z-index: 6), gestapelt unter einem Element (z-index: 4), was zu einer Darstellungsreihenfolge von 4-6 führt
    • ARTICLE #1: (z-index: 5), was zu einer Darstellungsreihenfolge von 5-0 führt

Weitere Beispiele

Siehe auch