Einführung in Grids
Mit CSS können wir Elemente auf einer Webseite elegant anordnen. Es gibt keine einfache Antwort darauf, wie wir dies am besten tun - je nachdem, welchen Inhalt wir anzeigen möchten, können mehrere verschiedene Techniken gut funktionieren. Das Boxmodell und Anzeige und Positionierung erläutern einige Möglichkeiten zum Gestalten des Layouts
In dieser Lektion lernen wir ein leistungsstarkes Tool namens CSS Grid. Mit dem Grid können wir ganze Webseiten layouten. Während Flexbox hauptsächlich zum Positionieren von Elementen in einem eindimensionalen Layout verwendet wird, eignet sich Grid am besten für zweidimensionale Layouts, da es viele Tools zum Ausrichten und Verschieben von Elementen über Zeilen und Spalten hinweg bietet.
Am Ende dieser Lektion wissen wir, wie wir diese Eigenschaften zum Erstellen von Rasterlayouts verwenden:
grid-template-columns
grid-template-rows
grid-template
grid-template-area
row-gap / column-gap / gap
grid-row-start / grid-row-end
grid-column-start / grid-column-end
grid-area
Das ist eine Menge zu lernen. Aber am Ende sind wir Meister der Rasterpositionierung. Fangen wir an zu lernen!
Um ein Raster einzurichten, benötigen wir sowohl einen Rastercontainer als auch Rasterelemente. Der Rastercontainer ist ein übergeordnetes Element, das Rasterelemente als untergeordnete Elemente enthält und auf diese, übergreifende Stile und Positionierungen anwendet.
Um ein HTML-Element in einen Rastercontainer umzuwandeln, müssen wir die Anzeigeeigenschaft des Elements auf einen von zwei Werten setzen:
grid - für ein Raster auf Blockebene.
inline-grid - für ein Raster auf Zeilenebene.
Anschließend können wir weitere Eigenschaften zuweisen, um das Raster unseren Anforderungen entsprechend zu gestalten.
Standardmäßig enthalten Raster nur eine Spalte. Wenn wir Elemente hinzufügen würden, würde jedes Element in eine neue Zeile eingefügt werden. Das ist kein großes Raster! Um dies zu ändern, müssen wir die Anzahl der Zeilen und Spalten in unserem Raster explizit definieren.
Wir können die Spalten unseres Rasters mithilfe der CSS-Eigenschaft grid-template-columns definieren.
Unten sehen wir ein Beispiel für diese Eigenschaft:
Diese Eigenschaft führt zu zwei Änderungen. Erstens definiert sie die Anzahl der Spalten im Raster; in diesem Fall sind es zwei. Zweitens legt sie die Breite jeder Spalte fest. Die erste Spalte ist 100 Pixel breit und die zweite Spalte 200 Pixel.
Wir können die Größe unserer Spalten auch als Prozentsatz der gesamten Rasterbreite definieren.
In diesem Beispiel ist das Raster 1000 Pixel breit. Daher ist die erste Spalte 200 Pixel breit, da sie auf 20% der Rasterbreite eingestellt ist. Die zweite Spalte ist 500 Pixel breit.
Wir können diese beiden Einheiten auch mischen und anpassen. Im folgenden Beispiel gibt es drei Spalten mit einer Breite von 20 Pixeln, 40 Prozent und 60 Pixeln:
Beachten wir, dass in diesem Beispiel die Gesamtbreite unserer Spalten (120 Pixel) die Breite des Rasters (100 Pixel) überschreitet. Dies kann dazu führen, dass unser Raster anderer Elemente auf der Seite abdeckt! In einer späteren Übung werden wir lernen, wie wir einen Überlauf vermeiden können.
Wir haben gelernt, wie wir die Anzahl der Spalten in unserem Raster explizit definieren. Um die Anzahl und Größe der Zeilen anzugeben verwenden wir die Eigenschaft grid-template-rows.
Diese Eigenschaft ist fast identisch mit grid-template-columns. Sehen wir uns den Code unten an um beide Eigenschaften in Action zu sehen.
Dieses Raster hat zwei Spalten und drei Zeilen. grid-template-rows definiert die Anzahl der Zeilen und legt die Höhe jeder Zeile fest. In diesem Beispiel ist die erste Zeile 50 Pixel hoch (10% von 500), die zweite Zeile ist 100 Pixel hoch (20% von 500) und die dritte Zeile ist 600 Pixel hoch.
Wenn wir in diesen beiden Eigenschaften Prozentsätze verwenden, müssen wir darauf achten, dass Zeilen als Prozentsatz der Rasterhöhe und Spalten als Prozensatz der Rasterbreite definiert sind!
Die Abkürzungs Eigenschaft grid-template kann die beiden vorherigen CSS-Eigenschaften ersetzen. Sowohl grid-template-rows als auch grid-template-columns sind im folgenden Code nirgends zu finden!
Bei Verwendung von grid-templates bestimmen die Werte vor dem Schrägstrich die Größe jeder Zeile. Die Werte nach dem Schrägstrich bestimmen die Größe jeder Zeile. Die Werte nach dem Schrägstrich bestimmen die Größe jeder Spalte. In diesem Beispiel haben wir zwei Zeilen und drei Spalten unterschiedlicher Größe erstellt.
Es gelten die gleichen Regeln wie zuvor. Wenn wir Prozentsätze zum Festlegen von Zeilen verwenden, entspricht jede Zeile einem Prozentsatz der Gesamthöhe des Rasters. Spalten entsprechen weiterhin einem Prozentsatz der Gesamtbreite.
Möglicherweise sind wir bereits mit mehreren Typen responsiver Einheiten vertraut, beispielsweise Prozentsätze (%), Ems und Rems.
CSS Grid hat eine neue relative Größeneinheit eingeführt - fr, wie Fraktion.
Mithilfe der Einheit fr können wir die Größe von Spalten und Zeilen als Bruchteil der Länge und Breite des Rasters definieren. Diese Einheit wurde speziell für die Verwendung in CSS Grid erstellt. Durch die Verwendung von fr lässt sich leichter verhindern, dass Rasterelemente über die Grenzen des Rasters hinausragen. Betrachten wir den folgenden Code:
In diesem Beispiel besteht der Raster aus drei Zeilen und drei Spalten. Die Zeilen teilen die verfügbaren 400 Pixel Höhe in vier Teile auf. Die erste Zeile erhält zwei dieser Teile, die zweite Zeile einen und die dritte Zeile einen. Daher ist die erste Zeile 200 Pixel hoch und die zweite und dritte Zeile sind 100 Pixel hoch.
Die Breite jeder Spalte ist ein Bruchteil des verfügbaren Platzes. In diesem Fall wird der verfügbare Platz in fünf Teile aufgeteilt. Die erste Spalte erhält ein Fünftel des Platzes, die zweite Spalte drei Fünftel und die letze Spalte ein Fünftel. Da die Gesamtbreite 1000 Pixel beträgt, bedeutet dies, dass die Spalten jeweils Breiten von 200 Pixel, 600 Pixel und 200 Pixel haben.
Es ist möglich, fr auch mit anderen Einheiten zu verwenden. In diesem Fall stellt jedes fr einen Bruchteil des verfügbaren Platzes dar.
In diesem Beispiel werden 60 Pixel von der zweiten Spalte eingenommen. Daher stehen der ersten und dritten Spalte 40 Pixel zur Verfügung, die untereinander aufgeteilt werden können. Da jede Spalte einen Bruchteil des Gesamtwerts erhält, sind beide am Ende 20 Pixel breit.
Die Eigenschaft, die die Anzahl der Zeilen und Spalten in einem Raster definieren, können eine Funktion als Wert annehmen. repeat() ist eine dieser Funktionen. Die Funktion repeat() wurde speziell für CSS Grid erstellt.
Die Wiederholungsfunktion dupliziert die Angaben für Zeilen oder Spalten eine bestimmte Anzahl von Malen. Im obigen Beispiel wird das Raster durch die Verwendung der Wiederholungsfunktion drei Spalten mit einer Breite von jeweils 100 Pixeln aufweisen. Dies entspricht der Eingabe von:
Repeat ist besonders nützlich bei fr. Beispielsweise würde repeat(5, 1fr) unsere Tabelle in fünf gleiche Zeilen oder Spalten aufteilen.
Schließlich kann der zweite Parameter von repeat() mehrere Werte haben.
Dieser Code erstellt vier Spalten, wobei die erste und dritte Spalte 20 Pixel breit sind und die zweite und vierte 50 Pixel breit sind.
Bisher hatten alle Raster, mit denen wir gearbeitet haben, eine feste Größe. Das Raster in unserem Beispiel war 400 Pixel breit und 500 Pixel hoch. Manchmal möchten wir jedoch möglicherweise, dass die Größe eines Rasters an die Größe unseres Webbrowsers angepasst wird.
In solchen Situationen möchten wir vielleicht verhindern, dass eine Zeile oder Spalte zu groß oder zu klein wird. Wenn wir beispielsweise ein 100 Pixel breites Bild in unserem Raster haben, möchten wir wahrscheinlich nicht, dass die Spalte dünner als 100 Pixel wird! Die Funktion minmax() kann uns helfen, dieses Problem zu lösen.
In diesem Beispiel sind die erste und dritte Spalte immer 100 Pixel breit, unabhängig von der Größe des Rasters. Die Größe der zweiten Spalte variiert jedoch, wenn die Größe des Gesamtrasters geändert wird. Die zweite Spalte ist immer zwischen 100 und 500 Pixel breit.
In allen unseren Rastern gab es bisher keinen Abstand zwischen den Elementen in unserem Raster. Die CSS-Eigenschaft row-gap und column-gap fügen zwischen jeder Zeile und Spalte im Raster einen Leerraum ein.
Es ist wichtig zu beachten, dass Rasterlückeneigenschaften keinen Platz am Anfang oder Ende des Rasters hinzufügen. Im Beispielcode hat unser Raster drei Spalten mit zwei 10-Pixel-Lücken dazwischen.
Berechnen wir schnell, wie breit diese Spalten sind. Denken wir daran, dass bei Verwendung von fr der gesamte verfügbare Platz berücksichtigt wird. Das Raster ist 320 Pixel breit und 20 dieser Pixel werden von den beiden Rasterlücken eingenommen. Daher nimmt jede Spalte einen Teil der 300 verfügbaren Pixel ein. Jede Spalte erhält 1fr, sodass die Spalten gleichmäßig in Drittel (oder jeweils 100 Pixel) aufgeteilt werden.
Schließlich gibt es eine CSS-Kurzschrifteigenschaft, gap, mit der der Zeilen- und Spaltenabstand gleichzeitig festgelegt werden kann.