Back

Wie das CSS-Seitenverhältnis funktioniert

Wie das CSS-Seitenverhältnis funktioniert

Sie haben width: 100% für einen Bild-Container gesetzt, aber die Höhe kollabiert auf null, bis das Bild geladen ist – was zu jener störenden Layout-Verschiebung führt, die Benutzer hassen. Die CSS-Eigenschaft aspect-ratio löst dieses Problem direkt, indem sie es Ihnen ermöglicht, Platz für Inhalte zu reservieren, bevor diese eintreffen.

Dieser Artikel erklärt, wie die aspect-ratio-Eigenschaft an CSS-Größenberechnungen teilnimmt, wie sie sich zwischen ersetzten und nicht-ersetzten Elementen unterscheidet und warum sie die alte Padding-Hack-Technik für responsive Layouts ersetzt.

Wichtigste Erkenntnisse

  • Die aspect-ratio-Eigenschaft definiert ein bevorzugtes Breite-zu-Höhe-Verhältnis, das nur dann greift, wenn mindestens eine Dimension auf auto gesetzt ist.
  • Sie formt die Box des Elements, nicht die Medien darin – kombinieren Sie sie mit object-fit, um zu steuern, wie Bilder oder Videos den Raum ausfüllen.
  • Sie ersetzt sauber den veralteten padding-bottom-Hack und eliminiert die Notwendigkeit für Wrapper-Elemente, absolute Positionierung und obskure Mathematik.
  • In Flexbox- und Grid-Kontexten sollten Sie auf Auto-Sizing-Interaktionen achten, die die berechneten aspect-ratio-Dimensionen überschreiben oder mit ihnen in Konflikt geraten können.

Die CSS-Eigenschaft Aspect-Ratio verstehen

Die aspect-ratio-Eigenschaft definiert ein bevorzugtes Breite-zu-Höhe-Verhältnis für die Box eines Elements. Das Schlüsselwort ist „bevorzugt” – sie greift nur dann, wenn mindestens eine Dimension automatisch ist.

.video-container {
  width: 100%;
  aspect-ratio: 16 / 9;
}

Hier ist die Breite explizit (100% des Elternelements), sodass der Browser die Höhe automatisch anhand des 16:9-Verhältnisses berechnet. Wenn Sie sowohl width als auch height explizit setzen, beeinflusst aspect-ratio typischerweise nicht die verwendete Größe, da definitive Dimensionen in normalen Layout-Berechnungen Vorrang haben.

Syntax und Werte

Die Eigenschaft akzeptiert drei Formen:

aspect-ratio: 16 / 9;      /* Breite / Höhe Verhältnis */
aspect-ratio: 1;            /* entspricht 1 / 1 (Quadrat) */
aspect-ratio: auto 3 / 2;  /* auto mit Fallback-Verhältnis */

Das Schlüsselwort auto weist den Browser an, das natürliche Seitenverhältnis des Elements zu verwenden, falls eines existiert. Die Kombination auto 3 / 2 bedeutet: Verwende das natürliche Verhältnis für ersetzte Elemente, andernfalls verwende 3/2.

Ersetzte vs. nicht-ersetzte Elemente

Die Eigenschaft verhält sich je nach Elementtyp unterschiedlich.

Ersetzte Elemente (<img>, <video>, <iframe>) haben intrinsische Dimensionen. Standardmäßig verwendet aspect-ratio: auto ihr natürliches Verhältnis. Wenn Sie aspect-ratio: auto 16/9 angeben, verwendet der Browser das natürliche Verhältnis der Medien, sobald diese geladen sind, reserviert aber vorab Platz mit 16/9 – was Layout-Verschiebungen verhindert.

Nicht-ersetzte Elemente (<div>, <section>) haben kein intrinsisches Verhältnis. Wenn Sie aspect-ratio: 1 auf ein <div> mit width: 200px setzen, entsteht ein 200×200-Quadrat. Die Eigenschaft steuert direkt die Box-Dimensionen.

Aspect-Ratio formt die Box, nicht die Medien

Eine wichtige Unterscheidung: aspect-ratio steuert die Dimensionen des Containers, nicht wie Medien diesen ausfüllen. Verwenden Sie für Bilder oder Videos object-fit, um das Medienverhalten innerhalb der Box zu steuern:

.thumbnail {
  aspect-ratio: 1;
  object-fit: cover;
}

Dies erzeugt einen quadratischen Container, in dem das Bild den Bereich abdeckt und bei Bedarf zugeschnitten wird.

CSS Aspect Ratio vs. der Padding-Hack

