Mauerwerk-Layout

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Level 3 der CSS-Grid-Layout Spezifikation enthält einen masonry-Wert für grid-template-columns und grid-template-rows. Dieser Leitfaden beschreibt, was das Mauerwerk-Layout ist und wie man es verwendet.

Das Mauerwerk-Layout ist eine Layoutmethode, bei der eine Achse ein typisches striktes Rasterlayout verwendet, am häufigsten die Spalten, und die andere ein Mauerwerk-Layout. Auf der Mauerwerk-Achse, anstatt ein striktes Raster mit Lücken zu haben, die nach kürzeren Elementen bleiben, steigen die Elemente in der folgenden Reihe auf, um die Lücken vollständig zu füllen.

Erstellen eines Mauerwerk-Layouts

Um das häufigste Mauerwerk-Layout zu erstellen, werden Ihre Spalten die Rasterachse und die Reihen die Mauerwerk-Achse, definiert mit grid-template-columns und grid-template-rows. Die Kindelemente dieses Containers werden nun Element für Element entlang der Reihen angeordnet, wie sie es bei automatischer Platzierung im regulären Grid-Layout tun würden.

Wenn die Elemente in neue Reihen übergehen, werden sie gemäß dem Mauerwerk-Algorithmus angezeigt. Elemente werden in die Spalte geladen, die am meisten Platz bietet, was zu einem dicht gepackten Layout ohne strikte Zeilenführung führt.

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 Mauerwerk-Layout mit Elementen zu erstellen, die in Reihen geladen werden.

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

Steuerung der Rasterachse

Auf der Rasterachse funktioniert alles wie erwartet im Grid-Layout. Sie können Elemente über mehrere Tracks spannen lassen, während sie sich in der automatischen Platzierung befinden, indem Sie das span-Schlüsselwort verwenden. Elemente können auch mit Line-basierter Positionierung positioniert werden.

Mauerwerk-Layout mit übergreifenden Elementen

In diesem Beispiel spannen zwei der Elemente über zwei Tracks, und die Mauerwerk-Elemente arbeiten um sie herum.

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 Positionierung für Spalten hat. Elemente mit eindeutiger Platzierung werden vor der Ausführung des Mauerwerk-Layouts platziert.

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 Mauerwerk-Layout

In Browsern die Mauerwerk nicht unterstützen, wird stattdessen die reguläre automatische Rasterplatzierung 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