Subgrid und Masonry kombinieren: komplexe Rasterlayouts ausrichten
AI generated
{ }
@
CSS · Grid · Subgrid · Masonry
Subgrid und Masonry kombinieren
Karten-Raster mit ungleicher Höhe und trotzdem ausgerichteten inneren Elementen

Masonry-Layout packt Karten unterschiedlicher Höhe platzsparend zusammen, subgrid richtet innere Elemente präzise an den Spurenrastern eines übergeordneten Grids aus. Kombiniert lösen beide Techniken ein Problem, das reines Flexbox oder ein einfaches Grid allein nicht schafft, allerdings nur unter genauer Kenntnis dessen, was Masonry heute wirklich unterstützt und was nicht.

17 Min. Lesezeit grid-template-rows: masonry subgrid · Browser-Support-Realität

1. Das Problem: ungleiche Kartenhöhen und trotzdem ausgerichtete Inhalte

Ein Karten-Raster mit Artikelvorschauen unterschiedlicher Textlänge erzeugt bei klassischem CSS Grid entweder große Lücken, wenn jede Zeile auf die höchste Karte gestreckt wird, oder ein unruhiges Bild, wenn Karten frei fließen. Ein Masonry-Layout im Pinterest-Stil packt jede Karte in die aktuell kürzeste Spalte und vermeidet damit unnötige Lücken, ohne künstlich alle Karten auf dieselbe Höhe zu zwingen.

Gleichzeitig soll aber eine breitere, hervorgehobene Karte, die zwei Spalten überspannt, ihre eigenen inneren Elemente wie Titel, Meta-Zeile und Call-to-Action-Button exakt an denselben Spaltenlinien ausrichten, die auch die restlichen, einspaltigen Karten nutzen. Genau dafür braucht es subgrid, das eine verschachtelte Grid-Struktur an den Spurenraster des äußeren Grids ankoppelt, statt ein eigenes, unabhängiges Koordinatensystem zu öffnen.

2. Subgrid in Kürze: verschachtelte Grids an den Eltern-Raster koppeln

Normalerweise öffnet jedes verschachtelte display: grid-Element sein eigenes, unabhängiges Koordinatensystem aus Spalten und Zeilen, das nichts mit dem Spurenraster des umgebenden Grids zu tun hat. Der Wert subgrid für grid-template-columns oder grid-template-rows ändert das grundlegend: Ein Grid-Element, das selbst mehrere Spuren des Eltern-Grids überspannt, kann diese Spuren direkt übernehmen, statt eigene, potenziell abweichende Spurenbreiten zu definieren.

Das Ergebnis ist eine präzise Ausrichtung über Komponentengrenzen hinweg, die vorher nur mit manuell synchronisierten, fest kodierten Breitenwerten oder mit CSS Custom Properties nachgebildet werden konnte. Für Karten, Formulare oder Tabellenzeilen, die sich intern nach demselben Raster wie ihre Umgebung ausrichten sollen, ist subgrid inzwischen breit unterstützt und produktionsreif.

3. Masonry-Layout in Kürze: grid-template-rows: masonry

Das experimentelle Masonry-Layout wird über grid-template-rows: masonry aktiviert und weist den Browser an, die Zeilen-Achse eines Grids nicht mehr nach dem klassischen Grid-Algorithmus mit gleich hohen Zeilenspuren zu berechnen, sondern jedes Element in die Spalte mit dem aktuell wenigsten belegten Platz einzusortieren, ähnlich wie es JavaScript-Bibliotheken für Pinterest-artige Layouts seit Jahren manuell umsetzen.

Wichtig ist dabei eine oft übersehene Eigenschaft der Spezifikation: Masonry verändert ausschließlich die Achse, auf die es angewendet wird, in diesem Fall die Zeilen. Die Spalten-Achse bleibt ein ganz normales, explizites Spurenraster, definiert wie gewohnt über grid-template-columns. Genau diese Eigenschaft ist der Schlüssel dafür, dass sich Masonry und subgrid überhaupt sinnvoll kombinieren lassen.

4. Die Schlüsselerkenntnis: Masonry betrifft nur eine Achse, subgrid kann die andere nutzen

