Aktualisiert 10. Juli 2026

Margin vs. Padding: Systemregeln

Ein Entwickler stapelt eine Karte über eine Überschrift. Die Karte hat margin-bottom: 24px, die Überschrift margin-top: 16px, der Abstand sollte also 40px betragen. Der Browser rendert 24. Kein Fehler, keine Warnung — die 16px-Margin ist einfach verschwunden, geschluckt von einem CSS-Verhalten namens Margin Collapsing, dem die meisten genau so begegnen: als rätselhafter Abstand, der zur Rechnung keines der beiden Elemente passt.

Padding ist der Raum innerhalb des Rahmens eines Elements; Margin ist der Raum außerhalb davon. Die Regel, die ein Design-System kombinierbar hält, geht noch einen Schritt weiter: Padding gehört zur Komponente — es ist Teil dessen, was die Komponente ist —, während Margin zum Layout gehört — eine Aussage darüber, wo die Komponente gerade platziert ist. Ein Button besitzt sein Padding genauso wie seinen border-radius; er sollte keine Meinung über seinen Abstand zu den Nachbarn haben.

Dieser Artikel behandelt die Box-Model-Definition, die Besitz-Regel, die wichtiger ist als die Definition, das Collapsing-Verhalten hinter den verschwundenen 16px und das dem Elternelement gehörende gap-Muster, das Collapsing komplett umgeht — wobei jeder Abstand aus derselben Abstände-Skala stammt.

Was ist der Unterschied zwischen Margin und Padding in CSS?

Im CSS Box Model ist jedes Element eine Reihe ineinander verschachtelter Rechtecke: Inhalt, dann Padding, dann Rahmen (border), dann Margin. Padding sitzt innerhalb des Rahmens, nimmt also die Hintergrundfarbe des Elements an, erweitert seine klickbare Fläche und zählt — mit box-sizing: border-box — zur deklarierten Breite des Elements. Margin sitzt außerhalb des Rahmens: immer transparent, nie klickbar und in vertikalen Stapeln in der Lage, mit benachbarten Margins zu verschmelzen.

Eine knappe Merkregel für den Unterschied: Padding verändert, wie das Element aussieht; Margin verändert, wie es sich zu allem um es herum verhält. Diese Asymmetrie ist der Grund, warum die beiden unterschiedliche Besitzer verdienen.

Wann solltest du Margin verwenden und wann Padding?

Nimm einen Button. Sein Padding — sagen wir 11px vertikal, 16px horizontal — ist Teil seiner Identität: Es sorgt dafür, dass sich der Button in einer Toolbar, einem Formular und einem Dialog wie derselbe Button anfühlt. Sein Abstand zum nächsten Element ist nicht Teil seiner Identität. In einer dichten Toolbar sind vielleicht 8px der richtige Abstand; zwischen Formularfeldern 16px; unter einem Hero-Absatz 32px. Wenn der Button mit margin-right: 16px ausgeliefert wird, ist er an einer dieser Stellen richtig und an den anderen falsch — und an jeder falschen Stelle wächst ein Override heran. Multipliziere das mit fünfzig Komponenten, und das Stylesheet wird zu einem Streit zwischen Komponenten über Raum, den keine von ihnen besitzen sollte.

Daher die Systemregel: Komponenten definieren ihr Padding und niemals ihre äußeren Margins; Container definieren die Abstände zwischen ihren Kindern. Jede Komponente lässt sich dann ohne Verhandlung in jedes Layout fallen lassen — und das ist der größte Teil dessen, was „kombinierbar” für Abstände bedeutet.

Sieh dir die beiden Rollen auf einer Skala in Scale Composer an — die kleinen Schritte (8, 11, 16) erledigen die Innenarbeit als Komponenten-Padding, während die größeren Schritte (16, 23, 32, 45) die Außenarbeit als Layout-Abstände erledigen, alle erzeugt aus einer Basis und einem Verhältnis.

Eine Abstände-Skala, erzeugt aus einer 16px-Basis und dem Verhältnis 2, wobei die kleinen Schritte als Komponenten-Padding und die größeren Schritte als Layout-Abstände markiert sind

Warum fallen vertikale Margins zusammen?

Wenn zwei Block-Elemente im normalen Dokumentfluss übereinanderstehen, addieren sich ihre benachbarten vertikalen Margins nicht — sie verschmelzen zu einer einzigen Margin, die dem größeren der beiden Werte entspricht:

Margin unter Element AMargin über Element BErwarteter AbstandGerenderter Abstand
24px16px40px24px
16px16px32px16px
24px24px48px24px

