CSS
Layout

Layout mit FlexBox

Mit dem sogenannten FlexBox-Layout kann für verschiedene Display-Größen (Laptop, Smartphone, usw.) eine automatisch passende Anordnung der HTML-Elemente erreicht werden.

FlexBox wird angewendet auf beliebige HTML-Elemente, um das Layout der in diesem Element enthaltenen Kindelemente festzulegen.

Betrachten wir folgendes Beispiel:

Dort sehen wir ein <div>-Element mit dem id-Attributwert container und weiteren Kindelementen. Da solche Elemente andere Elemente enthalten, werden diese oft „Container“-Elemente genannt. Hier enthält das Container-Element drei weitere <div>-Kindelemente, welche durch das CSS als drei Quadrate in verschiedenen Farben erscheinen. Mit diesem Beispiel soll nun das FlexBox-Layout erläutert werden.

Um das FlexBox-Layout für das Container-Element zu aktivieren, muss auf dieses Element folgende CSS-Deklaration angewendet werden:

FlexBox und flex-direction

display: flex;

Fügen wir also diese Deklaration dem CSS im Beispiel hinzu:

Nun ist zu sehen, dass die drei Quadrate horizontal ausgerichtet werden. Für das Container-div-Element ist nun die FlexBox aktiv. Die Anordnung der Elemente innerhalb des FlexBox-Layouts orientiert sich an der Ausrichtung der sogenannten Hauptachse. Diese verläuft standardmäßig horizontal von links nach rechts. Die Ausrichtung der Hauptachse innerhalb der FlexBox wird mit der CSS-Eigenschaft flex-direction festgelegt. Der Wert row ist hierbei der Default-Wert einer FlexBox, wenn diese Eigenschaft nicht ausdrücklich gesetzt wird, so wie im Beispiel oben zu sehen.

Flex Direction Row

Mit dem Wert column für flex-direction erfolgt die Ausrichtung der Hauptachse von oben nach unten bzw. vertikal.

Flex Direction Column

In unserem Beispiel hat dies die Auswirkung, dass die drei Quadrate nun vertikal von oben nach unten angeordnet werden. Würde in dem obigen Beispiel der Wert für flex-direction wieder auf row gesetzt, dann würde die Anordnung der Quadrat wie zuvor ohne Angabe von flex-direction horizontal von links nach rechts ausfallen.

Wie in den beiden Abbildungen zu sehen, gibt es neben der Hauptachse auch eine „Querachse“. Diese verläuft jeweils im rechten Winkel oder um 90˚ gedreht zur Hauptachse, abhängig von flex-direction.

Anordnung mit justify-content und align-items

Mit den Eigenschaften justify-content und align-items kann die konkrete Anordnung der Elemente für die Hauptachse (justify-content) und Querachse (align-items) beeinflusst werden. Für beide Eigenschaften steht der Wert center bereit, mit dem die Elemente sowohl auf der Hauptachse also auch auf der Querachse zentriert angeordnet werden.

Folgendes Beispiel zeigt die Kombination von justify-content: space-around und align-items: center:

Einige Eigenschaften stehen für die Anordnung auf den beiden Achsen zur Verfügung, ein paar relevante Beispiele:

  • Hauptachse: justify-content: center | space-between | space-around | space-evenly | flex-start | flex-end | …
  • Querachse: align-items: center | flex-start | flex-end | …

Die Verwendung des FlexBox-Layouts kann gut dadurch erlernt werden, wenn mit den verschiedenen Eigenschaften und Werten experimentiert wird, wozu sich das obige Beispiel gut eignet.

flex-wrap

Eine weitere nützliche Eigenschaft des FlexBox-Layouts ist flex-wrap, womit ein automatischer Umbruch der enthaltenen Elemente auf die nächste Zeile bzw. Spalte erreicht werden kann. Sollten also die Elemente nicht auf die Hauptachse des umgebenden FlexBox-Containers passen, z.B. wenn die Webseite auf einem Smartphone betrachtet wird, dann kann mit folgender Deklaration erreicht werden, dass die Elemente sichtbar bleiben, da ein Umbruch am Ende der FlexBox erfolgt:

flex-wrap: wrap;

Ausblick

Das FlexBox-Layout bietet noch einige weitere Konfigurationsmöglichkeiten an. Siehe dazu die Dokumentation im Mozilla Developer Network (MDN) hier (opens in a new tab) und hier (opens in a new tab).

Eine ähnlich mächtige Alternative zum FlexBox-Layout ist das GridLayout (opens in a new tab).

Mit der Eigenschaft position kann die Positionierung einzelner Elemente bestimmt werden, mehr dazu bei MDN (opens in a new tab).