Ce face animation-timeline (animații legate de scroll: scroll() și view())
În mod normal o animație avansează în timp (secunde). Cu animation-timeline, progresul ei urmează o cronologie de derulare: scroll() merge de la 0% la 100% pe măsură ce derulezi un container, iar view() urmărește cât de mult a intrat un element în zona vizibilă.
animation-range alege porțiunea din cronologie în care rulează animația, de exemplu entry 0% cover 30%: animația începe când elementul intră pe ecran și se termină când a acoperit 30% din parcurs. Poți da și nume cronologiilor cu scroll-timeline sau view-timeline și le poți folosi pe alte elemente.
Scrie animation-timeline după scurtătura animation: scurtătura o resetează la valoarea implicită. Suport: Chrome 115 și Safari 26; Firefox o aduce în versiunea 159 (în beta la sfârșitul lui octombrie 2026). Folosește @supports (animation-timeline: scroll()) ca pagina să arate bine și fără efect.
Valori uzuale
| Valoare | Descriere |
|---|---|
scroll(scroller axă) |
Cronologie după derularea unui container: nearest (implicit), root sau self; axa block, inline, x sau y. |
view(axă inset) |
Cronologie după vizibilitatea elementului în containerul care se derulează. |
animation-range |
Intervalul activ: entry, exit, cover, contain, urmate de procente. |
scroll-timeline: --nume axă |
Dă un nume derulării unui container, pentru a fi folosită de alte elemente. |
view-timeline: --nume axă |
Dă un nume cronologiei de vizibilitate a unui element. |
Exemple
Exemplul 1: Bară de progres a lecturii unui articol
Bara de sus se umple pe măsură ce cititorul derulează pagina.
@keyframes crestere {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
.progres-lectura {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: #2563eb;
transform-origin: left;
transform: scaleX(0);
}
@supports (animation-timeline: scroll()) {
.progres-lectura {
animation: crestere linear both;
animation-timeline: scroll(root block);
}
}
Efect vizual în browser
La începutul articolului bara albastră de 4 px din partea de sus nu se vede; la jumătatea paginii acoperă jumătate din lățime, iar la final ocupă tot ecranul. În browserele fără suport, bara rămâne ascunsă.
Exemplul 2: Carduri de produs care apar la intrarea pe ecran
Fiecare card are propria cronologie view(), deci apare când ajunge el în zona vizibilă.
@keyframes aparitie {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
@supports (animation-timeline: view()) {
.card-produs {
animation: aparitie linear both;
animation-timeline: view();
animation-range: entry 0% cover 30%;
}
}
Efect vizual în browser
Pe măsură ce derulezi lista de produse, fiecare card urcă 40 px și devine opac în timp ce intră pe ecran. Dacă derulezi înapoi, animația merge invers.
Greșeli frecvente
- Scrierea animation-timeline înaintea scurtăturii animation; scurtătura o resetează la auto și animația rulează din nou în timp, o singură dată.
- Folosirea view() pe un element fixat (position: fixed); elementul nu se mișcă față de ecran, deci cronologia nu avansează.
- Lipsa unei alternative pentru browserele fără suport; fără @supports, elementele cu opacity: 0 în keyframes pot rămâne invizibile sau neanimate.
Comenzi înrudite
animation și @keyframes: Creează animații complexe și autonome pe baza unor cadre cheie (@keyframes), fără a necesita JavaScript.scroll-behavior, scroll-margin și scroll-padding: Face derularea spre ancore (#sectiune) lină și lasă spațiu pentru antetul fix, ca titlul să nu ajungă sub el.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.opacity: Setează gradul de transparență al unui element întreg, inclusiv al tuturor copiilor săi.