CSS position: sticky, fixed, absolute und relative erklärt

Kaum eine CSS-Eigenschaft sorgt für so viel Verwirrung wie position. Ein Header, der nicht klebt, ein Button, der an der falschen Stelle schwebt, oder ein Overlay, das hinter dem Inhalt verschwindet: Fast immer steckt ein Missverständnis über den Bezugspunkt dahinter. Dieser Ratgeber erklärt die fünf möglichen Werte, woran sich jeder einzelne orientiert und welche Stolpersteine dich in der Praxis am häufigsten ausbremsen.

Was die Eigenschaft position überhaupt steuert

Standardmäßig fließen alle Elemente im sogenannten normalen Dokumentfluss von oben nach unten und von links nach rechts. Die Eigenschaft position bestimmt, ob ein Element in diesem Fluss bleibt oder herausgelöst wird, und worauf sich die Verschiebungswerte top, right, bottom und left beziehen. Ohne ein passendes position haben diese vier Werte schlicht keine Wirkung. Genau dieser Bezugspunkt ist der Schlüssel zum Verständnis: Jeder der fünf Werte misst seine Abstände gegen etwas anderes.

Die fünf Werte und ihr Bezugspunkt

Es gibt fünf relevante Werte. Sie unterscheiden sich vor allem darin, ob das Element im Fluss bleibt und gegen welchen Container es sich ausrichtet.

Übersicht: Bezugspunkt, Scroll-Verhalten und Einsatzzweck

Die folgende Tabelle fasst zusammen, wogegen jeder Wert misst, wie er sich beim Scrollen verhält und wofür er typischerweise gut ist.

Wert Bezugspunkt Im Dokumentfluss? Reaktion auf Scrollen Typischer Einsatzzweck
static kein Bezug (normaler Fluss) ja scrollt mit dem Inhalt Standardverhalten aller Elemente
relative eigene Ausgangsposition ja (Platz bleibt reserviert) scrollt mit dem Inhalt kleine Korrekturen, Anker für absolute Kinder
absolute nächster positionierter Vorfahre nein scrollt mit dem Eltern-Container Badges, Tooltips, exakt platzierte Elemente
fixed Viewport (Fenster) nein bleibt fest stehen schwebender Button, Cookie-Leiste, Modal
sticky Scroll-Container + Schwellenwert ja, bis zum Schwellenwert klebt ab Schwelle, dann wieder frei klebriger Header, Tabellenkopf, Seitenleiste

sticky richtig einsetzen

Der Wert sticky ist mächtig, aber pingelig. Damit er funktioniert, müssen zwei Bedingungen erfüllt sein. Erstens braucht das Element einen Schwellenwert, also mindestens eine Angabe wie top: 0 oder bottom: 0. Ohne diese Schwelle weiß der Browser nicht, ab wann das Element kleben soll, und es bleibt schlicht im normalen Fluss.

Zweitens klebt das Element nur innerhalb seines eigenen Eltern-Containers. Sobald das Ende des Containers durchscrollt ist, scrollt das vermeintlich klebrige Element wieder mit hinaus. Das überrascht viele: Eine sticky Seitenleiste bleibt nur so lange stehen, wie ihr umgebender Bereich sichtbar ist. Ein typisches Muster sieht so aus:

.kopf {
  position: sticky;
  top: 0;
  background: #fff;
}

Der häufigste Stolperstein: overflow beim Elternelement

Wenn sticky einfach nicht funktioniert, obwohl alles richtig aussieht, liegt es überraschend oft an einem Vorfahren mit overflow: hidden, overflow: auto oder overflow: scroll. Ein solcher Eltern-Container erzeugt einen eigenen Scroll-Kontext, und das sticky Element bezieht sich dann auf diesen statt auf den erwarteten äußeren Bereich. In vielen Fällen wirkt es dadurch, als ob das Kleben gar nicht greift.

