Zum Inhalt springen

Flexbox - Grundlagen

Mit Flexbox (Flexible Box Layout) ordnet ihr die direkten Kinder eines Elements entlang einer Achse an - entweder nebeneinander oder untereinander:

Flexbox auf verschiedenen Geräten

.projects {
display: flex;
}
  • display: flex macht aus dem Element einen Flex-Container
  • Alle direkten Kinder werden automatisch zu Flex-Items
  • Ohne weitere Angaben: Die Kinder stehen nebeneinander, in einer Zeile, auf voller Höhe des Containers

Das Eltern-Element legt die Richtung fest: horizontal (in einer Zeile) oder vertikal (in einer Spalte):

.projects {
display: flex;
flex-direction: row; /* Standard: nebeneinander */
/* flex-direction: column; */ /* Alternative: untereinander */
}
WertRichtung
row (Standard)nebeneinander, von links nach rechts
row-reversenebeneinander, von rechts nach links
columnuntereinander, von oben nach unten
column-reverseuntereinander, von unten nach oben

Praxisbeispiel: Navigationsmenü als Zeile oder Spalte

Abschnitt betitelt „Praxisbeispiel: Navigationsmenü als Zeile oder Spalte“

Derselbe Ausgangspunkt - eine ganz normale Liste mit Links in einem nav-Tag, auch ohne CSS benutzbar:

<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/ueber-uns">Über uns</a></li>
<li><a href="/kontakt">Kontakt</a></li>
</ul>
</nav>
nav ul {
display: flex;
list-style: none;
padding-left: 0;
}

Nur mit display: flex steht das Menü schon horizontal nebeneinander - flex-direction: row ist ja der Standard. Ein einziges Wort macht daraus ein vertikales Menü:

nav ul {
display: flex;
flex-direction: column; /* statt row */
list-style: none;
padding-left: 0;
}

Flexbox denkt in zwei Achsen - das ist der Schlüssel zum Verständnis der nächsten Properties:

  • Hauptachse (main axis): die Richtung von flex-direction - bei row also horizontal
  • Querachse (cross axis): immer senkrecht zur Hauptachse - bei row also vertikal

Verteilung entlang der Hauptachse: justify-content

Abschnitt betitelt „Verteilung entlang der Hauptachse: justify-content“
.projects {
display: flex;
justify-content: flex-start; /* Standard: alle möglichst weit links */
}
WertVerhalten
flex-start (Standard)alle Elemente am Anfang
flex-endalle Elemente am Ende
centeralle Elemente zentriert
space-betweenerstes/letztes Element am Rand, Rest gleichmäßig verteilt
space-aroundgleicher Abstand rundum jedes Elements
.projects {
display: flex;
align-items: center; /* alle Elemente vertikal zentriert (bei row) */
}
WertVerhalten
stretch (Standard)alle Elemente füllen die volle Höhe des Containers
flex-startalle Elemente am Anfang der Querachse
flex-endalle Elemente am Ende der Querachse
centeralle Elemente auf der Querachse zentriert