CSS/Tutorials/Flexbox/Ausrichtung
- 15min
- mittel
- Grundkenntnisse in
- HTML
- Einstieg in CSS
Flex-Items können bei festen Größenangaben kleiner als der Flex-Container sein und dann beliebig innerhalb des Flex-Containers ausgerichtet werden.
Einige dieser Eigenschaften wurden in Flexbox eingeführt – mittlerweile sind sie auch im Grid Layout verfügbar, können dort jedoch teilweise andere Werte annehmen.
Vergleiche: CSS/Tutorials/Grid/Ausrichtung von Grid-Items
Inhaltsverzeichnis
Ausrichtung entlang der Hauptachse
justify-content
Die Eigenschaft justify-content legt fest, wie die einzelnen flexiblen Elemente entlang der Hauptachse angeordnet werden.
Folgende Angaben sind möglich:
-
flex-start
: Alle Elemente werden linksbündig angeordnet -
flex-end
: Alle Elemente werden rechtsbündig angeordnet -
center
: Alle Elemente werden mittig angeordnet, ein möglicher Abstand ist links und rechts -
space-between
: Alle Elemente werden verteilt, zwischen ihnen ist ein (möglicher) Abstand, das erste und letzte Element stoßen an die rechte und linke Seite des Elternelements -
space-around
: Alle Elemente werden verteilt, der mögliche Abstand ist sowohl zwischen den Elementen als auch zum Eltern-Container -
initial
-
inherit
.vorne {
justify-content: flex-start;
}
.mittig {
justify-content: center;
}
.verteilt1 {
justify-content: space-between;
}
.verteilt2 {
justify-content: space-around;
}
Ausrichtung entlang der Querachse
Die folgende Beschreibung gilt für eine Flexbox mit flex-direction:row
. In einer Flexbox, die spaltenweise ausgerichtet ist, müssen Sie die Begriffe Zeile und Breite gegen Spalte und Höhe austauschen. Sofern möglich, werden wir einfach von Reihen und ihrer Größe sprechen.
Beim Darstellen einer Flexbox bestimmt der Browser zunächst die Ausgangsgröße der einzelnen flexiblen Elemente. Das ist ein komplexer Prozess, der die Größe des Flex-Containers und die Breiten- und Höhen-Restriktionen für Container und Elemente beachtet. Falls die Flexbox umbrechen kann (flex-wrap: wrap
), werden die Elemente auf Grund dieser Ausgangsgröße auf Reihen aufgeteilt. In einer einreihigen Flexbox ist die Höhe dieser Reihe immer identisch mit der Höhe der Flexbox, in einer mehrzeiligen Flexbox bestimmen die flexiblen Elemente, die in einer Zeile liegen, ihre Höhe.
Es gibt nun zwei Arten von ungenutztem Platz in einer solchen Zeile:
- Innerhalb einer Reihe, wenn die Reihe größer ist als ein flexibles Element
- Außerhalb der Reihen, wenn die Größe aller Reihen insgesamt kleiner ist als die Querachsengröße der Flexbox (das kann vorkommen, wenn diese Größe durch andere Einflüsse definiert wird).
Die Eigenschaften align-content und align-items legen fest, wie mit diesem Platz umgegangen werden soll.
align-content
Die Eigenschaft align-content legt fest, wie die Reihen einer mehrzeiligen Flexbox im Flexbox-Container verteilt werden sollen. In einer einzeiligen Flexbox (flex-wrap: nowrap
) ist die Eigenschaft ohne Funktion, die einzige vorhandene Reihe ist immer so groß wie der Container.
Folgende Angaben sind möglich:
normal
: (Standardwert) Entspricht bei Flexboxen dem Wertstretch
. Der Standardwert ist deshalb nichtstretch
, weil align-content auch für andere Layouts nutzbar ist.stretch
: Der freie Platz wird gleichmäßig auf die Reihen verteilt, d.h. die Reihen selbst werden größer und die darin enthalten flexiblen Elemente vergrößern sich entsprechend. Flexible Elemente, für die max-height bzw. max-width gesetzt wurde, überschreiten diese Größe aber nicht.start
(flex-start
): Die Reihen werden am Beginn der Querachse angeordnet, der freie Platz befindet sind dahinter.end
(flex-end
): Die Reihen werden am Ende der Querachse angeordnet, der freie Platz befindet sich davorcenter
: Alle Reihen werden in der Mitte der Querachse angeordnet, der freie Platz wird zu gleichen Teilen davor und dahinter angeordnetspace-between
: Der freie Platz wird gleichmäßig zwischen den Reihen aufgeteilt. Vor der ersten und nach der letzten Reihe befindet sich kein Leerraum, sie grenzen an die jeweilige Seite des Flex-Containers anspace-around
: Der freie Platz wird vor, zwischen und hinter den Reihen aufgeteilt. Der Abstand vor der ersten Reihe und nach der letzten Reihe ist zusammen so groß wie der Abstand zwischen zwei Reihen.space-evenly
: Der freie Platz wird gleichmäßig vor, zwischen und hinter den Reihen aufgeteilt. Der Abstand vor der ersten Reihe und nach der letzten Reihe ist genauso groß wie der Abstand zwischen zwei Reihen.baseline
first baseline
last baseline
: Gibt an, dass die Flexbox selbst an der Baseline-Ausrichtung
flex-start
und flex-end
stammen aus der Zeit vor der Einführung des Grid-Layouts und werden heute als historisch bedingte Synonyme zu start
und end
aufgefasst. Sie sind nicht missbilligt, das mag aber irgendwann kommen und Sie sollten nur start
und end
verwenden..flex-container {
display: flex;
flex-flow: row wrap;
height: 7em;
}
.start {
align-content: flex-start;
}
.mittig {
align-content: center;
}
.ende {
align-content: flex-end;
}
Der Flex-Container erhält eine Höhe von 7em. Die flex-items erhalten nun eine feste Höhe von 1em, da sie ansonsten die gesamte Querachse einnehmen würden.
align-items
Die Eigenschaft align-items legt fest, wie die einzelnen flexiblen Elemente innerhalb der Flexbox-Reihe entlang der Querachse angeordnet werden. Im Gegensatz zu justify-content geht es hier meist um die vertikale Anordnung, z. B. von Bildern.
Folgende Angaben sind möglich:
normal
: (Standardwert) Entspricht im Flexbox-Layout dem Wertstretch
.stretch
: Die Elemente werden vergrößert, so dass sie innerhalb der Reihe den Platz in Richtung der Querachse vollständig ausfüllen, sofern sie keine Eigenschaften haben, die das verhindern (wie z. B.height
).start
(flex-start
): Die Elemente werden in ihrer Reihe so angeordnet, dass sie dem Anfang der Querachse am nächsten liegen.end
(flex-end
): Die Elemente werden in ihrer Reihe so angeordnet, dass sie dem Ende der Querachse am nächsten liegen.center
: Die Elemente werden in ihrer Reihe in Richtung der Querachse zentriertbaseline
first baseline
last baseline
: Die Elemente werden an einer Baseline ihrer Textinhalte ausgerichtet.baseline
undfirst baseline
sind dabei identisch. Die Angabe vonbaseline
bzw.first baseline
richtet die flexiblen Elemente so aus, dass ihre ersten Baselines auf einer Höhe ausgerichtet sind. Durch Angabe vonlast baseline
werden die flexiblen Elemente an Hand ihrer letzten Baseline ausgerichtet.
flex-start
und flex-end
stammen aus der Zeit vor der Einführung des Grid-Layouts und werden heute als historisch bedingte Synonyme zu start
und end
aufgefasst. Sie sind nicht missbilligt, das mag aber irgendwann kommen und Sie sollten nur start
und end
verwenden.section {
display: flex;
justify-content: space-around;
}
.oben {
align-items: start;
}
.mittig {
align-items: center;
}
.unten {
align-items: end;
}
stretch
die Höhe aller flexiblen Elemente an das größte Geschwisterelement an.Siehe auch:
- CSS/Tutorials/Ausrichtung/Inhalte zentrieren
- Spielplatz für align-content und align-items in Flexboxen
align-self
Durch die Eigenschaft align-self können Sie eine Ausnahme der Anordnung der flexiblen Elemente festlegen. Dabei bekommt das flexible Element mit align-self eine andere Eigenschaft als die anderen Schwesterelemente, die durch die Eigenschaft align-items des Eltern-Containers angeordnet werden.
Folgende Angaben sind möglich:
auto
: (Standardwert) Wert wird vom Elternelement übernommenstretch
: Element wird gleichmäßig verteiltcenter
: Element wird mittig angeordnetflex-start
: Element wird oben angeordnetflex-end
: Element wird unten angeordnetbaseline
: Element wird an der Grundlinie (baseline) ausgerichtetinitial
inherit
section {
display: flex;
justify-content: space-around;
align-items: flex-start;
}
#ausnahme {
align-self: flex-end;
}
Spalten (gutter) mit gap
Sie können Flex-Items mit margin einen Abstand zu den anderen Flex-Items geben – dieser Abstand besteht dann aber auch am Rand des Flex-Containers. Deshalb wurde im Grid Layout die Eigenschaft grid-gap eingeführt, die Spalten (englisch: gutter) zwischen den einzelnen Rasterzellen ermöglichte.
Diese Eigenschaft wurde nun unter dem Namen gap auch für Flexbox und ein Mehrspaltenlayout mit columns standardisiert. Sie ist die zusammenfassende Eigenschaft der Eigenschaften row-gap und column-gap.
.flex-container {
display: flex;
flex-flow: row wrap;
gap: 1em 2em;
border: 2px dotted;
}
.flex-item {
flex: 1;
}
In diesem Beispiel wurde auf den Rand mit margin verzichtet. Stattdessen werden mit gap: 1em;
Spalten zwischen den Flex-Items festgelegt.
Vergleiche: CSS/Tutorials/Grid/Ausrichtung von Grid-Items#Spalten (gutter) mit gap