Svojstvo CSS aspect-ratio
omogućuje vam stvaranje okvira koji održavaju proporcionalne dimenzije gdje se height
i width
okvira automatski izračunavaju kao omjer. Malo je matematike, ali ideja je da na ovom svojstvu možete podijeliti jednu vrijednost s drugom, a izračunata vrijednost osigurava da okvir ostane u tom omjeru.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
definiran je u CSS modulu za dimenzioniranje okvira razine 4, koji je trenutno u radnom nacrtu. To znači da je još uvijek u tijeku i ima šanse za promjenu. No s Chromeom i Firefoxom koji ga podržavaju iza eksperimentalne zastave, a Safari Technology Preview koji mu je dodao podršku početkom 2021. godine, postoje snažni signali koji aspect-ratio
dobivaju puno maha.
Sintaksa
aspect-ratio: auto || ;
Jednostavnim engleskim: aspect-ratio
pretpostavlja se da je auto
prema zadanim postavkama ili prihvaća a kao vrijednost where
.
- Početna vrijednost:
auto
- Odnosi se na: sve elemente, osim u unutarnje okvire i unutarnje rubinske ili stolne kutije
- Naslijeđeno: ne
- Postoci: n / a
- Izračunata vrijednost: navedena ključna riječ ili par brojeva
- Vrsta animacije: diskretna
Vrijednosti
/* 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;
Radi na zamijenjenom i nezamijenjenom sadržaju
Ako razmišljate: "Uhm, da, zar to preglednik već ne čini za nas na slikama?" odgovor je: apsolutno . Preglednici rade neke fensi izračune omjera slike na zamijenjenom sadržaju poput slika. Dakle, ako slika ima, recimo, širinu od 500 piksela, preglednik prilagođava svoje algoritme CSS rasporeda kako bi održao unutarnje ili "prirodne" dimenzije slike. aspect-ratio
Svojstvo se može koristiti kako bi učinkovito zaobilaze prirodne dimenzije.
No , nezamijenjeni sadržaj nema prirodni omjer. To je većina stvari s kojima radimo, poput div-ova. Umjesto da pokuša zadržati prirodne proporcije elementa, aspect-ratio
postavlja "preferirano" dimenzioniranje.
Sada specifikacija trenutno primjećuje da starije CSS specifikacije, posebno CSS 2.1, ne sadrže jasnu razliku između zamijenjenog i nezamijenjenog sadržaja. To znači da bismo mogli vidjeti neke dodatne posebne slučajeve dodane u specifikaciju kako bi ih pojasnili. Za sada vidimo da preglednici izbacuju podršku za zasebno postavljanje željenih omjera slike na zamijenjene i nezamijenjene, pri čemu neki preglednici s ranom podrškom iza eksperimentalne zastave mogu podržavati samo aspect-ratio
nezamijenjeni sadržaj. Svakako vrijedi pripaziti na podršku preglednika kako se ona razvija.
Djeluje samostalno bez navođenja znaka width
iliheight
Pa, da, možemo ga jednostavno ispustiti na element poput ovog:
.element ( aspect-ratio: 16 / 9; )
... i zadani element elementa width: auto
podrazumijeva postavljanje dimenzija elementa.
![](4290479/aspect-ratio_css-tricks_2.png.webp)
Mijenja se kada je width
ili height
je na istom elementu
Recimo da imamo element širine 300px
i an aspect-ratio
od 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Po prirodi aspect-ratio
želi sam izračunati dimenzije elementa i to će učiniti na temelju konteksta u kojem se koristi. Ali s tim width
ubačenim, govori omjer 300px
širine i visine za izračun okvira omjera elementa koristeći širinu. Kao rezultat, to je kao da smo upravo napisali:
.element ( height: 100px; width: 300px; )
Ovo ima smisla! Zapamtite, kada nije navedeno width
ili height
nije, preglednik pretpostavlja da jesu auto
i odatle ide. Kad pružamo eksplicitne vrijednosti width
i height
vrijednosti, to su one koje se koriste.
U nekim se situacijama zanemaruje
Tu stvari postaju malo pametnije, jer postoje slučajevi u kojima aspect-ratio
se previdi ili na izračune utječu druga svojstva. To uključuje:
Kada su oba width
i height
deklarirani na elementu
Upravo smo vidjeli kako će izjava ili width
ili height
i element utjecati na izračun aspect-ratio
. Ali ako element već ima i width
a height
, oni se koriste umjesto aspect-ratio
. Potrebno je poništiti oba svojstva aspect-ratio
; ako postavite bilo samostalno height
ili width
samostalno, neće se slomiti omjer slike.
![](4290479/aspect-ratio_css-tricks_3.png.webp)
aspect-ratio
zanemaruje se kada su width
i height
postavljeni su na istom elementu.
Stvara sene, zar ne? Ako koristite bilo koju width
ili height
prisiljavate aspect-ratio
da koristi tu vrijednost u izračunu, onda logično slijedi da bi upotreba obje potpuno nadjačala, aspect-ratio
jer su obje vrijednosti već osigurane i postavljene.
Kad se sadržaj izbije iz omjera
Jednostavno rečeno, ako imate element s omjerom stranica, a sadržaj je toliko dugačak da prisiljava element da se proširi, tada će se element proširiti. A ako se element proširi, njegove se dimenzije mijenjaju i, tako, nema više omjera. Zbog toga specifikacija kaže da svojstvo postavlja "preferirani" omjer slike. Poželjno je, ali nije propisano.
Ne sviđa vam se kako to funkcionira? Postavljanje min-height: 0;
elementa omogućit će sadržaju da pređe željeni omjer slike umjesto da ga proširi.
![](4290479/aspect-ratio_css-tricks_4.png.webp)
Kad "izgubi" na min-*
i max-*
svojstva
Upravo smo vidjeli kako to funkcionira, zar ne? Kad sadržaj premaši dimenzije okvira, aspect-ratio
efektivno više nema jer se okvir proširuje sadržajem. To možemo nadvladati s min-width: 0
.
To je zato što se sva min-*
i max-*
svojstva obično bore width
i height
za prevlast u ratu nad izračunima Box modela. Na primjer:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Ali:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
To je zato min-width
što sprječava width
pad ispod određene vrijednosti ili se zanemaruje jer width
je element već postavio element iznad minimalne širine koja treba biti. Ista stvar vrijedi i za min-height
, max-width
i max-height
.
Poanta svega: ako postavimo obje min-*
ili max-*
svojstvo na isti element kao aspect-ratio
i oni "pobijede" width
ili height
će ih nadvladati aspect-ratio
. Rekao sam ti da je to malo pametno. ?
Podrška preglednika
IE | Rub | Firefox | Krom | Safari | Opera |
---|---|---|---|---|---|
Ne | Ne | 86 1.2,3 | 90 4 | TP 5 | Ne |
Android Chrome | Android Firefox | Android preglednik | iOS Safari | Opera Mobile |
---|---|---|---|---|
Ne | Ne | Ne | Ne | Ne |
1 Može se omogućiti postavljanjem
layout.css.aspect-ratio.enabled
na true
.2 Podrška za blokove i zamijenjene elemente uvedene u Firefoxu 81.
3 Podrška za flex elemente uvedene u Firefoxu 83.
4 Može se omogućiti postavljanjem
#enable-experimental-web-platform-features
na Enabled.5 Dostupno u pregledniku Safari Technology 118.
Više informacija
Članak 1. srpnja 2020Prvi pogled na "omjer slike"
![](4290479/aspect-ratio_css-tricks.jpg.webp)
![](4290479/aspect-ratio_css-tricks.jpg.webp)
![](4290479/aspect-ratio_css-tricks_2.jpg.webp)
![](4290479/aspect-ratio_css-tricks.jpg.webp)
![](4290479/aspect-ratio_css-tricks.jpg.webp)
![](4290479/aspect-ratio_css-tricks.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)
![](4290479/aspect-ratio_css-tricks_3.jpg.webp)