CSS z-index en stacking contexts, uit elkaar gehaald in 3D

Gids voor CSS z-index en stacking contexts

CSS z-index werkt niet? Stacking contexts in 3D | We.Inc

Waarom z-index genegeerd wordt, elke eigenschap die een stacking context maakt, een uitvergrote 3D-weergave van de lagen, sticky headers en dropdowns, een z-index-schaal en een checklist voor debuggen.

z-index bepaalt de volgorde van overlappende elementen, maar alleen binnen dezelfde stacking context. Een kind met z-index: 9999 kan niet boven een element buiten zijn ouder uitkomen als die ouder een context vormt met een lagere z-index. Contexts ontstaan door position plus z-index, opacity onder 1, transform, filter, isolation: isolate en diverse andere eigenschappen.

Waarom z-index genegeerd lijkt te worden

De 3D-weergave hieronder haalt een kleine pagina uit elkaar in haar stacking-lagen, zodat u ziet welke vakken in welke context vastzitten. Wijzig z-index-waarden en zet de eigenschap aan of uit die op de ouder een context maakt. Daarna: elke trigger volgens MDN, sticky headers met dropdowns, een schaal met tokens en een stapsgewijze routine voor debuggen.

Veelgestelde vragen

Waarom werkt z-index niet?

Ofwel het element is niet gepositioneerd (z-index heeft een andere position dan static nodig, of een flex- of grid-ouder), ofwel het zit vast in een stacking context. De positie van de ouder in zijn eigen context bepaalt het resultaat, en kinderen kunnen daar niet aan ontsnappen, welk getal ze ook hebben.

Wat maakt een stacking context?

Het root-element, gepositioneerde elementen met een z-index, fixed en sticky elementen, flex- en grid-kinderen met een z-index, opacity onder 1, transforms, filters, clip-path, masks, mix-blend-mode, perspective, isolation: isolate, sommige waarden van contain en will-change, size containers en elementen in de top layer.

Wat doet isolation: isolate?

Het maakt een nieuwe stacking context en doet verder niets, zonder visuele verandering. Zet het op de root van een component, zodat kinderen met een negatieve z-index achter de eigen achtergrond van het component blijven in plaats van achter de pagina te vallen, en zodat de interne lagen zich nooit mengen met die van buiten.

Hoe houd ik een dropdown boven de volgende sectie?

Geef de header of container met de dropdown een hogere z-index dan de secties erna, waarbij beide gepositioneerd zijn. Als de container een transform of opacity heeft, onthoud dan dat dat een eigen context is, dus de z-index moet op die container, niet op de dropdown.

Is een negatieve z-index veilig?

Hij is geldig, maar het element komt achter de achtergrond van zijn stacking context. Zonder context op de ouder kan dat betekenen: achter de pagina-achtergrond en onzichtbaar. Voeg isolation: isolate toe op de ouder om het erbinnen te houden.

Hoe de tekenvolgorde werkt

Een routine voor debuggen

Alles wat een stacking context maakt

Gebaseerd op de MDN-referentie over stacking contexts. Eén voorwaarde is genoeg.

Triggers voor een stacking context

De valkuil en de oplossingen

z-index 9999 die toch verliest

De blauwe kaart is een context met z-index 1. De tooltip erin heeft 9999, maar wordt alleen vergeleken met dingen binnen de kaart, dus het oranje vak met z-index 2 bedekt hem.

isolation: isolate houdt een negatieve laag binnen

Zonder isolate zou de decoratie met z-index: -1 achter de achtergrond van de sectie vallen en verdwijnen. Met isolate is de sectie haar eigen context.

Sticky header met een dropdown

De header is sticky en dus al een context. Geef hem een z-index boven de inhoud, en de dropdown erin erft die laag. Geen enorme getallen nodig.

Stacking-lab met uitvergrote 3D-weergave

z-index van header

z-index van kaart (of auto)

z-index van dropdown

z-index van banner

Contexttrigger op de kaart

Extra eigenschap op de kaart

Uitvergrote 3D-weergave (draai de lagen uit elkaar)

Lagen uit elkaar gehaald, hoger betekent later getekend

Platte weergave, echte CSS

Header z {z}

Kaart z {z}

Dropdown z {z}

Banner z {z}

(in de kaart)

boven de banner

onder de banner

De kaart vormt een stacking context ({why}). De {d} van de dropdown telt alleen binnen de kaart, dus hij staat {pos} omdat de kaart daar staat.

De kaart is geen stacking context, dus de dropdown concurreert rechtstreeks: {d} tegen {b} van de banner. Hij staat {pos}.

CSS voor deze opzet

CSS kopiëren

Probeer: kaart z auto, dropdown 9999, kies dan transform. Eén eigenschap zet de dropdown vast.

Een z-index-schaal om te kopiëren

Tokens kopiëren

Token

Waarde

Voor

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap