Mit der CSS-Eigenschaft aspect-ratio
können Sie Felder erstellen, die proportionale Abmessungen beibehalten, wobei das height
und width
eines Felds automatisch als Verhältnis berechnet wird. Es ist ein wenig mathematisch, aber die Idee ist, dass Sie einen Wert für diese Eigenschaft durch einen anderen teilen können und der berechnete Wert sicherstellt, dass eine Box in diesem Verhältnis bleibt.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
ist in der Spezifikation des CSS Box Sizing Module Level 4 definiert, die sich derzeit im Arbeitsentwurf befindet. Das heißt, es ist noch im Gange und kann sich ändern. Aber da Chrome und Firefox es hinter einer experimentellen Flagge unterstützen und Safari Technology Preview Anfang 2021 Unterstützung dafür hinzufügt, gibt es starke Signale, aspect-ratio
die viel an Dynamik gewinnen.
Syntax
aspect-ratio: auto || ;
Im Klartext: aspect-ratio
wird entweder auto
standardmäßig angenommen oder akzeptiert a als Wert wo
.
- Ursprünglicher Wert:
auto
- Gilt für: alle Elemente außer Inline-Boxen und internen Rubin- oder Tabellenboxen
- Geerbt: nein
- Prozentsätze: n / a
- Berechneter Wert: angegebenes Schlüsselwort oder ein Zahlenpaar
- Animationstyp: diskret
Werte
/* Keyword values */ aspect-ratio: auto; /* default */ /* Ratio values */ aspect-ratio: 1 / 1; /* width and height are equal proportion */ aspect-ratio: 2 / 1; /* width is twice the height*/ aspect-ratio: 1 / 2; /* width is half the height */ aspect-ratio: 16 / 9 /* typical video aspect ratio */ /* Global values */ aspect-ratio: inherit; aspect-ratio: initial; aspect-ratio: unset;
Es funktioniert mit ersetzten und nicht ersetzten Inhalten
Wenn Sie denken: "Ähm, ja, macht der Browser das nicht schon für uns bei Bildern?" Die Antwort lautet: absolut . Browser führen einige ausgefallene Seitenverhältnisberechnungen für ersetzte Inhalte wie Bilder durch. Wenn ein Bild beispielsweise eine Breite von 500 Pixel hat, biegt der Browser seine CSS-Layout-Algorithmen, um die intrinsischen oder „natürlichen“ Abmessungen des Bildes beizubehalten. Die aspect-ratio
Eigenschaft kann verwendet werden, um diese natürlichen Dimensionen effektiv zu überschreiben.
Aber nicht ersetzten Inhalt hat kein natürliches Verhältnis. Das ist das meiste, mit dem wir arbeiten, wie Divs. Anstatt zu versuchen, die natürlichen Proportionen des Elements beizubehalten, wird aspect-ratio
eine „bevorzugte“ Größe festgelegt.
In der Spezifikation wird derzeit festgestellt, dass ältere CSS-Spezifikationen, insbesondere CSS 2.1, keine klare Unterscheidung zwischen ersetztem und nicht ersetztem Inhalt enthalten. Das heißt, wir könnten einige zusätzliche Sonderfälle zur Spezifikation hinzufügen, um sie zu klären. Derzeit wird in Browsern die Unterstützung für das Festlegen bevorzugter Seitenverhältnisse für ersetzte und nicht aspect-ratio
ersetzte Inhalte eingeführt , wobei einige Browser mit früher Unterstützung hinter einem experimentellen Flag möglicherweise nur nicht ersetzte Inhalte unterstützen. Es lohnt sich auf jeden Fall, die Browserunterstützung im Auge zu behalten.
Es funktioniert alleine ohne Angabe eines width
oderheight
Also, ja, wir können es einfach auf ein Element wie dieses legen:
.element ( aspect-ratio: 16 / 9; )
… Und die Standardeinstellung des Elements wird width: auto
implizit aktiviert , um die Abmessungen des Elements festzulegen.

