Eigenschaften des Flex-Containers
Die Eigenschaften des Flex-Containers bestimmen die Richtung, den Umbruch,
die Verteilung und die Ausrichtung seiner direkten Kindelemente.
Sie werden am Flex-Container festgelegt und wirken sich auf die darin
enthaltenen Flex-Items aus.
flex-direction
Die Eigenschaft flex-direction legt die Richtung der
Hauptachse fest. Dadurch wird bestimmt, in welcher Richtung die Flex-Items
innerhalb des Flex-Containers angeordnet werden.
.flex-container {
display: flex;
flex-direction: row;
}
| Wert |
Bedeutung |
row |
Die Items werden entlang der Textrichtung nebeneinander angeordnet.
Bei einer deutschen Webseite normalerweise von links nach rechts.
|
row-reverse |
Die Items werden nebeneinander, aber in umgekehrter Richtung
angeordnet.
|
column |
Die Items werden untereinander angeordnet. Die Hauptachse verläuft
von oben nach unten.
|
column-reverse |
Die Items werden untereinander, aber in umgekehrter Richtung
angeordnet.
|
row
row ist der Standardwert. Die Flex-Items werden entlang der
horizontalen Hauptachse angeordnet.
.flex-example-direction-row {
flex-direction: row;
}
row-reverse
Mit row-reverse verläuft die Hauptachse in umgekehrter
Richtung. Die visuelle Reihenfolge der Items wird dadurch umgedreht.
.flex-example-direction-row-reverse {
flex-direction: row-reverse;
}
column
Mit column werden die Flex-Items untereinander angeordnet. Die
Hauptachse verläuft normalerweise von oben nach unten.
.flex-example-direction-column {
flex-direction: column;
}
column-reverse
Mit column-reverse werden die Items untereinander in
umgekehrter Richtung angeordnet. Das erste Item erscheint dadurch unten.
.flex-example-direction-column-reverse {
flex-direction: column-reverse;
}
flex-direction verändert nur die visuelle Anordnung. Die
Reihenfolge der Elemente im HTML bleibt unverändert. Das ist besonders für
Tastaturbedienung und Screenreader wichtig.
flex-wrap
Die Eigenschaft flex-wrap legt fest, ob die Flex-Items in einer
einzigen Flexzeile bleiben oder bei Platzmangel auf mehrere Flexzeilen
umgebrochen werden.
.flex-container {
display: flex;
flex-wrap: wrap;
}
| Wert |
Bedeutung |
nowrap |
Die Items bleiben in einer einzigen Flexzeile. Bei Platzmangel können
sie verkleinert werden oder über den Container hinausragen.
|
wrap |
Die Items werden bei Platzmangel auf mehrere Flexzeilen umgebrochen.
|
wrap-reverse |
Die Items werden auf mehrere Flexzeilen umgebrochen. Die Richtung der
Querachse und damit die Reihenfolge der Flexzeilen wird umgekehrt.
|
nowrap
nowrap ist der Standardwert. Alle Flex-Items bleiben in einer
einzigen Flexzeile.
In diesem Beispiel besitzen die Items eine feste Basisbreite. Reicht der Platz
nicht aus, kann horizontal gescrollt werden.
.flex-example-wrap-nowrap {
flex-wrap: nowrap;
overflow-x: auto;
}
wrap
Mit wrap werden die Flex-Items bei Platzmangel auf weitere
Flexzeilen umgebrochen.
.flex-example-wrap-wrap {
flex-wrap: wrap;
align-content: flex-start;
}
wrap-reverse
Mit wrap-reverse werden die Items ebenfalls auf mehrere
Flexzeilen verteilt. Die Reihenfolge der Flexzeilen entlang der Querachse
wird jedoch umgekehrt.
.flex-example-wrap-reverse {
flex-wrap: wrap-reverse;
align-content: flex-start;
}
Ob ein Umbruch erforderlich ist, hängt von der verfügbaren Breite des
Containers und von der Größe der Flex-Items ab.
flex-wrap bestimmt nur, ob und in welcher Richtung mehrere
Flexzeilen entstehen. Die Verteilung dieser Zeilen im Container wird mit
align-content gesteuert.
flex-flow
Die Eigenschaft flex-flow ist die Kurzschreibweise für
flex-direction und flex-wrap.
.flex-container {
display: flex;
flex-flow: row wrap;
}
Der erste Wert legt die Richtung der Hauptachse fest. Der zweite Wert
bestimmt, ob die Flex-Items umgebrochen werden.
| Schreibweise |
Entspricht |
Bedeutung |
flex-flow: row nowrap |
flex-direction: row
flex-wrap: nowrap
|
Die Items werden nebeneinander angeordnet und nicht umgebrochen.
|
flex-flow: row wrap |
flex-direction: row
flex-wrap: wrap
|
Die Items werden nebeneinander angeordnet und bei Platzmangel
umgebrochen.
|
flex-flow: row-reverse wrap |
flex-direction: row-reverse
flex-wrap: wrap
|
Die Hauptachse verläuft in umgekehrter Richtung. Bei Platzmangel
entstehen mehrere Flexzeilen.
|
flex-flow: column nowrap |
flex-direction: column
flex-wrap: nowrap
|
Die Items werden untereinander in einer einzigen Flexspalte
angeordnet.
|
flex-flow: column wrap |
flex-direction: column
flex-wrap: wrap
|
Die Items werden untereinander angeordnet und bei Platzmangel in
weitere Flexspalten umgebrochen.
|
flex-flow: column-reverse wrap |
flex-direction: column-reverse
flex-wrap: wrap
|
Die Spaltenrichtung wird umgekehrt. Bei Platzmangel entstehen
weitere Flexspalten.
|
row nowrap
Die Items werden von links nach rechts in einer einzigen Flexzeile
angeordnet. Ein Umbruch ist nicht erlaubt.
.flex-example-flow-row-nowrap {
flex-flow: row nowrap;
overflow-x: auto;
}
row wrap
Die Items werden nebeneinander angeordnet und bei Platzmangel auf weitere
Flexzeilen umgebrochen.
.flex-example-flow-row-wrap {
flex-flow: row wrap;
}
row-reverse wrap
Die Items werden in umgekehrter Zeilenrichtung angeordnet und bei
Platzmangel umgebrochen.
.flex-example-flow-row-reverse-wrap {
flex-flow: row-reverse wrap;
}
column nowrap
Die Items werden von oben nach unten in einer einzigen Flexspalte
angeordnet.
.flex-example-flow-column-nowrap {
flex-flow: column nowrap;
overflow-y: auto;
}
column wrap
Die Items werden untereinander angeordnet. Wenn die Höhe des Containers
nicht ausreicht, entstehen weitere Flexspalten.
.flex-example-flow-column-wrap {
flex-flow: column wrap;
}
column-reverse wrap
Die Items werden in umgekehrter Spaltenrichtung angeordnet. Bei Platzmangel
entstehen weitere Flexspalten.
.flex-example-flow-column-reverse-wrap {
flex-flow: column-reverse wrap;
}
Wird nur ein Wert angegeben, erkennt der Browser anhand des Wertes, ob
damit flex-direction oder flex-wrap gemeint ist.
Für eine verständliche Schreibweise sollten in Lernbeispielen beide Werte
angegeben werden.
justify-content
Die Eigenschaft justify-content richtet die Flex-Items entlang
der Hauptachse aus und verteilt den verfügbaren freien Platz.
Die Richtung der Hauptachse wird durch flex-direction
bestimmt. Bei row verläuft sie normalerweise horizontal, bei
column vertikal.
.flex-container {
display: flex;
justify-content: center;
}
| Wert |
Bedeutung |
normal |
Verwendet die normale Ausrichtung. Bei Flexbox wirkt dieser Wert
grundsätzlich wie flex-start.
|
flex-start |
Die Items werden am Anfang der Hauptachse angeordnet.
|
flex-end |
Die Items werden am Ende der Hauptachse angeordnet.
|
center |
Die Items werden als Gruppe entlang der Hauptachse zentriert.
|
space-between |
Das erste Item liegt am Anfang und das letzte am Ende. Der freie
Platz wird gleichmäßig zwischen den Items verteilt.
|
space-around |
Um jedes Item wird gleich viel Platz verteilt. Die äußeren Abstände
sind halb so groß wie die Abstände zwischen den Items.
|
space-evenly |
Die Abstände zwischen den Items und zu den Rändern sind gleich groß.
|
normal
Bei Flexbox entspricht normal grundsätzlich der Anordnung am
Anfang der Hauptachse.
.flex-example-justify-normal {
justify-content: normal;
}
flex-start
Die Items werden am Anfang der Hauptachse angeordnet.
.flex-example-justify-start {
justify-content: flex-start;
}
flex-end
Die Items werden am Ende der Hauptachse angeordnet.
.flex-example-justify-end {
justify-content: flex-end;
}
center
Die Items werden als zusammenhängende Gruppe zentriert.
.flex-example-justify-center {
justify-content: center;
}
space-between
Das erste Item liegt am Anfang und das letzte am Ende. Der freie Platz wird
nur zwischen den Items verteilt.
.flex-example-justify-space-between {
justify-content: space-between;
}
space-around
Um jedes Item wird gleich viel Platz verteilt. Dadurch sind die äußeren
Abstände halb so groß wie die Abstände zwischen den Items.
.flex-example-justify-space-around {
justify-content: space-around;
}
space-evenly
Sämtliche Abstände zwischen den Items und zu den Rändern sind gleich groß.
.flex-example-justify-space-evenly {
justify-content: space-evenly;
}
justify-content verteilt nur tatsächlich vorhandenen freien
Platz. Wenn die Flex-Items den Container bereits vollständig ausfüllen, ist
möglicherweise kein Unterschied zwischen den Werten sichtbar.
align-items
Die Eigenschaft align-items richtet alle Flex-Items innerhalb
ihrer jeweiligen Flexzeile entlang der Querachse aus.
Bei flex-direction: row verläuft die Querachse normalerweise
vertikal. Bei flex-direction: column verläuft sie
normalerweise horizontal.
.flex-container {
display: flex;
align-items: center;
}
| Wert |
Bedeutung |
normal |
Verwendet die normale Ausrichtung. Bei Flexbox verhält sich dieser
Wert grundsätzlich wie stretch.
|
stretch |
Items ohne festgelegte Größe entlang der Querachse werden
gestreckt.
|
flex-start |
Die Items werden am Anfang der Querachse angeordnet.
|
flex-end |
Die Items werden am Ende der Querachse angeordnet.
|
center |
Die Items werden entlang der Querachse zentriert.
|
baseline |
Die Items werden an der Grundlinie ihres Textes ausgerichtet.
|
normal
Bei Flexbox wirkt normal grundsätzlich wie
stretch.
.flex-example-align-items-normal {
align-items: normal;
}
stretch
stretch ist der Standardwert. Items ohne feste Höhe werden
entlang der Querachse über die verfügbare Höhe der Flexzeile gestreckt.
.flex-example-align-items-stretch {
align-items: stretch;
}
flex-start
Die Items werden am Anfang der Querachse angeordnet.
.flex-example-align-items-start {
align-items: flex-start;
}
flex-end
Die Items werden am Ende der Querachse angeordnet.
.flex-example-align-items-end {
align-items: flex-end;
}
center
Die Items werden entlang der Querachse zentriert.
.flex-example-align-items-center {
align-items: center;
}
baseline
Die Items werden an der Grundlinie ihres Textes ausgerichtet. Durch die
unterschiedlichen Schriftgrößen ist die Wirkung gut sichtbar.
.flex-example-align-items-baseline {
align-items: baseline;
}
align-items gilt gemeinsam für alle Items des
Flex-Containers. Soll nur ein einzelnes Flex-Item abweichend ausgerichtet
werden, wird dafür align-self verwendet.
align-content
Die Eigenschaft align-content richtet mehrere Flexzeilen
entlang der Querachse aus und verteilt den verfügbaren freien Platz
zwischen diesen Zeilen.
Damit align-content sichtbar wirkt, müssen mehrere
Flexzeilen vorhanden sein. Der Flex-Container benötigt daher
flex-wrap: wrap und ausreichend Platz entlang der Querachse.
.flex-container {
display: flex;
flex-wrap: wrap;
align-content: center;
}
| Wert |
Bedeutung |
normal |
Verwendet die normale Verteilung. Bei Flexbox verhält sich
dieser Wert grundsätzlich wie stretch.
|
stretch |
Die Flexzeilen werden entlang der Querachse gestreckt, sodass
sie den verfügbaren Platz ausfüllen.
|
flex-start |
Die Flexzeilen werden am Anfang der Querachse angeordnet.
|
flex-end |
Die Flexzeilen werden am Ende der Querachse angeordnet.
|
center |
Die Flexzeilen werden als Gruppe entlang der Querachse
zentriert.
|
space-between |
Die erste Flexzeile liegt am Anfang und die letzte am Ende.
Der freie Platz wird zwischen den Flexzeilen verteilt.
|
space-around |
Um jede Flexzeile wird gleich viel Platz verteilt. Die äußeren
Abstände sind halb so groß wie die Abstände zwischen den Zeilen.
|
space-evenly |
Die Abstände zwischen den Flexzeilen und zu den Rändern sind
gleich groß.
|
normal
Bei Flexbox wirkt normal grundsätzlich wie
stretch. Der freie Platz wird auf die Flexzeilen verteilt.
.flex-example-align-content-normal {
align-content: normal;
}
stretch
Mit stretch werden die Flexzeilen entlang der Querachse
gestreckt, sodass sie den verfügbaren Platz ausfüllen.
.flex-example-align-content-stretch {
align-content: stretch;
}
flex-start
Die Flexzeilen werden am Anfang der Querachse angeordnet.
.flex-example-align-content-start {
align-content: flex-start;
}
flex-end
Die Flexzeilen werden am Ende der Querachse angeordnet.
.flex-example-align-content-end {
align-content: flex-end;
}
center
Die Flexzeilen werden als zusammenhängende Gruppe entlang der
Querachse zentriert.
.flex-example-align-content-center {
align-content: center;
}
space-between
Die erste Flexzeile liegt am Anfang und die letzte am Ende der
Querachse. Der freie Platz wird nur zwischen den Zeilen verteilt.
.flex-example-align-content-space-between {
align-content: space-between;
}
space-around
Um jede Flexzeile wird gleich viel Platz verteilt. Dadurch sind die
äußeren Abstände halb so groß wie die Abstände zwischen den Zeilen.
.flex-example-align-content-space-around {
align-content: space-around;
}
space-evenly
Die Abstände zwischen den Flexzeilen und zu den Rändern des
Containers sind gleich groß.
.flex-example-align-content-space-evenly {
align-content: space-evenly;
}
align-content richtet vollständige Flexzeilen aus.
Für die Ausrichtung der einzelnen Items innerhalb ihrer jeweiligen
Zeile wird dagegen align-items verwendet.
Befinden sich alle Items in nur einer Flexzeile, hat
align-content keine sichtbare Wirkung.
gap, row-gap und column-gap
Mit gap, row-gap und
column-gap werden Abstände zwischen Flex-Items
beziehungsweise zwischen Flexzeilen festgelegt.
Im Unterschied zu margin entstehen durch diese
Eigenschaften nur Abstände zwischen den Items. Am äußeren Rand des
Flex-Containers wird kein zusätzlicher Abstand erzeugt.
.flex-container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
| Eigenschaft |
Bedeutung |
gap |
Kurzschreibweise für row-gap und
column-gap.
|
row-gap |
Legt den Abstand zwischen den Flexzeilen fest.
|
column-gap |
Legt bei einer zeilenförmigen Anordnung den horizontalen
Abstand zwischen den Items fest.
|
Kein Abstand
Mit gap: 0 entsteht kein zusätzlicher Abstand zwischen
den Flex-Items.
.flex-example-gap-none {
gap: 0;
}
gap mit einem Wert
Wird nur ein Wert angegeben, gilt dieser sowohl für den Abstand
zwischen den Zeilen als auch für den Abstand zwischen den Items
innerhalb einer Zeile.
.flex-example-gap-one-value {
gap: 1rem;
}
gap mit zwei Werten
Bei zwei Werten bestimmt der erste Wert den Abstand zwischen den
Zeilen. Der zweite Wert bestimmt den Abstand zwischen den Items
innerhalb einer Zeile.
.flex-example-gap-two-values {
gap: 2rem 1rem;
}
Diese Kurzschreibweise entspricht:
.flex-example-gap-two-values {
row-gap: 2rem;
column-gap: 1rem;
}
row-gap
row-gap legt nur den Abstand zwischen den Flexzeilen
fest. Zwischen den Items derselben Zeile entsteht in diesem Beispiel
kein zusätzlicher Abstand.
.flex-example-row-gap {
row-gap: 2rem;
column-gap: 0;
}
column-gap
column-gap legt bei
flex-direction: row den horizontalen Abstand zwischen
den Items fest. Zwischen den Flexzeilen entsteht in diesem Beispiel
kein zusätzlicher Abstand.
.flex-example-column-gap {
row-gap: 0;
column-gap: 2rem;
}
Mögliche Werte
Für die Abstände können unter anderem folgende CSS-Längeneinheiten
verwendet werden:
px – feste Angabe in Pixeln
rem – abhängig von der Schriftgröße des Wurzelelements
em – abhängig von der Schriftgröße des Elements
% – prozentuale Angabe
vw – abhängig von der Breite des Viewports
vh – abhängig von der Höhe des Viewports
Zusätzlich kann der Wert normal verwendet werden. Bei
Flexbox entspricht er im Allgemeinen einem Abstand von
0.
gap ist für Flexbox-Layouts meist übersichtlicher als
Abstände mit margin, weil keine Sonderbehandlung für
das erste oder letzte Item erforderlich ist.
Eigenschaften der Flex-Items
Die Eigenschaften in diesem Abschnitt werden direkt auf einzelne Flex-Items
angewendet. Damit kann festgelegt werden, in welcher Reihenfolge die Items
erscheinen, wie sie wachsen oder schrumpfen und wie viel Platz sie zunächst
einnehmen.
Zu den wichtigsten Eigenschaften der Flex-Items gehören:
order – verändert die visuelle Reihenfolge
flex-grow – verteilt zusätzlichen freien Platz
flex-shrink – bestimmt das Schrumpfverhalten
flex-basis – legt die Ausgangsgröße fest
-
flex – Kurzschreibweise für
flex-grow, flex-shrink und
flex-basis
-
align-self – richtet ein einzelnes Flex-Item entlang der
Querachse aus
order
Die Eigenschaft order bestimmt die visuelle Reihenfolge eines
Flex-Items innerhalb des Flex-Containers.
Standardmäßig besitzen alle Flex-Items den Wert 0. Items mit
einem kleineren Wert werden vor Items mit einem größeren Wert angezeigt.
.flex-example-item {
order: 0;
}
| Wert |
Bedeutung |
0 |
Standardwert. Die Items werden entsprechend ihrer Reihenfolge im
HTML dargestellt.
|
| Positive Ganzzahl |
Das Item wird hinter Items mit einem kleineren
order-Wert angeordnet.
|
| Negative Ganzzahl |
Das Item wird vor Items mit einem höheren
order-Wert angeordnet.
|
Reihenfolge ohne order
Ohne eine Angabe von order werden die Items in der Reihenfolge
angezeigt, in der sie im HTML stehen.
<div class="flex-example">
<div class="flex-example-item">Item 1</div>
<div class="flex-example-item">Item 2</div>
<div class="flex-example-item">Item 3</div>
</div>
Item 1 an das Ende verschieben
Item 1 erhält den Wert 1. Die beiden anderen Items behalten
den Standardwert 0. Deshalb wird Item 1 am Ende angezeigt.
.flex-example-order-one {
order: 1;
}
Item 3 an den Anfang verschieben
Item 3 erhält den Wert -1. Dieser Wert ist kleiner als der
Standardwert 0 der übrigen Items. Item 3 wird deshalb zuerst
angezeigt.
.flex-example-order-minus-one {
order: -1;
}
Jedem Item einen Wert zuweisen
In diesem Beispiel erhält jedes Item einen eigenen
order-Wert. Angezeigt werden die Items vom kleinsten bis zum
größten Wert.
Item 1 – order: 3
Item 2 – order: 1
Item 3 – order: 2
.flex-example-order-first {
order: 1;
}
.flex-example-order-second {
order: 2;
}
.flex-example-order-third {
order: 3;
}
Haben mehrere Items denselben order-Wert, bleibt zwischen
diesen Items die Reihenfolge aus dem HTML erhalten.
Wichtig: order verändert nur die visuelle
Darstellung. Die Reihenfolge im HTML und damit auch die Reihenfolge für
Tastaturbedienung und Screenreader bleibt unverändert.
Deshalb sollte order nicht verwendet werden, um eine
grundsätzlich falsche HTML-Reihenfolge zu korrigieren. Die Inhalte sollten
bereits im HTML in einer sinnvollen Reihenfolge stehen.
flex-grow
Die Eigenschaft flex-grow bestimmt, ob und wie stark ein
Flex-Item wachsen darf, wenn im Flex-Container noch freier Platz vorhanden
ist.
Der Standardwert ist 0. Das bedeutet, dass ein Flex-Item nicht
wächst. Ein positiver Wert erlaubt dem Item, einen Anteil des verfügbaren
freien Platzes zu erhalten.
.flex-item {
flex-grow: 1;
}
| Wert |
Bedeutung |
0 |
Standardwert. Das Flex-Item wächst nicht und behält grundsätzlich
seine Ausgangsgröße.
|
1 |
Das Flex-Item darf wachsen. Haben alle Items den Wert
1, wird der freie Platz gleichmäßig verteilt.
|
2 |
Das Flex-Item erhält doppelt so viel vom freien Platz wie ein Item
mit flex-grow: 1.
|
| Andere positive Zahlen |
Die Werte bestimmen das Verhältnis, in dem der freie Platz auf die
Flex-Items verteilt wird.
|
Standardwert flex-grow: 0
Standardmäßig wachsen Flex-Items nicht. Der freie Platz am Ende des
Flex-Containers bleibt deshalb ungenutzt.
.flex-example-grow-default .flex-example-item {
flex-grow: 0;
}
Alle Items wachsen gleich stark
Alle drei Items erhalten flex-grow: 1. Der vorhandene freie
Platz wird gleichmäßig auf die Items verteilt.
.flex-example-grow-equal .flex-example-item {
flex-grow: 1;
}
Nur ein Item darf wachsen
Nur Item 2 erhält flex-grow: 1. Die beiden anderen Items
behalten den Standardwert 0. Deshalb erhält Item 2 den gesamten
verfügbaren freien Platz.
.flex-example-grow-active {
flex-grow: 1;
}
Freien Platz im Verhältnis 1 : 2 : 1 verteilen
Die Werte von flex-grow bilden ein Verhältnis. Item 2 erhält
mit dem Wert 2 doppelt so viel vom freien Platz wie Item 1 und
Item 3 mit dem Wert 1.
Item 1 – grow: 1
Item 2 – grow: 2
Item 3 – grow: 1
.flex-example-grow-1 {
flex-grow: 1;
}
.flex-example-grow-2 {
flex-grow: 2;
}
Bei einem Verhältnis von 1 : 2 : 1 wird der freie Platz in vier
Anteile aufgeteilt. Item 1 und Item 3 erhalten jeweils einen Anteil. Item 2
erhält zwei Anteile.
Wichtig: Das Verhältnis gilt nur für den zusätzlich
verfügbaren freien Platz. Die bereits vorhandene Ausgangsgröße der Items
wird dabei berücksichtigt.
Ist im Flex-Container kein freier Platz vorhanden, hat
flex-grow keine sichtbare Wirkung. Für das Verhalten bei
Platzmangel ist flex-shrink zuständig.
Negative Werte sind für flex-grow nicht erlaubt.
flex-shrink
Die Eigenschaft flex-shrink bestimmt, ob und wie stark ein
Flex-Item schrumpfen darf, wenn im Flex-Container nicht genügend Platz
vorhanden ist.
Der Standardwert ist 1. Flex-Items dürfen daher standardmäßig
kleiner als ihre Ausgangsgröße werden.
.flex-item {
flex-shrink: 1;
}
| Wert |
Bedeutung |
0 |
Das Flex-Item darf nicht schrumpfen und behält seine Ausgangsgröße.
|
1 |
Standardwert. Das Flex-Item darf bei Platzmangel schrumpfen.
|
2 |
Das Flex-Item schrumpft stärker als ein vergleichbares Item mit
flex-shrink: 1.
|
| Andere positive Zahlen |
Die Werte beeinflussen das Verhältnis, in dem der fehlende Platz
auf die Flex-Items verteilt wird.
|
Standardwert flex-shrink: 1
Die drei Items besitzen jeweils eine Ausgangsbreite von
250px. Ist der Container schmaler als die Summe dieser
Breiten, schrumpfen alle Items, damit sie gemeinsam in den Container passen.
.flex-example-shrink-default .flex-example-item {
flex-basis: 250px;
flex-shrink: 1;
}
Items dürfen nicht schrumpfen
Mit flex-shrink: 0 behalten die Items ihre Ausgangsbreite.
Reicht der Platz nicht aus, ragen sie aus dem Container heraus.
.flex-example-shrink-none .flex-example-item {
flex-basis: 250px;
flex-shrink: 0;
}
Nur ein Item darf schrumpfen
Item 1 und Item 3 erhalten flex-shrink: 0. Nur Item 2 darf
schrumpfen und muss daher den Platzmangel allein ausgleichen.
Item 1 – shrink: 0
Item 2 – shrink: 1
Item 3 – shrink: 0
.flex-example-shrink-one-item .flex-example-item {
flex-basis: 250px;
flex-shrink: 0;
}
.flex-example-shrink-one-item .flex-example-shrink-active {
flex-shrink: 1;
}
Unterschiedliche shrink-Werte
Alle Items besitzen dieselbe Ausgangsgröße. Item 2 erhält
flex-shrink: 2 und schrumpft daher stärker als Item 1 und
Item 3 mit dem Wert 1.
Item 1 – shrink: 1
Item 2 – shrink: 2
Item 3 – shrink: 1
.flex-example-shrink-ratio .flex-example-item {
flex-basis: 250px;
}
.flex-example-shrink-1 {
flex-shrink: 1;
}
.flex-example-shrink-2 {
flex-shrink: 2;
}
Die Berechnung von flex-shrink berücksichtigt neben dem
Shrink-Wert auch die Ausgangsgröße des jeweiligen Items. Deshalb bedeutet
flex-shrink: 2 nicht in jedem Fall, dass das fertige Item
exakt halb so breit wie ein Item mit flex-shrink: 1 ist.
Bei gleich großen Ausgangsgrößen ist das Verhältnis besonders leicht
erkennbar: Ein Item mit dem Wert 2 übernimmt doppelt so viel
von der notwendigen Verkleinerung wie ein Item mit dem Wert
1.
Ist ausreichend Platz im Flex-Container vorhanden, hat
flex-shrink keine sichtbare Wirkung. Für die Verteilung von
zusätzlichem freien Platz ist flex-grow zuständig.
Negative Werte sind für flex-shrink nicht erlaubt.
flex-basis
Die Eigenschaft flex-basis legt die Ausgangsgröße eines
Flex-Items entlang der Hauptachse fest, bevor freier oder fehlender Platz
verteilt wird.
Bei flex-direction: row bestimmt
flex-basis grundsätzlich die Ausgangsbreite. Bei
flex-direction: column bestimmt sie grundsätzlich die
Ausgangshöhe.
.flex-item {
flex-basis: 200px;
}
| Wert |
Bedeutung |
auto |
Standardwert. Verwendet zunächst die Größe aus
width beziehungsweise height. Ist dort
keine Größe festgelegt, richtet sich die Ausgangsgröße nach dem
Inhalt.
|
0 |
Die Ausgangsgröße wird bei der Verteilung des freien Platzes mit
0 angesetzt. Der Inhalt kann die tatsächlich
sichtbare Mindestgröße dennoch beeinflussen.
|
200px |
Legt eine feste Ausgangsgröße von 200px entlang der
Hauptachse fest.
|
25% |
Legt die Ausgangsgröße prozentual in Bezug auf die innere Größe
des Flex-Containers entlang der Hauptachse fest.
|
content |
Bestimmt die Ausgangsgröße anhand des Inhalts des Flex-Items.
|
Standardwert flex-basis: auto
Bei flex-basis: auto wird eine vorhandene
width als Ausgangsbreite verwendet. In diesem Beispiel
besitzen alle Items width: 180px.
.flex-example-basis-auto .flex-example-item {
width: 180px;
flex-basis: auto;
}
Feste Ausgangsgröße
Mit flex-basis: 200px erhält jedes Item eine
Ausgangsbreite von 200px. Diese Größe kann durch
flex-grow oder flex-shrink anschließend noch
verändert werden.
.flex-example-basis-fixed .flex-example-item {
flex-basis: 200px;
}
Unterschiedliche Ausgangsgrößen
Den Items können unterschiedliche Ausgangsgrößen zugewiesen werden. Das
zweite Item beginnt in diesem Beispiel mit einer größeren Breite.
Item 1 – 120px
Item 2 – 280px
Item 3 – 120px
.flex-example-basis-small {
flex-basis: 120px;
}
.flex-example-basis-large {
flex-basis: 280px;
}
Prozentuale Ausgangsgröße
Prozentwerte beziehen sich auf die innere Größe des Flex-Containers
entlang der Hauptachse. Jedes Item erhält hier zunächst
25% der verfügbaren Breite.
.flex-example-basis-percent .flex-example-item {
flex-basis: 25%;
}
flex-basis: 0
Mit flex-basis: 0 wird die ursprüngliche Größe der Items
bei der Verteilung des freien Platzes nicht berücksichtigt. Zusammen mit
flex-grow: 1 entstehen dadurch grundsätzlich gleich große
Anteile.
kurz
Item mit einem deutlich längeren Inhalt
mittel
.flex-example-basis-zero .flex-example-item {
flex-grow: 1;
flex-basis: 0;
}
Unterschied zwischen width und flex-basis
Wenn gleichzeitig width und eine von
auto abweichende flex-basis angegeben sind,
verwendet Flexbox grundsätzlich flex-basis als
Ausgangsgröße entlang der Hauptachse.
.flex-example-basis-overrides-width .flex-example-item {
width: 100px;
flex-basis: 200px;
}
In diesem Beispiel ist die Ausgangsbreite daher
200px und nicht 100px.
Wichtig: flex-basis legt eine
Ausgangsgröße fest. Die endgültige Größe kann sich anschließend durch
flex-grow, flex-shrink, den verfügbaren Platz
und die Mindestgröße des Inhalts verändern.
Für die Praxis werden flex-grow,
flex-shrink und flex-basis häufig gemeinsam
mit der Kurzschreibweise flex angegeben.
flex – Kurzschreibweise
Die Eigenschaft flex ist die Kurzschreibweise für
flex-grow, flex-shrink und
flex-basis.
.flex-item {
flex: flex-grow flex-shrink flex-basis;
}
Ein vollständiges Beispiel sieht folgendermaßen aus:
.flex-item {
flex: 1 1 200px;
}
Diese Kurzschreibweise entspricht:
.flex-item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 200px;
}
| Schreibweise |
Entsprechende Einzelwerte |
Bedeutung |
flex: initial |
flex: 0 1 auto |
Das Item wächst nicht, darf schrumpfen und verwendet seine
automatische Ausgangsgröße.
|
flex: auto |
flex: 1 1 auto |
Das Item darf wachsen und schrumpfen. Seine Ausgangsgröße richtet
sich nach width, height oder dem Inhalt.
|
flex: none |
flex: 0 0 auto |
Das Item wächst und schrumpft nicht. Es behält grundsätzlich seine
automatische Ausgangsgröße.
|
flex: 1 |
flex: 1 1 0% |
Das Item darf wachsen und schrumpfen. Seine Ausgangsgröße wird bei
der Verteilung des freien Platzes mit 0% angesetzt.
|
flex: 1 1 200px |
flex-grow: 1
flex-shrink: 1
flex-basis: 200px
|
Das Item beginnt mit 200px und darf anschließend
wachsen oder schrumpfen.
|
flex: initial
flex: initial entspricht dem Ausgangsverhalten eines
Flex-Items. Das Item wächst nicht, darf bei Platzmangel aber schrumpfen.
Item 1
Item 2 mit längerem Inhalt
Item 3
.flex-example-flex-initial .flex-example-item {
flex: initial;
}
flex: auto
Mit flex: auto dürfen die Items wachsen und schrumpfen.
Ihre automatische Ausgangsgröße wird dabei berücksichtigt.
kurz
Item mit längerem Inhalt
mittel
.flex-example-flex-auto .flex-example-item {
flex: auto;
}
Da die Ausgangsgröße vom Inhalt abhängt, müssen die fertigen Items nicht
gleich breit sein.
flex: none
Mit flex: none dürfen die Items weder wachsen noch
schrumpfen. Sie behalten grundsätzlich ihre automatische Ausgangsgröße.
.flex-example-flex-none .flex-example-item {
width: 200px;
flex: none;
}
Ist der Container zu schmal, können die Items über seinen Rand
hinausragen oder einen horizontalen Überlauf verursachen.
flex: 1
flex: 1 wird häufig verwendet, um den verfügbaren Platz
gleichmäßig auf mehrere Flex-Items zu verteilen.
kurz
Item mit deutlich längerem Inhalt
mittel
.flex-example-flex-one .flex-example-item {
flex: 1;
min-width: 0;
}
Alle Items erhalten denselben Anteil am verfügbaren Platz. Mit
min-width: 0 dürfen sie bei langen Inhalten auch kleiner als
ihre inhaltsbedingte Mindestbreite werden.
flex: 1 1 200px
Diese Schreibweise ist besonders gut für responsive Karten oder
Inhaltsblöcke geeignet. Jedes Item beginnt mit einer Ausgangsgröße von
200px, darf wachsen und bei Platzmangel schrumpfen.
.flex-example-flex-responsive .flex-example-item {
flex: 1 1 200px;
}
Unterschied zwischen flex: auto und flex: 1
Bei flex: auto wird die automatische Ausgangsgröße der Items
berücksichtigt. Ein Item mit mehr Inhalt kann deshalb breiter werden.
Bei flex: 1 wird die Ausgangsgröße für die Platzverteilung
mit 0% angesetzt. Dadurch entstehen grundsätzlich gleich
große Anteile.
kurz
Item mit deutlich längerem Inhalt
mittel
.flex-example-flex-comparison-auto .flex-example-item {
flex: auto;
}
kurz
Item mit deutlich längerem Inhalt
mittel
.flex-example-flex-comparison-one .flex-example-item {
flex: 1;
min-width: 0;
}
Empfehlung: Die Kurzschreibweise
flex ist meistens übersichtlicher als die getrennte Angabe
von flex-grow, flex-shrink und
flex-basis.
Besonders häufig werden flex: 1,
flex: auto und eine vollständige Schreibweise wie
flex: 1 1 200px verwendet.
align-self
Die Eigenschaft align-self richtet ein einzelnes Flex-Item
entlang der Querachse aus. Sie überschreibt für dieses Item den Wert von
align-items, der am Flex-Container festgelegt wurde.
Bei flex-direction: row verläuft die Querachse normalerweise
von oben nach unten. Bei flex-direction: column verläuft sie
normalerweise von links nach rechts.
.flex-item {
align-self: center;
}
| Wert |
Bedeutung |
auto |
Standardwert. Das Item übernimmt grundsätzlich die Ausrichtung aus
align-items des Flex-Containers.
|
stretch |
Das Item wird entlang der Querachse gestreckt, sofern keine
entsprechende feste Größe festgelegt ist.
|
flex-start |
Das Item wird am Anfang der Querachse ausgerichtet.
|
flex-end |
Das Item wird am Ende der Querachse ausgerichtet.
|
center |
Das Item wird in der Mitte der Querachse ausgerichtet.
|
baseline |
Das Item wird an der Grundlinie seines Textes ausgerichtet.
|
Ausgangspunkt: align-items: stretch
Der Container besitzt align-items: stretch. Deshalb werden
alle Items über die verfügbare Höhe des Containers gestreckt.
.flex-example-align-self-default {
align-items: stretch;
height: 200px;
}
Ein einzelnes Item zentrieren
Item 2 erhält align-self: center. Dadurch wird nur dieses
Item in der Mitte der Querachse ausgerichtet. Die anderen Items bleiben
gestreckt.
Item 1
Item 2 – center
Item 3
.flex-example-align-self-center {
align-items: stretch;
height: 200px;
}
.flex-example-align-self-center .flex-example-align-self-active {
align-self: center;
}
Unterschiedliche Ausrichtungen
In diesem Beispiel erhält jedes Item einen anderen
align-self-Wert. Dadurch lässt sich die Wirkung der einzelnen
Werte direkt vergleichen.
flex-start
center
flex-end
stretch
.flex-example-align-self-start {
align-self: flex-start;
}
.flex-example-align-self-center-item {
align-self: center;
}
.flex-example-align-self-end {
align-self: flex-end;
}
.flex-example-align-self-stretch {
align-self: stretch;
}
Bei stretch darf für das Item keine feste Höhe angegeben
sein. Andernfalls kann es nicht über die Querachse gestreckt werden.
align-self überschreibt align-items
In diesem Beispiel richtet der Container mit
align-items: flex-start alle Items am Anfang der Querachse
aus. Item 2 überschreibt diese Einstellung mit
align-self: flex-end.
Item 1
Item 2 – flex-end
Item 3
.flex-example-align-self-override {
align-items: flex-start;
height: 200px;
}
.flex-example-align-self-override-item {
align-self: flex-end;
}
Wichtig: align-self wirkt nur auf ein
einzelnes Flex-Item. Sollen alle Items gleich ausgerichtet werden, wird
stattdessen align-items am Flex-Container verwendet.
Hat der Container entlang der Querachse keinen zusätzlichen Platz, ist
die Wirkung von align-self möglicherweise nicht sichtbar.