CSS Flexbox ist der schnellste Weg, Elemente in einer Reihe oder Spalte sauber anzuordnen – ohne float-Gefrickel und ohne unzählige Margin-Tricks. Wer Layouts baut, kommt an Flexbox nicht vorbei.
In diesem Guide lernst du Flexbox von Grund auf: das Achsen-Modell, die wichtigsten Eigenschaften und drei fertige Layouts, die du direkt kopieren kannst. Am Ende verstehst du nicht nur, was du tippst, sondern warum es funktioniert.
Das Wichtigste in Kürze
display: flexauf dem Eltern-Element macht alle direkten Kinder zu flexiblen Items.- Es gibt zwei Achsen: die Hauptachse (Richtung der Items) und die Querachse (90° dazu).
justify-contentverteilt entlang der Hauptachse,align-itemsentlang der Querachse.gapsetzt sauberen Abstand,flex-wraperlaubt Umbrüche,flexsteuert Wachsen und Schrumpfen.- Flexbox ist für eine Dimension (Reihe ODER Spalte) – für Raster in zwei Dimensionen nimmst du CSS Grid.
Was ist CSS Flexbox – und wozu brauchst du es?
Flexbox (offiziell „Flexible Box Layout“) ist ein CSS-Layoutmodul, das speziell dafür gemacht wurde, eine Gruppe von Elementen entlang einer Linie zu verteilen. Du sagst dem Container, in welche Richtung seine Kinder fließen sollen, wie der Platz dazwischen verteilt wird und wie sie sich ausrichten – den Rest erledigt der Browser.
Bevor es Flexbox gab, hat man Spalten mit float oder display: inline-block gebaut. Beides ist fummelig: vertikales Zentrieren war ein Albtraum, gleich hohe Spalten ein Hack. Mit Flexbox sind genau diese Aufgaben ein Einzeiler. Typische Einsätze:
- Navigationsleisten (Logo links, Menü rechts)
- Karten-Reihen, die sich gleichmäßig den Platz teilen
- Inhalte horizontal und vertikal mittig zentrieren
- Buttons, Icons und Text auf einer Linie ausrichten
So startest du: display:flex
Flexbox aktivierst du immer auf dem Container (dem Eltern-Element), nicht auf den Items. Eine einzige Zeile reicht:
.container {
display: flex;
}
Ab jetzt liegen alle direkten Kinder von .container standardmäßig nebeneinander in einer Reihe. Das war's für den Anfang. Alle weiteren Eigenschaften verfeinern nur noch, wie diese Reihe sich verhält.
So sieht das aus: drei Boxen, die sich automatisch den Platz teilen – das ist gerendertes Flexbox, kein Bild.
Das Herzstück: Hauptachse und Querachse
Wenn du nur eine Sache aus diesem Guide mitnimmst, dann diese: Flexbox denkt in zwei Achsen. Verstehst du die, ergeben alle Eigenschaften sofort Sinn.
Die Richtung, in der deine Items fließen. Bei
flex-direction: row läuft sie horizontal von links nach rechts.Steht immer 90° zur Hauptachse. Bei einer Reihe läuft sie also vertikal (oben nach unten).
Der Clou: flex-direction dreht die Hauptachse. Setzt du column, läuft die Hauptachse plötzlich vertikal – und die Querachse horizontal. Genau deshalb steuern dieselben Eigenschaften je nach Richtung mal die Breite, mal die Höhe.
flex-direction – die Richtung bestimmen
.container {
display: flex;
flex-direction: row; /* Standard: Reihe, links → rechts */
/* column Spalte, oben → unten */
/* row-reverse Reihe, rechts → links */
/* column-reverse Spalte, unten → oben */
}
Die vier Eigenschaften, die du täglich brauchst
justify-content – entlang der Hauptachse verteilen
Steuert, wie der freie Platz in Flussrichtung verteilt wird. Werte: flex-start, center, flex-end, space-between, space-around, space-evenly.
align-items – entlang der Querachse ausrichten
Richtet die Items quer zur Flussrichtung aus. Werte: stretch (Standard, füllt die Höhe), center, flex-start, flex-end, baseline.
gap – sauberer Abstand ohne Margin-Tricks
Setzt gleichmäßigen Abstand zwischen allen Items, ohne den Außenrand zu beeinflussen. gap: 1rem; ist heute der Standard statt einzelner margin-Angaben.
flex-wrap – Umbruch erlauben
Standardmäßig (nowrap) quetscht Flexbox alle Items in eine Zeile. Mit flex-wrap: wrap; springen sie bei Platzmangel in die nächste Zeile – essenziell für responsive Layouts.
Häufige Verwechslung: justify-content und align-items tauschen ihre Wirkung, sobald du flex-direction: column setzt. Dann zentriert justify-content: center vertikal und align-items: center horizontal. Merke dir die Achsen, nicht die Worte „horizontal/vertikal“.
Items steuern: flex-grow, flex-shrink und flex-basis
Diese drei Eigenschaften gehören auf die Items (nicht den Container) und entscheiden, wie ein Item sich Platz nimmt:
flex-grow– wie stark ein Item wächst, wenn Platz übrig ist (0 = gar nicht, 1 = nimmt seinen Anteil).flex-shrink– wie stark ein Item schrumpft, wenn der Platz knapp wird (Standard 1).flex-basis– die Ausgangsgröße vor dem Wachsen/Schrumpfen (z. B.200pxoderauto).
In der Praxis schreibst du fast immer die Kurzform flex. Diese drei Zeilen bedeuten dasselbe:
.item {
flex: 1; /* grow:1 shrink:1 basis:0 → alle teilen sich gleich auf */
}
.karte {
flex: 1 1 250px; /* startet bei 250px, darf wachsen und schrumpfen */
}
.fix {
flex: 0 0 auto; /* bleibt bei seiner natürlichen Größe, kein Wachsen/Schrumpfen */
}
Merksatz: flex: 1 auf mehreren Geschwistern macht sie gleich breit. flex: 1 1 250px auf Karten ergibt ein responsives Raster, das automatisch umbricht.
3 praktische Layouts zum Nachbauen
1. Navbar: Logo links, Menü rechts
Der Klassiker. justify-content: space-between drückt das erste und letzte Kind an die Ränder, align-items: center hält alles auf einer Linie.
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1.5rem;
padding: 1rem 2rem;
}
.navbar .menu {
display: flex;
gap: 1.25rem;
}
2. Karten-Reihe, die gleichmäßig aufgeht
Jede Karte startet bei 250 px, darf wachsen und bricht bei schmalen Bildschirmen um. So entsteht ein flexibles Raster ganz ohne Media Queries.
.cards {
display: flex;
flex-wrap: wrap;
gap: 1.5rem;
}
.cards .card {
flex: 1 1 250px; /* startet bei 250px, teilt sich den Rest */
}
3. Perfekt zentrieren – horizontal und vertikal
Die wohl meistgesuchte Antwort der CSS-Welt. Zwei Zeilen, fertig:
.center {
display: flex;
justify-content: center; /* horizontal */
align-items: center; /* vertikal */
min-height: 100vh;
}
Dadurch sitzt jedes Kind exakt in der Mitte des Containers – kein Margin-Hack, kein transform nötig.
Flexbox vs. Grid – wann nimmst du was?
Beide sind moderne Layout-Werkzeuge und schließen sich nicht aus. Die Faustregel: Flexbox für eine Dimension, Grid für zwei.
| Kriterium | CSS Flexbox | CSS Grid |
|---|---|---|
| Dimensionen | Eine (Reihe oder Spalte) | Zwei (Reihen und Spalten gleichzeitig) |
| Ideal für | Navbars, Button-Gruppen, Karten-Reihen, Zentrieren | Seiten-Layouts, Galerien, komplexe Raster |
| Denkweise | Inhalt verteilt sich entlang einer Achse | Du legst zuerst das Raster fest, dann platzierst du Inhalte |
| Umbruch | Über flex-wrap, fließend | Über definierte Spalten, präzise |
| Schwierigkeit | Schneller Einstieg | Mächtiger, etwas steilere Kurve |
In echten Projekten kombinierst du beides: Grid fürs grobe Seiten-Layout, Flexbox für die Feinverteilung innerhalb einer Grid-Zelle (etwa eine Karte mit Icon, Text und Button).
Häufige Fragen
Was ist der Unterschied zwischen justify-content und align-items?
justify-content verteilt die Items entlang der Hauptachse (bei einer Reihe also horizontal), während align-items sie entlang der Querachse ausrichtet (bei einer Reihe also vertikal). Setzt du flex-direction: column, tauschen beide ihre sichtbare Wirkung, weil sich die Achsen drehen.Wie zentriere ich ein Element mit Flexbox perfekt mittig?
display: flex; justify-content: center; align-items: center; und eine Höhe (z. B. min-height: 100vh). Dann sitzt jedes Kind exakt in der horizontalen und vertikalen Mitte – ganz ohne margin: auto-Tricks oder transform.Was bedeutet flex: 1 genau?
flex: 1 ist die Kurzform für flex-grow: 1; flex-shrink: 1; flex-basis: 0. Bekommen mehrere Geschwister diesen Wert, teilen sie sich den verfügbaren Platz zu gleichen Teilen – sie werden also gleich breit (bzw. gleich hoch in einer Spalte).Warum brechen meine Flex-Items nicht um?
flex-wrap: nowrap, deshalb zwingt Flexbox alle Items in eine Zeile und schrumpft sie notfalls. Setze flex-wrap: wrap auf dem Container, damit Items bei Platzmangel in die nächste Zeile springen. Eine sinnvolle flex-basis (z. B. flex: 1 1 250px) hilft, den Umbruchpunkt zu steuern.Flexbox oder Grid – was soll ich zuerst lernen?
Auf welche Elemente wirken gap, flex-direction und Co.?
flex-direction, justify-content, align-items, gap und flex-wrap gehören auf den Container (das Eltern-Element mit display: flex). Eigenschaften wie flex-grow, flex-shrink, flex-basis und die Kurzform flex gehören dagegen auf die einzelnen Items.