Es ändert sich, wenn width
oder height
sich auf demselben Element befinden
Angenommen, wir haben ein Element mit einer Breite von 300px
und einem aspect-ratio
von 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Möchte von Natur aus aspect-ratio
die Abmessungen des Elements selbst berechnen und wird dies basierend auf dem Kontext tun, in dem es verwendet wird. Aber damit width
geworfen in, sagt er Aspektverhältnis des Elements Seitenverhältnis Box mit zu berechnen , 300px
wie die Breite. Infolgedessen ist es so, als wären wir gerade geschrieben:
.element ( height: 100px; width: 300px; )
Das macht Sinn! Denken Sie daran, wenn nein width
oder height
angegeben sind, geht der Browser davon aus, dass dies der Fall ist, auto
und geht von dort aus. Wenn wir explizite width
und height
Werte angeben, werden diese verwendet.
Es wird in einigen Situationen ignoriert
Dies ist der Punkt, an dem die Dinge ein wenig nervenaufreibend werden, weil es Fälle gibt, in denen aspect-ratio
übersehen wird oder die Berechnungen von anderen Eigenschaften beeinflusst werden. Das beinhaltet:
Wenn beide width
und height
für das Element deklariert sind
Wir haben gerade gesehen, wie sich das Deklarieren von entweder width
oder height
on und element auf die Berechnung von auswirkt aspect-ratio
. Wenn das Element jedoch bereits ein width
und hat height
, werden diese anstelle von verwendet aspect-ratio
. Beide Eigenschaften müssen überschrieben werden aspect-ratio
. Wenn Sie entweder height
oder width
allein einstellen, wird das Seitenverhältnis des Elements nicht beeinträchtigt.

aspect-ratio
wird ignoriert, wenn beide width
und height
auf dasselbe Element gesetzt sind.
Macht Senes, richtig? Wenn einer von beiden verwendet wird width
oder height
erzwungen wird aspect-ratio
, diesen Wert in der Berechnung zu verwenden, folgt logischerweise, dass die Verwendung von beiden vollständig überschrieben wird, aspect-ratio
da beide Werte bereits bereitgestellt und festgelegt sind.
Wenn der Inhalt aus dem Verhältnis ausbricht
Einfach ausgedrückt, wenn Sie ein Element mit einem Seitenverhältnis haben und der Inhalt so lang ist, dass das Element zum Erweitern gezwungen wird, wird das Element erweitert. Und wenn sich das Element ausdehnt, ändern sich seine Abmessungen und damit kein Seitenverhältnis mehr. Aus diesem Grund besagt die Spezifikation, dass die Eigenschaft das „bevorzugte“ Seitenverhältnis festlegt. Es wird bevorzugt, aber nicht verschrieben.
Gefällt dir nicht, wie das funktioniert? Durch Festlegen min-height: 0;
des Elements kann der Inhalt das bevorzugte Seitenverhältnis überschreiten, anstatt es zu erweitern.

Wenn es an min-*
und max-*
Eigenschaften "verliert"
Wir haben nur irgendwie gesehen, wie das funktioniert, oder? Wenn der Inhalt die Abmessungen der Box überschreitet, aspect-ratio
ist die Box praktisch nicht mehr vorhanden, da sich die Box mit dem Inhalt erweitert. Wir können das mit überschreiben min-width: 0
.
Das ist , weil alle der min-*
und max-*
Eigenschaften , die typischerweise Kampf width
und height
um die Vorherrschaft im Krieg über Box Modellrechnungen. Zum Beispiel:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Aber:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
Dies min-width
liegt daran, dass entweder verhindert wird width
, dass ein bestimmter Wert unterschritten wird, oder dass dies ignoriert wird, da width
das Element bereits über die erforderliche Mindestbreite hinaus festgelegt wurde. Das gleiche gilt für min-height
, max-width
, und max-height
.
Der Punkt von all dem: Wenn wir beide a min-*
oder max-*
Eigenschaft auf dasselbe Element setzen wie aspect-ratio
und sie "gewinnen" width
oder height
, dann werden diese überschreiben aspect-ratio
. Ich habe dir gesagt, dass es ein bisschen nervenaufreibend ist. ?
Browser-Unterstützung
IE | Kante | Feuerfuchs | Chrom | Safari | Oper |
---|---|---|---|---|---|
Nein | Nein | 86 1.2,3 | 90 4 | TP 5 | Nein |
Android Chrome | Android Firefox | Android Browser | iOS Safari | Opera Mobile |
---|---|---|---|---|
Nein | Nein | Nein | Nein | Nein |
1 Kann durch Einstellen
layout.css.aspect-ratio.enabled
auf aktiviert werden true
.2 Unterstützung für in Firefox 81 eingeführte Blöcke und ersetzte Elemente.
3 Unterstützung für in Firefox 83 eingeführte Flex-Elemente.
4 Kann durch
#enable-experimental-web-platform-features
Aktivieren aktiviert werden .5 Verfügbar in Safari Technology Preview 118.
Mehr Informationen
Artikel am 1. Juli 2020Ein erster Blick auf das Seitenverhältnis