Bevor aspect-ratio Browser-Unterstützung hatte, verwendeten Entwickler den padding-bottom-Prozentsatz-Trick:

/* Veralteter Padding-Hack */
.video-wrapper {
  position: relative;
  padding-bottom: 56.25%; /* 9/16 = 0,5625 */
  height: 0;
}
.video-wrapper iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

Dies funktioniert, weil Padding-Prozentsätze gegen die Breite des Elternelements berechnet werden und so eine verhältnisbasierte Höhe erzeugen. Es erfordert jedoch Wrapper-Elemente, absolute Positionierung und obskure Mathematik.

Der moderne Ansatz ist sauberer:

.video-wrapper {
  aspect-ratio: 16 / 9;
}
.video-wrapper iframe {
  width: 100%;
  height: 100%;
}

Verwenden Sie aspect-ratio als Standard. Reservieren Sie den Padding-Hack nur, wenn Sie Legacy-Browser wie IE unterstützen müssen.

Aspect-Ratio in Flexbox und Grid

Die Verwendung von aspect-ratio in Flexbox- und Grid-Layouts funktioniert, aber Auto-Sizing-Interaktionen können unerwartete Ergebnisse liefern.

In CSS Grid funktioniert aspect-ratio natürlich mit automatisch dimensionierten Tracks:

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}
.grid-item {
  aspect-ratio: 1;
}

Jedes Element wird quadratisch, wobei die Höhe seiner durch das Grid bestimmten Breite entspricht.

In Flexbox sollten Sie beachten, dass flex-grow und flex-shrink die berechnete Breite beeinflussen, die dann die Höhe über aspect-ratio bestimmt. Wenn sich Elemente unerwartet dehnen, überprüfen Sie Ihre Flex-Eigenschaften. Das Setzen einer expliziten width oder flex-basis auf dem Element gibt aspect-ratio eine stabile Dimension, von der aus gearbeitet werden kann.

Für beide Layout-Systeme setzen Sie min-height: 0 auf Elemente, wenn Inhalte die durch aspect-ratio eingeschränkte Höhe überlaufen.

Praktische responsive Layouts mit Aspect-Ratio

Hier ist ein gängiges Muster für responsive Card-Bilder:

.card-image {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
}

Und für eingebettete Videos:

.embed-container {
  width: 100%;
  max-width: 800px;
  aspect-ratio: 16 / 9;
}

Beide Muster reservieren sofort Layout-Platz und eliminieren kumulative Layout-Verschiebungen (CLS).

Fazit

Die aspect-ratio-Eigenschaft definiert ein bevorzugtes Verhältnis, das verwendet wird, wenn mindestens eine Dimension auf auto gesetzt ist. Sie formt die Box des Elements – nicht den Medieninhalt – und ersetzt die Padding-Hack-Technik für moderne Browser. Bei der Arbeit mit Bildern oder Videos kombinieren Sie sie mit object-fit, um zu steuern, wie Medien den Raum ausfüllen. In Flexbox- und Grid-Kontexten achten Sie auf Auto-Sizing-Interaktionen, die die berechneten Dimensionen beeinflussen können.

Häufig gestellte Fragen

Nein. Die aspect-ratio-Eigenschaft greift nur, wenn mindestens eine Dimension auf auto gesetzt ist. Wenn Sie sowohl width als auch height auf explizite Werte setzen, haben diese Dimensionen Vorrang und die aspect-ratio-Deklaration wird vollständig ignoriert.

Setzen Sie aspect-ratio mit einem Fallback-Verhältnis, wie aspect-ratio: auto 4 / 3, damit der Browser Platz reservieren kann, bevor das Bild geladen wird. Für beste Ergebnisse und minimale Layout-Verschiebungen fügen Sie auch explizite width- und height-Attribute zum img-Element hinzu, damit der Browser seine intrinsischen Dimensionen sofort kennt.

Für alle modernen Browser, ja. Die aspect-ratio-Eigenschaft wird in Chrome, Firefox, Safari und Edge unterstützt. Der einzige Grund, den padding-bottom-Hack beizubehalten, ist, wenn Sie Internet Explorer unterstützen müssen, der überhaupt keine Unterstützung für aspect-ratio hat.

Flexbox-Elemente haben standardmäßig eine min-height von auto, was verhindern kann, dass das Element unter seine Inhaltshöhe schrumpft. Setzen Sie min-height: 0 auf das Flex-Element, damit die durch aspect-ratio eingeschränkte Höhe respektiert wird. Überprüfen Sie auch, ob flex-grow oder flex-shrink nicht die Breite überschreiben, von der aspect-ratio abhängt.

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay