Masonry-Layout

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Level 3 der CSS Grid Layout-Spezifikation beinhaltet einen masonry-Wert für grid-template-columns und grid-template-rows. Dieser Leitfaden erklärt, was ein Masonry-Layout ist und wie es verwendet wird.

Ein Masonry-Layout ist eine Layoutmethode, bei der eine Achse ein typisches strenges Grid-Layout verwendet, meist Spalten, und die andere eine Masonry-Layout-Methode anwendet. Auf der Masonry-Achse wird anstelle eines strengen Rasters mit Freiräumen nach kürzeren Elementen die nächste Zeile so verschoben, dass diese Lücken vollständig gefüllt werden.

Erstellung eines Masonry-Layouts

Um das häufigste Masonry-Layout zu erstellen, werden Ihre Spalten die Grid-Achse und die Zeilen die Masonry-Achse, definiert mit grid-template-columns und grid-template-rows. Die Kind-Elemente dieses Containers werden nun Element für Element entlang der Zeilen angeordnet, wie sie es auch bei der automatischen Platzierung eines regulären Grid-Layouts tun würden.

Wenn die Elemente auf neue Zeilen gelangen, werden sie entsprechend dem Masonry-Algorithmus angezeigt. Elemente werden in die Spalte mit dem meisten Platz geladen, wodurch ein dicht gepacktes Layout ohne strikte Zeilenraster entsteht.

css
.grid {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  grid-template-rows: masonry;
}
html
<div class="grid">
  <div class="item" style="block-size: 2em;"></div>
  <div class="item" style="block-size: 3em;"></div>
  <div class="item" style="block-size: 1.6em;"></div>
  <div class="item" style="block-size: 4em;"></div>
  <div class="item" style="block-size: 2.2em;"></div>
  <div class="item" style="block-size: 3em;"></div>
  <div class="item" style="block-size: 4.5em;"></div>
  <div class="item" style="block-size: 1em;"></div>
  <div class="item" style="block-size: 3.5em;"></div>
  <div class="item" style="block-size: 2.8em;"></div>
</div>

Es ist auch möglich, ein Masonry-Layout zu erstellen, bei dem die Elemente in Zeilen geladen werden.

css
.grid {
  display: grid;
  gap: 10px;
  grid-template-columns: masonry;
  grid-template-rows: repeat(3, 100px);
}

Steuerung der Grid-Achse

Auf der Grid-Achse funktionieren Dinge genau so, wie Sie es von einem Grid-Layout erwarten würden. Sie können Elemente mit dem Schlüsselwort span über mehrere Rasterschritte hinweg spannen lassen, während sie in der automatischen Platzierung bleiben. Elemente können auch mit zeilenbasierten Positionierungen platziert werden.

Masonry-Layout mit überlappenden Elementen

In diesem Beispiel spannen zwei der Elemente über zwei Rasterschritte, und die Masonry-Elemente ordnen sich um diese herum an.

html
<div class="grid">
  <div class="item" style="block-size: 2em;"></div>
  <div class="item" style="block-size: 3em; grid-column-end: span 2;"></div>
  <div class="item" style="block-size: 1.6em;"></div>
  <div class="item" style="block-size: 4em;"></div>
  <div class="item" style="block-size: 2.2em; grid-column-end: span 2"></div>
  <div class="item" style="block-size: 3em;"></div>
  <div class="item" style="block-size: 4.5em;"></div>
  <div class="item" style="block-size: 1em;"></div>
  <div class="item" style="block-size: 3.5em;"></div>
  <div class="item" style="block-size: 2.8em;"></div>
</div>
css
.grid {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  grid-template-rows: masonry;
}

Dieses Beispiel enthält ein Element, das für Spalten positioniert ist. Elemente mit definierter Platzierung werden positioniert, bevor das Masonry-Layout durchgeführt wird.

html
<div class="grid">
  <div class="item" style="block-size: 2em;"></div>
  <div class="item" style="block-size: 3em;"></div>
  <div class="item" style="block-size: 1.6em;"></div>
  <div class="item" style="block-size: 4em;"></div>
  <div class="item positioned" style="block-size: 3.2em;">positioned.</div>
  <div class="item" style="block-size: 3em;"></div>
  <div class="item" style="block-size: 4.5em;"></div>
  <div class="item" style="block-size: 1em;"></div>
  <div class="item" style="block-size: 3.5em;"></div>
  <div class="item" style="block-size: 2.8em;"></div>
</div>
css
.grid {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  grid-template-rows: masonry;
}

.positioned {
  padding: 1em;
  grid-column: 2 / 4;
}

Fallbacks für Masonry-Layout

In Browsern, die Masonry nicht unterstützen, wird stattdessen die reguläre automatische Grid-Platzierung verwendet.

Browser-Kompatibilität

css.properties.grid-template-columns.masonry

BCD tables only load in the browser

css.properties.grid-template-rows.masonry

BCD tables only load in the browser

Siehe auch