CSS z-index und Stacking Contexts, in 3D zerlegt

Leitfaden zu CSS z-index und Stacking Context

CSS z-index funktioniert nicht? Stacking Contexts, 3D-Ansicht | We.Inc

Warum z-index ignoriert wird, jede Eigenschaft, die einen Stacking Context erzeugt, eine 3D-Explosionsansicht der Ebenen, Sticky Header und Dropdowns, eine z-index-Skala und eine Checkliste zur Fehlersuche.

z-index legt die Reihenfolge überlappender Elemente fest, aber nur innerhalb desselben Stacking Context. Ein Kind mit z-index: 9999 kann nicht über ein Element außerhalb seines Elternelements steigen, wenn dieses Elternelement einen Context mit niedrigerem z-index bildet. Contexts entstehen durch position plus z-index, opacity unter 1, transform, filter, isolation: isolate und mehrere andere Eigenschaften.

Warum z-index scheinbar ignoriert wird

Die 3D-Ansicht unten zieht eine kleine Seite in ihre Stacking-Ebenen auseinander, damit du siehst, welche Boxen in welchem Context gefangen sind. Ändere z-index-Werte und schalte die Eigenschaft um, die am Elternelement einen Context erzeugt. Danach folgen: alle Auslöser laut MDN, Sticky Header mit Dropdowns, eine Token-Skala und eine Schritt-für-Schritt-Routine zur Fehlersuche.

Häufige Fragen

Warum funktioniert z-index nicht?

Entweder ist das Element nicht positioniert (z-index braucht eine position außer static oder ein Flex- oder Grid-Elternelement), oder es ist in einem Stacking Context gefangen. Die Position des Elternelements in seinem eigenen Context bestimmt das Ergebnis, und Kinder können ihm nicht entkommen, egal welche Zahl sie tragen.

Was erzeugt einen Stacking Context?

Das Root-Element, positionierte Elemente mit z-index, fixed- und sticky-Elemente, Flex- und Grid-Kinder mit z-index, opacity unter 1, Transforms, Filter, clip-path, Masken, mix-blend-mode, perspective, isolation: isolate, einige Werte von contain und will-change, Size Container und Elemente im Top Layer.

Was macht isolation: isolate?

Es erzeugt einen neuen Stacking Context und sonst nichts, ohne sichtbare Änderung. Setze es auf das Root-Element einer Komponente, damit Kinder mit negativem z-index hinter dem eigenen Hintergrund der Komponente bleiben, statt hinter die Seite zu fallen, und damit sich ihre internen Ebenen nie mit äußeren mischen.

Wie halte ich ein Dropdown über dem nächsten Abschnitt?

Gib dem Header oder Container mit dem Dropdown einen höheren z-index als den Abschnitten danach, wobei beide positioniert sind. Wenn der Container ein transform oder opacity hat, denk daran, dass er ein eigener Context ist, also muss der z-index an diesen Container, nicht an das Dropdown.

Ist ein negativer z-index sicher?

Er ist gültig, aber das Element rutscht hinter den Hintergrund seines Stacking Context. Ohne Context am Elternelement kann das hinter dem Seitenhintergrund und unsichtbar bedeuten. Setze isolation: isolate auf das Elternelement, um es drinnen zu halten.

Wie die Zeichenreihenfolge funktioniert

Eine Routine zur Fehlersuche

Alles, was einen Stacking Context erzeugt

Basierend auf der MDN-Referenz zum Stacking Context. Eine einzige Bedingung genügt.

Auslöser für einen Stacking Context

Die Falle und die Lösungen

z-index 9999, das trotzdem verliert

Die blaue Karte ist ein Context mit z-index 1. Ihr Tooltip hat 9999, wird aber nur mit Elementen innerhalb der Karte verglichen, daher verdeckt ihn die orange Box mit z-index 2.

isolation: isolate hält eine negative Ebene drinnen

Ohne isolate würde die Dekoration mit z-index: -1 hinter den Hintergrund des Abschnitts fallen und verschwinden. Mit isolate ist der Abschnitt sein eigener Context.

Sticky Header mit Dropdown

Der Header ist sticky, also bereits ein Context. Gib ihm einen z-index über dem Inhalt, und das Dropdown darin erbt diese Ebene. Keine riesigen Zahlen nötig.

Stacking-Labor mit 3D-Explosionsansicht

z-index des Headers

z-index der Karte (oder auto)

z-index des Dropdowns

z-index des Banners

Context-Auslöser an der Karte

Zusätzliche Eigenschaft an der Karte

3D-Explosionsansicht (Ebenen auseinanderdrehen)

Ebenen auseinandergezogen, höher bedeutet später gezeichnet

Flache Ansicht, echtes CSS

Header z {z}

Karte z {z}

Dropdown z {z}

Banner z {z}

(in der Karte)

über dem Banner

unter dem Banner

Die Karte bildet einen Stacking Context ({why}). Der Wert {d} des Dropdowns zählt nur innerhalb der Karte, daher liegt es {pos}, weil die Karte dort liegt.

Die Karte ist kein Stacking Context, also konkurriert das Dropdown direkt: {d} gegen {b} des Banners. Es liegt {pos}.

CSS für dieses Setup

CSS kopieren

Probier: Karte z auto, Dropdown 9999, dann transform wählen. Eine einzige Eigenschaft fängt das Dropdown ein.

Eine z-index-Skala zum Kopieren

Tokens kopieren

Token

Wert

Für

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap