CSS z-index e stacking context, smontati in 3D

Guida a z-index e stacking context in CSS

CSS z-index non funziona? Stacking context, vista 3D | We.Inc

Perché z-index viene ignorato, ogni proprietà che crea uno stacking context, una vista 3D esplosa dei livelli, header sticky e dropdown, una scala di z-index e una checklist di debug.

z-index ordina gli elementi sovrapposti, ma solo all'interno dello stesso stacking context. Un figlio con z-index: 9999 non può salire sopra un elemento esterno al genitore se quel genitore forma un contesto con uno z-index più basso. I contesti nascono da position più z-index, opacity sotto 1, transform, filter, isolation: isolate e diverse altre proprietà.

Perché z-index sembra ignorato

La vista 3D qui sotto scompone una piccola pagina nei suoi livelli di stacking, così puoi vedere quali box sono intrappolati in quale contesto. Cambia i valori di z-index e attiva o disattiva sul genitore la proprietà che crea un contesto. Dopo: ogni trigger secondo MDN, header sticky con dropdown, una scala di token e una procedura di debug passo per passo.

Domande frequenti

Perché z-index non funziona?

O l'elemento non è posizionato (z-index richiede un position diverso da static, oppure un genitore flex o grid), o è intrappolato in uno stacking context. Il risultato lo decide la posizione del genitore nel proprio contesto, e i figli non possono sfuggirgli, qualunque numero abbiano.

Cosa crea uno stacking context?

L'elemento radice, gli elementi posizionati con uno z-index, gli elementi fixed e sticky, i figli di flex e grid con uno z-index, opacity sotto 1, transform, filter, clip-path, maschere, mix-blend-mode, perspective, isolation: isolate, alcuni valori di contain e will-change, i size container e gli elementi del top layer.

Cosa fa isolation: isolate?

Crea un nuovo stacking context e nient'altro, senza alcun cambiamento visivo. Mettilo sulla radice di un componente così i figli con z-index negativo restano dietro lo sfondo del componente invece di finire dietro la pagina, e i suoi livelli interni non si mescolano mai con quelli esterni.

Come tengo un dropdown sopra la sezione successiva?

Dai all'header o al contenitore del dropdown uno z-index più alto delle sezioni che seguono, con entrambi posizionati. Se il contenitore ha un transform o un'opacity, ricorda che forma un proprio contesto, quindi lo z-index va su quel contenitore, non sul dropdown.

Uno z-index negativo è sicuro?

È valido, ma l'elemento va dietro lo sfondo del suo stacking context. Senza un contesto sul genitore, questo può significare dietro lo sfondo della pagina, quindi invisibile. Aggiungi isolation: isolate sul genitore per tenerlo dentro.

Come funziona l'ordine di disegno

Una procedura di debug

Tutto ciò che crea uno stacking context

Basato sul riferimento MDN sullo stacking context. Basta una sola condizione.

Trigger di stacking context

La trappola e le soluzioni

Uno z-index 9999 che perde comunque

La card blu è un contesto a z-index 1. Il suo tooltip ha 9999 ma viene confrontato solo con ciò che sta dentro la card, quindi il box arancione a z-index 2 lo copre.

isolation: isolate tiene dentro un livello negativo

Senza isolate, la decorazione con z-index: -1 finirebbe dietro lo sfondo della sezione e sparirebbe. Con isolate, la sezione è un contesto a sé.

Header sticky con un dropdown

L'header è sticky, quindi è già un contesto. Dagli uno z-index sopra il contenuto e il dropdown al suo interno eredita quel livello. Nessun numero enorme necessario.

Laboratorio di stacking con vista 3D esplosa

z-index dell'header

z-index della card (o auto)

z-index del dropdown

z-index del banner

Trigger di contesto sulla card

Proprietà aggiuntiva sulla card

Vista 3D esplosa (ruota i livelli separandoli)

Livelli separati, più in alto significa disegnato dopo

Vista piatta, CSS reale

Header z {z}

Card z {z}

Dropdown z {z}

Banner z {z}

(dentro la card)

sopra il banner

sotto il banner

La card forma uno stacking context ({why}). Lo {d} del dropdown conta solo dentro la card, quindi è {pos} perché lo è la card.

La card non è uno stacking context, quindi il dropdown compete direttamente: {d} contro {b} del banner. È {pos}.

CSS per questa configurazione

Copia il CSS

Prova: card z auto, dropdown 9999, poi scegli transform. Una sola proprietà intrappola il dropdown.

Una scala di z-index da copiare

Copia i token

Token

Valore

Per

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito