Häufige CSS-Shorthand-Eigenschaften
CSS-Shorthand-Übersicht zu margin, padding, border, font, background und flex mit Reset-Regeln, Wertreihenfolge und stillen Fehlern.
Ein CSS-Shorthand setzt mehrere Longhand-Eigenschaften auf einmal, und jeder nicht angegebene Longhand wird auf den Standardwert des Shorthands zurückgesetzt – was stillschweigend alles überschreibt, was zuvor in der Kaskade für ihn gesetzt wurde.
Wer schon einmal background-size: cover gesetzt hat und beobachtet hat, wie es in dem Moment verschwand, als eine spätere background:-Zeile ausgeliefert wurde, kennt dieses Problem aus eigener Erfahrung. Es gibt keine Fehlermeldung, was die Fehlersuche so zeitaufwändig macht. Dieses einzelne Verhalten – nicht die Syntax – ist die Ursache der meisten Shorthand-Bugs. Diese Referenz behandelt die sechs Shorthands, die täglich verwendet werden (margin, padding, border, font, background und flex), mit den Wertereihenfolgen, erforderlichen Werten und Reset-Fallstricken, die bei jedem zu stillen Fehlern führen können.
Wichtigste Erkenntnisse
- Das Weglassen eines Longhands in einem Shorthand setzt ihn auf einen vom Shorthand definierten Standardwert zurück (in der Regel seinen Initialwert) und überschreibt dabei jede frühere Deklaration. So löscht
background: redauchbackground-image,background-positionundbackground-size. marginundpaddingwerden im Uhrzeigersinn von oben gelesen: oben, rechts, unten, links (TRBL).margin: 0 autozentriert ein Block-Level-Element horizontal.border-styleist erforderlich; ohne Stil gewinnt der Standardwertnone, und es wird nichts gerendert, unabhängig von Breite oder Farbe.- Der
font-Shorthand erfordert sowohlfont-sizeals auchfont-family; wird einer von beiden weggelassen, wird die gesamte Deklaration ignoriert. - In
backgroundistbackground-sizenur unmittelbar nachbackground-positiongültig, getrennt durch einen Schrägstrich:center / cover.
Warum setzt ein CSS-Shorthand andere Eigenschaften zurück?
Jeder CSS-Shorthand expandiert in eine feste Menge von Longhand-Eigenschaften, und ein nicht angegebener Wert wird auf einen vom Shorthand definierten Standardwert gesetzt, der alles überschreibt, was zuvor für diesen Longhand gesetzt wurde. Das Schreiben von background: red setzt nicht nur die Farbe; es setzt background-image, background-position, background-size und jeden anderen Background-Longhand auf seinen Initialwert zurück.
Deshalb ist der häufigste Shorthand-Bug nie ein Syntaxfehler. Es handelt sich um einen späteren Shorthand, der stillschweigend einen an anderer Stelle korrekt gesetzten Longhand zurücksetzt:
/* Bug: der Shorthand setzt background-size auf auto zurück */
.hero {
background-size: cover;
background: url('hero.jpg') no-repeat center;
}
/* Fix: size im Shorthand behalten */
.hero {
background: url('hero.jpg') no-repeat center / cover;
}
Dieser Fehler ist in der Deklaration selbst nicht sichtbar und tritt oft erst auf der gerenderten Seite zutage. Das Wiedergeben einer Produktionssitzung rekonstruiert die tatsächlichen berechneten Stile und macht das zurückgesetzte background-size sichtbar, das eine lokale Prüfung mit anderen Assets möglicherweise übersieht.
Discover how at OpenReplay.com.
margin und padding: die Uhrzeigersinn-Regel
margin und padding nehmen ein bis vier Werte im Uhrzeigersinn von oben entgegen: oben, rechts, unten, links (TRBL). Die Anzahl der Werte bestimmt, welche Seiten gespiegelt werden:
| Werte | Gilt für |
|---|---|
margin: 10px | alle vier Seiten |
margin: 10px 20px | oben/unten 10px, links/rechts 20px |
margin: 10px 20px 30px | oben 10px, links/rechts 20px, unten 30px |
margin: 10px 20px 30px 40px | oben, rechts, unten, links |
.button { padding: 12px 24px; } /* vertikal 12px, horizontal 24px */
.section { margin: 40px auto; } /* vertikal 40px, horizontal auto */
margin: 0 auto zentriert ein Block-Level-Element horizontal, indem der verbleibende Inline-Platz gleichmäßig aufgeteilt wird. Auf Inline-Elemente hat es keine Wirkung, und Flex- oder Grid-Elemente werden stattdessen über ihre eigenen Ausrichtungseigenschaften zentriert.
border: style ist obligatorisch
Im border-Shorthand sind die Werte für Breite, Stil und Farbe reihenfolgeunabhängig, da sie typunterschiedlich sind: 2px solid red und solid red 2px sind gleichwertig. border-style ist jedoch erforderlich: Sein Initialwert ist none, sodass ohne Stil kein Rahmen gerendert wird, unabhängig von Breite oder Farbe.
.card { border: 1px solid #e0e0e0; } /* wird gerendert */
.card { border: 1px #e0e0e0; } /* kein style → nichts wird gerendert */
Breite und Farbe sind optional und fallen auf ihre Standardwerte zurück (medium und currentcolor). Wer sich angewöhnt, den Stil zuerst zu setzen, vermeidet diese Fehlerklasse vollständig.
font: size und family sind erforderlich
Der font-Shorthand kombiniert font-style, font-variant, font-weight, font-size, line-height und font-family, wobei sowohl font-size als auch font-family erforderlich sind. Wird einer von beiden weggelassen, wird die gesamte Deklaration ignoriert. Die Reihenfolge ist streng: style, variant und weight müssen vor font-size stehen, und line-height ist nur unmittelbar nach font-size gültig, verbunden durch einen Schrägstrich.
/* vollständig: style variant weight size/line-height family */
.text { font: italic small-caps bold 16px/1.5 'Segoe UI', sans-serif; }
/* minimal gültige Deklaration */
.text { font: 16px Arial, sans-serif; }
/* ungültig — family vor size, wird stillschweigend verworfen */
.text { font: Arial 16px; }
Da font jede weggelassene Komponente auf ihren Initialwert zurücksetzt, wird ein zuvor gesetztes font-weight auf normal zurückgesetzt, wenn der Shorthand danach angewendet wird.
background: der position/size-Schrägstrich
background ist der fehleranfälligste Shorthand. Die Regel, über die die meisten Entwickler stolpern: background-size ist nur unmittelbar nach background-position gültig, getrennt durch einen Schrägstrich (center / cover). Eine Größenangabe ohne vorherige Position vor dem Schrägstrich ist ungültig und wird verworfen. Dies korrigiert ältere Anleitungen, die background-size als separate Deklaration behandeln; es gehört in den Shorthand.
Die kanonische Wertereihenfolge lautet: image, position / size, repeat, attachment, origin, clip, color.
/* korrekt: position / size */
.panel { background: #000 url('bg.jpg') center / cover no-repeat fixed; }
/* falsch: size ohne position vor dem Schrägstrich → ungültig */
.panel { background: url('bg.jpg') / cover; }
/* falsch: kein Schrägstrich, daher wird 'cover' als zweiter Positionswert gelesen */
.panel { background: url('bg.jpg') center cover; }
Color kann in der Einzel-Layer-Syntax an beliebiger Stelle stehen, aber die Platzierung am Ende entspricht der MDN-Reihenfolge und sorgt für konsistente Lesbarkeit.
flex: flex: 1 ist nicht 1 1 auto
Browser berechnen flex: 1 als flex: 1 1 0%, nicht als 1 1 auto, sodass das Element bei der Raumverteilung seine eigene Breite und Inhaltsgröße ignoriert. Browser verwenden einen flex-basis-Wert von 0%, wenn eine einzelne Zahl angegeben wird, obwohl der Spezifikationstext 0 angibt. Dies lässt sich in den DevTools im Tab „Computed” durch Ablesen von flex-basis überprüfen.
.grow { flex: 1; } /* 1 1 0% — wächst, ignoriert Inhaltsgröße */
.auto { flex: auto; } /* 1 1 auto — wächst ausgehend von der Inhaltsgröße */
.fixed { flex: 0 0 200px; } /* feste 200px-Spur, kein grow/shrink */
.none { flex: none; } /* 0 0 auto — passt sich dem Inhalt an, starr */
flex: auto empfiehlt sich, wenn Elemente anhand ihrer Inhaltsgröße dimensioniert werden sollen, und flex: 0 0 <size> für eine feste Spur.
Was sind die häufigsten CSS-Shorthand-Fehler?
Vier Fehlermuster sind für die meisten Shorthand-Bugs verantwortlich. Jedes ist eine direkte Folge einer der oben genannten Regeln:
- Ein späterer Shorthand setzt einen Longhand zurück. Ein Theme-Override, der
background:ausliefert, löscht ein früheresbackground-size: cover. Den Wert im Shorthand behalten oder den Longhand danach anwenden. - Fehlende
font-familyoderfont-size. Die gesamtefont-Deklaration wird verworfen, ohne teilweise angewendet zu werden. - Fehlendes
border-style. Kein Stil bedeutet den Standardwertnone, sodass nichts gezeichnet wird. background-sizeohne Position und Schrägstrich.center / coverschreiben, niemals ein bloßescover.
Selten verwendete Shorthands wie list-style, outline und place-items folgen denselben Reset-Regeln, kommen aber weit seltener vor. Sie lassen sich auf dieselbe Weise einsetzen, sobald die täglichen sechs zur zweiten Natur geworden sind.
Die eine Gewohnheit, die nahezu alle dieser Fehler verhindert: Jeden Shorthand als vollständigen Reset seiner Eigenschaftsgruppe betrachten, nicht als additiven Eingriff. Wenn ein andernorts gesetzter Stil fehlt, den Computed-Panel öffnen und prüfen, ob ein späterer Shorthand ihn überschrieben hat. Das ist fast immer die Ursache.
FAQs
Wann sollte ich CSS-Shorthand- statt Longhand-Eigenschaften verwenden?
Shorthand verwenden, wenn die meisten oder alle Eigenschaften einer Gruppe auf einmal gesetzt werden sollen und das Zurücksetzen der weggelassenen Werte auf ihre Standardwerte akzeptabel ist. Longhand verwenden, wenn eine einzelne Eigenschaft geändert werden soll, ohne die anderen zu beeinflussen – beispielsweise wenn nur background-size angepasst werden soll, während ein vorhandenes background-image erhalten bleiben soll. Shorthand setzt weggelassene Longhands immer zurück, sodass ein gezielter Longhand-Eingriff diesen Nebeneffekt vermeidet.
Warum zerstört das Hinzufügen eines background-Shorthands mein background-size: cover?
Weil ein background-Shorthand jeden background-Longhand, der nicht angegeben wird, auf seinen Initialwert zurücksetzt – und background-size wird auf auto zurückgesetzt. Wenn background-size: cover in einer früheren Regel gesetzt ist und eine spätere background:-Deklaration die Größe weglässt, überschreibt dieser spätere Shorthand sie. Die Lösung besteht darin, die Größe im Shorthand nach der Position anzugeben, als center / cover, oder den background-size-Longhand nach dem Shorthand zu platzieren.
Was ist der Unterschied zwischen flex: 1 und flex: auto?
Browser berechnen flex: 1 als 1 1 0%, was einen flex-basis-Wert von 0% ergibt, sodass das Element seine eigene Inhaltsgröße ignoriert und ausschließlich aus dem verfügbaren Platz wächst. flex: auto expandiert zu 1 1 auto, sodass das Element von seiner Inhaltsgröße ausgeht und dann wächst. flex: 1 für gleich breite Spalten unabhängig vom Inhalt verwenden, und flex: auto, wenn Elemente relativ zu ihrem Inhalt dimensioniert werden sollen.
Spielt die Reihenfolge der Werte im border-Shorthand eine Rolle?
Nein, die Werte für Breite, Stil und Farbe im border-Shorthand sind reihenfolgeunabhängig, da sie typunterschiedlich sind. Daher sind 2px solid red und solid red 2px gleichwertig. Die einzige feste Anforderung ist, dass border-style vorhanden sein muss. Sein Initialwert ist none, sodass ohne ein Stil-Schlüsselwort kein Rahmen gezeichnet wird, unabhängig von der angegebenen Breite oder Farbe.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Star on GitHub12k