Layout mit Flexbox und Grid
Bis hierher stand alles untereinander. Für alles andere gibt es zwei Werkzeuge – eines für eine Reihe, eines für ein Raster.
Flexbox: eine Reihe
display: flex am Elternelement ordnet dessen Kinder in einer Reihe an. Danach steuerst du sie mit:
| Eigenschaft | Wirkung |
|---|---|
gap |
Abstand zwischen den Kindern |
justify-content |
Verteilung entlang der Reihe |
align-items |
Ausrichtung quer zur Reihe |
flex-wrap: wrap |
erlaubt den Umbruch in mehrere Zeilen |
flex-direction: column |
ordnet untereinander statt nebeneinander an |
Wichtig: Die Eigenschaften stehen am Container, nicht an den Kindern.
Probiere für justify-content nacheinander diese Werte aus und beschreibe jeweils in einem Satz, was passiert:
flex-start, center, flex-end, space-between, space-around, space-evenly
Probiere danach für align-items: stretch, center, flex-start, flex-end.
Tipp: Ich sehe keinen Unterschied
Ändere immer nur einen Wert und sieh sofort in die Vorschau.
Wenn sich bei justify-content gar nichts tut, ist meist kein Platz übrig: Die Eigenschaft verteilt den freien Raum in der Reihe. Zieh die Trennlinie zwischen Vorschau und Editor nach rechts, damit die Leiste breiter wird – dann werden die Unterschiede sichtbar.
Grid: ein Raster
display: grid ordnet die Kinder in einem Raster aus Zeilen und Spalten an.
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
Diese Zeile liest sich so: „Mach so viele Spalten, wie hineinpassen. Jede ist mindestens 12rem breit und teilt sich den übrigen Platz zu gleichen Teilen (1fr)."
Die Einheit fr ist ein Anteil am verfügbaren Platz. Zwei Spalten mit 1fr 2fr teilen sich den Platz im Verhältnis 1 zu 2.
a) Verschiebe die Trennlinie zwischen Vorschau und Editor, um die Vorschau schmaler und breiter zu machen. Wie viele Spalten entstehen jeweils?
b) Ändere 12rem in 20rem. Was ändert sich?
c) Ersetze die ganze Zeile durch grid-template-columns: 1fr 1fr;. Was ist jetzt anders, wenn die Vorschau sehr schmal wird?
Wann Flexbox, wann Grid?
| Flexbox | Grid | |
|---|---|---|
| Denkweise | eine Reihe (oder Spalte) | zwei Richtungen: Zeilen und Spalten |
| Gut für | Navigationen, Knopfleisten, Kopfzeilen | Kartenraster, Bildergalerien, Seitenaufteilung |
| Größe der Teile | ergibt sich aus dem Inhalt | wird vom Raster vorgegeben |
Faustregel: Geht es in eine Richtung, nimm Flexbox. Geht es in zwei, nimm Grid.
Beides lässt sich kombinieren – ein Grid-Feld darf innen eine Flexbox sein.
Eine ganze Seite aufbauen
a) grid-column: 1 / -1 bedeutet: von der ersten Spaltenlinie bis zur letzten. Was passiert, wenn du diese Regel löschst?
b) Ändere grid-template-columns auf 1fr 3fr. In welchem Verhältnis stehen Navigation und Hauptinhalt jetzt?
c) min-height: 100vh sorgt dafür, dass die Seite mindestens bildschirmhoch ist. Was bedeutet die Einheit vh wohl?