Wenn es eine CSS-Technik gibt, die du täglich brauchst, dann ist es Flexbox. Das Flexible Box Layout löst genau die Probleme, an denen Generationen von Webentwicklern verzweifelt sind: vertikales Zentrieren, gleichmäßiges Verteilen von Elementen und Layouts, die sich elegant an unterschiedliche Bildschirmgrößen anpassen. In diesem Guide zeige ich dir, wie Flexbox wirklich funktioniert – nicht als Sammlung von Copy-Paste-Snippets, sondern als verständliches Modell.
Das mentale Modell: Zwei Achsen
Der Schlüssel zu Flexbox ist das Verständnis von zwei Achsen. Sobald du einem Container display: flex gibst, spannt sich ein Koordinatensystem auf:
- Main Axis (Hauptachse): Die Richtung, in der die Elemente angeordnet werden. Standardmäßig läuft sie horizontal von links nach rechts.
- Cross Axis (Querachse): Steht senkrecht zur Hauptachse, also standardmäßig vertikal.
Mit flex-direction drehst du die Hauptachse. Bei flex-direction: column läuft sie plötzlich vertikal, und alle Ausrichtungseigenschaften beziehen sich entsprechend mit. Genau hier verlieren viele den Überblick: justify-content wirkt immer entlang der Hauptachse, align-items immer entlang der Querachse. Wenn du die Richtung wechselst, tauschen die beiden ihre optische Wirkung. Verinnerliche das einmal, und Flexbox wird vollständig vorhersehbar.
justify-content: Verteilen entlang der Hauptachse
Mit justify-content steuerst du, wie der freie Raum entlang der Hauptachse verteilt wird:
- flex-start / flex-end: Drängt die Items an den Anfang oder das Ende.
- center: Zentriert die Gruppe.
- space-between: Erstes und letztes Item an den Rändern, gleiche Abstände dazwischen – perfekt für eine Navigationsleiste mit Logo links und Menü rechts.
- space-around: Gleiche Abstände rund um jedes Item, wodurch die Außenränder halb so groß sind wie die Innenabstände.
- space-evenly: Wirklich identische Abstände überall, auch an den Rändern.
align-items: Die Querachse beherrschen
Hier liegt der berühmte Trick zum vertikalen Zentrieren. align-items: center richtet alle Items mittig entlang der Querachse aus. Kombiniert mit justify-content: center hast du das jahrzehntelang gesuchte „perfekt zentriert in beide Richtungen" in zwei Zeilen.
Der Standardwert ist übrigens stretch: Items dehnen sich über die volle Höhe des Containers, wenn keine feste Höhe gesetzt ist. Das erklärt, warum gleich hohe Karten in einer Reihe automatisch entstehen – ein angenehmer Nebeneffekt, den man früher per JavaScript erzwingen musste. Mit align-self kannst du ein einzelnes Item abweichend ausrichten.
Die flex-Kurzschrift: grow, shrink und basis
Jetzt zum oft missverstandenen Herzstück. Die Eigenschaft flex ist eine Kurzschreibweise für drei Werte:
- flex-grow: Wie stark darf ein Item wachsen, wenn Platz übrig ist? Ein Wert von
1bedeutet „nimm deinen Anteil am freien Raum". Beiflex-grow: 2bekommt das Item den doppelten Anteil eines Geschwisters mit1. - flex-shrink: Wie stark darf es schrumpfen, wenn der Platz knapp wird? Mit
flex-shrink: 0verhinderst du, dass ein Element kleiner wird – nützlich für ein Icon, das seine Größe behalten soll. - flex-basis: Die Ausgangsgröße vor dem Wachsen oder Schrumpfen. Steht hier
auto, wird die Inhaltsbreite herangezogen.
Die berühmte Kurzform flex: 1 entspricht flex: 1 1 0: Das Item wächst, schrumpft und startet bei null. Setzt du das auf mehrere Geschwister, teilen sie sich den Raum exakt gleichmäßig – unabhängig vom Inhalt. Genau das willst du für gleich breite Spalten.
flex-wrap und gap: Mehrzeilige Layouts
Standardmäßig quetscht Flexbox alle Items in eine einzige Zeile. Mit flex-wrap: wrap erlaubst du den Umbruch in mehrere Zeilen, sobald der Platz nicht mehr reicht. Das ist die Grundlage für responsive Karten-Layouts, ohne dass du jede Zeile von Hand definieren musst.
Lange Zeit musste man Abstände zwischen Flex-Items über Margins lösen, was an den Rändern hässliche Lücken hinterließ. Heute gibt es gap auch für Flexbox: gap: 1rem setzt saubere Abstände zwischen allen Items, ohne Randprobleme. Das Feature wird seit 2021 von allen großen Browsern unterstützt und sollte dein Standard sein.
Praxisfall 1: Die responsive Navigationsleiste
Ein Klassiker: Logo links, Menüpunkte rechts. Du gibst der Navigation display: flex und justify-content: space-between, fügst align-items: center für die vertikale Mitte hinzu. Die Menüpunkte selbst landen in einem inneren Flex-Container mit gap. Für die mobile Ansicht schaltest du per Media Query auf flex-direction: column – fertig ist das Hamburger-taugliche Grundgerüst.
Praxisfall 2: Der Footer, der unten klebt
Das „Sticky Footer"-Problem plagte Entwickler ewig: Bei wenig Inhalt soll der Footer trotzdem am unteren Bildschirmrand bleiben. Die saubere Flexbox-Lösung: Gib dem Body display: flex, flex-direction: column und min-height: 100vh. Dem Hauptinhalt verpasst du flex: 1. Dieser eine Wert lässt den Content den verfügbaren Raum füllen und drückt den Footer zuverlässig nach unten – ganz ohne fixe Höhen oder Berechnungen.
Praxisfall 3: Media-Objekt und Karten
Das Media-Objekt – Bild oder Avatar links, Text rechts – ist mit Flexbox ein Zweizeiler. Container auf display: flex, dem Bild flex-shrink: 0 für die feste Größe, dem Textbereich flex: 1, damit er den Rest einnimmt. Dieses Muster begegnet dir überall: in Kommentaren, Produktlisten und Benachrichtigungen.
Häufige Fehler und wie du sie vermeidest
Drei Stolperfallen sehe ich immer wieder:
- Verwechslung der Achsen: Nach einem
flex-direction: columnzentriertjustify-contentplötzlich vertikal. Immer fragen: In welche Richtung zeigt gerade die Hauptachse? - Vergessenes flex-shrink: Ohne
flex-shrink: 0werden Bilder und Buttons bei Platzmangel zusammengedrückt und verzerrt. - Flexbox für zweidimensionale Layouts: Sobald du Zeilen und Spalten gleichzeitig kontrollieren willst, ist CSS Grid die bessere Wahl. Mehr dazu in unserem CSS-Grid-Praxisguide.
Flexbox testen und experimentieren
Der schnellste Weg, Flexbox zu lernen, ist Ausprobieren. Öffne einen Online-Editor, wirf ein paar bunte Boxen hinein und drehe an den Werten. In unserem Beitrag zu CodePen zeigen wir, wie du im Browser ohne Setup loslegst. Wer das Layout später in einem Utility-Framework umsetzen will, findet in der Tailwind-CSS-Einführung die passenden Flex-Klassen.
Flexbox ist seit Jahren in jedem Browser verfügbar und gehört zu den stabilsten Werkzeugen im CSS-Werkzeugkasten. Wenn du das Achsenmodell einmal verinnerlicht hast, baust du Layouts, die früher Stunden gekostet haben, in wenigen Minuten – robust, responsiv und ohne Hacks.