Abstände zwischen Elementen lassen sich in CSS auf verschiedene Wege setzen. Lange Zeit war margin die einzige Möglichkeit – bis gap in Flexbox und Grid Einzug hielt. Beide funktionieren, aber sie denken das Problem unterschiedlich. Zu wissen wann welches besser passt, spart Arbeit und vermeidet typische Stolperfallen.
Abschnitte: Das Problem mit margin, Was gap besser macht, row-gap und column-gap, Wann margin noch sinnvoll ist.
Das Problem mit margin
Mit margin setzt du Abstände direkt am Element – das klingt logisch, hat aber einen Haken: Das erste und letzte Element bekommen denselben Abstand wie alle anderen, auch wenn du das nicht willst. Du landest schnell bei Workarounds wie :first-child oder :last-child:
.karte {
margin-right: 2rem; /* jede Karte bekommt Abstand rechts */
}
/* aber die letzte soll keinen haben */
.karte:last-child {
margin-right: 0;
}
Das funktioniert, ist aber umständlich – besonders wenn sich die Anzahl der Elemente ändert oder das Layout responsive wird.
Was gap besser macht
gap wird nicht am Element selbst gesetzt, sondern am Flex- oder Grid-Container. Es beschreibt den Abstand zwischen den Elementen – das erste und letzte Element bekommen automatisch keinen äußeren Abstand. Kein :last-child, kein Workaround:
.container {
display: flex;
gap: 2rem; /* Abstand zwischen allen Kindelementen */
}
/* Kein Workaround nötig – erstes und letztes Element
haben außen keinen Abstand */
Das Ergebnis ist dasselbe, der Code aber sauberer und wartbarer.
row-gap und column-gap
gap ist eine Kurzschreibweise für row-gap und column-gap. Du kannst beide Richtungen unabhängig voneinander steuern – besonders in Grid-Layouts nützlich:
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem; /* gleicher Abstand in beide Richtungen */
gap: 1rem 2rem; /* row-gap | column-gap */
row-gap: 1rem; /* nur vertikaler Abstand */
column-gap: 2rem; /* nur horizontaler Abstand */
}
Wann margin noch sinnvoll ist
gap funktioniert nur innerhalb von Flex- und Grid-Containern – für alles andere bleibt margin die richtige Wahl. Außerdem gibt es Situationen wo du bewusst einen Außenabstand an einem einzelnen Element willst, unabhängig vom Rest des Layouts:
- Abstand eines Elements vom Seitenrand oder einem anderen Bereich außerhalb des Flex/Grid-Kontexts →
margin - Ein einzelnes Element soll sich vom Rest abheben, z. B. mit
margin-left: autoin einer Flex-Zeile um es nach rechts zu schieben →margin - Abstände zwischen allen Kindelementen eines Flex- oder Grid-Containers →
gap
.nav {
display: flex;
gap: 1.5rem; /* Abstände zwischen den Nav-Links */
}
.nav .login {
margin-left: auto; /* Login-Button an den rechten Rand schieben */
}
gap und margin schließen sich also nicht aus – sie ergänzen sich. gap für den Rhythmus im Layout, margin für gezielte Ausnahmen.