Grid Placement
Wenn Sie ein Grid für ein Element deklarieren und die untergeordneten Elemente (Child-Items) nicht positionieren,
bestimmt der Algorithmus für die automatische Platzierung, was der Browser mit diesen nicht platzierten Grid-Elementen tun soll (Auto-Placement).
Wie sie in meinen Beispielen sehen können, werden sich alle Child-Items beim erstellen eines Grids,
selbst in jeder Grid-Cell anordnen. Der Standardfluss besteht darin, Elemente nach Grid-Rows anzuordnen. Grid legt ein Element in jeder Grid-Cell von Row 1 an.
Wenn Sie zusätzliche Rows mit der Eigenschaft grid-template-rows erstellt haben,
platziert Grid weiterhin Elemente in diesen Rows. Wenn das Grid nicht genügend Rows im expliziten Grid hat, um alle Elemente zu platzieren, werden neue implizite Rows erstellt.
Auto-Placement
das folgende Beispiel besteht aus 9 Grid-Items. Die Positionierung wird mit grid-template-columns
in 3 Spalten (Columns) aufgeteilt (Explicit). Rows werden Implizit erstellt.
- grid-template-columns: repeat(3, 1fr ) -> Liefert 3 Columns gleicher Breite.
Beispiel-CSS
.wrapper6 {
grid-gap: 10px;
grid-template-columns: repeat(3, 1fr );
}
Beispiel-HTML
<div id="wrapper" class="wrapper6">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Line-Based Placement
Das Verstehen von Grid-Lines ist Voraussetzung beim Arbeiten mit Line-Based Placement. Wissen, dass ein Grid mit 4 Columns immer 5 Columns-grid-Lines hat und
ein Grid mit 5 Rows hat immer 6 Rows-Grid-Lines.
Placement mit grid-column-start/end und grid-row-start/end
Das folgende Beispiel besteht aus 7 Grid-Items. Die Positionierung der Items wird mit grid-column-start/end und grid-row-start/end
im Grid positioniert.
- grid-column-start: (Zahl) -> Column-grid-line Beginn.
- grid-column-end: (Zahl) -> Column-grid-line Ende.
- grid-row-start: (Zahl) -> Row-grid-line Beginn.
- grid-row-end: (Zahl) -> Row-grid-line Ende.
Beispiel-CSS
.wrapper7 {
grid-gap: 10px;
grid-template-columns: repeat(3, auto );
grid-auto-rows: 80px;
}
.wrapper7 .item:nth-child(1) {
grid-column-start: 1;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end: 2;
}
.wrapper7 .item:nth-child(2) {
grid-column-start: 1;
grid-column-end: 2;
grid-row-start: 3;
grid-row-end: 4;
}
.wrapper7 .item:nth-child(3) {
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 3;
}
.wrapper7 .item:nth-child(5) {
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 3;
grid-row-end: 4;
}
Beispiel-HTML
<div id="wrapper" class="wrapper7">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Placement mit grid-column und grid-row (Shorthand)
Dasselbe Beispiel wie oben. Die Positionierung der Items wird mit grid-column und grid-row
in der Kurzschreibweise geschrieben (Shorthand).
- grid-column: Beginn/Ende -> Column-grid-line Beginn/Ende.
- grid-row: Beginn/Ende -> Row-grid-line Beginn/Ende..
Beispiel-CSS
.wrapper7 .item:nth-child(1) {
grid-column: 1 / 4;
grid-row: 1 / 2;
}
.wrapper7 .item:nth-child(2) {
grid-column: 1 / 2;
grid-row: 3 / 4;
}
.wrapper7 .item:nth-child(3) {
grid-column: 2 / 3;
grid-row: 2/ 3;
}
.wrapper7 .item:nth-child(5) {
grid-column: 2 / 3;
grid-row: 3 / 4;
}
Placement mit grid-area (Shorthand)
Dasselbe Resultat wie oben gibt es noch kürzer mit grid-area.
Die Reihenfolge lautet: row-start/column-start/row-end/column-end.
- grid-area: row-start/column-start/row-end/column-end
Beispiel-CSS
.wrapper7 .item:nth-child(1) {
grid-area: 1 / 1 / 2 / 4;
}
.wrapper7 .item:nth-child(2) {
grid-area: 3 / 1 / 4 / 2;
}
.wrapper7 .item:nth-child(3) {
grid-area: 2 / 2 / 3 / 3;
}
.wrapper7 .item:nth-child(5) {
grid-area: 3 / 2 / 4 / 3;
}
Placement & Tracks
Um eine Grid Area zu erstellen, die größer ist als ein single grid track, geben sie eine end line an, die mehr als ein track entfernt ist.
Bei single grid tracks reicht die Start-Grid-Line.
grid-column: 1 / 3; Start- und End-Line
grid-row: 1 / 2; Start- und End-Line
grid-row: 1; Nur Start-Line
Placement mit grid-column und grid-row über Tracks
Das folgende Beispiel besteht aus 4 Grid-Items. Die Positionierung der Items wird mit grid-column und grid-row erstellt.
Die End-Line wird nur bei Tracks, die größer als 1 sind, geschrieben.
Beispiel-CSS
.wrapper8 {
grid-gap: 10px;
grid-template-columns: repeat(3, 100px);
grid-auto-rows: 80px;
}
.wrapper8 .item:nth-child(1) {
grid-column: 1 / 3;
grid-row: 1;
}
.wrapper8 .item:nth-child(2) {
grid-column: 3 ;
grid-row: 1 / 3;
}
.wrapper8 .item:nth-child(3) {
grid-column: 1 ;
grid-row: 2 ;
}
.wrapper8 .item:nth-child(4) {
grid-column: 2;
grid-row: 2;
}
Beispiel-HTML
<div id="wrapper" class="wrapper8">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Placement über Tracks mit dem Keyword span
Dasselbe Beispiel noch einmal, diesmal verwende ich das Schlüsselwort span, anstatt das Grid-End mit der Nummer anzusprechen.
Das Schlüsselwort span und eine Zahl danach gibt die Anzahl der Tracks an, mit dem die Grid-Area erweitert werden soll.
- grid-column: 1 / span 2 -> Beginn bei grid-column-start 1 / erweitert um 2 Tracks
Beispiel-CSS
.wrapper9 {
grid-gap: 10px;
grid-template-columns: repeat(3, 100px);
grid-auto-rows: 80px;
}
.wrapper9 .item:nth-child(1) {
grid-column: 1 / span 2;
grid-row: 1;
}
.wrapper9 .item:nth-child(2) {
grid-column: 3 ;
grid-row: 1 / span 2;
}
.wrapper9 .item:nth-child(3) {
grid-column: 1 ;
grid-row: 2 ;
}
.wrapper9 .item:nth-child(4) {
grid-column: 2;
grid-row: 2;
}
.wrapper9 .item:nth-child(5) {
grid-column: 1 / span 3;
grid-row: 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper9">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Benannte Grid-Lines & Areas
In den bisherigen Beispiel-Grids haben sie gelernt wie man Grid-Lines mit einem numerischen Wert (Zahl) ansprechen kann.
Grid-Lines können auch benannt werden und an Stelle von Nummern verwendet werden. Benennen sie columns und rows mit benutzerdefinierte Namen in eckigen Klammern (Brackets).
grid-template-columns: [col1] 100px [col2] 100px [col3] 100px [col4];
grid-template-rows: [row1] auto [row2] auto [row3] auto [row4] auto [row5];
Benannte Grid-Areas können im Grid erstellt werden. Dazu weisen wir zunächst Items in unserem Markup mithilfe der Eigenschaft grid-area einen Bereich zu.
Im grid-container kann dann grid-template-areas verwendet werden. Das Wiederholen des Namens eines Bereichs zeigt an, dass sich der Bereich über diesen Track erstreckt.
Verwendung eines Punkts (.) oder eine Sequenz von mehreren Punkten (....) zeigt einen leeren Bereich an.
grid-template-columns: 120px 120px 120px;
grid-template-areas:
"header header header header"
"..... section1 aside ...."
"..... section2 aside ...."
"footer footer footer footer";
Placement mit benannten Grid-Lines
Das folgende Beispiel besteht aus 7 Grid-Items. Die Positionierung der Items wird mit benannten Grid-Lines
in 3 Spalten (Columns) und 4 Zeilen (Rows) aufgeteilt (Explicit).
Beispiel-CSS
.wrapper10 {
grid-gap: 10px;
grid-template-columns: [col1] 100px [col2] 100px [col3] 100px [col4];
grid-template-rows: [row1] auto [row2] auto [row3] auto [row4] auto [row5];
}
.wrapper10 .item:nth-child(1) {
grid-column: col1 / col4;
grid-row: row1;
}
.wrapper10 .item:nth-child(2) {
grid-column: col1 / col2;
grid-row: row2 / row5;
}
.wrapper10 .item:nth-child(7) {
grid-column: col2 / col4;
grid-row: row4 / row5;
}
Beispiel-HTML
<div id="wrapper" class="wrapper10">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Vier Columns mit grid-template-columns: repeat
Im folgenden Beispiel erstelle ich ein Grid mit vier gleich breiten Spalten (Columns) und 3 gleich hohe Zeilen (Rows) .
Bevor ich die 1fr-Größe des column-track bestimme, definiere ich auch grid-lines-Namen [col-start] und [col-end].
Dasselbe mache ich mit row-track in der Höhe von 80px und row-lines-Namen [row-start] und [row-end].
Das bedeutet, dass am Ende Grid-Lines mit denselben Namen entstehen. Hier muss ich zusätzlich den Index anfügen.
Beispiel-CSS
.wrapper11 {
grid-gap: 10px;
grid-template-columns: repeat(4, [col-start] 1fr [col-end]);
grid-template-rows: repeat(3, [row-start] 80px [row-end]);
}
.wrapper11 .item:nth-child(1) {
grid-column: col-start 1 / col-end 4;
}
.wrapper11 .item:nth-child(5) {
grid-column: col-start 4 / col-end 4;
grid-row: row-start 2 / row-end 3;
}
.wrapper11 .item:nth-child(7) {
grid-column: col-start 2 / col-end 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper11">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Benannte Grid-Cells mit grid-template-areas
Die grid-auto-flow-Eigenschaft
Die CSS-Eigenschaft grid-auto-flow steuert den Algorithmus, wie automatische Platzierung funktioniert, und gibt genau an wie Elemente in das Grid einfließen:
Folgende Eigenschaften stehen zur Verfügung.
- grid-auto-flow: row -> Placement Row Standardwert
- grid-auto-flow: column -> Placement Column
- grid-auto-flow: dense -> Placement Items, um alle Löcher im Grid zu füllen
- grid-auto-flow: row dense -> Placement Items, um alle Löcher im Row-Grid zu füllen
- grid-auto-flow: column dense -> Placement Items, um alle Löcher im Column-Grid zu füllen
Die Eigenschaft grid-auto-flow: row
Das folgenden Beispiel zeigt ein Grid-Layout wie wir und das vorstellen.
Die Eigenschaft grid-auto-flow: row ist der Standardwert und ändert eigentlich nichts am gewohnten Algorithmus
Beispiel-CSS
.wrapper13 {
grid-gap: 10px;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 80px;
grid-auto-flow: row;
}
Beispiel-HTML
<div id="wrapper" class="wrapper13">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: column
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: column.
Zuerst werden Columns und dann Rows aufgefüllt. Rows müssen Explizit geschrieben werden.
Beispiel-CSS
.wrapper14 {
grid-gap: 10px;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(2, 80px);
grid-auto-flow: column;
}
Beispiel-HTML
<div id="wrapper" class="wrapper14">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: column mit impliziten Columns
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: column.
Zuerst werden Columns und dann Rows aufgefüllt. Columns werdenmit grid-auto-columns implizit geschrieben.
Beispiel-CSS
.wrapper15 {
grid-gap: 10px;
grid-auto-columns: 100px;
grid-template-rows: repeat(3, 80px);
grid-auto-flow: column;
}
Beispiel-HTML
<div id="wrapper" class="wrapper15">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: row mit explizit definiertem Item.
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: row.
Hier kommt das Grid ein wenig an seine Grenzen.
Beispiel-CSS
.wrapper16 {
grid-gap: 10px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-auto-flow: row;
}
.wrapper16 .item:nth-child(3) {
grid-column: span 3;
grid-row: span 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper16">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: row dense.
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: row dense.
Damit wird versucht, Löcher in einer Zeile (Row) mit vorhandenen Items aufzufüllen.
Beispiel-CSS
.wrapper17 {
grid-gap: 10px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-auto-flow: row dense;
}
.wrapper17 .item:nth-child(3) {
grid-column: span 3;
grid-row: span 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper17">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: column dense.
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: column dense.
Damit wird versucht, Löcher in einer Spalte (Column) mit vorhandenen Items aufzufüllen.
Beispiel-CSS
.wrapper18 {
grid-gap: 10px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-auto-flow: column dense;
}
.wrapper18 .item:nth-child(3) {
grid-column: span 3;
grid-row: span 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper18">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe
Die Eigenschaft grid-auto-flow: dense.
Das folgenden Beispiel zeigt ein Grid-Layout mit grid-auto-flow: dense.
Damit wird versucht, sowohl Löcher in einer Zeile (Row) und einer Spalte (Column) mit vorhandenen Items aufzufüllen.
Die Reihenfolge lautet: zuerst row dense, dann column dense.
Beispiel-CSS
.wrapper19 {
grid-gap: 10px;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-auto-flow: dense;
}
.wrapper19 .item:nth-child(3) {
grid-column: span 3;
grid-row: span 3;
}
Beispiel-HTML
<div id="wrapper" class="wrapper19">
<div class="item">1</div>
<-- Weitere Items -->
</div>
Beispiel-Ausgabe