W3docs

Proprietà CSS z-index

Usa la proprietà CSS z-index per specificare l'ordine di impilamento degli elementi. Scopri i valori e prova gli esempi.

La proprietà CSS z-index controlla l'ordine di impilamento degli elementi sovrapposti — quale appare in primo piano e quale rimane nascosto dietro. Il nome deriva dall'immaginario asse z: l'asse x va da sinistra a destra, l'asse y dall'alto verso il basso, e l'asse z punta verso di te uscendo dallo schermo. Un elemento con un valore z-index più alto si trova più vicino all'osservatore e copre gli elementi con un valore inferiore.

Questa pagina spiega cosa fa z-index, perché funziona solo sugli elementi posizionati, come i contesti di impilamento determinano quali valori vengono confrontati, e i motivi più comuni per cui z-index "non funziona".

Come funziona l'impilamento

Per impostazione predefinita, quando gli elementi si sovrappongono, quello che appare più avanti nel sorgente HTML viene disegnato sopra. z-index permette di sovrascrivere quell'ordine esplicitamente. Ad esempio, z-index: 10 si troverà sopra z-index: 1, indipendentemente dall'ordine nel sorgente, e valori negativi come z-index: -1 spingono un elemento dietro il suo genitore.

Ma z-index non è una classifica globale. I valori vengono confrontati solo all'interno dello stesso contesto di impilamento. Un contesto di impilamento è un livello autonomo: ogni elemento al suo interno viene impilato rispetto ai propri fratelli, e l'intero gruppo viene poi impilato come un'unità unica all'interno del contesto genitore. La radice della pagina (<html>) crea il primo contesto di impilamento, e determinate proprietà ne creano di nuovi (vedi più avanti).

Informazione

La proprietà z-index non ha effetto sugli elementi static (il valore predefinito). Si applica solo agli elementi posizionati — quelli con position impostato su relative, absolute, fixed o sticky — e agli elementi figlio di flex/grid.

Valore inizialeauto
Si applica aElementi posizionati.
EreditatoNo.
AnimabileSì.
VersioneCSS2
Sintassi DOMobject.style.zIndex = "-1";

Sintassi

Sintassi della proprietà CSS z-index

z-index: auto | number | initial | inherit;

Esempio della proprietà z-index con valore negativo:

Esempio della proprietà CSS z-index con valore negativo

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
        position: absolute;
        left: 0;
        top: 10px;
        z-index: -1;
      }
    </style>
  </head>
  <body>
    <h2>Z-index property example</h2>
    <img src="https://api.w3docs.com/uploads/media/default/0001/01/0710cad7a1017902166203def268a0df2a5fd545.png" alt="W3docs logo" width="200" height="100" />
  </body>
</html>

Esempio della proprietà z-index con valore positivo:

Esempio della proprietà CSS z-index con valore numerico

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      #blue,
      #green,
      #grey {
        position: absolute;
        width: 150px;
        height: 150px;
        color: #eee;
        opacity: 0.95;
        padding: 15px;
        line-height: 100px;
        text-align: center;
      }
      #blue {
        z-index: 1;
        background-color: #1c87c9;
        top: 60px;
        left: 50px;
        line-height: 1;
      }
      .black {
        height: 80px;
        width: 160px;
        background-color: #000;
        line-height: 100px;
        bottom: 20px;
        position: absolute;
        z-index: 10;
      }
      #green {
        z-index: 2;
        background-color: #8ebf42;
        top: 100px;
        left: 170px;
      }
      #grey {
        background-color: #666;
        top: 200px;
        left: 100px;
      }
    </style>
  </head>
  <body>
    <h2>Z-index property example</h2>
    <div class="container">
      <div id="blue">
        Blue
        <div class="black">Black</div>
      </div>
      <div id="green">Green</div>
      <div id="grey">Grey</div>
    </div>
  </body>
</html>

