Hol dir das Poster!
Beziehst du dich oft auf diesen Leitfaden? Hier ist ein hochauflösendes Bild, das du drucken kannst!

Einführung in CSS Grid
CSS Grid Layout (auch „Grid“ oder „CSS Grid“ genannt) ist ein zweidimensionales, rasterbasiertes Layout-System, das im Vergleich zu jedem früheren Web-Layout-System die Art und Weise, wie wir Benutzeroberflächen gestalten, vollständig verändert. CSS wurde schon immer verwendet, um unsere Webseiten zu gestalten, aber es hat nie wirklich gute Arbeit geleistet. Zuerst verwendeten wir Tabellen, dann Floats, Positionierung und Inline-Block, aber all diese Methoden waren im Wesentlichen Hacks und ließen viele wichtige Funktionen (z.B. vertikale Zentrierung) außen vor. Flexbox ist ebenfalls ein sehr gutes Layout-Tool, aber sein unidirektionaler Fluss hat andere Anwendungsfälle — und sie arbeiten tatsächlich sehr gut zusammen! Grid ist das allererste CSS-Modul, das speziell entwickelt wurde, um die Layout-Probleme zu lösen, mit denen wir uns seit Beginn der Website-Erstellung herumgeschlagen haben.
Die Absicht dieses Leitfadens ist es, die Grid-Konzepte so darzustellen, wie sie in der neuesten Version der Spezifikation existieren. Ich werde daher die veraltete Internet Explorer-Syntax (obwohl Sie Grid in IE 11 absolut verwenden können) oder andere historische Hacks nicht behandeln.
CSS Grid Grundlagen
Ab März 2017 haben die meisten Browser native, präfixfreie Unterstützung für CSS Grid ausgeliefert: Chrome (einschließlich auf Android), Firefox, Safari (einschließlich auf iOS) und Opera. Internet Explorer 10 und 11 unterstützen es hingegen, aber es ist eine alte Implementierung mit einer veralteten Syntax. Die Zeit, mit Grid zu bauen, ist jetzt!
Um zu beginnen, müssen Sie ein Container-Element als Grid mit display: grid definieren, die Spalten- und Zeilengrößen mit grid-template-columns und grid-template-rows festlegen und dann dessen Kinderelemente mit grid-column und grid-row im Grid platzieren. Ähnlich wie bei Flexbox spielt die Quellreihenfolge der Grid-Elemente keine Rolle. Ihr CSS kann sie in beliebiger Reihenfolge platzieren, was es super einfach macht, Ihr Grid mit Media Queries neu anzuordnen. Stellen Sie sich vor, Sie definieren das Layout Ihrer gesamten Seite und ordnen es dann komplett neu an, um eine andere Bildschirmbreite mit nur wenigen Zeilen CSS zu berücksichtigen. Grid ist eines der mächtigsten CSS-Module, die jemals eingeführt wurden.
Wichtige CSS Grid Terminologie
Bevor wir uns mit den Konzepten von Grid befassen, ist es wichtig, die Terminologie zu verstehen. Da die hier verwendeten Begriffe alle konzeptionell ähnlich sind, ist es leicht, sie miteinander zu verwechseln, wenn man ihre in der Grid-Spezifikation definierten Bedeutungen nicht zuerst auswendig lernt. Aber keine Sorge, es gibt nicht viele davon.
Grid Container
Das Element, auf das display: grid angewendet wird. Es ist der direkte Elternteil aller Grid-Elemente. In diesem Beispiel ist container der Grid-Container.
<div class="container">
<div class="item item-1"> </div>
<div class="item item-2"> </div>
<div class="item item-3"> </div>
</div>
Grid Linie
Die Trennlinien, die die Struktur des Rasters bilden. Sie können entweder vertikal („Spaltenrasterlinien“) oder horizontal („Zeilenrasterlinien“) sein und sich auf beiden Seiten einer Zeile oder Spalte befinden. Hier ist die gelbe Linie ein Beispiel für eine Spaltenrasterlinie.
Grid Spur
Der Raum zwischen zwei benachbarten Rasterlinien. Man kann sie sich als Spalten oder Zeilen des Rasters vorstellen. Hier ist die Rasterspur zwischen der zweiten und dritten Zeilenrasterlinie.
Grid Bereich
Der gesamte Bereich, der von vier Rasterlinien umgeben ist. Ein Rasterbereich kann aus beliebig vielen Rasterzellen bestehen. Hier ist der Rasterbereich zwischen den Zeilenrasterlinien 1 und 3 sowie den Spaltenrasterlinien 1 und 3.
Grid Element
Die Kinder (d.h. *direkte* Nachfahren) des Rastercontainers. Hier sind die `item`-Elemente Rasterelemente, aber `sub-item` nicht.
<div class="container">
<div class="item"> </div>
<div class="item">
<p class="sub-item"> </p>
</div>
<div class="item"> </div>
</div>
Grid Zelle
Der Raum zwischen zwei benachbarten Zeilen- und zwei benachbarten Spaltenrasterlinien. Es ist eine einzelne "Einheit" des Rasters. Hier ist die Rasterzelle zwischen den Zeilenrasterlinien 1 und 2 sowie den Spaltenrasterlinien 2 und 3.
CSS Grid Eigenschaften
Eigenschaften für den Elternteil
(Grid-Container)
Sprunglinks
display
Definiert das Element als Grid-Container und etabliert einen neuen Grid-Formatierungskontext für dessen Inhalte.
Werte
grid– erzeugt ein block-level Gridinline-grid– erzeugt ein inline-level Grid
.container {
display: grid | inline-grid;
}
Die Möglichkeit, Grid-Parameter an verschachtelte Elemente (auch Subgrids genannt) weiterzugeben, wurde in Level 2 der CSS Grid-Spezifikation verschoben. Hier ist eine kurze Erklärung.
grid-template-columns
grid-template-rows
Definiert die Spalten und Zeilen des Rasters mit einer durch Leerzeichen getrennten Liste von Werten. Die Werte repräsentieren die Spurgröße, und der Raum dazwischen repräsentiert die Rasterlinie.
Werte
<track-size>– kann eine Länge, ein Prozentsatz oder ein Bruchteil des freien Raums im Raster sein, unter Verwendung derfrEinheit (mehr zu dieser Einheit bei DigitalOcean)<line-name>– ein beliebiger Name Ihrer Wahl
.container {
grid-template-columns: ... ...;
/* e.g.
1fr 1fr
minmax(10px, 1fr) 3fr
repeat(5, 1fr)
50px auto 100px 1fr
*/
grid-template-rows: ... ...;
/* e.g.
min-content 1fr min-content
100px 1fr max-content
*/
}
Rasterlinien erhalten automatisch positive Zahlen aus diesen Zuordnungen (wobei -1 eine Alternative für die allerletzte Zeile ist).
Sie können aber auch die Linien explizit benennen. Beachten Sie die Klammersyntax für die Liniendamen
.container {
grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}
Beachten Sie, dass eine Linie mehr als einen Namen haben kann. Zum Beispiel wird die zweite Linie hier zwei Namen haben: row1-end und row2-start
.container {
grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end];
}
Wenn Ihre Definition sich wiederholende Teile enthält, können Sie die repeat() Notation verwenden, um die Dinge zu optimieren
.container {
grid-template-columns: repeat(3, 20px [col-start]);
}
Was dem hier entspricht
.container {
grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start];
}
Wenn mehrere Linien denselben Namen teilen, können sie über ihren Liniendamen und ihre Anzahl referenziert werden.
.item {
grid-column-start: col-start 2;
}
Die fr Einheit ermöglicht es Ihnen, die Größe einer Spur als Bruchteil des freien Raums des Grid-Containers festzulegen. Zum Beispiel wird dies jedes Element auf ein Drittel der Breite des Grid-Containers setzen
.container {
grid-template-columns: 1fr 1fr 1fr;
}
Der freie Raum wird *nach* allen nicht-flexiblen Elementen berechnet. In diesem Beispiel enthält die Gesamtmenge des für die *fr*-Einheiten verfügbaren freien Raums nicht die 50px
.container {
grid-template-columns: 1fr 50px 1fr 1fr;
}
grid-template-areas
Definiert eine Rastervorlage, indem die Namen der Rasterbereiche referenziert werden, die mit der grid-area-Eigenschaft angegeben werden. Das Wiederholen des Namens eines Rasterbereichs führt dazu, dass der Inhalt diese Zellen überspannt. Ein Punkt kennzeichnet eine leere Zelle. Die Syntax selbst visualisiert die Struktur des Rasters.
Werte
<grid-area-name>– der Name eines mitgrid-areaangegebenen Rasterbereichs.– ein Punkt kennzeichnet eine leere Gitterzellenone– keine Rasterbereiche sind definiert
.container {
grid-template-areas:
"<grid-area-name> | . | none | ..."
"...";
}
Beispiel
.item-a {
grid-area: header;
}
.item-b {
grid-area: main;
}
.item-c {
grid-area: sidebar;
}
.item-d {
grid-area: footer;
}
.container {
display: grid;
grid-template-columns: 50px 50px 50px 50px;
grid-template-rows: auto;
grid-template-areas:
"header header header header"
"main main . sidebar"
"footer footer footer footer";
}
Das erstellt ein Raster mit vier Spalten und drei Zeilen. Die gesamte oberste Zeile wird aus dem Bereich header bestehen. Die mittlere Zeile wird aus zwei main-Bereichen, einer leeren Zelle und einem sidebar-Bereich bestehen. Die letzte Zeile ist komplett footer.
Jede Zeile in Ihrer Deklaration muss dieselbe Anzahl von Zellen haben.
Sie können beliebig viele benachbarte Punkte verwenden, um eine einzelne leere Zelle zu deklarieren. Solange keine Leerzeichen zwischen den Punkten stehen, repräsentieren sie eine einzelne Zelle.
Beachten Sie, dass Sie mit dieser Syntax keine Linien benennen, sondern nur Bereiche. Wenn Sie diese Syntax verwenden, erhalten die Linien an beiden Enden der Bereiche tatsächlich automatisch Namen. Wenn der Name Ihres Rasterbereichs **_foo_** ist, lautet der Name der Startzeilenlinie und der Startspaltenlinie des Bereichs **_foo_**-start, und der Name seiner letzten Zeilenlinie und letzten Spaltenlinie lautet **_foo_**-end. Dies bedeutet, dass einige Linien mehrere Namen haben können, wie die ganz linke Linie im obigen Beispiel, die drei Namen haben wird: header-start, main-start und footer-start.
grid-template
Eine Kurzschrift zum Festlegen von grid-template-rows, grid-template-columns und grid-template-areas in einer einzigen Deklaration.
Werte
none– setzt alle drei Eigenschaften auf ihre ursprünglichen Werte<grid-template-rows>/<grid-template-columns> – setztgrid-template-columnsundgrid-template-rowsauf die angegebenen Werte bzw. setztgrid-template-areasaufnone
.container {
grid-template: none | <grid-template-rows> / <grid-template-columns>;
}
Es akzeptiert auch eine komplexere, aber recht praktische Syntax zur Angabe aller drei. Hier ist ein Beispiel
.container {
grid-template:
[row1-start] "header header header" 25px [row1-end]
[row2-start] "footer footer footer" 25px [row2-end]
/ auto 50px auto;
}
Das ist gleichwertig mit
.container {
grid-template-rows: [row1-start] 25px [row1-end row2-start] 25px [row2-end];
grid-template-columns: auto 50px auto;
grid-template-areas:
"header header header"
"footer footer footer";
}
Da grid-template die impliziten Grid-Eigenschaften (grid-auto-columns, grid-auto-rows und grid-auto-flow) nicht zurücksetzt, was wahrscheinlich in den meisten Fällen das ist, was Sie tun möchten, wird empfohlen, stattdessen die grid-Eigenschaft anstelle von grid-template zu verwenden.
column-gap
row-gap
grid-column-gap
grid-row-gap
Gibt die Größe der Rasterlinien an. Man kann es sich wie die Einstellung der Breite der Rinnen zwischen den Spalten/Zeilen vorstellen.
Werte
<line-size>– ein Längenwert
.container {
/* standard */
column-gap: <line-size>;
row-gap: <line-size>;
/* old */
grid-column-gap: <line-size>;
grid-row-gap: <line-size>;
}
Beispiel
.container {
grid-template-columns: 100px 50px 100px;
grid-template-rows: 80px auto 80px;
column-gap: 10px;
row-gap: 15px;
}
Die Rinnen werden nur *zwischen* den Spalten/Zeilen erzeugt, nicht an den äußeren Rändern.
Hinweis: Der grid- Präfix wird entfernt und grid-column-gap und grid-row-gap werden in column-gap und row-gap umbenannt. Die präfixfreien Eigenschaften werden bereits in Chrome 68+, Safari 11.2 Release 50+ und Opera 54+ unterstützt.
gap
grid-gap
Eine Kurzform für row-gap und column-gap
Werte
<grid-row-gap><grid-column-gap>– Längenwerte
.container {
/* standard */
gap: <grid-row-gap> <grid-column-gap>;
/* old */
grid-gap: <grid-row-gap> <grid-column-gap>;
}
Beispiel
.container {
grid-template-columns: 100px 50px 100px;
grid-template-rows: 80px auto 80px;
gap: 15px 10px;
}
Wenn kein row-gap angegeben ist, wird es auf denselben Wert wie column-gap gesetzt
Hinweis: Das grid- Präfix ist veraltet (aber wer weiß, wird möglicherweise nie tatsächlich aus Browsern entfernt). Im Wesentlichen wurde grid-gap in gap umbenannt. Die präfixfreie Eigenschaft wird bereits in Chrome 68+, Safari 11.2 Release 50+ und Opera 54+ unterstützt.
justify-items
Richtet Rasterelemente entlang der *inline (Reihen)-Achse* aus (im Gegensatz zu align-items, das entlang der *block (Spalten)-Achse* ausrichtet). Dieser Wert gilt für alle Rasterelemente innerhalb des Containers.
Werte
start– richtet Elemente bündig mit dem Startrand ihrer Zelle ausend– richtet Elemente bündig mit dem Endrand ihrer Zelle auscenter– richtet Elemente in der Mitte ihrer Zelle ausstretch– füllt die gesamte Breite der Zelle aus (dies ist der Standard)
.container {
justify-items: start | end | center | stretch;
}
Beispiele
.container {
justify-items: start;
}
.container {
justify-items: end;
}
.container {
justify-items: center;
}
.container {
justify-items: stretch;
}
Dieses Verhalten kann auch für einzelne Rasterelemente über die Eigenschaft justify-self festgelegt werden.
align-items
Richtet Grid-Elemente entlang der *Block (Spalten)-Achse* aus (im Gegensatz zu justify-items, das entlang der *Inline (Reihen)-Achse* ausrichtet). Dieser Wert gilt für alle Grid-Elemente innerhalb des Containers.
Werte
stretch– füllt die gesamte Höhe der Zelle aus (dies ist der Standard)start– richtet Elemente bündig mit dem Startrand ihrer Zelle ausend– richtet Elemente bündig mit dem Endrand ihrer Zelle auscenter– richtet Elemente in der Mitte ihrer Zelle ausbaseline– richtet Elemente entlang der Textgrundlinie aus. Es gibt Modifikatoren fürbaseline–first baselineundlast baseline, die bei mehrzeiligem Text die Grundlinie der ersten oder letzten Zeile verwenden.
.container {
align-items: start | end | center | stretch;
}
Beispiele
.container {
align-items: start;
}
.container {
align-items: end;
}
.container {
align-items: center;
}
.container {
align-items: stretch;
}
Dieses Verhalten kann auch für einzelne Rasterelemente über die Eigenschaft align-self festgelegt werden.
Es gibt auch die Modifikatoren safe und unsafe (Anwendung ist wie align-items: safe end). Das Schlüsselwort safe bedeutet „versuche, so auszurichten, aber nicht, wenn es bedeutet, ein Element so auszurichten, dass es in einen unzugänglichen Überlaufbereich verschoben wird“, während unsafe erlaubt, Inhalte in unzugängliche Bereiche zu verschieben („Datenverlust“).
place-items
place-items setzt sowohl die align-items als auch die justify-items Eigenschaften in einer einzigen Deklaration.
Werte
<align-items>/<justify-items>– Der erste Wert setztalign-items, der zweite Wertjustify-items. Wenn der zweite Wert weggelassen wird, wird der erste Wert beiden Eigenschaften zugewiesen.
Weitere Details finden Sie unter align-items und justify-items.
Dies kann sehr nützlich für eine superschnelle multidirektionale Zentrierung sein
.center {
display: grid;
place-items: center;
}
justify-content
Manchmal kann die Gesamtgröße Ihres Rasters kleiner sein als die Größe seines Rastercontainers. Dies kann passieren, wenn alle Ihre Rasterelemente mit unflexiblen Einheiten wie px bemessen sind. In diesem Fall können Sie die Ausrichtung des Rasters innerhalb des Rastercontainers festlegen. Diese Eigenschaft richtet das Raster entlang der Inline (Reihen)-Achse aus (im Gegensatz zu align-content, das das Raster entlang der Block (Spalten)-Achse ausrichtet).
Werte
start– richtet das Raster bündig mit dem Startrand des Rastercontainers ausend– richtet das Raster bündig mit dem Endrand des Rastercontainers auscenter– richtet das Raster in der Mitte des Rastercontainers ausstretch– ändert die Größe der Rasterelemente, damit das Raster die volle Breite des Rastercontainers ausfüllen kannspace-around– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, mit halb großen Abständen an den äußeren Endenspace-between– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, ohne Abstand an den äußeren Endenspace-evenly– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, einschließlich der äußeren Enden
.container {
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
Beispiele
.container {
justify-content: start;
}
.container {
justify-content: end;
}
.container {
justify-content: center;
}
.container {
justify-content: stretch;
}
.container {
justify-content: space-around;
}
.container {
justify-content: space-between;
}
.container {
justify-content: space-evenly;
}
align-content
Manchmal kann die Gesamtgröße Ihres Rasters kleiner sein als die Größe seines Rastercontainers. Dies kann passieren, wenn alle Ihre Rasterelemente mit unflexiblen Einheiten wie px bemessen sind. In diesem Fall können Sie die Ausrichtung des Rasters innerhalb des Rastercontainers festlegen. Diese Eigenschaft richtet das Raster entlang der Block (Spalten)-Achse aus (im Gegensatz zu justify-content, das das Raster entlang der Inline (Reihen)-Achse ausrichtet).
Werte
start– richtet das Raster bündig mit dem Startrand des Rastercontainers ausend– richtet das Raster bündig mit dem Endrand des Rastercontainers auscenter– richtet das Raster in der Mitte des Rastercontainers ausstretch– ändert die Größe der Rasterelemente, damit das Raster die volle Höhe des Rastercontainers ausfüllen kannspace-around– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, mit halb großen Abständen an den äußeren Endenspace-between– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, ohne Abstand an den äußeren Endenspace-evenly– platziert einen gleichmäßigen Abstand zwischen jedem Rasterelement, einschließlich der äußeren Enden
.container {
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
Beispiele
.container {
align-content: start;
}
.container {
align-content: end;
}
.container {
align-content: center;
}
.container {
align-content: stretch;
}
.container {
align-content: space-around;
}
.container {
align-content: space-between;
}
.container {
align-content: space-evenly;
}
place-content
place-content setzt sowohl die align-content als auch die justify-content Eigenschaften in einer einzigen Deklaration.
Werte
<align-content>/<justify-content>– Der erste Wert setztalign-content, der zweite Wertjustify-content. Wenn der zweite Wert weggelassen wird, wird der erste Wert beiden Eigenschaften zugewiesen.
Alle großen Browser außer Edge unterstützen die Kurzform place-content.
Weitere Details finden Sie unter align-content und justify-content.
grid-auto-columns
grid-auto-rows
Gibt die Größe aller automatisch generierten Rasterspuren (auch implizite Rasterspuren genannt) an. Implizite Spuren werden erstellt, wenn es mehr Rasterelemente als Zellen im Raster gibt oder wenn ein Rasterelement außerhalb des expliziten Rasters platziert wird. (siehe Der Unterschied zwischen expliziten und impliziten Rastern)
Werte
<track-size>– kann eine Länge, ein Prozentsatz oder ein Bruchteil des freien Raums im Raster sein (unter Verwendung derfrEinheit)
.container {
grid-auto-columns: <track-size> ...;
grid-auto-rows: <track-size> ...;
}
Um zu veranschaulichen, wie implizite Rasterspuren erstellt werden, denken Sie an Folgendes
.container {
grid-template-columns: 60px 60px;
grid-template-rows: 90px 90px;
}
Dies erstellt ein 2x2-Raster.
Stellen Sie sich nun aber vor, Sie verwenden grid-column und grid-row, um Ihre Rasterelemente wie folgt zu positionieren
.item-a {
grid-column: 1 / 2;
grid-row: 2 / 3;
}
.item-b {
grid-column: 5 / 6;
grid-row: 2 / 3;
}
Wir haben .item-b angewiesen, bei Spaltenlinie 5 zu beginnen und bei Spaltenlinie 6 zu enden, *aber wir haben nie eine Spaltenlinie 5 oder 6 definiert*. Da wir auf nicht existierende Linien verwiesen haben, werden implizite Spuren mit einer Breite von 0 erstellt, um die Lücken zu füllen. Wir können grid-auto-columns und grid-auto-rows verwenden, um die Breiten dieser impliziten Spuren anzugeben
.container {
grid-auto-columns: 60px;
}
grid-auto-flow
Wenn Sie Rasterelemente haben, die Sie nicht explizit im Raster platzieren, tritt der Auto-Platzierungsalgorithmus in Kraft, um die Elemente automatisch zu platzieren. Diese Eigenschaft steuert, wie der Auto-Platzierungsalgorithmus funktioniert.
Werte
row– weist den Auto-Platzierungsalgorithmus an, jede Zeile der Reihe nach zu füllen und bei Bedarf neue Zeilen hinzuzufügen (Standard)column– weist den Auto-Platzierungsalgorithmus an, jede Spalte der Reihe nach zu füllen und bei Bedarf neue Spalten hinzuzufügendense– weist den Auto-Platzierungsalgorithmus an, zu versuchen, Lücken früher im Raster zu füllen, wenn später kleinere Elemente auftauchen
.container {
grid-auto-flow: row | column | row dense | column dense;
}
Beachten Sie, dass dense nur die visuelle Reihenfolge Ihrer Elemente ändert und dazu führen kann, dass sie außer der Reihe erscheinen, was schlecht für die Barrierefreiheit ist.
Beispiele
Betrachten Sie dieses HTML
<section class="container">
<div class="item-a">item-a</div>
<div class="item-b">item-b</div>
<div class="item-c">item-c</div>
<div class="item-d">item-d</div>
<div class="item-e">item-e</div>
</section>
Sie definieren ein Raster mit fünf Spalten und zwei Zeilen und setzen grid-auto-flow auf row (was auch der Standard ist)
.container {
display: grid;
grid-template-columns: 60px 60px 60px 60px 60px;
grid-template-rows: 30px 30px;
grid-auto-flow: row;
}
Beim Platzieren der Elemente im Raster geben Sie nur Spots für zwei davon an
.item-a {
grid-column: 1;
grid-row: 1 / 3;
}
.item-e {
grid-column: 5;
grid-row: 1 / 3;
}
Da wir grid-auto-flow auf row gesetzt haben, wird unser Raster so aussehen. Beachten Sie, wie die drei Elemente, die wir nicht platziert haben (item-b, item-c und item-d), über die verfügbaren Zeilen fließen
Wenn wir stattdessen grid-auto-flow auf column setzen, fließen item-b, item-c und item-d die Spalten hinunter
.container {
display: grid;
grid-template-columns: 60px 60px 60px 60px 60px;
grid-template-rows: 30px 30px;
grid-auto-flow: column;
}
grid
Eine Kurzform zum Festlegen aller folgenden Eigenschaften in einer einzigen Deklaration: grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns und grid-auto-flow (Hinweis: Sie können nur die expliziten oder die impliziten Grid-Eigenschaften in einer einzigen Grid-Deklaration angeben).
Werte
none– setzt alle Untereigenschaften auf ihre Anfangswerte.<grid-template>– funktioniert genauso wie die Kurzformgrid-template.<grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>?– setztgrid-template-rowsauf den angegebenen Wert. Wenn das Schlüsselwortauto-flowrechts vom Schrägstrich steht, setzt esgrid-auto-flowaufcolumn. Wenn das Schlüsselwortdensezusätzlich angegeben wird, verwendet der Auto-Platzierungsalgorithmus einen „dichten“ Packalgorithmus. Wenngrid-auto-columnsweggelassen wird, wird es aufautogesetzt.[ auto-flow && dense? ] <grid-auto-rows>? / <grid-template-columns>– setztgrid-template-columnsauf den angegebenen Wert. Wenn das Schlüsselwortauto-flowlinks vom Schrägstrich steht, setzt esgrid-auto-flowaufrow. Wenn das Schlüsselwortdensezusätzlich angegeben wird, verwendet der Auto-Platzierungsalgorithmus einen „dichten“ Packalgorithmus. Wenngrid-auto-rowsweggelassen wird, wird es aufautogesetzt.
Beispiele
Die folgenden zwei Codeblöcke sind äquivalent
.container {
grid: 100px 300px / 3fr 1fr;
}
.container {
grid-template-rows: 100px 300px;
grid-template-columns: 3fr 1fr;
}
Die folgenden zwei Codeblöcke sind äquivalent
.container {
grid: auto-flow / 200px 1fr;
}
.container {
grid-auto-flow: row;
grid-template-columns: 200px 1fr;
}
Die folgenden zwei Codeblöcke sind äquivalent
.container {
grid: auto-flow dense 100px / 1fr 2fr;
}
.container {
grid-auto-flow: row dense;
grid-auto-rows: 100px;
grid-template-columns: 1fr 2fr;
}
Und die folgenden beiden Codeblöcke sind äquivalent
.container {
grid: 100px 300px / auto-flow 200px;
}
.container {
grid-template-rows: 100px 300px;
grid-auto-flow: column;
grid-auto-columns: 200px;
}
Es akzeptiert auch eine komplexere, aber recht praktische Syntax, um alles auf einmal festzulegen. Sie geben grid-template-areas, grid-template-rows und grid-template-columns an, und alle anderen Untereigenschaften werden auf ihre ursprünglichen Werte gesetzt. Was Sie tun, ist, die Liniendamen und Spurgrößen inline mit ihren jeweiligen Gitterbereichen anzugeben. Dies lässt sich am einfachsten mit einem Beispiel beschreiben
.container {
grid: [row1-start] "header header header" 1fr [row1-end]
[row2-start] "footer footer footer" 25px [row2-end]
/ auto 50px auto;
}
Das ist gleichwertig mit
.container {
grid-template-areas:
"header header header"
"footer footer footer";
grid-template-rows: [row1-start] 1fr [row1-end row2-start] 25px [row2-end];
grid-template-columns: auto 50px auto;
}
Eigenschaften für die Kinder
(Rasterelemente)
Sprunglinks
float, display: inline-block, display: table-cell, vertical-align und column-* Eigenschaften haben keine Auswirkung auf ein Rasterelement.
grid-column-start
grid-column-end
grid-row-start
grid-row-end
Bestimmt die Position eines Rasterelements innerhalb des Rasters durch Bezugnahme auf spezifische Rasterlinien. grid-column-start/grid-row-start ist die Linie, an der das Element beginnt, und grid-column-end/grid-row-end ist die Linie, an der das Element endet.
Werte
<line>– kann eine Zahl sein, um sich auf eine nummerierte Rasterlinie zu beziehen, oder ein Name, um sich auf eine benannte Rasterlinie zu beziehenspan <number>– das Element wird über die angegebene Anzahl von Rasterspuren gespanntspan <name>– das Element wird gespannt, bis es die nächste Linie mit dem angegebenen Namen erreichtauto– zeigt automatische Platzierung, eine automatische Spanne oder eine Standardspanne von eins an
.item {
grid-column-start: <number> | <name> | span <number> | span <name> | auto;
grid-column-end: <number> | <name> | span <number> | span <name> | auto;
grid-row-start: <number> | <name> | span <number> | span <name> | auto;
grid-row-end: <number> | <name> | span <number> | span <name> | auto;
}
Beispiele
.item-a {
grid-column-start: 2;
grid-column-end: five;
grid-row-start: row1-start;
grid-row-end: 3;
}
.item-b {
grid-column-start: 1;
grid-column-end: span col4-start;
grid-row-start: 2;
grid-row-end: span 2;
}
Wenn keine grid-column-end/grid-row-end deklariert ist, erstreckt sich das Element standardmäßig über 1 Spur.
Elemente können sich überlappen. Sie können z-index verwenden, um ihre Stapelreihenfolge zu steuern.
Erfahren Sie mehr über die span-Notation in diesem Artikel von DigitalOcean.
grid-column
grid-row
Kurzform für grid-column-start + grid-column-end bzw. grid-row-start + grid-row-end.
Werte
<start-line>/<end-line>– jeder akzeptiert die gleichen Werte wie die Langform, einschließlich span
.item {
grid-column: <start-line> / <end-line> | <start-line> / span <value>;
grid-row: <start-line> / <end-line> | <start-line> / span <value>;
}
Beispiel
.item-c {
grid-column: 3 / span 2;
grid-row: third-line / 4;
}
Wenn kein Endlinienwert deklariert ist, überspannt das Element standardmäßig 1 Spur.
grid-area
Gibt einem Element einen Namen, sodass es von einer Vorlage, die mit der grid-template-areas-Eigenschaft erstellt wurde, referenziert werden kann. Alternativ kann diese Eigenschaft als noch kürzere Kurzform für grid-row-start + grid-column-start + grid-row-end + grid-column-end verwendet werden.
Werte
<name>– ein Name Ihrer Wahl<row-start>/<column-start>/<row-end>/<column-end>– können Zahlen oder benannte Linien sein
.item {
grid-area: <name> | <row-start> / <column-start> / <row-end> / <column-end>;
}
Beispiele
Als eine Möglichkeit, dem Element einen Namen zuzuweisen
.item-d {
grid-area: header;
}
Als die Kurzform für grid-row-start + grid-column-start + grid-row-end + grid-column-end
.item-d {
grid-area: 1 / col4-start / last-line / 6;
}
justify-self
Richtet ein Rasterelement innerhalb einer Zelle entlang der inline (Reihen)-Achse aus (im Gegensatz zu align-self, das entlang der block (Spalten)-Achse ausrichtet). Dieser Wert gilt für ein Rasterelement innerhalb einer einzelnen Zelle.
Werte
start– richtet das Rasterelement bündig mit dem Startrand der Zelle ausend– richtet das Rasterelement bündig mit dem Endrand der Zelle auscenter– richtet das Rasterelement in der Mitte der Zelle ausstretch– füllt die gesamte Breite der Zelle aus (dies ist der Standard)
.item {
justify-self: start | end | center | stretch;
}
Beispiele
.item-a {
justify-self: start;
}
.item-a {
justify-self: end;
}
.item-a {
justify-self: center;
}
.item-a {
justify-self: stretch;
}
Um die Ausrichtung für *alle* Elemente in einem Raster festzulegen, kann dieses Verhalten auch für den Rastercontainer über die Eigenschaft justify-items festgelegt werden.
align-self
Richtet ein Rasterelement innerhalb einer Zelle entlang der Block (Spalten)-Achse aus (im Gegensatz zu justify-self, das entlang der Inline (Reihen)-Achse ausrichtet). Dieser Wert gilt für den Inhalt innerhalb eines einzelnen Rasterelements.
Werte
start– richtet das Rasterelement bündig mit dem Startrand der Zelle ausend– richtet das Rasterelement bündig mit dem Endrand der Zelle auscenter– richtet das Rasterelement in der Mitte der Zelle ausstretch– füllt die gesamte Höhe der Zelle aus (dies ist der Standard)
.item {
align-self: start | end | center | stretch;
}
Beispiele
.item-a {
align-self: start;
}
.item-a {
align-self: end;
}
.item-a {
align-self: center;
}
.item-a {
align-self: stretch;
}
Um *alle* Elemente in einem Raster auszurichten, kann dieses Verhalten auch für den Rastercontainer über die Eigenschaft align-items festgelegt werden.
place-self
place-self setzt sowohl die align-self als auch die justify-self Eigenschaften in einer einzigen Deklaration.
Werte
auto– Die „Standard“-Ausrichtung für den Layout-Modus.<align-self>/<justify-self>– Der erste Wert setztalign-self, der zweite Wertjustify-self. Wenn der zweite Wert weggelassen wird, wird der erste Wert beiden Eigenschaften zugewiesen.
Beispiele
.item-a {
place-self: center;
}
.item-a {
place-self: center stretch;
}
Alle wichtigen Browser außer Edge unterstützen die Kurzform place-self.
Spezielle Einheiten & Funktionen
fr-Einheiten
Sie werden wahrscheinlich viele Bruchstücke in CSS Grid verwenden, wie 1fr. Sie bedeuten im Wesentlichen "Anteil des verbleibenden Raums". Eine Deklaration wie
grid-template-columns: 1fr 3fr;
Bedeutet, grob gesagt, 25% 75%. Außer dass diese Prozentwerte viel fester sind als Bruchteile. Wenn Sie zum Beispiel Polsterung zu diesen prozentbasierten Spalten hinzufügen würden, hätten Sie jetzt eine 100%ige Breite unterbrochen (unter Annahme eines content-box Box-Modells). Bruchteile sind auch in Kombination mit anderen Einheiten viel freundlicher, wie Sie sich vorstellen können
grid-template-columns: 50px min-content 1fr;
Größen-Schlüsselwörter
Beim Festlegen der Größe von Zeilen und Spalten können Sie alle Ihnen bekannten Längenangaben verwenden, wie px, rem, %, usw., aber Sie haben auch Schlüsselwörter
min-content: die minimale Größe des Inhalts. Stellen Sie sich eine Textzeile wie „E pluribus unum“ vor, der min-content ist wahrscheinlich die Breite des Wortes „pluribus“.max-content: die maximale Größe des Inhalts. Stellen Sie sich den obigen Satz vor, dermax-contentist die Länge des gesamten Satzes.auto: Dieses Schlüsselwort ähnelt stark denfr-Einheiten, außer dass sie im Größenkampf gegenfr-Einheiten „verlieren“, wenn der verbleibende Platz zugewiesen wird.- Bruchstücke: siehe oben
Größenfunktionen
- Die Funktion
fit-content()verwendet den verfügbaren Platz, jedoch nie weniger alsmin-contentund nie mehr alsmax-content. - Die Funktion
minmax()tut genau das, wonach es klingt: Sie legt einen Minimal- und Maximalwert für die mögliche Länge fest. Dies ist nützlich in Kombination mit relativen Einheiten. Zum Beispiel möchten Sie, dass eine Spalte nur bis zu einem bestimmten Punkt schrumpfen kann. Dies ist extrem nützlich und wahrscheinlich das, was Sie wollen
grid-template-columns: minmax(100px, 1fr) 3fr;
- Die Funktion
min(). - Die Funktion
max().
Die Funktion repeat() und Schlüsselwörter
Die Funktion repeat() kann etwas Tipparbeit sparen
grid-template-columns:
1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
/* easier: */
grid-template-columns:
repeat(8, 1fr);
/* especially when: */
grid-template-columns:
repeat(8, minmax(10px, 1fr));
Aber repeat() kann noch ausgefallener werden, wenn es mit Schlüsselwörtern kombiniert wird
auto-fill: Passt so viele Spalten wie möglich in eine Zeile, auch wenn sie leer sind.auto-fit:Passt alle vorhandenen Spalten in den verfügbaren Platz. Bevorzugt das Erweitern von Spalten, um den Platz zu füllen, anstatt leere Spalten zu verwenden.
Dies ist das berühmteste Snippet in CSS Grid und einer der besten CSS-Tricks aller Zeiten
grid-template-columns:
repeat(auto-fit, minmax(250px, 1fr));
Der Unterschied zwischen den Schlüsselwörtern ist hier ausführlich erklärt.
Masonry
Ein experimentelles Feature von CSS Grid ist das Masonry-Layout. Beachten Sie, dass es viele Ansätze für ein CSS Masonry-Layout gibt, aber die meisten davon sind Tricks und haben entweder größere Nachteile oder sind nicht das, was Sie erwarten.
Die Spezifikation hat jetzt eine offizielle Methode, und diese ist in Firefox hinter einem Flag verborgen
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: masonry;
}
Siehe Rachels Artikel für einen detaillierten Einblick.
Subgrid
Subgrid ist eine äußerst nützliche Funktion von Grids, die es Grid-Elementen ermöglicht, ein eigenes Grid zu haben, das die Grid-Linien des übergeordneten Grids erbt.
.parent-grid {
display: grid;
grid-template-columns: repeat(9, 1fr);
}
.grid-item {
grid-column: 2 / 7;
display: grid;
grid-template-columns: subgrid;
}
.child-of-grid-item {
/* gets to participate on parent grid! */
grid-column: 3 / 6;
}
Dies wird derzeit nur in Firefox unterstützt, muss aber wirklich überall verfügbar sein.
Es ist auch nützlich, über display: contents; Bescheid zu wissen. Dies ist *nicht* dasselbe wie ein Unterraster, kann aber manchmal auf ähnliche Weise ein nützliches Werkzeug sein.
<div class="grid-parent">
<div class="grid-item"></div>
<div class="grid-item"></div>
<ul style="display: contents;">
<!-- These grid-items get to participate on
the same grid!-->
<li class="grid-item"></li>
<li class="grid-item"></li>
</ul>
</div>
CSS Grid Browser-Unterstützung
Diese Browser-Unterstützungsdaten stammen von Caniuse, die weitere Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version und höher unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 57 | 52 | 11* | 16 | 10.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 10.3 |
Fluid Columns Snippet
Fluid Columns, die sich je nach verfügbarem Platz in mehr oder weniger Spalten aufteilen, ohne Media Queries!
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
/* This is better for small screens, once min() is better supported */
/* grid-template-columns: repeat(auto-fill, minmax(min(200px, 100%), 1fr)); */
gap: 1rem;
}
CSS Grid Animation
Gemäß der CSS Grid Layout Module Level 1 Spezifikation gibt es 5 animierbare Grid-Eigenschaften
grid-gap,grid-row-gap,grid-column-gapals Länge, Prozentsatz oder Calc.grid-template-columns,grid-template-rowsals einfache Liste von Länge, Prozentsatz oder Calc, vorausgesetzt, die einzigen Unterschiede sind die Werte der Längen-, Prozent- oder Calc-Komponenten in der Liste.
Zum Zeitpunkt der Erstellung dieses Dokuments ist nur die Animation von (grid-)gap, (grid-)row-gap und (grid-)column-gap in den getesteten Browsern implementiert.
| Browser | (grid-)gap, (grid-)row-gap, (grid-)column-gap | grid-template-columns | grid-template-rows |
|---|---|---|---|
| Firefox | unterstützt ✅ 53+ | unterstützt ✅ 66+ | unterstützt ✅ 66+ |
| Safari 12.0 | nicht unterstützt ❌ | nicht unterstützt ❌ | nicht unterstützt ❌ |
| Chrome | unterstützt ✅ 66+ | nicht unterstützt ❌ | nicht unterstützt ❌ |
| Chrome für Android 66+, Opera Mini 33+ | unterstützt ✅ | nicht unterstützt ❌ | nicht unterstützt ❌ |
| Edge | unterstützt ✅ 16+ | nicht unterstützt ❌ | nicht unterstützt ❌ |
CSS-Grid Tricks!
4 CSS Grid Eigenschaften (und ein Wert) für die meisten Ihrer Layout-Bedürfnisse
Ein Kalender in drei Zeilen CSS
Eine clevere Sticky-Footer-Technik
Ein Raster von Logos in Quadraten
Eine leichte Masonry-Lösung
Akkordeon-Reihen in CSS Grid
Ein responsives Grid-Layout ohne Media Queries
Ein sich automatisch füllendes CSS-Grid mit maximalen Spalten einer Mindestgröße
Automatische Spaltengröße in CSS Grid: `auto-fill` vs `auto-fit`
Ausbrechen mit CSS Grid erklärt
CSS Grid in WordPress-Layouts integrieren
Erstellen eines CSS Grid Overlays
Einen Konferenzplan mit CSS Grid erstellen
Ein hexagonales Gitter mit CSS Grid erstellen
Das Gitter durchbrechen
CSS Grid und benutzerdefinierte Formen, Teil 1
Nützliche kleine CSS-Grid-Tricks für Ihren Blog
Zählen mit CSS-Zählern und CSS Grid
Ein Balkendiagramm mit CSS Grid erstellen
CSS Grid kann automatische Höhenübergänge
CSS Grid: Ein Layout, mehrere Möglichkeiten
CSS Grid Starter-Layouts
Spalten gleicher Breite in CSS Grid sind irgendwie merkwürdig
Erweiterbare Abschnitte innerhalb eines CSS Grid
Erkundung der impliziten Grid- und Auto-Platzierungsfähigkeiten von CSS Grid
Flexbox-ähnliches „Elemente einfach in eine Reihe setzen“ mit CSS Grid
Grid, Inhaltsneuanordnung und Barrierefreiheit
Implizite Gitter, wiederholbare Layout-Muster und Danglers
Schau mal, Mama, keine Media Queries! Responsive Layouts mit CSS Grid
Ein Balkendiagramm mit CSS Grid erstellen
Überlappende Kopfzeile mit CSS Grid
Overlay-Inhalte mit CSS Grid positionieren
Ein Grid-Blowout verhindern
Einfache benannte Grid-Bereiche
Techniken für ein Zeitungs-Layout mit CSS Grid und Trennlinien zwischen Elementen
Das Holy Grail Layout mit CSS Grid
Verwenden von `position: sticky` mit CSS Grid
CSS Grid lernen
Eine Sammlung interessanter Fakten über CSS Grid Layout
Eine Einführung in die CSS-Einheit `fr`
Automatische Spaltengröße in CSS Grid: `auto-fill` vs `auto-fit`
Zentrieren in CSS: Vollständige Anleitung
CSS Grid Layout Modul Level 2
CSS Grid in IE: CSS Grid und der neue Autoprefixer
Ersetzt CSS Grid Flexbox?
Verwenden Sie mein Grid-System (oder andere) nicht
Erkundung der impliziten Grid- und Auto-Platzierungsfähigkeiten von CSS Grid
`fit-content` und `fit-content()`
Erste Schritte mit CSS Grid
Flexbox und Grids, die besten Freunde Ihres Layouts
Grid Level 2 und Subgrid
Grid für Layout, Flexbox für Komponenten
Hallo Subgrid!
Ist CSS float veraltet?
Schnell! Was ist der Unterschied zwischen Flexbox und Grid?
Einige CSS Grid-Strategien zur Anpassung an Design-Mockups
Die automatischen Flussfähigkeiten des `dense`-Keywords von Grid
Der Unterschied zwischen expliziten und impliziten Grids
Was ich über CSS Grid Layout gelernt habe
Über den Tellerrand blicken mit CSS Grid
Grid oder nicht Grid
Benannte Grid-Bereiche zur Visualisierung (und Referenzierung) Ihres Layouts verwenden
Warum wir CSS-Subgrid benötigen
CSS Grid Videos
Weitere CSS Grid-Quellen
- CSS Grid Layout Modul Level 1 (W3C)
- Grid by Example (Rachel Andrew)
- CSS Grid Layout lernen (Rachel Andrew)
- CSS Grid Layout: Einführung (DigitalOcean)
- CSS Grid Layout: Die Repeat-Notation (DigitalOcean)
- CSS Grid Layout: Das Span-Schlüsselwort (DigitalOcean)
- CSS Grid Layout: Die Fr-Einheit (DigitalOcean)
- CSS Grid: Holy Grail Layout (DigitalOcean)
- Wie man CSS Grid-Eigenschaften verwendet, um Inhalte und Elemente auszurichten (DigitalOcean)