CSS Flexbox vs. Grid: Wann welches Layout verwenden
CSS Flexbox und CSS Grid sind die beiden leistungsstärksten Layoutsysteme im modernen CSS. Obwohl sie manchmal ähnliche Ergebnisse erzielen können, handelt es sich um grundlegend unterschiedliche Werkzeuge, die für verschiedene Probleme entwickelt wurden. Die Wahl des richtigen Layouts für jede Situation macht Ihr CSS sauberer, wartbarer und vorhersehbarer. Dieser Leitfaden bietet einen detaillierten Vergleich und praktische Codebeispiele, damit Sie Layoutentscheidungen mit Zuversicht treffen können.
Was ist CSS Flexbox?
CSS Flexible Box Layout, allgemein als Flexbox bezeichnet, ist ein eindimensionales Layoutmodell. Es zeichnet sich durch die Verteilung von Raum entlang einer einzelnen Achse (horizontale Zeile oder vertikale Spalte) aus. Flexbox ermöglicht es Elementen innerhalb eines Containers, sich flexibel zu dehnen, zu wachsen, zu schrumpfen und sich basierend auf dem verfügbaren Platz selbst auszurichten.
Flexbox wurde entwickelt, um gängige Layoutprobleme zu lösen, die in traditionellem CSS notorisch schwierig waren: Elemente vertikal zu zentrieren, Platz gleichmäßig zwischen Geschwisterelementen zu verteilen und Inhalte ohne Änderung des HTML neu anzuordnen. Vor Flexbox griffen Entwickler auf Floats, Inline-Block-Tricks und Tabellenlayouts zurück, um diese Effekte zu erzielen.
Flexbox-Kernkonzepte
- Flex-Container: Das übergeordnete Element, auf das display: flex angewendet wird.
- Flex-Elemente: Die direkten Kinder des Flex-Containers.
- Hauptachse: Die primäre Richtung des Layouts (standardmäßig horizontal, gesteuert durch flex-direction).
- Kreuzachse: Die Richtung senkrecht zur Hauptachse.
- Flex-Grow/Shrink/Basis: Eigenschaften, die steuern, wie Elemente sich ausdehnen und zusammenziehen, um den verfügbaren Platz zu füllen.
Flexbox-Beispiel: Navigationsleiste
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 24px;
height: 64px;
}
.navbar__logo {
flex-shrink: 0;
}
.navbar__links {
display: flex;
gap: 16px;
list-style: none;
}Diese Navigationsleiste verwendet Flexbox mit justify-content: space-between, um das Logo nach links und die Links nach rechts zu schieben. Die Elemente sind mit align-items: center vertikal zentriert. Dies ist ein klassisches eindimensionales Layout, bei dem Flexbox die natürliche Wahl ist.
Was ist CSS Grid?
CSS Grid Layout ist ein zweidimensionales Layoutsystem. Es behandelt Zeilen und Spalten gleichzeitig und gibt Ihnen präzise Kontrolle über die Position und Größe von Elementen innerhalb einer Rasterstruktur. Grid ermöglicht es Ihnen, explizite Spuren, Bereiche und Platzierungsregeln zu definieren und komplexe Layouts mit minimalem Code zu erstellen.
Grid wurde für Layouts auf Seitenebene und komplexe Komponentenstrukturen entwickelt, bei denen Sie beide Dimensionen steuern müssen. Es führte Konzepte wie benannte Rasterbereiche, auto-fill und auto-fit sowie explizite Zeilen- und Spaltengrößen ein, die zuvor unmögliche Layouts unkompliziert machen.
Grid-Kernkonzepte
- Grid-Container: Das übergeordnete Element, auf das display: grid angewendet wird.
- Grid-Elemente: Die direkten Kinder des Grid-Containers.
- Grid-Spuren: Die durch grid-template-rows und grid-template-columns definierten Zeilen und Spalten.
- Grid-Linien: Die unsichtbaren Linien, die die Spurgrenzen bilden und zur Platzierung verwendet werden.
- Grid-Bereiche: Benannte Bereiche des Rasters, denen Elemente zugewiesen werden können.
- Abstand: Der Abstand zwischen Rasterspuren (Zeilen und Spalten).
Grid-Beispiel: Seitenlayout
.page {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: 64px 1fr 48px;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
min-height: 100vh;
}
.page__header { grid-area: header; }
.page__sidebar { grid-area: sidebar; }
.page__content { grid-area: content; }
.page__footer { grid-area: footer; }Dieses Seitenlayout verwendet benannte Rasterbereiche, um ein klassisches Seitenleistenlayout zu erstellen. Kopfzeile und Fußzeile erstrecken sich über beide Spalten, während Seitenleiste und Inhalt nebeneinander platziert sind. Diese zweidimensionale Struktur ist genau das, worin Grid wirklich glänzt.
Flexbox vs. Grid: Direkter Vergleich
| Funktion | Flexbox | Grid |
|---|---|---|
| Dimension | Eindimensional (Zeile oder Spalte) | Zweidimensional (Zeilen und Spalten) |
| Inhaltsgesteuert | Ja, Elemente bestimmen Layout | Nein, Layoutstruktur zuerst definiert |
| Ausrichtung | Hauptachse + Kreuzachse | Blockachse + Inline-Achse |
| Abstand-Unterstützung | Ja (gap-Eigenschaft) | Ja (gap-Eigenschaft) |
| Elementplatzierung | Sequenziell (Quellreihenfolge) | Explizit (beliebige Rasterposition) |
| Überlappung | Nicht direkt unterstützt | Über Rasterplatzierung unterstützt |
| Responsiv | Verwendung von flex-wrap | Verwendung von auto-fit/auto-fill |
| Beste Verwendung | Navigation, Symbolleisten, Karteninhalt | Seitenlayouts, Galerien, Dashboards |
Wann Flexbox verwenden
Wenn Ihr Layoutproblem primär eindimensional ist, ist Flexbox die richtige Wahl. Hier sind die häufigsten Szenarien:
1. Navigationsleisten und Menüs
Navigation ist im Wesentlichen eine Zeile (oder Spalte) von Elementen. Flexbox verteilt Platz zwischen Elementen, behandelt Überlauf elegant und macht die vertikale Ausrichtung von Elementen einfach. Die gap-Eigenschaft ersetzt den alten Margin-basierten Abstand von Menüelementen.
2. Inhalt zentrieren
.centered {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}Diese dreizeilige Zentrierungslösung ist eines der beliebtesten Flexbox-Muster. Vor Flexbox erforderte die vertikale Zentrierung Hacks mit table-cell, absoluter Positionierung plus transform oder line-height-Tricks. Flexbox macht es mühelos.
3. Karteninhaltsausrichtung
Wenn Karten einen Titel, eine Beschreibung und eine Aktionsschaltfläche haben und die Schaltfläche unabhängig von der Inhaltslänge immer am unteren Rand bleiben soll, handhabt Flexbox dies elegant:
.card {
display: flex;
flex-direction: column;
}
.card__content {
flex: 1;
}flex: 1 im Inhaltsbereich lässt ihn wachsen, um den verfügbaren Platz zu füllen, und schiebt die Schaltfläche an den unteren Rand der Karte. Dies funktioniert unabhängig davon, wie viel Text die Karte enthält.
4. Formularzeilen-Layout
Formularelemente, die in einer Zeile angeordnet werden müssen und deren Größe sich ändern kann, wie ein Sucheingabefeld und eine Absenden-Schaltfläche, eignen sich perfekt für Flexbox. Das Eingabefeld kann wachsen, um den verfügbaren Platz zu füllen, während die Schaltfläche ihre natürliche Größe behält.
5. Medienobjekte
Das klassische Medienobjekt-Muster (Bild links, Text rechts) ist eine natürliche Ergänzung für Flexbox. Das Bild behält seine natürliche Breite, während der Text den verbleibenden Platz füllt.
Wann CSS Grid verwenden
Wenn Ihr Layout sowohl Zeilen als auch Spalten steuern muss oder Elemente präzise in einer definierten Struktur platziert werden müssen, ist Grid die richtige Wahl.
1. Ganzseitige Layouts
Layouts auf Seitenebene mit Kopfzeile, Seitenleiste, Inhaltsbereich und Fußzeile sind der typische Grid-Anwendungsfall. Benannte Rasterbereiche machen das Layout lesbar und wartbar:
.layout {
display: grid;
grid-template-columns: 1fr;
grid-template-areas:
"header"
"content"
"sidebar"
"footer";
}
@media (min-width: 768px) {
.layout {
grid-template-columns: 1fr 300px;
grid-template-areas:
"header header"
"content sidebar"
"footer footer";
}
}Beachten Sie, wie Responsive-Breakpoints einfach die Rastervorlage neu definieren. Elemente bleiben ihren Rasterbereichen zugewiesen, und das Layout restrukturiert sich automatisch. Dies ist viel sauberer als das Umordnen von Flexbox-Containern an verschiedenen Breakpoints.
2. Kartenraster und Galerien
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 24px;
}Diese einzelne Deklaration erstellt ein responsives Kartenraster, das die Anzahl der Spalten automatisch basierend auf der verfügbaren Breite anpasst. Jede Karte ist mindestens 280px breit, wächst aber, um den verbleibenden Platz zu füllen. Keine Medienabfragen erforderlich. Dieses auto-fill-Muster mit minmax ist eine der leistungsstärksten Grid-Techniken.
3. Dashboard-Layouts
Dashboards mit Widgets unterschiedlicher Größe, die sich über mehrere Zeilen und Spalten erstrecken, eignen sich hervorragend für Grid. Sie können Elemente an bestimmten Rasterpositionen platzieren und Spuren überspannen:
.dashboard {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: minmax(200px, auto);
gap: 16px;
}
.widget--wide { grid-column: span 2; }
.widget--tall { grid-row: span 2; }
.widget--hero { grid-column: span 2; grid-row: span 2; }4. Zeitschriften- und redaktionelle Layouts
Wenn Inhalte überlappen oder an nicht-sequenziellen Positionen platziert werden müssen, ist Grid das einzige CSS-Layoutsystem, das dies nativ unterstützt. Sie können Elemente auf bestimmten Rasterlinien platzieren und überlappende Kompositionen ohne absolute Positionierung erstellen.
5. Heiliger-Gral-Layout
Das berühmte »Heiliger Gral«-Layout (Kopfzeile, dreispaltiger Hauptteil mit festen Seitenleisten und flexiblem Zentrum, Fußzeile) ist mit Grid trivial:
.holy-grail {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}Flexbox und Grid kombinieren
Der effektivste Ansatz besteht nicht darin, zwischen Flexbox und Grid zu wählen, sondern sie strategisch zu kombinieren. Ein gängiges und empfohlenes Muster ist die Verwendung von Grid für das Makro-Layout (Seitenstruktur) und Flexbox für das Mikro-Layout (innerhalb von Komponenten).
Beispiel: Dashboard mit Grid und Flexbox
/* Grid for the page structure */
.dashboard {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: 64px 1fr;
grid-template-areas:
"sidebar header"
"sidebar main";
min-height: 100vh;
}
/* Flexbox for the header content */
.dashboard__header {
grid-area: header;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 24px;
}
/* Flexbox for sidebar menu items */
.dashboard__nav {
display: flex;
flex-direction: column;
gap: 4px;
}In diesem Beispiel definiert Grid die gesamte Seitenstruktur, während Flexbox die Ausrichtung innerhalb jedes Abschnitts handhabt. Diese Trennung der Zuständigkeiten hält Ihr CSS organisiert und zweckgerichtet.
Responsive Design-Muster
Flexbox-Responsive-Muster: Umbruch
.tag-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.tag {
flex-shrink: 0;
}Flexbox-Umbruch eignet sich hervorragend für Tag-Listen, Chip-Sets und jede Sammlung von Elementen, die natürlich in die nächste Zeile fließen, wenn der horizontale Platz knapp wird. Jedes Element behält seine natürliche Größe.
Grid-Responsive-Muster: Auto-Fill
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
}Grid auto-fill erstellt ein wirklich responsives Raster ohne jegliche Medienabfragen. Die Anzahl der Spalten passt sich automatisch an die Containerbreite an, wobei jede Spalte mindestens 300px breit ist. Dies ist leistungsstärker als Flexbox-Umbruch, da Elemente gestreckt werden, um die Zeilen gleichmäßig zu füllen.
Grid-Responsive-Muster: Stapeln
.layout {
display: grid;
grid-template-columns: 1fr;
gap: 24px;
}
@media (min-width: 768px) {
.layout {
grid-template-columns: 1fr 1fr;
}
}
@media (min-width: 1024px) {
.layout {
grid-template-columns: 1fr 1fr 1fr;
}
}Häufige Fehler und wie man sie vermeidet
- Grid für einzeilige Layouts verwenden: Wenn Sie nur Elemente in einer Zeile oder Spalte benötigen, ist Flexbox einfacher und angemessener. Die Verwendung von display: grid mit einer einzelnen grid-template-columns-Zeile ist oft überentwickelt.
- Flexbox für zweidimensionale Layouts verwenden: Der Versuch, Rasterlayouts mit verschachtelten Flex-Containern zu erstellen, führt zu fragilem, schwer wartbarem Code. Verwenden Sie Grid für jedes Layout, das sowohl Zeilen als auch Spalten steuern muss.
- gap vergessen: Sowohl Flexbox als auch Grid unterstützen die gap-Eigenschaft. Verwenden Sie sie anstelle von margin für den Abstand zwischen Elementen. Sie wird nur zwischen Elementen angewendet, nicht an den Rändern, was normalerweise genau das ist, was Sie wollen.
- flex-basis mit width überschreiben: In einem Flex-Container hat flex-basis auf der Hauptachse Vorrang vor width. Das gleichzeitige Setzen beider kann zu unerwartetem Verhalten führen. Verwenden Sie die flex-Kurzschreibweise, um Verwirrung zu vermeiden.
- minmax nicht verwenden: Erwägen Sie bei der Definition von Grid-Spalten immer die Verwendung von minmax(), um zu verhindern, dass Spalten zu klein oder zu groß werden. Eine als 1fr definierte Spalte kann auf null schrumpfen; minmax(200px, 1fr) stellt eine Mindestbreite sicher.
- Implizites Raster ignorieren: Wenn Sie mehr Elemente als definierte Rasterspuren haben, erstellt Grid implizite Spuren. Verwenden Sie grid-auto-rows und grid-auto-columns, um die Größe dieser impliziten Spuren zu steuern.
Browser-Unterstützung
Sowohl Flexbox als auch Grid genießen im Jahr 2026 eine hervorragende Browser-Unterstützung:
| Browser | Flexbox-Unterstützung | Grid-Unterstützung |
|---|---|---|
| Chrome | Volle Unterstützung (seit v29) | Volle Unterstützung (seit v57) |
| Firefox | Volle Unterstützung (seit v28) | Volle Unterstützung (seit v52) |
| Safari | Volle Unterstützung (seit v9) | Volle Unterstützung (seit v10.1) |
| Edge | Volle Unterstützung (seit v12) | Volle Unterstützung (seit v16) |
| iOS Safari | Volle Unterstützung (seit v9) | Volle Unterstützung (seit v10.3) |
| Samsung Internet | Volle Unterstützung (seit v1.5) | Volle Unterstützung (seit v6.2) |
Beide Technologien werden seit Jahren in allen gängigen Browsern vollständig unterstützt. Es gibt in der modernen Webentwicklung keinen Grund, eine von beiden aus Kompatibilitätsgründen zu vermeiden. Die gap-Eigenschaft in Flexbox war das letzte große Feature, das universelle Unterstützung erhielt, und ist seit 2021 in allen Browsern verfügbar.
Kurzanleitung zur Entscheidungsfindung
Wenn Sie ein neues Layout beginnen, stellen Sie sich diese Fragen:
- Muss ich sowohl Zeilen als auch Spalten steuern? Ja – Grid. Nein – Flexbox.
- Sollte der Inhalt die Layoutgröße bestimmen oder das Layout die Inhaltsposition? Inhaltsgesteuert – Flexbox. Layoutgesteuert – Grid.
- Müssen Elemente natürlich umbrechen? Ja – Flexbox mit flex-wrap oder Grid mit auto-fill.
- Müssen Elemente überlappen? Ja – Grid.
- Ist dies eine Komponente innerhalb eines größeren Layouts? Komponente wahrscheinlich Flexbox, größeres Layout Grid.
Arbeiten Sie mit CSS? Probieren Sie unsere kostenlosen CSS-Minifizierer und -Formatierer aus, um Ihre Stylesheets zu optimieren.
CSS minifizierenCSS formatierenHäufig gestellte Fragen
Sollte ich Flexbox oder Grid verwenden?
Flexbox eignet sich für eindimensionale Layouts (Zeile oder Spalte), bei denen Elemente flexibel skalieren und Platz dynamisch zugewiesen werden muss. Grid eignet sich für zweidimensionale Layouts, bei denen sowohl Zeilen als auch Spalten gesteuert werden müssen. Viele Layouts profitieren von einer Kombination aus beidem: Grid für die gesamte Seitenstruktur, Flexbox für die Ausrichtung auf Komponentenebene.
Kann ich Flexbox und Grid zusammen verwenden?
Ja, Flexbox und Grid können perfekt zusammenarbeiten, und dies ist der empfohlene Ansatz. Grid für das Makro-Layout (Seitenbereiche, Kartenraster), Flexbox für das Mikro-Layout (Navigationselemente, Schaltflächengruppen, Karteninhaltsausrichtung). Sie sind komplementär, nicht konkurrierend.
Ist CSS Grid besser als Flexbox?
Keines ist universell besser. Grid zeichnet sich durch zweidimensionale Layouts mit präziser Zeilen- und Spaltensteuerung aus, während Flexbox bei der eindimensionalen Inhaltsverteilung und -ausrichtung überlegen ist. Grid gibt Ihnen mehr explizite Platzierungskontrolle; Flexbox ist flexibler für dynamische Inhalte. Wählen Sie basierend auf Ihren Layoutanforderungen.
Wird CSS Grid in allen Browsern unterstützt?
CSS Grid wird in allen modernen Browsern unterstützt, einschließlich Chrome, Firefox, Safari und Edge. Die Unterstützung ist seit 2017 universell. Internet Explorer 11 hat eine teilweise Implementierung mit dem -ms--Präfix, aber Microsoft unterstützt IE nicht mehr. Für die moderne Webentwicklung hat Grid vollständige Browser-Unterstützung.
Wann sollte ich CSS Grid vermeiden?
Vermeiden Sie Grid für einfache eindimensionale Layouts, bei denen Flexbox einfacher und angemessener ist, wie das Zentrieren eines einzelnen Elements, das Ausrichten von Navigationselementen in einer Zeile oder das Verteilen von Platz zwischen wenigen Geschwisterelementen. Vermeiden Sie Grid auch, wenn die Inhaltsgröße das Layout bestimmen sollte und nicht die Rasterstruktur die Inhaltsplatzierung.
ToolHub's collection of 300+ free online tools including CSS grid generators, flexbox tools, and more — no sign-up required.