Praktische Hinweise, um dem Problem auf die Spur zu kommen:

  1. Prüfe alle Vorfahren bis zum body auf eine overflow-Angabe ungleich visible.
  2. Achte darauf, dass kein Eltern-Container eine zu geringe Höhe hat, sodass kein scrollbarer Bereich entsteht.
  3. Stelle sicher, dass ein Schwellenwert wie top wirklich gesetzt ist.

Z-Index gilt nur für positionierte Elemente

Ein weiterer Klassiker: Ein Overlay verschwindet hinter dem Inhalt, obwohl ein hoher z-index gesetzt ist. Der Grund ist simpel. Die Eigenschaft z-index wirkt ausschließlich auf Elemente, die positioniert sind, also einen Wert ungleich static haben. Setzt du z-index: 9999 auf ein statisches Element, passiert nichts. Erst zusammen mit relative, absolute, fixed oder sticky entfaltet er seine Wirkung. Zudem entstehen durch Eigenschaften wie opacity oder transform neue Stapelkontexte, die das Verhalten zusätzlich beeinflussen können.

Praxisbeispiele aus dem Alltag

Drei wiederkehrende Aufgaben lassen sich den Werten direkt zuordnen:

Ein häufiges Tandem ist außerdem relative am Elternelement plus absolute am Kind. So platzierst du etwa ein kleines Statusabzeichen exakt in der Ecke einer Karte, ohne dass es aus seinem Bereich ausbricht.

Schnelle Entscheidungshilfe

Wenn du unsicher bist, hilft eine einfache Frage: Woran soll sich das Element ausrichten? Geht es um das Fenster, das immer sichtbar bleibt, ist fixed richtig. Geht es um einen Bereich, in dem etwas bis zu einer Schwelle kleben soll, ist es sticky. Geht es um die exakte Platzierung innerhalb eines Eltern-Containers, kombinierst du relative am Elternteil mit absolute am Kind. Für reine Feinkorrekturen am eigenen Platz reicht oft relative. Mehr Werkzeuge rund um Webentwicklung findest du übrigens in den kotsch.tech Webtools.

Häufige Fragen

Warum funktioniert position: sticky bei mir nicht?

Meist fehlt entweder ein Schwellenwert wie top: 0, oder ein Vorfahren-Element besitzt eine overflow-Angabe ungleich visible. Beides verhindert das Kleben. Prüfe die Elternkette bis zum body und stelle sicher, dass ein scrollbarer Bereich existiert.

Was ist der Unterschied zwischen fixed und sticky?

Ein fixed Element hängt fest am Viewport und bewegt sich beim Scrollen nie. Ein sticky Element scrollt zunächst normal mit und bleibt erst ab dem Schwellenwert stehen, allerdings nur innerhalb seines eigenen Containers.

Warum wirkt mein z-index nicht?

Der z-index beeinflusst ausschließlich positionierte Elemente. Hat dein Element noch den Standardwert static, bleibt der z-index ohne Effekt. Setze zusätzlich einen Wert wie relative oder absolute.

Bleibt bei position: relative der ursprüngliche Platz erhalten?

Ja. Anders als bei absolute oder fixed reserviert relative den ursprünglichen Raum im Layout. Die optische Verschiebung wirkt sich also nicht auf die Position der Nachbarelemente aus.

Worauf bezieht sich ein absolut positioniertes Element?

Auf den nächsten Vorfahren mit einem position ungleich static. Existiert kein solcher Vorfahre, dient der initiale Block, also faktisch das Browserfenster, als Bezugspunkt. Deshalb setzt man häufig position: relative am gewünschten Eltern-Container.

Kann ein Element gleichzeitig sticky und fixed sein?

Nein, ein Element kann immer nur einen position-Wert haben. Du kannst jedoch je nach Bildschirmgröße über Media Queries unterschiedliche Werte vergeben, etwa mobil fixed und am Desktop sticky. Weitere Tipps rund um Webentwicklung sammeln wir laufend in den News.