Weil ein Masonry-Grid mit grid-template-rows: masonry seine Spalten-Achse unverändert als reguläres, explizites Spurenraster behält, kann ein Kind-Element, das mehrere dieser Spalten überspannt, sein eigenes grid-template-columns: subgrid setzen und die Spaltenlinien direkt vom Eltern-Grid übernehmen. Die Zeilen-Achse dagegen bleibt für subgrid ungeeignet, weil Masonry dort keine festen, benennbaren Spuren erzeugt, sondern eine dynamische Packungslogik anwendet.

In der Praxis bedeutet das: subgrid funktioniert in einem Masonry-Kontext ausschließlich für die Spalten-Ausrichtung von Elementen, die mehrere Spalten überspannen, niemals für eine Zeilen-Ausrichtung. Diese Einschränkung ist keine Fehlerquelle, sondern folgt direkt aus der Funktionsweise von Masonry und sollte beim Layout-Entwurf von Anfang an mitgedacht werden, statt später als Überraschung aufzutauchen.

5. Konkretes Beispiel: eine hervorgehobene Karte mit subgrid-Spalten in einem Masonry-Raster

Das folgende Beispiel zeigt ein vierspaltiges Masonry-Raster, in dem eine hervorgehobene Karte zwei Spalten überspannt. Diese Karte nutzt grid-template-columns: subgrid, um ihre interne Aufteilung aus Bild, Titel und Call-to-Action exakt an den beiden überspannten Spalten des äußeren Grids auszurichten, statt eine eigene, unabhängige Zweispalten-Aufteilung zu berechnen.

Weil die Zeilen-Achse des äußeren Grids durch masonry dynamisch gepackt wird, bekommt die Karte ihre eigene Höhe intern über ein reguläres grid-template-rows, unabhängig vom Eltern-Grid. Nur die Spalten-Ausrichtung wird geerbt, die Höhe bleibt komponenteneigen und passt sich dem tatsächlichen Karteninhalt an.


.card-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: masonry;
  gap: 1.5rem;
}

.card--featured {
  grid-column: span 2;
  display: grid;
  grid-template-columns: subgrid;   /* uebernimmt die 2 Spuren des Eltern-Grids */
  grid-template-rows: auto 1fr auto; /* eigene Zeilen, unabhaengig vom Masonry-Grid */
  gap: 1rem;
}

.card--featured .card-title {
  grid-column: 1 / -1;
}

.card--featured .card-meta {
  grid-column: 1;
}

.card--featured .card-cta {
  grid-column: 2;
  justify-self: end;
}

6. Ein vollständiges Karten-Raster mit Standard- und subgrid-Karten

In einem realen Projekt bestehen die meisten Karten eines Rasters aus einfachen, einspaltigen Elementen, die kein subgrid brauchen, weil sie ohnehin nur eine einzelne Spalten-Spur belegen. Subgrid lohnt sich gezielt für die Minderheit an mehrspaltigen, hervorgehobenen Karten, während der Rest des Rasters ganz normal ohne verschachtelte Grid-Deklaration auskommt.

Diese gemischte Architektur, ein Masonry-Grid als Basis mit vereinzelten subgrid-Karten für Sonderfälle, hält den Code übersichtlich und stellt sicher, dass subgrid nur dort eingesetzt wird, wo es tatsächlich einen Mehrwert bringt, nämlich bei Elementen, die mehrere Spuren des Eltern-Grids überspannen.


.card {
  /* normale Karte: keine subgrid-Deklaration noetig */
  grid-column: span 1;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.card-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: masonry;
  gap: 1.5rem;
  align-tracks: start; /* verhindert vertikales Strecken innerhalb einer Masonry-Spur */
}

7. Browser-Support-Realität: warum die volle Kombination heute noch selten funktioniert

Subgrid selbst ist inzwischen breit in allen aktuellen Versionen von Chrome, Firefox und Safari verfügbar und gilt als produktionsreif. Masonry dagegen ist deutlich weniger weit fortgeschritten: grid-template-rows: masonry ist bislang primär in Firefox experimentell implementiert, während andere Browser-Engines einen alternativen Ansatz namens Item-Flow-Layout verfolgen, der syntaktisch und konzeptionell nicht identisch ist.

