Mauerwerkslayout
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Stufe 3 der CSS Grid Layout-Spezifikation umfasst einen masonry-Wert für grid-template-columns und grid-template-rows. Dieser Leitfaden beschreibt, was ein Mauerwerkslayout ist und wie es verwendet wird.
Das Mauerwerkslayout ist eine Layoutmethode, bei der eine Achse ein typisches striktes Gitternetzlayout verwendet, meist Spalten, und die andere ein Mauerwerkslayout. Auf der Mauerwerksachse halten sich die Elemente nicht an ein striktes Gitternetz, bei dem Lücken nach kürzeren Elementen verbleiben. Stattdessen werden die Elemente in der folgenden Reihe nach oben verschoben, um die Lücken vollständig zu füllen.
Erstellen eines Mauerwerkslayouts
Um das häufigste Mauerwerkslayout zu erstellen, sind Ihre Spalten die Gitterachse und die Zeilen die Mauerwerksachse, definiert mit grid-template-columns und grid-template-rows. Die Kind-Elemente dieses Containers legen sich nun Element für Element entlang der Zeilen an, wie sie es auch bei der automatischen Platzierung von regulären Gitterlayouts tun würden.
Wenn die Elemente in neue Zeilen verschoben werden, erfolgt ihre Anzeige gemäß dem Mauerwerksalgorithmus. Die Elemente laden in die Spalte mit dem meisten Platz, was zu einem dicht gepackten Layout ohne strikte Reihenabstände führt.
.grid {
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
grid-template-rows: masonry;
}
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
// prettier-ignore
const itemSizes = [
"2em", "3em", "1.6em", "4em", "3.2em",
"3em", "4.5em", "1em", "3.5em", "2.8em",
];
const items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
items[i].style.blockSize = itemSizes[i];
}
Es ist auch möglich, ein Mauerwerkslayout zu erstellen, bei dem die Elemente in die Zeilen geladen werden.
// prettier-ignore
const itemSizes = [
"2em", "3em", "1.6em", "4em", "2.2em",
"3em", "4.5em", "1em", "3.5em", "2.8em",
];
const items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
items[i].style.inlineSize = itemSizes[i];
}
.grid {
display: grid;
gap: 10px;
grid-template-columns: masonry;
grid-template-rows: repeat(3, 100px);
}
Steuerung der Gitterachse
Auf der Gitterachse funktionieren die Dinge wie erwartet im Gitterlayout. Sie können Elemente dazu bringen, mehrere Spuren zu überbrücken, während sie in der automatischen Platzierung bleiben, indem Sie das Stichwort span verwenden. Elemente können auch mithilfe der linienbasierten Positionierung platziert werden.
Mauerwerkslayout mit übergreifenden Elementen
In diesem Beispiel spannen zwei der Elemente über zwei Spuren, und die Mauerwerkselemente arbeiten um sie herum.
<div class="grid">
<div class="item"></div>
<div class="item span-2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item span-2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
.grid {
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
grid-template-rows: masonry;
}
.span-2 {
grid-column-end: span 2;
}
Dieses Beispiel enthält ein Element, das eine Positionierung für Spalten aufweist. Elemente mit bestimmter Platzierung werden platziert, bevor das Mauerwerkslayout erfolgt.
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item positioned">positioned.</div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
.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 Mauerwerkslayout
In Browsern die kein Mauerwerk unterstützen, wird stattdessen die reguläre Gitter-Autoplatzierung verwendet.
Spezifikationen
| Specification |
|---|
| CSS Grid Layout Module Level 3> # masonry-layout> |
Browser-Kompatibilität
>css.properties.grid-template-columns.masonry
css.properties.grid-template-rows.masonry
Siehe auch
grid-auto-flowzur Steuerung der automatischen Gitterplatzierung- Native CSS masonry layout in CSS grid über Smashing Magazine (2020)