Qui i riquadri si sovrappongono perché sono tutti posizionati in modo assoluto. Il riquadro blu (z-index: 1) si trova sotto il riquadro verde (z-index: 2), e il riquadro grigio non ha z-index quindi segue l'ordine nel sorgente. Nota che il riquadro nero (z-index: 10) è annidato all'interno del riquadro blu: il suo z-index: 10 viene confrontato solo con gli altri figli di blue, quindi non può salire sopra il riquadro verde anche se 10 > 2. Questa è la regola del contesto di impilamento in azione.

Risultato

Proprietà CSS z-index

Valori

ValoreDescrizioneProvalo
autoIl livello di impilamento del box generato è uguale a quello del suo genitore. Questo è il valore predefinito della proprietà.Provalo »
numberIl livello di impilamento del box generato specificato tramite numeri. Sono validi anche valori negativi.Provalo »
initialImposta la proprietà al suo valore predefinito.Provalo »
inheritEredita la proprietà dall'elemento genitore.

Cosa crea un nuovo contesto di impilamento

Capire i contesti di impilamento è la chiave per padroneggiare z-index. Un nuovo contesto viene creato, tra gli altri, da:

  • L'elemento radice <html>.
  • Un elemento posizionato (relative, absolute, fixed, sticky) con un z-index diverso da auto.
  • Un figlio di flex o grid con un z-index diverso da auto.
  • Un elemento con opacity inferiore a 1 (vedi opacity).
  • Un elemento con un valore di transform, filter, perspective, clip-path o mask diverso da none (vedi transform).
  • Un elemento con position: fixed o position: sticky.
  • Un elemento con isolation: isolate.
  • Un elemento con will-change impostato su una proprietà che creerebbe un contesto.

Una volta che un elemento forma un contesto di impilamento, il z-index dei suoi discendenti è "intrappolato" al suo interno — non possono mai uscirne per competere con elementi esterni al genitore.

Perché il tuo z-index "non funziona"

Questi sono i colpevoli più comuni, in ordine di frequenza:

  1. L'elemento è static. z-index viene silenziosamente ignorato a meno che position non sia relative, absolute, fixed o sticky (o l'elemento non sia un elemento figlio di flex/grid). Imposta prima una posizione.
  2. Un genitore forma un contesto di impilamento. Una modale con z-index: 9999 può comunque nascondersi dietro un altro elemento se il suo antenato si trova in un contesto con livello di impilamento inferiore. La soluzione è aumentare il z-index dell'antenato, non del discendente.
  3. Un antenato ha opacity o transform. Anche un apparentemente innocuo opacity: 0.99 o transform: translateZ(0) (spesso aggiunto per la "accelerazione GPU") crea un contesto di impilamento e può intrappolare i figli.
  4. Stai combattendo l'ordine nel sorgente. Senza z-index, vincono gli elementi successivi. Riordinare l'HTML è talvolta più semplice di una guerra di z-index.
Attenzione

Evita enormi "numeri magici" come z-index: 999999. Rendono impossibile ragionare sull'ordine di impilamento. Mantieni una scala ridotta e documentata (ad esempio 1, 10, 100, 1000 per contenuto, dropdown, barre fisse e modali).

Esempio: isolare un contesto di impilamento

La proprietà isolation: isolate crea un nuovo contesto di impilamento senza modificare il posizionamento o l'opacità. È il modo più pulito per contenere i valori z-index di un componente:

.card {
  /* z-index values inside .card now stay inside .card */
  isolation: isolate;
}

Proprietà correlate

  • position — necessario affinché z-index abbia effetto.
  • opacity — valori inferiori a 1 creano un contesto di impilamento.
  • transform — valori diversi da none creano un contesto di impilamento.

Esercitazione

Pratica
Cosa fa la proprietà 'z-index' in CSS?
Cosa fa la proprietà 'z-index' in CSS?
Was this page helpful?