Diese Divergenz bedeutet, dass eine echte, spezifikationskonforme Kombination aus Masonry und subgrid derzeit realistisch nur in einem einzigen Browser vollständig funktioniert, während sie in allen anderen entweder komplett ignoriert wird oder auf einen abweichenden Mechanismus trifft. Für produktive Projekte ist das ein entscheidender Unterschied zu subgrid alleine, das längst breit einsetzbar ist.

8. Fallback-Strategie: ein normales Grid ohne Masonry als solide Basis

Der zuverlässigste Ansatz ist, das Layout grundsätzlich mit einem regulären, nicht-experimentellen Grid zu bauen, bei dem alle Karten in derselben Zeile dieselbe Höhe haben, und Masonry ausschließlich als progressive Verbesserung über eine Feature-Query nachzurüsten. Subgrid funktioniert dabei unabhängig vom Masonry-Fallback weiterhin normal, weil es nicht an die Zeilen-Achse gebunden ist, sondern rein die Spalten-Ausrichtung betrifft.

Diese Strategie liefert in jedem Browser ein funktionales, wenn auch nicht perfekt platzsparendes Ergebnis, während Nutzer eines Browsers mit Masonry-Unterstützung automatisch das dichter gepackte, optisch dynamischere Layout erhalten. Wichtig ist, im Fallback-Zweig keine Höhen hart zu kodieren, sondern weiterhin mit auto-Spuren zu arbeiten, damit der Übergang zwischen beiden Varianten visuell nicht abrupt wirkt.


.card-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: auto;   /* solide Basis: alle Karten in einer Zeile teilen die Hoehe */
  gap: 1.5rem;
}

@supports (grid-template-rows: masonry) {
  .card-grid {
    grid-template-rows: masonry;
  }
}

9. Praxisempfehlung: wann sich die Kombination heute schon lohnt

Für interne Tools, Prototypen oder Projekte mit einer klar auf einen einzigen Browser eingeschränkten Zielgruppe, etwa ein internes Firefox-basiertes Dashboard, kann die volle Kombination aus Masonry und subgrid schon heute produktiv eingesetzt werden. Für öffentlich zugängliche Websites mit gemischtem Browser-Publikum bleibt die Kombination aus solidem Grid-Fallback und progressiver Masonry-Verbesserung der pragmatischere Weg.

Subgrid für die Spalten-Ausrichtung hervorgehobener Karten lässt sich davon unabhängig schon jetzt bedenkenlos produktiv einsetzen, unabhängig davon, ob Masonry überhaupt zum Einsatz kommt, weil subgrid selbst längst breite Unterstützung genießt. Wer heute JavaScript-Masonry-Bibliotheken durch native Lösungen ersetzen will, sollte das native Masonry deshalb konsequent hinter einer Feature-Query verstecken und nicht als einzige Lösung ausliefern.

Layout-Strategie Ungleiche Höhen packen Innere Ausrichtung über Karten hinweg Browser-Support
grid-template-rows: masonry + subgrid Ja, dicht gepackt Ja, über subgrid-Spalten Nur experimentell, primär Firefox
Reguläres Grid mit gleicher Zeilenhöhe Nein, Lücken durch höchste Karte Ja, über normale Spuren Vollständig, alle aktuellen Browser
CSS Multi-Column (columns) Ja, ähnlich Masonry-Optik Nein, keine Zeilen-Ausrichtung möglich Vollständig, alle aktuellen Browser
Flexbox mit flex-wrap Nein, Zeilenhöhe folgt der höchsten Karte Bedingt, ohne echtes Spurenraster Vollständig, alle aktuellen Browser
JavaScript-Masonry-Bibliothek Ja, dicht gepackt Ja, mit manueller Zusatzlogik Vollständig, aber zusätzliches JS-Bundle

Mironsoft

Modernes CSS, Layout-Architektur und Rendering-Performance

CSS, das wartbar bleibt statt mit jeder Änderung zu brechen?

Wir prüfen bestehende Stylesheets auf Spezifitäts-Chaos und Layout-Thrashing und bauen daraus eine CSS-Architektur mit Cascade Layers, Custom Properties und modernen Layout-Primitiven, die auch nach dem zehnten Feature noch verständlich ist.

CSS-Audit

Spezifität, Cascade-Konflikte und ungenutzte Selektoren systematisch aufdecken.

Architektur-Refactoring

Cascade Layers, Custom Properties und Design Tokens sauber einführen.

Performance-Tuning

