Einzelne Flex-Items ausrichten in CSS Flexbox
July 25, 2019
In CSS Flexbox dient die Eigenschaft justify-content dazu, alle Elemente innerhalb eines Containers gemeinsam entlang der Hauptachse (Main Axis) auszurichten. Es gibt jedoch oft Szenarien, in denen man ein einzelnes Flex-Item anders als die anderen ausrichten möchte (z.B. ein einzelner Menüpunkt ganz rechts in einer Navigationsleiste).
Diese Anleitung zeigt, warum Standard-Eigenschaften wie justify-self hier fehlschlagen und wie man das Problem stattdessen elegant mit automatischen Außenabständen (Auto Margins) löst.
1. Das Problem mit justify-self
In CSS Grid-Layouts kann die Eigenschaft justify-self verwendet werden, um ein einzelnes Element in seiner Zelle auszurichten. Unter Flexbox wird justify-self jedoch ignoriert.
Auch die Verwendung von float innerhalb eines Flex-Containers hat keine Wirkung, da Floats auf Flex-Items nicht angewendet werden.
2. Die Lösung: Automatische Außenabstände (margin: auto)
Der etablierte und vom CSS-Standard vorgesehene Weg, ein einzelnes Element in einem Flex-Container auszurichten, ist die Verwendung von automatischen Außenabständen (margin-left: auto oder margin-right: auto).
In einem Flex-Kontext absorbieren automatische Außenabstände den gesamten verbleibenden freien Platz in der jeweiligen Richtung und schieben das Element an die gegenüberliegende Seite.
Beispiel: Ein Element nach rechts schieben
Angenommen, wir haben eine Navigationsleiste mit einem Logo und mehreren Links. Das Logo soll links stehen, die Links rechts.
<nav className="navbar">
<div className="logo">Logo</div>
<a href="#" className="nav-link">Home</a>
<a href="#" className="nav-link">Produkte</a>
<a href="#" className="nav-link">Kontakt</a>
</nav>
.navbar {
display: flex;
background-color: #f8f9fa;
padding: 1rem;
}
.logo {
font-weight: bold;
}
.nav-link {
margin-left: 1.5rem;
}
/*
Durch das Setzen von 'margin-left: auto' auf den ERSTEN Link
wird der gesamte freie Platz links von diesem Element absorbiert.
Dadurch werden alle Links nach ganz rechts geschoben.
*/
.nav-link:first-of-type {
margin-left: auto;
}
Ergebnis: Das Logo bleibt ganz links, während die Links als Gruppe nach rechts verschoben werden.
3. Alternative: space-between bei zwei Elementen
Wenn der Container nur aus genau zwei Elementen besteht (z.B. ein Logo und ein Hamburger-Menü-Button), ist die Verwendung von justify-content: space-between auf dem Container oft der einfachere Weg.
.navbar-simple {
display: flex;
justify-content: space-between;
}
Wichtig: Dies funktioniert nur, wenn der Container auch genügend Breite hat. Wenn die Elemente nicht auseinanderweichen, überprüfen Sie, ob die Breite des Containers auf 100% oder einen ähnlichen Wert gesetzt ist.
Fazit
Da justify-self in Flexbox nicht unterstützt wird, sind automatische Außenabstände (margin-left: auto / margin-right: auto) die eleganteste und standardkonforme Methode, um einzelne Flex-Items unabhängig von der Gruppe auszurichten. Sie sind extrem flexibel und eignen sich hervorragend für gängige UI-Muster wie Navigationsleisten.