Das Verhalten ist Absicht. CSS wurde für Dokumente entworfen, in denen Absätze oben und unten Margin tragen; würden sich diese Margins addieren, hätte jedes Absatzpaar doppelten Zeilenabstand. Das Zusammenfallen auf den größeren Wert gibt Fließtext gratis einen gleichmäßigen Rhythmus. Im Anwendungslayout liest sich dasselbe Verhalten wie ein Bug: Zwei explizite Werte ergeben einen dritten Wert, der in keinem Stylesheet auftaucht. Es hat auch weniger bekannte Varianten — die obere Margin eines Kindelements kann durch die Kante seines Elternelements hindurch zusammenfallen und den gesamten Container des Elternelements nach unten schieben — weshalb „Woher kommt dieser Abstand?” ein so beständiges Debugging-Genre bleibt.

Zwei nützliche Grenzen: Horizontale Margins fallen nie zusammen, und die Kinder von Flex- und Grid-Containern fallen in keine Richtung zusammen.

Was solltest du statt Geschwister-Margins verwenden?

Gib den Raum dem Elternelement. Flex- und Grid-Container haben eine gap-Eigenschaft, die einen festen Abstand zwischen Kindern setzt — kein Collapsing, keine Ausnahmen für erstes und letztes Kind, keine Meinungen von Komponenten:

.stack {
  display: flex;
  flex-direction: column;
  gap: 16px;      /* zwischen Kindern */
  padding: 23px;  /* zwischen Kindern und der Container-Kante */
}

Die Arbeitsteilung wird sauber: Das Padding des Containers regelt den Abstand von seiner Kante zum Inhalt, gap regelt die Abstände zwischen den Kindern, und jedes Kind kümmert sich nur um sein eigenes Padding. Jeder Abstand auf dem Bildschirm hat genau einen Besitzer, und die Bug-Klasse des rätselhaften Abstands verliert ihren Lebensraum.

Margins verschwinden nicht ganz aus dem Werkzeugkasten. Fließtext ist die bleibende Ausnahme: Der richtige Abstand hängt dort vom Paar ab — Überschrift-zu-Absatz unterscheidet sich von Absatz-zu-Absatz — und das einheitliche gap eines Containers kann nicht pro Paar variieren. Zwischen Komponenten ist ein dem Elternelement gehörendes Gap jedoch das Muster, auf das sich die meisten modernen Layouts geeinigt haben.

Sollten Margin, Padding und Gap eine Skala teilen?

Ja — es ist dieselbe Design-Entscheidung (wie weit stehen Dinge auseinander?), gehalten von verschiedenen Besitzern, also sollten sie sich aus demselben kurzen Menü bedienen. Eine Abstände-Skala, erzeugt aus einer 16px-Basis, dem Verhältnis 2 und zwei Zwischenschritten pro Verdopplung, ergibt 8, 11, 16, 23, 32, 45, 64: Das kleine Ende deckt Padding innerhalb kompakter Komponenten ab, die Mitte deckt Abstände zwischen Elementen ab, und das große Ende deckt Abschnitte ab. Wenn Innen- und Außenabstände aus einer Skala stammen, bleiben das Padding einer Karte und der Abstand zwischen Karten proportional, obwohl unterschiedliche Besitzer sie setzen.

Wem gehört welcher Abstand auf Seiten-Ebene?

Die Besitz-Regel zahlt sich am sichtbarsten auf einer ganzen Seite aus, wo Dutzende Abstände sonst Dutzende lokale Entscheidungen wären. Stege sind die Idee des dem Elternelement gehörenden Gap, angewandt auf das gesamte Layout: Spalten besitzen ihre Abstände nicht, das Raster tut es — 4 Spalten auf dem Handy, 8 auf dem Tablet, 12 auf dem Desktop, jeder Steg und jeder Rand ein Schritt auf derselben Skala. Wenn du den Besitzer jedes Abstands auf der Seite benennen kannst, hat sich die Margin-vs-Padding-Frage von selbst beantwortet: schalte die Stege und Ränder in der Raster-Ansicht durch diese Skala.

Weiterlesen

  • Was ist das 8-Punkt-Raster?

    Das 8-Punkt-Raster macht jeden Abstand und jede Größe in einer UI zu einem Vielfachen von 8px. Erfahre, warum 8 funktioniert, wann du 4pt-Halbschritte einsetzt und wie daraus eine Abstands-Skala wird.

  • Was ist eine Abstandsskala?

    Eine Abstandsskala ist ein kurzer, geordneter Satz erlaubter Abstände. Erfahre, warum gute Skalen nichtlinear sind, wie drei Zahlen eine erzeugen und wie viele Stufen du brauchst.

  • Abstände-Tokens: Benennung und Stufen

    Abstände-Tokens verwandeln eine Abstände-Skala in ein gemeinsames Vokabular. Vergleiche numerische und T-Shirt-Benennung, ergänze semantische Aliase und exportiere nach CSS, Tailwind und Figma.