Ce face @view-transition (tranziții între pagini)
Când vizitatorul trece de la o pagină la alta pe același site (același origin), browserul afișează de obicei un ecran nou brusc. Cu @view-transition { navigation: auto; } pus pe ambele pagini, browserul face în schimb o tranziție animată: implicit, o estompare încrucișată (cross-fade) între pagina veche și cea nouă.
Animația se personalizează prin pseudo-elementele ::view-transition-old(root) (instantaneul paginii vechi) și ::view-transition-new(root) (pagina nouă), cărora le dai propriile @keyframes. Pentru elemente care „zboară” dintr-o pagină în alta (de exemplu poza unui produs), vezi view-transition-name.
Suport: Chrome 126+ și Safari 18.2+; Firefox suportă tranzițiile din aceeași pagină, dar nu încă regula @view-transition pentru navigări. Unde nu e suportată, navigarea rămâne cea obișnuită, deci poți adăuga regula fără risc.
Valori uzuale
| Valoare | Descriere |
|---|---|
navigation: auto |
Activează tranziția pentru navigările în același site (linkuri, înapoi/înainte). |
navigation: none |
Valoarea implicită: fără tranziție. |
::view-transition-old(root) |
Imaginea paginii vechi, care dispare. |
::view-transition-new(root) |
Pagina nouă, care apare. |
Exemple
Exemplul 1: Tranziție implicită între paginile unui blog
Aceeași regulă pusă în fișierul CSS comun tuturor paginilor.
@view-transition {
navigation: auto;
}
Efect vizual în browser
La clic pe articolul „Ce vizitezi în Iași într-un weekend”, pagina listei se estompează lin în pagina articolului, în loc să fie înlocuită brusc. În Firefox navigarea rămâne instantanee, fără eroare.
Exemplul 2: Glisare laterală, dezactivată pentru cine preferă mai puțină mișcare
Pagina veche iese spre stânga, cea nouă intră din dreapta; utilizatorii cu „reducere mișcare” activată primesc navigarea normală.
@media (prefers-reduced-motion: no-preference) {
@view-transition {
navigation: auto;
}
}
@keyframes iese-stanga { to { transform: translateX(-100%); } }
@keyframes intra-dreapta { from { transform: translateX(100%); } }
::view-transition-old(root) {
animation: iese-stanga 0.35s ease-in both;
}
::view-transition-new(root) {
animation: intra-dreapta 0.35s ease-out both;
}
Efect vizual în browser
Trecând de la „Pasul 1: Date livrare” la „Pasul 2: Plată”, prima pagină alunecă spre stânga și a doua intră din dreapta, ca într-o aplicație de telefon.
Greșeli frecvente
- Adăugarea regulii doar pe pagina de plecare; ambele pagini (veche și nouă) trebuie să aibă @view-transition cu navigation: auto.
- Așteptarea unei tranziții către alt domeniu; funcționează doar între pagini cu același origin (același protocol, domeniu și port).
- Animații lungi (peste ~0,5 s) la fiecare clic; navigarea pare mai lentă decât este.
Comenzi înrudite
view-transition-name și document.startViewTransition(): Dă un nume unui element ca browserul să-l animeze separat, din poziția veche în cea nouă, la o tranziție de vizualizare.animation și @keyframes: Creează animații complexe și autonome pe baza unor cadre cheie (@keyframes), fără a necesita JavaScript.@media (Media Queries): Aplică blocuri de stiluri CSS condiționat, în funcție de lățimea ecranului sau setările de sistem ale utilizatorului.