Responsive Layouts mit CSS Grid: Tutorial mit minmax und auto-fit
So baust du Grid-Layouts, die sich ohne ein Dutzend Media Queries an jede Bildschirmbreite anpassen, von der Karten-Galerie bis zum kompletten Seitengerüst.
Responsives Webdesign hieß lange Zeit: viele Breakpoints, viele Media Queries, viel Pflegeaufwand. CSS Grid dreht dieses Prinzip um. Mit den Funktionen repeat(), minmax() und den Schlüsselwörtern auto-fit beziehungsweise auto-fill entstehen Layouts, die sich von selbst an die verfügbare Breite anpassen. Du beschreibst nicht mehr, was bei genau 768 Pixeln passiert, sondern definierst Regeln, nach denen der Browser die Spalten eigenständig berechnet. Dieses Tutorial zeigt Schritt für Schritt, wie das funktioniert, wo die Stolperfallen liegen und wann klassische Media Queries trotzdem die bessere Wahl bleiben.
Alle Beispiele kannst du direkt im CSS Grid Generator nachbauen und live ausprobieren, ohne etwas zu installieren. Die Werte sind so gewählt, dass sie sich eins zu eins in eigene Projekte übernehmen lassen.
Das Grundprinzip: intrinsisch responsiv statt breakpoint-getrieben
Der klassische Ansatz fragt: Wie breit ist der Bildschirm? Der moderne Grid-Ansatz fragt: Wie viel Platz ist im Container, und wie viele sinnvoll breite Spalten passen da hinein? Diesen Stil nennt man intrinsisch responsiv, weil das Layout auf den tatsächlich verfügbaren Raum reagiert und nicht auf eine willkürliche Viewport-Schwelle. Der entscheidende Baustein dafür ist eine einzige Zeile:
.galerie {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
} Diese vier Zeilen ergeben eine Karten-Galerie, die auf einem breiten Monitor vier oder fünf Spalten zeigt, auf einem Tablet zwei bis drei und auf dem Smartphone eine einzige, ohne eine einzige Media Query. Der Browser teilt die Containerbreite immer wieder durch die geforderte Mindestbreite und legt entsprechend viele Spalten an. Damit das verständlich wird, sehen wir uns die drei beteiligten Funktionen einzeln an.
minmax(): die flexible Spurenbreite
minmax(min, max) definiert eine Spalten- oder Zeilenspur mit zwei Grenzen. Die Spur darf nie kleiner als der erste Wert und nie größer als der zweite Wert werden. minmax(250px, 1fr) bedeutet also: mindestens 250 Pixel breit, und wenn mehr Platz da ist, wächst die Spur flexibel auf ihren fr-Anteil. Die Einheit fr (fraction) verteilt den Restplatz, nachdem feste Größen und Abstände abgezogen wurden. Wer die fr-Einheit genauer verstehen will, findet die Details im Ratgeber zur fr-Einheit.
Ein fester Pixelwert als Mindestbreite kann auf sehr schmalen Geräten zum horizontalen Scrollen führen. Schreibe statt minmax(250px, 1fr) lieber minmax(min(250px, 100%), 1fr). Die innere min()-Funktion sorgt dafür, dass eine Spalte nie breiter als der Container wird, selbst wenn nur 200 Pixel zur Verfügung stehen.
auto-fit vs auto-fill: der wichtigste Unterschied
Beide Schlüsselwörter sagen dem Browser, dass er die Spaltenanzahl selbst bestimmen soll. Der Unterschied zeigt sich nur, wenn weniger Items vorhanden sind, als Spalten in eine Zeile passen würden. auto-fill legt trotzdem alle möglichen Spalten an und lässt die überzähligen leer, es bleiben also sichtbare Lücken am Zeilenende. auto-fit kollabiert diese leeren Spuren auf die Breite 0, sodass die vorhandenen Karten den gesamten Platz ausfüllen und sich gleichmäßig verteilen.
Faustregel: Sollen die vorhandenen Karten den Platz möglichst ausfüllen, nimm auto-fit. Soll dagegen die Spaltenbreite konstant bleiben und am Ende Platz für künftige Items reserviert werden, ist auto-fill richtig. Im Zweifel ist auto-fit für Galerien und Karten-Raster die häufiger gewünschte Variante.
Die Werkzeuge im Überblick
| Funktion | Bedeutung | Typischer Einsatz |
|---|---|---|
repeat(n, ...) | Wiederholt ein Spurenmuster n-mal | Kompakte Schreibweise für gleiche Spalten |
auto-fit | Erzeugt so viele Spalten wie möglich, leere kollabieren | Karten füllen den Raum vollständig |
auto-fill | Wie auto-fit, leere Spuren bleiben aber bestehen | Gleichbleibende Spaltenbreite, Platz für mehr Items |
minmax(a, b) | Spur zwischen Mindest- und Maximalbreite | Flexible, aber begrenzte Spaltenbreite |
min(a, b) | Kleinerer der beiden Werte | Mindestbreite gegen Überlauf absichern |
Komplettes Beispiel: eine responsive Karten-Galerie
Hier ein lauffähiges, vollständiges Beispiel. Kopiere es in eine HTML-Datei, öffne sie im Browser und ändere die Fensterbreite: Die Spaltenzahl passt sich stufenlos an, von einer bis zu mehreren Spalten.
<style>
.galerie {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));
gap: 1rem;
padding: 1rem;
}
.karte {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 12px;
padding: 1.25rem;
}
</style>
<div class="galerie">
<div class="karte">Karte 1</div>
<div class="karte">Karte 2</div>
<div class="karte">Karte 3</div>
<div class="karte">Karte 4</div>
<div class="karte">Karte 5</div>
<div class="karte">Karte 6</div>
</div>
Der entscheidende Teil ist repeat(auto-fit, minmax(min(220px, 100%), 1fr)). Das min(220px, 100%) verhindert horizontales Scrollen auf schmalen Geräten, auto-fit sorgt für volle Zeilen, und 1fr verteilt den Restplatz gleichmäßig. Mehr Aufwand braucht eine moderne Karten-Galerie nicht.
Wann Media Queries trotzdem sinnvoll sind
Für reine Spaltenanzahl sind Media Queries mit Grid oft überflüssig. Sobald sich aber die Struktur des Layouts ändern soll, kommen sie zurück ins Spiel. Ein klassisches Beispiel ist das Seitengerüst mit Kopfzeile, Seitenleiste, Inhalt und Fußzeile, das auf dem Desktop nebeneinander, auf dem Smartphone aber untereinander stehen soll. Hier helfen benannte Bereiche mit grid-template-areas in Kombination mit einer Media Query:
.seite {
display: grid;
gap: 1rem;
grid-template-areas:
"kopf"
"inhalt"
"leiste"
"fuss";
}
@media (min-width: 768px) {
.seite {
grid-template-columns: 220px 1fr;
grid-template-areas:
"kopf kopf"
"leiste inhalt"
"fuss fuss";
}
} Auf kleinen Bildschirmen erscheinen alle Bereiche gestapelt, ab 768 Pixeln rückt die Seitenleiste neben den Inhalt. Diese strukturelle Umordnung lässt sich mit auto-fit nicht ausdrücken, weil dabei nicht nur die Spaltenzahl, sondern die Anordnung der Bereiche wechselt. Faustregel: auto-fit und minmax für gleichartige Elemente, Media Queries für strukturelle Layoutwechsel.
Grid kann Items visuell umordnen, etwa mit order oder über die Platzierung in Areas. Die Vorlesereihenfolge von Screenreadern und die Tab-Reihenfolge richten sich aber weiter nach der Quellcode-Reihenfolge im HTML. Weichen visuelle und logische Ordnung stark voneinander ab, entstehen Barrieren. Halte die DOM-Reihenfolge möglichst nah an der Leserichtung. Mehr dazu im Ratgeber zu Browser-Support und Barrierefreiheit.
Häufige Fehler und wie du sie vermeidest
- Fester Pixel-Mindestwert ohne Absicherung.
minmax(300px, 1fr)läuft auf einem 320-Pixel-Viewport mit Padding über. Lösung:minmax(min(300px, 100%), 1fr). - auto-fill statt auto-fit bei wenigen Items. Du wunderst dich über große Lücken am Zeilenende. Meist willst du
auto-fit. - gap vergessen. Ohne
gapkleben die Karten aneinander.gapersetzt fehleranfällige Außenabstände an den Items. - Zu viele Media Queries. Wer für jede Spaltenzahl eine eigene Query schreibt, verschenkt den Vorteil von auto-fit. Eine Regel reicht oft aus.
- Höhenunterschiede ignoriert. Unterschiedlich hohe Karten richten sich standardmäßig an der höchsten aus. Mit
align-items: startbehält jede Karte ihre eigene Höhe.
Schneller zum Ziel mit dem Generator
Du musst die Syntax nicht auswendig kennen. Im CSS Grid Generator stellst du Spalten, minmax-Werte und gap visuell ein, schaltest zwischen Mobile-, Tablet- und Desktop-Vorschau um und exportierst sauberes CSS samt der passenden Media Queries. Das Tool läuft zu 100 Prozent lokal in deinem Browser, sendet keine Daten an einen Server und ist damit auch ohne Cookie-Banner DSGVO-konform nutzbar. So testest du auto-fit, auto-fill und minmax in Sekunden, statt Werte im Editor zu erraten.
Häufige Fragen zu responsivem CSS Grid
Wie erstelle ich ein responsives CSS Grid ohne Media Queries?
Mit der Kombination repeat(auto-fit, minmax(MIN, 1fr)) bei grid-template-columns. Der Browser legt automatisch so viele Spalten an, wie bei der jeweiligen Containerbreite hineinpassen, und verteilt den Restplatz gleichmäßig. Eine Media Query ist dafür nicht nötig.
Was ist der Unterschied zwischen auto-fit und auto-fill?
auto-fill behält leere Spaltenspuren bei, wenn nicht genug Items vorhanden sind, sodass Lücken am Zeilenende entstehen können. auto-fit kollabiert diese leeren Spuren auf 0, wodurch die vorhandenen Items den gesamten verfügbaren Platz ausfüllen. In den meisten Karten-Layouts ist auto-fit die gewünschte Variante.
Wofür steht minmax in CSS Grid?
minmax(min, max) definiert eine Spuren-Größe, die nie kleiner als min und nie größer als max wird. Typisch ist minmax(250px, 1fr): mindestens 250 Pixel breit, ansonsten flexibel wachsend bis zum gleichen Anteil wie die anderen Spalten.
Warum überläuft mein Grid auf schmalen Bildschirmen?
Meist ist der minmax-Mindestwert größer als der verfügbare Platz, etwa minmax(300px, 1fr) auf einem 320-Pixel-Viewport mit Padding. Verkleinere den Mindestwert oder nutze min(MIN, 100%) als untere Grenze, damit eine Spalte nie breiter als der Container wird.
Brauche ich für responsive Grids überhaupt noch Media Queries?
Für reine Spaltenanzahl meist nicht: auto-fit mit minmax passt sich stufenlos an. Media Queries bleiben sinnvoll, wenn sich das Layout strukturell ändern soll, etwa wenn eine Seitenleiste auf dem Smartphone unter den Hauptinhalt wandert oder sich grid-template-areas neu anordnen.
Funktioniert auto-fit mit minmax in allen aktuellen Browsern?
Ja. CSS Grid inklusive repeat(), auto-fit, auto-fill und minmax wird seit 2017 von allen gängigen Browsern (Chrome, Firefox, Safari, Edge) unterstützt und liegt laut Browser-Statistiken bei über 97 Prozent globaler Abdeckung. Ein Fallback ist nur für sehr alte Browser nötig.
Quellen und weiterführende Spezifikationen
- W3C: CSS Grid Layout Module Level 1, offizielle Spezifikation zu repeat(), auto-fit, auto-fill und minmax.
- MDN Web Docs: Auto-placement in CSS Grid Layout.
- MDN Web Docs: minmax().
- MDN Web Docs: Gängige Layouts mit Grid umsetzen.
- W3C WAI: WCAG 2.2, Understanding Meaningful Sequence (1.3.2), zur Quellordnung und Barrierefreiheit.
- Can I use: CSS Grid Layout, aktuelle Browser-Unterstützung.
Verwandte Artikel
Die Einheit fr in CSS Grid einfach erklärt
fr vs px vs Prozent vs auto: Wann nutzt man welche Einheit? Mit Mini-Beispielen direkt im Generator.
GrundlagenCSS Grid lernen: Der komplette Einsteiger-Leitfaden 2026
Container, Items, Zeilen und Spalten Schritt für Schritt, vom ersten Grid bis zum fertigen Layout.
VergleichCSS Grid vs Flexbox: Wann welches Layout?
Entscheidungshilfe mit Tabelle und Praxis-Szenarien: ein- oder zweidimensional, Komponente oder Seitenlayout.
Probier es direkt aus
Baue dein responsives Grid visuell, schalte die Geräte-Vorschau um und exportiere fertiges CSS. Kostenlos, ohne Anmeldung, 100 Prozent lokal im Browser.
Zum CSS Grid Generator