Da qualche anno sono disponibili le nuove unità di misura viewport in CSS. Sono utilissime perché ci permettono di creare siti web realmente responsive e non soffrono del resize del browser. Vediamo cosa sono e come usarle. Se le usate già, facciamo un breve ripasso, che fa sempre bene.
Le unità sono quattro
Le unità da poter utilizzare nei nostri fogli di stile CSS sono ben quattro e sono tutte relative al viewport. Cos’è il viewport? Nient’altro che tutta l’area visibile di un sito web, quindi esclusa la porzione esterna della finestra, la barra degli indirizzi o altro. Insomma, la porzione di sito che stiamo visualizzando. Facendo il resize della finestra, quindi, cambieremo le dimensioni delle variabili.
Andiamo a vederle:
– Altezza del viewport (vh
). Questa unità di misura è basata sull’altezza del viewport, ovvero un 1vh
corrisponde all’1% della sua altezza.
– Larghezza del viewport (vw
). Questa unità di misura è basata sulla larghezza del viewport, ovvero un 1vw
corrisponde all’1% della sua larghezza.
– Viewport minimum (vmin
). Questa unità non è fissa, ma si basa sulla dimensione minore del viewport. Se ad esempio l’altezza del viewport è minore della sua altezza (pensiamo ad un sito desktop), 1vmin
sarà uguale all’1% dell’altezza. Viceversa, se la larghezza del viewport è minore dell’altezza (pensiamo ad un sito mobile), 1vmin
sarà uguale all’1% della larghezza.
– Viewport maximum (vmax
). Come per vmin
, questa unità non è fissa, ma si basa sulla dimensione maggiore del viewport. Se il browser è più largo che alto, 1vmax
sarà uguale all’1% della larghezza. Al contrario, se il browser è più alto che lato, 1vmax
sarà uguale all’1% dell’altezza.
Facciamo qualche esempio
Sito desktop: in un classico esempio di viewport largo 1920px e alto 1080px, 10vw
sarà equivalente a 192px, mentre 10vh
sarà equivalente a 108px. In questo caso, essendo “più largo che alto”, 10vmax
corrisponderanno a 192px, perché vmax
assumerà il valore della larghezza. 10vmin
saranno equivalenti a 108px.
Sito mobile: con un viewport largo 1080px e alto 2160px, 10vw
saranno equivalenti a 108px e 10vh
a 216px. Dato che l’altezza è maggiore della larghezza, 10vmax
sarà uguale a 216px, 10vmin
sarà uguale a 108px.
Potremmo pensare quindi che le viewport units si comportino come le percentuali. In realtà non è così, perché le percentuali sono relative al genitore dell’elemento, mentre le unità viewport sono assolute.
Come possiamo vedere, le vw
sono sempre relative al viewport, mentre gli elementi con larghezza in percentuale sono relativi al proprio genitore.
Casi d’utilizzo
Elemento fullscreen
Anche se qui le percentuali sono ancora il metodo più utilizzato, possiamo realizzare un elemento fullscreen molto facilmente:
.fullscreen { width: 100vw; height: 100vh; }
Elementi centrati
div { width: 60vw; height: 50vh; margin-left: 20vw; margin-top: 25vh; }
Cose a cui fare attenzione
Il fattore principale da tenere in considerazione, è che le unità, soprattutto quella orizzontale vw, non tiene conto della scrollbar. Per questo motivo 100vw
potrebbero spesso essere maggiori di 100%
. Affiancando due div larghi 50vw
potrebbero essere più larghi della finestra e causare overflow.
In questo tipo di casi è bene utilizzare la larghezza in percentuale, 50%
.
Compatibilità
Secondo CanIUse, le viewport units sono largamente supportate, con l’eccezione di Internet Explorer (sempre lui), che non supporta vmax
e Opera mini che non le supporta affatto.