Layout-Thrashing, teure Selektoren und Rendering-Engpässe gezielt beheben.

10. Zusammenfassung

Subgrid und Masonry kombiniert: Das Wichtigste auf einen Blick

Kernidee

Masonry verändert nur eine Achse (meist Zeilen), die andere Achse bleibt ein reguläres Spurenraster, das subgrid weiterhin nutzen kann.

Subgrid-Rolle

grid-template-columns: subgrid richtet mehrspaltige, hervorgehobene Karten exakt an den Spalten des Masonry-Grids aus.

Support-Realität

Subgrid ist breit unterstützt, Masonry aktuell primär in Firefox experimentell, andere Engines verfolgen einen abweichenden Ansatz.

Fallback-Strategie

Reguläres Grid als Basis, Masonry per @supports(grid-template-rows: masonry) als progressive Verbesserung nachrüsten.

11. FAQ: Subgrid und Masonry kombiniert: Das Wichtigste auf einen Blick

1Kann ich subgrid direkt auf der Zeilen-Achse eines Masonry-Grids nutzen?
Nein. Masonry ersetzt die Zeilen-Achse durch eine dynamische Packungslogik ohne feste, benennbare Spuren, sodass subgrid dort nichts zu übernehmen hätte. Subgrid funktioniert in diesem Kontext nur auf der unverändert gebliebenen Spalten-Achse.
2Warum bleibt die Spalten-Achse bei grid-template-rows: masonry unverändert?
Weil sich der Wert masonry ausschließlich auf die Achse auswirkt, für die er gesetzt wird. Die andere Achse behält ihr reguläres, explizites Spurenraster aus grid-template-columns.
3Wofür lohnt sich subgrid in einem Masonry-Raster konkret?
Vor allem für mehrspaltige, hervorgehobene Karten, deren interne Elemente wie Titel, Meta-Zeile und Button exakt an denselben Spaltenlinien wie die restlichen Karten ausgerichtet werden sollen.
4Unterstützen alle Browser die Kombination aus Masonry und subgrid?
Nein. Subgrid ist breit unterstützt, Masonry über grid-template-rows: masonry aktuell primär in Firefox experimentell implementiert. Andere Engines verfolgen einen eigenen, abweichenden Ansatz namens Item-Flow-Layout.
5Wie baue ich einen sicheren Fallback für Browser ohne Masonry-Unterstützung?
Mit einem regulären Grid als Basis, bei dem alle Karten in einer Zeile dieselbe Höhe haben, und einer @supports(grid-template-rows: masonry)-Abfrage, die Masonry nur dort aktiviert, wo der Browser es versteht.
6Funktioniert subgrid im Fallback-Grid genauso wie im Masonry-Grid?
Ja, weil subgrid unabhängig davon funktioniert, ob die Zeilen-Achse des Eltern-Grids regulär oder per Masonry gepackt ist. Nur die Spalten-Ausrichtung wird vererbt, unabhängig vom Zeilenverhalten.
7Ist CSS Multi-Column eine gute Alternative zu Masonry?
Optisch ähnlich, aber ohne echte Zeilen-Ausrichtung zwischen den Spalten, was subgrid für innere Elemente unmöglich macht. Für reine Packungsoptik ohne Ausrichtungsanspruch ist Multi-Column trotzdem eine robuste, breit unterstützte Option.
8Sollte ich JavaScript-Masonry-Bibliotheken jetzt schon ersetzen?
Für Projekte mit breitem Browser-Publikum noch nicht vollständig, solange native Masonry-Unterstützung auf einen einzigen Browser beschränkt bleibt. Ein Fallback-Grid mit progressiver Verbesserung ist der pragmatischere Zwischenschritt.
9Kann eine hervorgehobene Karte mehrere Zeilen statt Spalten überspannen?
Ja, aber dann kann sie kein subgrid für die Zeilen-Achse nutzen, solange diese von Masonry kontrolliert wird. Die Höhe einer solchen Karte muss weiterhin über eine eigene, unabhängige grid-template-rows-Definition gesteuert werden.
10Wie teste ich, ob ein Browser Masonry unterstützt?
Mit der Feature-Query @supports(grid-template-rows: masonry) im CSS, oder programmatisch mit CSS.supports('grid-template-rows', 'masonry') in JavaScript, falls die Information zur Laufzeit gebraucht wird.