Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Stacking-Kontext

Ein Stacking-Kontext ist eine dreidimensionale Konzeptualisierung von HTML-Elementen entlang einer imaginären z-Achse relativ zum Benutzer, der angenommen wird, dass er dem Ansichtsfenster oder der Webseite zugewandt ist. Der Stacking-Kontext bestimmt, wie Elemente entlang der z-Achse (denken Sie daran als die "Tiefen"-Dimension auf Ihrem Bildschirm) übereinander geschichtet werden. Der Stacking-Kontext bestimmt die visuelle Reihenfolge, in der überlappende Inhalte gerendert werden.

Elemente innerhalb eines Stacking-Kontexts werden unabhängig von Elementen außerhalb dieses Kontexts gestapelt, wodurch sichergestellt wird, dass Elemente in einem Stacking-Kontext die Stapelreihenfolge von Elementen in einem anderen Kontext nicht beeinflussen. Jeder Stacking-Kontext ist vollständig unabhängig von seinen Geschwistern: Nur Nachfahren-Elemente werden berücksichtigt, wenn das Stapeln verarbeitet wird.

Jeder Stacking-Kontext ist in sich geschlossen. Nachdem die Inhalte eines Elements gestapelt wurden, wird das gesamte Element als eine einzelne Einheit in der Stapelreihenfolge seines übergeordneten Stacking-Kontexts betrachtet.

Innerhalb eines Stacking-Kontexts werden untergeordnete Elemente entsprechend den z-index-Werten aller Geschwister gestapelt. Die Stacking-Kontexte dieser verschachtelten Elemente haben nur in diesem übergeordneten Kontext Bedeutung. Stacking-Kontexte werden atomar als eine einzige Einheit im übergeordneten Stacking-Kontext behandelt. Stacking-Kontexte können in andere Stacking-Kontexte eingebettet sein und zusammen eine Hierarchie von Stacking-Kontexten erstellen.

Die Hierarchie von Stacking-Kontexten ist ein Teilmengen der Hierarchie von HTML-Elementen, da nur bestimmte Elemente Stacking-Kontexte erstellen. Elemente, die ihre eigenen Stacking-Kontexte nicht erstellen, werden vom übergeordneten Stacking-Kontext assimiliert.

Eigenschaften, die Stacking-Kontexte erstellen

Ein Stacking-Kontext wird überall im Dokument von jedem Element in folgenden Szenarien gebildet:

Verschachtelte Stacking-Kontexte

Stacking-Kontexte können in andere Stacking-Kontexte eingebettet sein und zusammen eine Hierarchie von Stacking-Kontexten erstellen.

Das Wurzelelement eines Dokuments ist ein Stacking-Kontext, das in den meisten Fällen verschachtelte Stacking-Kontexte enthält, von denen viele zusätzliche Stacking-Kontexte enthalten. Innerhalb jedes Stacking-Kontexts werden untergeordnete Elemente nach denselben Regeln gestapelt, die in Verwendung von z-index erklärt werden. Wichtig ist, dass die z-index-Werte seiner untergeordneten Stacking-Kontexte nur innerhalb des übergeordneten Stacking-Kontexts Bedeutung haben. Stacking-Kontexte werden atomar als einzige Einheit im übergeordneten Stacking-Kontext behandelt.

Um die Rendering-Reihenfolge gestapelter Elemente entlang der z-Achse herauszufinden, denken Sie an jeden Indexwert als eine Art "Versionsnummer", wobei untergeordnete Elemente die kleineren Versionsnummern unterhalb der größeren Versionsnummern ihrer Eltern darstellen.

Um zu zeigen, wie die Stapelreihenfolge jedes Elements an der Stapelreihenfolge ihrer Vorfahren-Stacking-Kontexte teilnimmt, sehen wir uns eine Beispielseite mit sechs Container-Elementen an. Es gibt drei <article>-Elemente als Geschwister. Das letzte <article> enthält drei <section>-Elemente als Geschwister, wobei das <h1> und <code> dieses dritten Artikels zwischen dem ersten und zweiten <section>-Element 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 Container-Element hat eine opacity von weniger als 1 und eine position von entweder relative oder absolute gesetzt. Diese Eigenschaften-Wert-Paare erstellen einen Stacking-Kontext, 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 das Box-Model wurden der Einfachheit halber ausgeblendet.

Die Hierarchie der Stacking-Kontexte 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 Sektionselemente vollständig innerhalb von ARTICLE #3 gelöst. Sobald das Stapeln und Rendern innerhalb von ARTICLE #3 abgeschlossen ist, wird das gesamte ARTICLE #3-Element zum Stapeln im Wurzelelement in Bezug auf seine Geschwister-<article>-Elemente weitergegeben.

Indem wir den z-index als "Versionsnummern" vergleichen, 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 ist, und wie ein Element mit einem z-index von 6 (SECTION #4) unter einem Element mit einem z-index von 5 (ARTICLE #1) gestapelt ist. SECTION #4 wird unter ARTICLE #1 gerendert, weil ARTICLE #1's z-index (5) innerhalb des Stacking-Kontexts des Wurzelelements gültig ist, während SECTION #4's z-index (6) innerhalb des Stacking-Kontexts von ARTICLE #3 (z-index: 4) gültig ist. Somit wird SECTION #4 unter ARTICLE #1, weil SECTION #4 zu ARTICLE #3 gehört, welches einen niedrigeren z-index-Wert (4-6 ist kleiner als 5-0) hat.

Aus dem gleichen Grund wird ARTICLE #2 (z-index: 2) unter SECTION #5 (z-index: 1) gerendert, weil SECTION #5 zu ARTICLE #3 (z-index: 4) gehört, das einen höheren z-index-Wert (2-0 ist kleiner als 4-1) hat.

ARTICLE #3's z-index ist 4, aber dieser Wert ist unabhängig von den z-index der drei darin verschachtelten Abteilungen, da sie zu einem anderen Stacking-Kontext gehören.

In unserem Beispiel (sortiert nach der endgültigen Rendering-Reihenfolge):

  • Wurzel
    • ARTICLE #2: (z-index: 2), was in einer Rendering-Reihenfolge von 2-0 resultiert

    • ARTICLE #3: (z-index: 4), was in einer Rendering-Reihenfolge von 4-0 resultiert

      • SECTION #5: (z-index: 1), gestapelt unter einem Element (z-index: 4), was in einer Rendering-Reihenfolge von 4-1 resultiert
      • SECTION #6: (z-index: 3), gestapelt unter einem Element (z-index: 4), was in einer Rendering-Reihenfolge von 4-3 resultiert
      • SECTION #4: (z-index: 6), gestapelt unter einem Element (z-index: 4), was in einer Rendering-Reihenfolge von 4-6 resultiert
    • ARTICLE #1: (z-index: 5), was in einer Rendering-Reihenfolge von 5-0 resultiert

Zusätzliche Beispiele

Zusätzliche Beispiele umfassen eine 2-Ebenen-Hierarchie mit z-index auf der letzten Ebene, eine 2-Ebenen-HTML-Hierarchie, z-index auf allen Ebenen, und eine 3-Ebenen-HTML-Hierarchie, z-index auf der zweiten Ebene.

Siehe auch