CSS z-index-Eigenschaft
Verwenden Sie die CSS-Eigenschaft z-index, um die Stapelreihenfolge von Elementen festzulegen. Erfahren Sie mehr über Werte und probieren Sie Beispiele aus.
Die CSS-Eigenschaft z-index steuert die Stapelreihenfolge überlappender Elemente — welches vorne erscheint und welches dahinter verborgen ist. Der Name stammt von der imaginären z-Achse: Die x-Achse verläuft von links nach rechts, die y-Achse von oben nach unten und die z-Achse zeigt aus dem Bildschirm heraus auf Sie zu. Ein Element mit einem höheren z-index liegt näher am Betrachter und überdeckt Elemente mit einem niedrigeren Wert.
Diese Seite behandelt, was z-index bewirkt, warum es nur bei positionierten Elementen funktioniert, wie Stapelkontexte bestimmen, welche Werte überhaupt verglichen werden, und die häufigsten Gründe, warum ein z-index „nicht funktioniert".
Wie Stapeln funktioniert
Wenn Elemente sich überlappen, wird standardmäßig dasjenige, das später im HTML-Quellcode steht, oben gezeichnet. Mit z-index können Sie diese Reihenfolge explizit überschreiben. Beispielsweise wird z-index: 10 über z-index: 1 liegen, unabhängig von der Quellreihenfolge, und negative Werte wie z-index: -1 verschieben ein Element hinter seinen Elternteil.
Aber z-index ist kein globales Ranking. Werte werden nur innerhalb desselben Stapelkontexts verglichen. Ein Stapelkontext ist eine eigenständige Ebene: Alle Elemente darin werden relativ zu ihren Geschwistern gestapelt, und die gesamte Gruppe wird dann als eine Einheit innerhalb des übergeordneten Kontexts gestapelt. Das Seitenstammelement (<html>) erstellt den ersten Stapelkontext, und bestimmte Eigenschaften erstellen neue (siehe unten).
Die Eigenschaft z-index hat keine Wirkung auf static-Elemente (der Standard). Sie gilt nur für positionierte Elemente — solche, bei denen position auf relative, absolute, fixed oder sticky gesetzt ist — sowie für Flex/Grid-Elemente.
| Anfangswert | auto |
|---|---|
| Gilt für | Positionierte Elemente. |
| Vererbbar | Nein. |
| Animierbar | Ja. |
| Version | CSS2 |
| DOM-Syntax | object.style.zIndex = "-1"; |
Syntax
Syntax der CSS z-index-Eigenschaft
z-index: auto | number | initial | inherit;Beispiel der z-index-Eigenschaft mit einem negativen Wert:
Beispiel der CSS z-index-Eigenschaft mit negativem Wert
<!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>Beispiel der z-index-Eigenschaft mit einem positiven Wert:
Beispiel der CSS z-index-Eigenschaft mit Zahlenwert
<!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>Hier überlappen sich die Boxen, da sie alle absolut positioniert sind. Die blaue Box (z-index: 1) liegt unterhalb der grünen Box (z-index: 2), und die graue Box hat keinen z-index, fällt also auf die Quellreihenfolge zurück. Beachten Sie, dass die schwarze Box (z-index: 10) innerhalb der blauen Box verschachtelt ist: Ihr z-index: 10 wird nur mit anderen Kindern von blue verglichen, sodass sie nicht über die grüne Box steigen kann, obwohl 10 > 2. Das ist die Stapelkontext-Regel in Aktion.
Ergebnis

Werte
| Wert | Beschreibung | Ausprobieren |
|---|---|---|
| auto | Die Stapelebene der erzeugten Box entspricht der des Elternelements. Dies ist der Standardwert dieser Eigenschaft. | Ausprobieren » |
| number | Die Stapelebene der erzeugten Box wird durch Zahlen angegeben. Negative Werte sind gültig. | Ausprobieren » |
| initial | Setzt die Eigenschaft auf ihren Standardwert zurück. | Ausprobieren » |
| inherit | Erbt die Eigenschaft vom Elternelement. |
Was einen neuen Stapelkontext erstellt
Das Verstehen von Stapelkontexten ist der Schlüssel zur Beherrschung von z-index. Ein neuer Kontext wird unter anderem erstellt durch:
- Das Stammelement
<html>. - Ein positioniertes Element (
relative,absolute,fixed,sticky) mit einemz-indexungleichauto. - Ein Flex- oder Grid-Kindelement mit einem
z-indexungleichauto. - Ein Element mit einem
opacity-Wert kleiner als1(siehe opacity). - Ein Element mit einem
transform-,filter-,perspective-,clip-path- odermask-Wert ungleichnone(siehe transform). - Ein Element mit
position: fixedoderposition: sticky. - Ein Element mit
isolation: isolate. - Ein Element mit
will-change, das auf eine Eigenschaft gesetzt ist, die einen Kontext erstellen würde.
Sobald ein Element einen Stapelkontext bildet, ist der z-index seiner Nachfolger darin „eingeschlossen" — sie können nie entkommen, um mit Elementen außerhalb des Elternelements zu konkurrieren.
Warum Ihr z-index „nicht funktioniert"
Dies sind die üblichen Ursachen, geordnet nach Häufigkeit:
- Das Element ist
static.z-indexwird stillschweigend ignoriert, wennpositionnichtrelative,absolute,fixedoderstickyist (oder das Element ein Flex/Grid-Element ist). Setzen Sie zuerst eine Position. - Ein Elternelement bildet einen Stapelkontext. Ein Modal mit
z-index: 9999kann trotzdem hinter einem anderen Element verschwinden, wenn sein Vorfahre in einem niedriger gestapelten Kontext sitzt. Die Lösung besteht darin, denz-indexdes Vorfahren zu erhöhen, nicht den des Nachfolgers. - Ein Vorfahre hat
opacityodertransform. Sogar ein harmlos aussehendesopacity: 0.99odertransform: translateZ(0)(oft für „GPU-Beschleunigung" hinzugefügt) erstellt einen Stapelkontext und kann Kindelemente einschließen. - Sie kämpfen gegen die Quellreihenfolge. Ohne
z-indexgewinnen spätere Elemente. Das Umordnen des HTML ist manchmal einfacher als einz-index-Wettrüsten.
Vermeiden Sie große „Magiezahlen" wie z-index: 999999. Sie machen die Stapelreihenfolge unüberschaubar. Verwenden Sie eine kleine, dokumentierte Skala (zum Beispiel 1, 10, 100, 1000 für Inhalte, Dropdowns, Sticky-Leisten und Modale).
Beispiel: Isolierung eines Stapelkontexts
Die Eigenschaft isolation: isolate erstellt einen neuen Stapelkontext ohne Änderung von Positionierung oder Deckkraft. Es ist die sauberste Methode, die z-index-Werte einer Komponente einzugrenzen:
.card {
/* z-index values inside .card now stay inside .card */
isolation: isolate;
}Verwandte Eigenschaften
- position — erforderlich, damit
z-indexwirksam wird. - opacity — Werte unter
1erstellen einen Stapelkontext. - transform — Werte ungleich
noneerstellen einen Stapelkontext.