CSS nuosavybė aspect-ratio
leidžia jums sukurti dėžės, kad išlaikyti proporcingus matmenis, kur height
ir width
iš dėžutės apskaičiuojamos automatiškai kaip santykis. Tai šiek tiek matematikos y, bet idėja yra ta, kad šią nuosavybę galite padalyti vieną vertę iš kitos, o apskaičiuota vertė užtikrina, kad langelis išliks tokia proporcija.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
yra apibrėžta CSS dėžutės dydžio modulio 4 lygio specifikacijoje, kuri šiuo metu yra darbo projekte. Tai reiškia, kad jis vis dar vyksta ir turi galimybę pasikeisti. Tačiau, kai „Chrome“ ir „Firefox“ palaiko jį už eksperimentinės vėliavos, o „Safari Technology Preview“ 2021 m. Pradžioje jį palaikė, yra stiprių signalų, kurie aspect-ratio
įgauna daug pagreitį.
Sintaksė
aspect-ratio: auto || ;
Paprasta anglų kalba: aspect-ratio
laikoma, kad auto
pagal numatytuosius nustatymus ji yra, arba priima reikšmę, kur
.
- Pradinė vertė:
auto
- Taikoma: visiems elementams, išskyrus įdėtas dėžutes ir vidines rubino ar stalo dėžutes
- Paveldima: ne
- Procentai: nėra
- Apskaičiuota vertė: nurodytas raktinis žodis arba skaičių pora
- Animacijos tipas: diskretiškas
Vertybės
/* 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;
Jis veikia su pakeistu ir nepakeistu turiniu
Jei galvojate: „Uhm, taip, ar ne naršyklė tai daro mums dėl paveikslėlių?“ atsakymas yra: visiškai . Naršyklės atlieka keletą išgalvotų proporcijų skaičiavimų pakeistam turiniui, pvz., Vaizdams. Taigi, jei vaizdas, tarkime, yra 500 taškų pločio, naršyklė išplečia savo CSS išdėstymo algoritmus, kad išlaikytų vidinius arba „natūralius“ vaizdo matmenis. Ši aspect-ratio
savybė gali būti naudojama norint veiksmingai pakeisti tuos natūralius matmenis.
Bet nepakeistas turinys neturi natūralios proporcijos. Tai yra dauguma dalykų, su kuriais dirbame, pavyzdžiui, divai. Užuot bandęs išlaikyti natūralias elemento proporcijas, aspect-ratio
nustato „pageidaujamą“ dydį.
Šiuo metu specifikacijoje pažymima, kad senesnėse CSS specifikacijose, ypač CSS 2.1, nėra aiškaus skirtumo tarp pakeisto ir nepakeisto turinio. Tai reiškia, kad galime pamatyti keletą papildomų specialių atvejų, kurie būtų papildyti specifikacija, kad padėtų juos išaiškinti. Kol kas matome, kad naršyklės palaiko pageidaujamų proporcijų nustatymą pakeičiant ir nepakeičiant atskirai, kur kai kurios naršyklės, turinčios išankstinį palaikymą už eksperimentinės vėliavos, gali palaikyti tik aspect-ratio
nepakeistą turinį. Tikrai verta stebėti naršyklės palaikymą, kai ji vystosi.
Jis veikia savarankiškai nenurodydamas a width
arbaheight
Taigi, taip, mes galime tiesiog mesti jį ant tokio elemento:
.element ( aspect-ratio: 16 / 9; )
... ir numatytasis elemento elementas width: auto
numanomas nustato elemento matmenis.
Ji pakeičia kai width
arba height
yra ant paties elemento
Tarkime, mes turime su pločio elementą 300px
ir aspect-ratio
iš 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Iš prigimties aspect-ratio
nori pats apskaičiuoti elemento matmenis ir tai padarys remdamasis kontekstu, kuriame jis naudojamas. Bet tai width
metant, nurodoma proporcija apskaičiuoti elemento proporcijos langelį naudojant 300px
plotį. Todėl tarsi ką tik parašėme:
.element ( height: 100px; width: 300px; )
Tai yra prasminga! Atminkite, kad nenurodžius width
ar height
nenurodžius, naršyklė daro prielaidą, kad jie yra auto
ir eina iš ten. Kai mes pateikiame aiškias width
ir height
vertybes, tai yra tai, kas įpranta.
Kai kuriose situacijose to nepaisoma
Čia viskas pasidaro šiek tiek linkusi į galvą, nes yra atvejų, kai į aspect-ratio
tai nepastebima arba jo skaičiavimus veikia kitos savybės. Tai apima:
Kai tiek width
ir height
yra paskelbta elemento
Mes ką tik pamatėme, kaip deklaravimas width
arba height
, ir elementas paveiks skaičiavimą aspect-ratio
. Bet jei elementas jau turi ir, width
ir height
jie įpranta vietoj aspect-ratio
. Tam reikia abiejų savybių, kad jos būtų nepaisomos aspect-ratio
; nustatant bet kurį height
arba width
atskirai, elemento kraštinių santykis nebus nutrauktas.
Padaro senes, tiesa? Jei naudosite bet kurį width
arba height
verčiate aspect-ratio
naudoti tą vertę skaičiuojant, logiškai išplaukia, kad naudojant abu būtų visiškai nepaisoma aspect-ratio
, nes abi vertės jau pateiktos ir nustatytos.
Kai turinys išsiskiria iš santykio
Paprasčiau tariant, jei turite elementą su formato santykiu ir turinys yra toks ilgas, kad priverčia elementą plėstis, tada elementas išsiplės. Jei elementas plečiasi, keičiasi jo matmenys ir daugiau nebėra kraštinių santykio. Štai kodėl specifikacija sako, kad ypatybė nustato „pageidaujamą“ kraštinių santykį. Tai pageidautina, bet nėra nustatyta.
Nepatinka, kaip tai veikia? Nustačius min-height: 0;
elementą, turinys viršys pageidaujamą formato koeficientą, užuot jį išplėtęs.
Kai „praranda“ min-*
ir max-*
savybes
Mes tiesiog pamatėme, kaip tai veikia, tiesa? Kai turinys viršija laukelio matmenis, jo nebelieka, aspect-ratio
nes dėžutė plečiasi kartu su turiniu. Mes galime tai nepaisyti min-width: 0
.
Taip yra todėl , kad kare dėl „Box Model“ skaičiavimų visos min-*
ir max-*
savybės paprastai kovoja width
ir height
už viršenybę. Pavyzdžiui:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Bet:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
Taip yra todėl, kad min-width
arba neleidžiama width
nukristi žemiau tam tikros vertės, arba jis yra ignoruojamas, nes width
elementas „set“ jau nustatė elementą, viršijantį jo minimalų plotį. Tas pats pasakytina ir min-height
, max-width
ir max-height
.
Viso to esmė: jei mes nustatysime tiek a, min-*
tiek max-*
savybę tame pačiame elemente kaip aspect-ratio
ir jie „laimės“ width
arba height
, tada jie bus nepaisomi aspect-ratio
. Sakiau, kad tai buvo šiek tiek proto. ?
Naršyklės palaikymas
T.Y | Briauna | „Firefox“ | „Chrome“ | „Safari“ | Opera |
---|---|---|---|---|---|
Ne | Ne | 86 1.2,3 | 90 4 | TP 5 | Ne |
„Android Chrome“ | „Android Firefox“ | „Android“ naršyklė | „iOS Safari“ | „Opera Mobile“ |
---|---|---|---|---|
Ne | Ne | Ne | Ne | Ne |
1 Galima įjungti nustatant
layout.css.aspect-ratio.enabled
į true
.2 „Firefox 81.“ įdiegtų blokų ir pakeistų elementų palaikymas.
3 „Firefox 83“ įdiegtų lankstiųjų elementų palaikymas.
4 Galima įgalinti nustatant parinktį
#enable-experimental-web-platform-features
Įgalinta.5 Galima rasti „Safari Technology Preview 118“.