Ce face Unități de viewport (vw, vh, dvh, svh, lvh)
1vw este 1% din lățimea ferestrei, iar 1vh este 1% din înălțimea ei. vmin și vmax folosesc latura mai mică, respectiv mai mare. Variantele logice vi și vb urmează direcția textului.
Pe telefoane, bara de adrese apare și dispare la derulare, deci înălțimea ferestrei se schimbă. Browserele au ales ca 100vh să fie înălțimea maximă (cu bara ascunsă), așa că un ecran de start cu height: 100vh este mai înalt decât spațiul vizibil la încărcare și butonul de jos rămâne ascuns.
Unitățile noi rezolvă problema:
• svh (small): înălțimea cu barele browserului vizibile, cea mai mică posibilă.
• lvh (large): înălțimea cu barele ascunse, cea mai mare posibilă (echivalentă cu vh).
• dvh (dynamic): se schimbă în timp real între cele două.
Există și variantele pentru lățime: svw, lvw, dvw.
Valori uzuale
| Valoare | Descriere |
|---|---|
vw / vh |
1% din lățimea / înălțimea ferestrei (vh corespunde lui lvh pe mobil). |
vmin / vmax |
1% din latura mai mică / mai mare a ferestrei. |
svh / svw |
1% din fereastra cea mai mică (cu bara de adrese vizibilă). |
lvh / lvw |
1% din fereastra cea mai mare (cu bara de adrese ascunsă). |
dvh / dvw |
1% din fereastra actuală; se schimbă la apariția și dispariția barei. |
Exemple
Exemplul 1: Ecran de start pe toată înălțimea, cu butonul mereu vizibil
Prima declarație este rezervă pentru browserele vechi; browserele actuale o folosesc pe a doua.
.ecran-start {
min-height: 100vh;
min-height: 100svh;
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 24px;
}
Efect vizual în browser
Pe telefon, pagina de prezentare a pensiunii din Bran ocupă exact spațiul vizibil sub bara de adrese, iar butonul „Rezervă acum” se vede jos fără derulare. Cu 100vh, butonul ar fi fost ascuns sub marginea ecranului.
Exemplul 2: Titlu care se adaptează la orice orientare a ecranului
vmin folosește latura mai mică, deci titlul nu devine uriaș în modul peisaj.
.titlu-eveniment {
font-size: clamp(1.5rem, 8vmin, 4rem);
}
.panou-lateral {
width: min(320px, 85vw);
height: 100dvh;
}
Efect vizual în browser
Titlul „Festivalul Untold, Cluj” are aproximativ 30px pe un telefon ținut vertical și rămâne similar când telefonul este rotit. Panoul lateral de meniu are 320px pe desktop și 85% din lățime pe telefon, iar înălțimea lui urmează exact spațiul vizibil.
Greșeli frecvente
- height: 100vh pentru ecrane pe toată înălțimea pe mobil; conținutul de jos ajunge sub bara browserului. Folosește 100svh (sau 100dvh).
- Folosirea dvh pe multe elemente mari; înălțimea se recalculează la fiecare apariție a barei de adrese, ceea ce poate provoca salturi ale conținutului în timpul derulării. Pentru majoritatea cazurilor svh este suficient.
- Fonturi doar în vw (font-size: 3vw); textul devine ilizibil pe telefon și uriaș pe monitoare late, iar zoom-ul browserului nu îl mai mărește corect. Combină cu clamp() și rem.
Comenzi înrudite
Unități de măsură în CSS (px, %, em, rem, ch, vw): Ghid al unităților CSS: absolute (px) și relative (%, em, rem, ch, lh, vw, vh, fr, cqi) și când să o folosești pe fiecare.Unități de container (cqi, cqw, cqh, cqb): Unități relative la mărimea containerului părinte, nu la fereastră: fonturi și spațieri care se adaptează la locul unde este pus un component.width și height (min/max): Controlează dimensiunile orizontale și verticale ale unui element, inclusiv limitele minime și maxime permise.env() (safe-area-inset pentru ecrane cu decupaj): Citește valori definite de browser sau de dispozitiv, cum ar fi zonele ocupate de decupajul camerei sau de bara de gesturi a telefonului.