Ce face env() (safe-area-inset pentru ecrane cu decupaj)
env() seamănă cu var(), dar valorile nu le definești tu, ci browserul. Cele mai folosite sunt safe-area-inset-top, -right, -bottom și -left: distanțele de la marginea ecranului până la zona sigură, neacoperită de decupajul camerei, colțurile rotunjite sau bara de gesturi.
Implicit, browserele mobile afișează pagina doar în zona sigură, așa că aceste valori sunt 0. Când adaugi viewport-fit=cover în meta viewport, pagina se întinde pe tot ecranul, iar env(safe-area-inset-*) primește valori reale pe care le folosești ca padding.
Al doilea argument este o valoare de rezervă, folosită când variabila nu există în browserul respectiv: env(safe-area-inset-bottom, 16px). Funcția se combină des cu max() sau calc().
Valori uzuale
| Valoare | Descriere |
|---|---|
env(safe-area-inset-top) |
Distanța ocupată sus (decupajul camerei, bara de stare). |
env(safe-area-inset-bottom) |
Distanța ocupată jos (bara de gesturi pentru „acasă”). |
env(safe-area-inset-left / right) |
Distanțele laterale, importante în modul peisaj. |
env(nume, rezervă) |
Valoarea de rezervă folosită dacă variabila nu este definită. |
Exemple
Exemplul 1: Bară de navigare fixă jos, deasupra barei de gesturi
Fără padding, butoanele din bară s-ar suprapune peste linia de gesturi a telefonului.
.navigare-mobil {
position: fixed;
left: 0;
right: 0;
bottom: 0;
display: flex;
justify-content: space-around;
background: #ffffff;
padding-top: 8px;
padding-bottom: max(8px, env(safe-area-inset-bottom));
}
Efect vizual în browser
Pe un iPhone cu bara de gesturi, meniul „Acasă / Comenzi / Coș / Cont” are un spațiu alb suplimentar sub iconițe, iar linia de gesturi nu mai acoperă butoanele. Pe un telefon fără bară de gesturi, padding-ul de jos rămâne 8px.
Exemplul 2: Antet colorat pe tot ecranul, cu textul ferit de decupaj
Fundalul trece pe sub decupajul camerei, dar titlul și butoanele rămân în zona sigură.
.antet-aplicatie {
background: #7c3aed;
color: #ffffff;
padding-top: calc(env(safe-area-inset-top, 0px) + 12px);
padding-left: max(16px, env(safe-area-inset-left));
padding-right: max(16px, env(safe-area-inset-right));
}
Efect vizual în browser
Antetul violet „Vremea în Cluj” acoperă și zona din jurul camerei frontale, iar titlul începe sub decupaj. Când telefonul este rotit în modul peisaj, padding-ul lateral crește astfel încât textul nu intră sub decupaj.
Greșeli frecvente
- Folosirea env(safe-area-inset-*) fără viewport-fit=cover în meta viewport; valorile rămân 0 și pare că funcția nu face nimic.
- Scrierea numelui ca variabilă CSS (env(–safe-area-inset-top)); numele din env() nu au cratime la început.
- Lipsa unei valori minime: padding-bottom: env(safe-area-inset-bottom) dă 0 pe dispozitivele fără decupaj; folosește max(8px, env(…)).
Comenzi înrudite
Variabile CSS (Custom Properties: var(--nume)): Stochează valori refolosibile (culori, spațieri, fonturi) care pot fi actualizate într-un singur loc pe tot site-ul.calc(): Face calcule direct în CSS și poate combina unități diferite, de exemplu procente minus pixeli sau o variabilă înmulțită cu un număr.Unități de viewport (vw, vh, dvh, svh, lvh): Unitățile relative la fereastra browserului și variantele noi (svh, lvh, dvh) care rezolvă problema lui 100vh pe telefoane.position (relative, absolute, fixed, sticky): Definește metoda de poziționare a elementului pe ecran, permițând mutarea lui cu top, right, bottom, left.