Vlastnosť CSS aspect-ratio
umožňuje vytvoriť krabice, ktoré udržujú proporcionálne rozmery, kde height
a width
krabice sú automaticky vypočíta ako pomer. Je to trochu matematika, ale predpokladá sa, že na tejto vlastnosti môžete vydeliť jednu hodnotu druhou a vypočítaná hodnota zabezpečí, že rámček zostane v takom pomere.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
je definovaná v špecifikácii úrovne CSS Box Sizing Module úrovne 4, ktorá je momentálne v pracovnom koncepte. To znamená, že stále pokračuje a má šancu sa zmeniť. Ale keďže Chrome a Firefox ho podporujú za experimentálnou vlajkou a Safari Technology Preview ho pridáva začiatkom roku 2021, existujú silné signály, ktoré aspect-ratio
naberajú na obrátkach.
Syntax
aspect-ratio: auto || ;
V jednoduchej angličtine: aspect-ratio
buď sa predpokladá, že je auto
predvolene, alebo akceptuje hodnotu a ako hodnotu kde
.
- Pôvodná hodnota:
auto
- Vzťahuje sa na: všetky prvky okrem vložených políčok a vnútorných rubínových alebo tabuľkových škatúľ
- Zdedené: č
- Percentá: n / a
- Vypočítaná hodnota: zadané kľúčové slovo alebo dvojica čísel
- Typ animácie: diskrétna
Hodnoty
/* 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;
Funguje na nahradenom a nenahradenom obsahu
Ak si myslíte: „Hm, jo, nerobí to pre nás prehliadač už na obrázkoch?“ odpoveď je: absolútne . Prehliadače robia niektoré fantastické výpočty pomeru strán na nahradenom obsahu, ako sú obrázky. Ak má teda obrázok povedzme šírku 500 pixelov, prehľadávač prispôsobí svoje algoritmy rozloženia CSS tak, aby zachoval jeho prirodzené alebo „prirodzené“ rozmery. aspect-ratio
Vlastnosť môže byť použitá k efektívnemu potlačeniu týchto prírodných rozmerov.
Nenahradený obsah ale nemá prirodzený podiel. To je väčšina vecí, s ktorými pracujeme, napríklad divy. Namiesto pokusu o zachovanie prirodzených proporcií prvku aspect-ratio
nastaví „preferovanú“ veľkosť.
Teraz špecifikácia poznamenáva, že staršie špecifikácie CSS, najmä CSS 2.1, neobsahujú jasný rozdiel medzi nahradeným a nenahradeným obsahom. To znamená, že sme mohli vidieť niektoré ďalšie špeciálne prípady pridané k špecifikácii, aby sme ich objasnili. V súčasnej dobe vidíme prehľadávače zavádzajúce podporu pre nastavenie preferovaných pomerov strán na nahradené a nenahradené osobitne, kde niektoré z prehľadávačov s počiatočnou podporou experimentálneho príznaku môžu podporovať iba aspect-ratio
nenahradený obsah. Určite stojí za to sledovať vývoj prehliadača.
Funguje to samo o sebe bez udania width
aleboheight
Takže, môžeme to jednoducho položiť na prvok ako je tento:
.element ( aspect-ratio: 16 / 9; )
... a predvolené nastavenie prvku sa width: auto
implicitne naštartuje, aby sa nastavili rozmery prvku.

Mení sa, keď sú width
alebo height
sú na rovnakom prvku
Povedzme, že máme prvok s šírkou 300px
a aspect-ratio
z 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Prirodzene, aspect-ratio
chce vypočítať rozmery prvku samostatne a urobí to na základe kontextu, v ktorom sa použije. Ale keď je to width
zahodené, hovorí to pomeru strán, aby vypočítal pole pomeru strán prvku pomocou 300px
šírky. Výsledkom je, že sme práve napísali:
.element ( height: 100px; width: 300px; )
Toto dáva zmysel! Pamätajte, že keď nie sú zadané width
alebo height
sú zadané, prehľadávač predpokladá, že sú, auto
a ide odtiaľ. Keď poskytneme explicitné hodnoty width
a height
hodnoty, tak si zvykneme.
V niektorých situáciách sa ignoruje
To je miesto, kde to bude trochu myslieť, pretože existujú prípady, keď aspect-ratio
je prehliadaný alebo jeho výpočty ovplyvňujú iné vlastnosti. Zahŕňa to:
Keď sú aj width
a height
sú deklarované na prvku
Len sme videli, ako deklarácia buď width
alebo height
na a element ovplyvní výpočet aspect-ratio
. Ale ak prvok už má aj width
a height
, tak sa zvyknú namiesto aspect-ratio
. Vyžaduje prepísanie oboch vlastností aspect-ratio
; nastavenie buď samotné, height
alebo width
nezruší pomer strán prvku.

aspect-ratio
je ignorované, ak sú obidve width
a height
sú nastavené na rovnaký prvok.
Robí sny, že? Ak použijete jednu width
alebo height
vynútite aspect-ratio
použitie tejto hodnoty vo výpočte, logicky z toho vyplýva, že použitie oboch by úplne prepísalo aspect-ratio
úplne, pretože obe hodnoty sú už poskytnuté a nastavené.
Keď obsah vypadne z pomeru
Zjednodušene povedané, ak máte prvok s pomerom strán a jeho obsah je taký dlhý, že núti element sa rozširovať, potom sa element rozšíri. A ak sa prvok roztiahne, jeho rozmery sa zmenia, a teda už žiadny pomer strán. Preto špecifikácia hovorí, že vlastnosť nastavuje „preferovaný“ pomer strán. Je to preferované, ale nie predpísané.
Nepáči sa vám, ako to funguje? Nastavenie min-height: 0;
prvku umožní, aby obsah namiesto rozšírenia prekročil preferovaný pomer strán.

Keď to „stratí“ min-*
a max-*
vlastnosti
Len sme trochu videli, ako to funguje, že? Keď obsah presahuje rozmery krabice, položka aspect-ratio
je skutočne preč, pretože sa pole rozširuje o obsah. Môžeme to prepísať min-width: 0
.
To preto, že všetky min-*
a max-*
vlastnosti typicky bitka width
a height
o nadvládu vo vojne nad výpočty box model. Napríklad:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Ale:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
Je to preto, lebo min-width
buď bráni width
v poklese pod konkrétnu hodnotu, alebo je ignorovaná, pretože width
sada už nastavila prvok nad minimálnu šírku, ktorá musí byť. To isté platí pre min-height
, max-width
a max-height
.
Pointa tohto všetkého: ak nastavíme obidve vlastnosti min-*
alebo max-*
na rovnaký prvok ako aspect-ratio
a oni „vyhrajú“ nad width
alebo height
, potom budú mať prednosť aspect-ratio
. Povedal som ti, že to bolo trochu rozumné. ?
Podpora prehliadača
IE | Hrana | Firefox | Chrome | Safari | Opera |
---|---|---|---|---|---|
Nie | Nie | 86 1,2,3 | 90 4 | TP 5 | Nie |
Android Chrome | Android Firefox | Prehliadač Android | iOS Safari | Opera Mobile |
---|---|---|---|---|
Nie | Nie | Nie | Nie | Nie |
1 Možno povoliť nastavením
layout.css.aspect-ratio.enabled
na true
.2 Podpora blokov a nahradených prvkov zavedených vo Firefoxe 81.
3 Podpora flex položiek predstavených vo Firefoxe 83.
4 Možno ich povoliť nastavením
#enable-experimental-web-platform-features
na hodnotu Povolené.5 K dispozícii v ukážke technológie Safari 118.
Viac informácií
Článok z 1. júla 2020Prvý pohľad na `pomer strán`












