Ce face will-change
will-change este un indiciu de optimizare. Cu will-change: transform, browserul poate muta elementul pe un strat propriu înainte să înceapă animația, astfel încât primul cadru nu mai are o întârziere vizibilă.
Nu este o proprietate de pus peste tot: fiecare strat suplimentar consumă memorie video. Se folosește punctual, pe elementele care chiar au animații problematice, și ideal se adaugă puțin înainte de animație (de exemplu la :hover pe părinte sau din JavaScript) și se scoate după.
Efect secundar: will-change cu o proprietate care creează context de stivuire (transform, opacity) creează unul imediat, iar cu transform elementul devine bloc de referință pentru copiii cu position: fixed.
Valori uzuale
| Valoare | Descriere |
|---|---|
auto |
Fără indiciu; browserul optimizează singur (valoarea implicită). |
transform |
Pregătește elementul pentru mutare, rotire sau scalare. |
opacity |
Pregătește elementul pentru schimbări de opacitate. |
scroll-position |
Anunță că poziția de derulare a elementului se va schimba. |
contents |
Anunță că se va schimba conținutul elementului. |
Exemple
Exemplul 1: Meniu lateral care glisează pe telefon
Meniul se animă des, deci merită un strat pregătit.
.meniu-lateral {
transform: translateX(-100%);
transition: transform 0.3s ease;
will-change: transform;
}
.meniu-lateral.deschis {
transform: translateX(0);
}
Efect vizual în browser
La apăsarea butonului ☰, meniul cu „Produse, Oferte, Contact” intră din stânga fără sacadare la primul cadru, chiar pe telefoane mai slabe.
Exemplul 2: Indiciu adăugat doar înainte de animație
Când cursorul ajunge pe galerie, cardurile se pregătesc; după ieșire, indiciul dispare.
.galerie:hover .card-foto {
will-change: transform;
}
.card-foto:hover {
transform: scale(1.05);
transition: transform 0.2s;
}
Efect vizual în browser
Fotografiile din galeria „Vacanță în Maramureș” se măresc lin la hover. Când cursorul nu este pe galerie, browserul nu păstrează straturi suplimentare în memorie.
Greșeli frecvente
- Regula * { will-change: transform; } sau aplicarea pe sute de elemente; consumă multă memorie video și poate face pagina mai lentă, nu mai rapidă.
- Folosirea will-change ca soluție pentru animații pe width, height sau top; acestea recalculează layout-ul oricum. Animează transform și opacity.
- Surprinderea că un copil cu position: fixed nu mai stă fix față de ecran; will-change: transform pe un părinte îl face bloc de referință.
Comenzi înrudite
transform (translate, rotate, scale, skew): Modifică forma, poziția și unghiul unui element în spațiul 2D sau 3D, fără a deranja elementele vecine.transition: Animă fluid schimbarea valorilor CSS între două stări (de exemplu la :hover sau la adăugarea unei clase).animation și @keyframes: Creează animații complexe și autonome pe baza unor cadre cheie (@keyframes), fără a necesita JavaScript.contain (izolarea randării: layout, paint, size): Îi spune browserului că un element este independent de restul paginii, ca schimbările din el să nu forțeze recalcularea întregului document.