Menu

CSS justify-content und align-items: alle Werte

justify-content platziert Flex-Items entlang der Hauptachse und align-items entlang der Querachse. Sieh jeden Wert nebeneinander und nachgemessen, mit einem klickbaren Ausrichtungsraster, align-self und den Gründen, warum justify-content manchmal nichts bewirkt.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

justify-content und align-items in je einem Satz

In einem Flex-Container verteilt justify-content die Items entlang der Hauptachse (quer durch die Zeile), und align-items richtet sie auf der Querachse aus (hoch und runter in der Zeile). Beide gehören an den Container:

Die Box ist in beide Richtungen zentriert: gleich weit vom Anfangs- und Endrand und von oben und unten entfernt. Nimm height: 140px weg, und align-items: center hat nichts zu tun, weil der Container auf die eigene Höhe des Items schrumpft.

Jeder Wert von justify-content, nachgemessen

Jede Zeile unten besteht aus denselben drei Items mit einem anderen justify-content. Die Zahlen im Label über jeder Zeile sind die Lücken, die der Browser gelassen hat: vor dem ersten Item, zwischen den Items und nach dem letzten.

Der Container ist 420px breit, und die Items belegen 180px, also bleiben 240px freier Platz. Wohin er geht:

WertFreier Platz gehtLücken in der Demo
flex-start (und start)ganz hinter die Items0 / 0 / 0 / 240
centerhalb davor, halb dahinter120 / 0 / 0 / 120
flex-end (und end)ganz vor die Items240 / 0 / 0 / 0
space-betweennur zwischen die Items0 / 120 / 120 / 0
space-aroundgleich viel auf beide Seiten jedes Items, die Ränder bekommen also die Hälfte40 / 80 / 80 / 40
space-evenlyjede Lücke gleich groß, Ränder inklusive60 / 60 / 60 / 60

flex-start folgt der Flex-Richtung und start der Schreibrichtung. Sie unterscheiden sich nur bei row-reverse oder column-reverse, wo flex-start am umgekehrten Ende liegt.

Jeder Wert von align-items

align-items wirkt quer zur Zeile. Die Items unten haben unterschiedliche Höhen, damit du siehst, was jeder Wert mit ihnen macht:

WertWas auf der Querachse passiert
stretch (der Standard)Items ohne festgelegte Höhe wachsen, bis sie den Container füllen
flex-start (und start)Items sitzen oben, in ihrer eigenen Höhe
centerItems sind zentriert, in ihrer eigenen Höhe
flex-end (und end)Items sitzen unten
baselineItems verschieben sich so, dass die ersten Textzeilen eine gemeinsame Grundlinie haben

In der baseline-Box stehen die drei „Ag“-Labels auf einer Linie, obwohl das erste größer ist und das zweite Padding darüber hat. Das ist der Wert für eine Zeile, die eine große Überschrift mit kleinem Text mischt, oder ein Label mit einem Eingabefeld.

Zum Ausrichten klicken

Klick auf eine beliebige Zelle des 3 mal 3 Rasters. Die Box wandert dorthin, und darunter steht das CSS, das sie dorthin setzt:

Die Zeilen des Auswahlrasters ändern align-items, die Spalten justify-content. Die mittlere Zelle ist das klassische „div zentrieren“.

In einer Spalte tauschen die beiden

justify-content folgt immer der Hauptachse. Mit flex-direction: column ist die Hauptachse vertikal, also bewegt justify-content Items hoch und runter und align-items quer:

Wenn du sie verwechselst, tausch die beiden Eigenschaften, statt das Layout neu zu schreiben.

align-self und auto-Margins: nur ein Item

align-self an einem Item überschreibt align-items für dieses Item. In Flexbox gibt es kein justify-self; um ein Item entlang der Hauptachse zu verschieben, gib ihm ein auto-Margin, das den ganzen freien Platz auf dieser Seite nimmt:

Das grüne Item rutscht allein nach unten, und das bernsteinfarbene wird ans andere Ende der Zeile geschoben, während die anderen am Anfang bleiben.

Bei mehreren Zeilen: align-content

align-items richtet Items innerhalb ihrer Zeile aus. Bricht ein Container auf mehrere Zeilen um, verteilt align-content die Zeilen selbst und nimmt dieselben Werte wie justify-content. In einem nowrap-Container bewirkt es nichts, weil dessen einzige Zeile immer die Höhe des Containers füllt. Die Seite zu flex-wrap zeigt es.

Häufige Fehler

  • Die Achsen verwechseln. justify-content ist die Flussrichtung, align-items quer dazu. In einer Spalte zentrierst du vertikal mit justify-content: center.
  • Kein freier Platz. Ein Item mit flex: 1 nimmt den ganzen Platz, also hat justify-content nichts zu verteilen. Dasselbe passiert, wenn der Container inline-flex und genau so breit wie seine Items ist.
  • Keine Höhe für align-items. Ein Container, der so hoch wie sein Inhalt ist, lässt nichts zum Ausrichten. Setz height oder min-height.
  • In Flexbox nach justify-self suchen. Dort wird es ignoriert. Nimm margin-inline-start: auto (oder margin-left: auto) am Item.
  • align-items: stretch, das nicht streckt. Ein Item mit eigener height behält sie. Entferne die Höhe (nimm min-height, wenn es ein Minimum braucht).
  • Die Eigenschaften an die Items setzen. Beide gehören an den Flex-Container. Nur align-self gehört an ein Item.

Häufig gestellte Fragen

Was ist der Unterschied zwischen justify-content und align-items?

justify-content verteilt Items entlang der Hauptachse, der Richtung, in der sie fließen (horizontal bei flex-direction: row). align-items positioniert sie entlang der Querachse (vertikal bei einer Zeile). In einer Spalte tauschen beide: justify-content wird vertikal.

Was ist der Unterschied zwischen space-between, space-around und space-evenly?

space-between lässt vor dem ersten und nach dem letzten Item keinen Platz und verteilt den Rest zwischen den Items. space-around gibt jedem Item auf beiden Seiten gleich viel Platz, sodass die Ränder eine halbe Lücke bekommen. space-evenly macht jede Lücke gleich groß, auch an den Rändern.

Warum funktioniert justify-content nicht?

Meist gibt es keinen freien Platz zum Verteilen: Ein Item hat flex-grow oder flex: 1, oder der Container ist nur so breit wie seine Items (zum Beispiel display: inline-flex oder ein gefloateter Container). Prüf auch, ob display: flex am Elternelement steht und nicht an den Items.

Warum zentriert align-items center nicht vertikal?

Wahrscheinlich ist der Container genau so hoch wie sein Inhalt, also gibt es nichts, worin zentriert werden kann. Gib dem Flex-Container eine Höhe oder min-height, und die Items rücken in seine Mitte.

Was macht align-self?

align-self überschreibt das align-items des Containers für ein einzelnes Item. Zum Beispiel schiebt align-self: flex-end an einem Kind nur dieses Kind ans Ende der Querachse, während die anderen bleiben, wo align-items sie hingesetzt hat.

Gibt es in Flexbox justify-self?

Nein. Flexbox ignoriert justify-self, weil sich alle Items die Hauptachse teilen. Um ein Item entlang der Hauptachse zu schieben, nimm ein auto-Margin, etwa margin-inline-start: auto. justify-self funktioniert in Grid.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S