Web-Entwicklung · CSS

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: flex auf 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-content verteilt entlang der Hauptachse, align-items entlang der Querachse.
  • gap setzt sauberen Abstand, flex-wrap erlaubt Umbrüche, flex steuert 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:

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.

Item 1
Item 2
Item 3

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.

Hauptachse (main axis)
Die Richtung, in der deine Items fließen. Bei flex-direction: row läuft sie horizontal von links nach rechts.
Querachse (cross axis)
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:

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.

KriteriumCSS FlexboxCSS Grid
DimensionenEine (Reihe oder Spalte)Zwei (Reihen und Spalten gleichzeitig)
Ideal fürNavbars, Button-Gruppen, Karten-Reihen, ZentrierenSeiten-Layouts, Galerien, komplexe Raster
DenkweiseInhalt verteilt sich entlang einer AchseDu legst zuerst das Raster fest, dann platzierst du Inhalte
UmbruchÜber flex-wrap, fließendÜber definierte Spalten, präzise
SchwierigkeitSchneller EinstiegMä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?
Gib dem Container 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?
Standardmäßig steht 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?
Starte mit Flexbox. Es deckt die häufigsten Alltagsfälle ab (Navbars, Karten, Zentrieren) und der Einstieg ist schneller. Sobald du zweidimensionale Raster mit präzisen Reihen und Spalten brauchst, lernst du Grid dazu. In der Praxis nutzt du am Ende beides parallel.
Auf welche Elemente wirken gap, flex-direction und Co.?
Eigenschaften wie 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.