Lastnost CSS aspect-ratio
vam omogoča ustvarjanje polj, ki ohranjajo sorazmerne dimenzije, kjer se polje height
in in width
polje samodejno izračuna kot razmerje. Malo je matematike, vendar je ideja, da lahko na tej lastnosti eno vrednost delite z drugo, izračunana vrednost pa zagotovi, da polje ostane v tem razmerju.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
je opredeljen v specifikaciji modula za določanje velikosti CSS Box Level 4, ki je trenutno v delovnem osnutku. To pomeni, da še vedno poteka in ima možnost spremembe. Toda Chrome in Firefox ga podpirata za eksperimentalno zastavico in Safari Technology Preview, ki ji v začetku leta 2021 dodaja podporo, kaže na močne signale, ki aspect-ratio
dobivajo velik zagon.
Sintaksa
aspect-ratio: auto || ;
V preprosti angleščini: aspect-ratio
domneva se, da je auto
privzeto, ali sprejme vrednost kot vrednost where
.
- Začetna vrednost:
auto
- Velja za: vse elemente, razen vrstic in notranje rubin ali mize
- Podedovano: ne
- Odstotki: n / a
- Izračunana vrednost: določena ključna beseda ali par številk
- Vrsta animacije: diskretna
Vrednote
/* 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;
Deluje na nadomeščeni in nenadomeščeni vsebini
Če razmišljate: "Uhm, ja, ali brskalnik tega že ne naredi na slikah?" odgovor je: absolutno . Brskalniki opravijo nekaj modnih izračunov razmerja stranic za nadomeščeno vsebino, kot so slike. Če ima slika recimo širino 500 slikovnih pik, brskalnik prilagodi svoje algoritme postavitve CSS, da ohrani lastne ali "naravne" dimenzije slike. aspect-ratio
Premoženje se lahko uporablja za učinkovito preglasijo tiste naravne razsežnosti.
Toda nenadomeščena vsebina nima naravnega deleža. To je večina stvari, s katerimi delamo, na primer divji. Namesto da bi poskušali ohraniti naravne proporcije elementa, aspect-ratio
nastavite "prednostno" velikost.
Spec trenutno ugotavlja, da starejše specifikacije CSS, zlasti CSS 2.1, ne vsebujejo jasnega razlikovanja med nadomeščeno in nenadomeščeno vsebino. To pomeni, da smo lahko v specifikacijo dodali nekaj dodatnih posebnih primerov, ki jih bodo lažje razjasnili. Zaenkrat opažamo, da brskalniki uvajajo podporo za nastavitev prednostnih razmerij stranic za nadomeščene in nenadomeščene ločeno, pri čemer nekateri brskalniki z zgodnjo podporo za eksperimentalno zastavico morda podpirajo le aspect-ratio
neizmenjeno vsebino. Vsekakor je vredno spremljati podporo brskalnika, ko se razvija.
Deluje samostojno, ne da bi določil width
ozheight
Torej, ja, lahko ga preprosto spustimo na tak element:
.element ( aspect-ratio: 16 / 9; )
… In privzeto se element privzeto width: auto
začne, da nastavi dimenzije elementa.
Spremeni se, kadar je width
ali height
je na istem elementu
Recimo, da imamo element s širino 300px
in aspect-ratio
od 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Po naravi aspect-ratio
želi sam izračunati dimenzije elementa in bo to storil glede na kontekst, v katerem se uporablja. Toda s tem, ki se width
vrže, pove razmerje stranic, da izračuna polje razmerja stranic elementa, ki se uporablja 300px
kot širina. Posledično je tako, kot da smo pravkar napisali:
.element ( height: 100px; width: 300px; )
To je smiselno! Ne pozabite, da če brskalnik ni določen width
ali height
ni, brskalnik domneva, da je to, auto
in gre od tam naprej. Ko podajamo eksplicitne width
in height
vrednosti, se te navadijo.
V nekaterih primerih je prezrt
Tu se stvari nekoliko zalomijo, ker so v nekaterih primerih aspect-ratio
spregledani ali na izračune vplivajo druge lastnosti. To vključuje:
Ko sta na elementu deklarirana oba width
inheight
Pravkar smo videli, kako bo navedba elementa width
ali height
elementa in elementa vplivala na izračun aspect-ratio
. Če pa element že ima oba width
in height
, se ta uporabijo namesto aspect-ratio
. Zahteva preglasitev obeh lastnosti aspect-ratio
; nastavitev enega height
ali width
samega ne bo prekinila razmerja stranic elementa.
Naredi sene, kajne? Če uporabite katero koli width
ali height
prisilno aspect-ratio
uporabite to vrednost pri izračunu, potem logično izhaja, da bi uporaba obeh popolnoma preglasila, aspect-ratio
saj sta obe vrednosti že podani in nastavljeni.
Ko se vsebina izbije iz razmerja
Preprosto povedano, če imate element z razmerjem stranic in je vsebina tako dolga, da prisili element k razširitvi, se bo element razširil. In če se element razširi, se njegove dimenzije spremenijo in tako ni več razmerja stranic. Zato v specifikaciji piše, da lastnost nastavi "prednostno" razmerje stranic. Zaželeno je, vendar ni predpisano.
Vam ni všeč, kako to deluje? Nastavitev min-height: 0;
elementa bo omogočila, da vsebina prepiše želeno razmerje stranic, namesto da bi ga razširila.
Ko "izgubi" min-*
in max-*
lastnosti
Pravkar smo videli, kako to deluje, kajne? Ko vsebina presega dimenzije škatle, aspect-ratio
je dejansko ni več, ker se škatla z vsebino razširi. To lahko preglasimo s min-width: 0
.
To je zato, ker vse min-*
in max-*
lastnosti običajno bitko width
in height
za prevlado v vojni nad izračune Box Model. Na primer:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Ampak:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
To je zato, ker min-width
preprečuje, width
da bi šel pod določeno vrednost, ali pa se prezre, ker width
je element že nastavil element, ki presega najmanjšo širino, ki jo mora biti. Ista stvar velja za min-height
, max-width
in max-height
.
Bistvo vsega tega: če oboji min-*
ali max-*
lastnost nastavimo na isti element kot aspect-ratio
in bosta »zmagali« nad width
ali height
, bodo ti preglasili aspect-ratio
. Rekel sem ti, da je malo umirjeno. ?
Podpora brskalnika
IE | Rob | Firefox | Chrome | Safari | Opera |
---|---|---|---|---|---|
Ne | Ne | 86 1,2,3 | 90 4 | TP 5 | Ne |
Android Chrome | Android Firefox | Brskalnik Android | iOS Safari | Opera Mobile |
---|---|---|---|---|
Ne | Ne | Ne | Ne | Ne |
1 To lahko omogočite tako, da nastavite
layout.css.aspect-ratio.enabled
na true
.2 Podpora za bloke in nadomeščene elemente, predstavljene v Firefoxu 81.
3 Podpora za fleksibilne elemente, uvedene v Firefoxu 83.
4 Lahko omogočite tako, da nastavite
#enable-experimental-web-platform-features
na Enabled.5 Na voljo v predogledu tehnologije Safari 118.