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:
| Wert | Freier Platz geht | Lücken in der Demo |
|---|---|---|
flex-start (und start) | ganz hinter die Items | 0 / 0 / 0 / 240 |
center | halb davor, halb dahinter | 120 / 0 / 0 / 120 |
flex-end (und end) | ganz vor die Items | 240 / 0 / 0 / 0 |
space-between | nur zwischen die Items | 0 / 120 / 120 / 0 |
space-around | gleich viel auf beide Seiten jedes Items, die Ränder bekommen also die Hälfte | 40 / 80 / 80 / 40 |
space-evenly | jede Lücke gleich groß, Ränder inklusive | 60 / 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:
| Wert | Was 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 |
center | Items sind zentriert, in ihrer eigenen Höhe |
flex-end (und end) | Items sitzen unten |
baseline | Items 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-contentist die Flussrichtung,align-itemsquer dazu. In einer Spalte zentrierst du vertikal mitjustify-content: center. - Kein freier Platz. Ein Item mit
flex: 1nimmt den ganzen Platz, also hatjustify-contentnichts zu verteilen. Dasselbe passiert, wenn der Containerinline-flexund 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. Setzheightodermin-height. - In Flexbox nach
justify-selfsuchen. Dort wird es ignoriert. Nimmmargin-inline-start: auto(odermargin-left: auto) am Item. align-items: stretch, das nicht streckt. Ein Item mit eigenerheightbehält sie. Entferne die Höhe (nimmmin-height, wenn es ein Minimum braucht).- Die Eigenschaften an die Items setzen. Beide gehören an den Flex-Container. Nur
align-selfgehö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.