CSS-ominaisuuden aspect-ratio
avulla voit luoda laatikoita, jotka ylläpitävät suhteellisia mittasuhteita, joissa ruutu height
ja width
ja lasketaan automaattisesti suhteena. Se on pieni matematiikka-y, mutta idea on, että voit jakaa yhden arvon toisella tällä ominaisuudella ja laskettu arvo varmistaa, että ruutu pysyy tässä suhteessa.
.element ( aspect-ratio: 2 / 1; /* ↔️ is double the ↕️ */ ) .element ( aspect-ratio: 1 / 1; /* ⏹ a perfect square */ )
aspect-ratio
on määritelty CSS-laatikon koon moduulin tason 4 määrittelyssä, joka on parhaillaan työluonnoksessa. Se tarkoittaa, että se on edelleen kesken ja sillä on mahdollisuus muuttua. Mutta kun Chrome ja Firefox tukevat sitä kokeellisen lipun takana ja Safari Technology Preview lisää siihen tuen vuoden 2021 alussa, on vahvoja signaaleja, jotka aspect-ratio
ovat saamassa paljon vauhtia.
Syntaksi
aspect-ratio: auto || ;
Yksinkertaisesti englanniksi: aspect-ratio
joko oletetaan olevan auto
oletuksena tai se hyväksyy arvon arvoksi missä
.
- Alkuarvo:
auto
- Koskee kaikkia elementtejä, paitsi riviruutuja ja sisäisiä rubiini- tai pöytälaatikoita
- Peritty: ei
- Prosenttiosuudet: n / a
- Laskettu arvo: määritetty avainsana tai numeropari
- Animaation tyyppi: erillinen
Arvot
/* 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;
Se toimii korvatulla ja korvaamattomalla sisällöllä
Jos ajattelet: "Uhm, joo, eikö selain jo tee tätä meille kuvissa?" vastaus on: ehdottomasti . Selaimet tekevät hienoja kuvasuhteen laskelmia korvaavalle sisällölle, kuten kuville. Joten jos kuvan leveys on esimerkiksi 500 kuvapistettä, selain joustaa CSS-asettelualgoritmejaan säilyttääkseen kuvan sisäiset tai "luonnolliset" mitat. aspect-ratio
Omaisuus voidaan käyttää tehokkaasti ohittaa nämä luonnolliset ulottuvuudet.
Mutta korvaamattomalla sisällöllä ei ole luonnollista osuutta. Se on suurin osa asioista, joiden kanssa työskentelemme, kuten divs. Sen sijaan, että yritettäisi säilyttää elementin luonnolliset mittasuhteet, aspect-ratio
asettaa "ensisijaisen" koon.
Nyt tekninen huomautus huomauttaa, että vanhemmat CSS-spesifikaatiot, erityisesti CSS 2.1, eivät sisällä selkeää eroa korvatun ja korvaamattoman sisällön välillä. Tämä tarkoittaa, että voimme nähdä joitain erityistapauksia, jotka on lisätty tekniseen tietoon niiden selventämiseksi. Toistaiseksi näemme, että selaimet tukevat ensisijaisten kuvasuhteiden asettamista vaihdetuille ja korvaamattomille erikseen, jolloin jotkut selaimet, joilla on varhainen tuki kokeellisen lipun takana, saattavat tukea vain aspect-ratio
korvaamatonta sisältöä. Ehdottomasti kannattaa pitää silmällä selaintukea sen kehittyessä.
Se toimii yksinään määrittelemättä width
taiheight
Joten, joo, voimme yksinkertaisesti pudottaa sen tällaiselle elementille:
.element ( aspect-ratio: 16 / 9; )
… Ja elementin oletusarvo width: auto
alkaa implisiittisesti asettaa elementin mitat.

Se muuttuu, kun width
tai height
ovat saman alkuaineen
Sanotaan meillä on elementti, jonka leveys on 300px
ja aspect-ratio
on 3/1
.
.element ( aspect-ratio: 3 / 1; width: 300px; )
Luonteeltaan aspect-ratio
haluaa laskea elementin mitat yksin ja tekee sen kontekstin perusteella, jossa sitä käytetään. Mutta kun se width
heitetään sisään, se kertoo kuvasuhteen laskea elementin kuvasuhdelaatikko 300px
leveydellä. Seurauksena on, että olemme juuri kirjoittaneet:
.element ( height: 100px; width: 300px; )
Tässä on järkeä! Muista, että kun ei määritetä width
tai height
määritetään, selain olettaa, että ne ovat auto
ja siirtyvät sieltä. Kun tarjoamme täsmällisiä width
ja height
arvoja, ne ovat tottuneita.
Se jätetään huomiotta joissakin tilanteissa
Täällä asiat muuttuvat hieman mielenkiintoisiksi, koska joissakin tapauksissa aspect-ratio
se jätetään huomiotta tai muut ominaisuudet vaikuttavat sen laskelmiin. Se sisältää:
Kun molemmat width
ja height
on ilmoitettu elementille
Näimme juuri, kuinka jommankumman width
tai height
päälle ja elementin ilmoittaminen vaikuttaa laskentaan aspect-ratio
. Mutta jos elementillä on jo sekä a width
että height
, ne tottuvat sen sijaan aspect-ratio
. Se vaatii molemmat ominaisuudet ohittamaan aspect-ratio
; jompikumpi height
tai width
yksinään ei riko elementin kuvasuhdetta.

aspect-ratio
ohitetaan, kun molemmat width
ja height
on asetettu samalle elementille.
Tekee seneistä, eikö? Jos jompaa kumpaa width
tai height
pakotetaan aspect-ratio
käyttämään kyseistä arvoa laskennassa, seuraa loogisesti, että molempien käyttö ohittaa aspect-ratio
kokonaan, koska molemmat arvot on jo annettu ja asetettu.
Kun sisältö hajoaa suhteesta
Yksinkertaisesti sanottuna, jos sinulla on elementti, jolla on kuvasuhde ja sisältö on niin pitkä, että se pakottaa elementin laajentumaan, elementti laajenee. Ja jos elementti laajenee, sen mitat muuttuvat eikä siten enää kuvasuhdetta. Siksi teknisen tiedon mukaan ominaisuus asettaa "ensisijaisen" kuvasuhteen. Se on suositeltavaa, mutta sitä ei ole määrätty.
Etkö pidä siitä, miten se toimii? min-height: 0;
Elementin asettaminen antaa sisällön ylittää suositellun kuvasuhteen laajentamisen sijaan.

Kun se "menettää" min-*
ja max-*
ominaisuuksia
Näimme vain tavallaan, miten se toimii, eikö? Kun sisältö ylittää laatikon mitat, se aspect-ratio
on käytännössä kadonnut, koska laatikko laajenee sisällön mukana. Voimme ohittaa sen min-width: 0
.
Tämä johtuu siitä, että kaikki ominaisuudet min-*
ja max-*
ominaisuudet yleensä taistelevat width
ja height
ylivaltaa vastaan Box Model -laskelmia koskevassa sodassa. Esimerkiksi:
.element ( min-width: 500px; /* ? Winner! */ width: 100px; )
Mutta:
.element ( min-width: 500px; width: 700px; /* ? Winner! */ )
Tämä johtuu siitä, että min-width
joko estetään width
menemästä tietyn arvon alapuolelle, tai se ohitetaan, koska width
elementti on jo asettanut elementin sen vähimmäisleveyden yli, jonka sen on oltava. Sama pätee min-height
, max-width
ja max-height
.
Piste Kaiken tämän: jos asetamme sekä min-*
tai max-*
omaisuuden samalla elementti aspect-ratio
ja ne ”voittaa” yli width
tai height
sitten ne ohittavat aspect-ratio
. Sanoin teille, että se oli hieman mielenterveys. ?
Selaimen tuki
IE | Reuna | Firefox | Kromi | Safari | Ooppera |
---|---|---|---|---|---|
Ei | Ei | 86 1.2,3 | 90 4 | TP 5 | Ei |
Android Chrome | Android Firefox | Android-selain | iOS Safari | Opera Mobile |
---|---|---|---|---|
Ei | Ei | Ei | Ei | Ei |
1 Voidaan käyttöön asettamalla
layout.css.aspect-ratio.enabled
ja true
.2 Tuki lohkoille ja korvattuille elementeille, jotka on otettu käyttöön Firefox 81: ssä.
3 Tuki joustaville kohteille, jotka on otettu käyttöön Firefox 83: ssa.
4 Voidaan ottaa käyttöön valitsemalla
#enable-experimental-web-platform-features
Enabled.5 Saatavana Safari Technology Preview 118 -sovelluksessa.
Lisää tietoa
Artikkeli 1. heinäkuuta 2020Ensimmäinen katsaus "kuvasuhteeseen"












