Panduan lengkap View Transitions API untuk animasi transisi yang mulus
View Transitions API memungkinkan animasi transisi mulus antara berbagai tampilan/tampilan situs web dengan kontrol penuh melalui CSS dan JavaScript.
/* Basic View Transition */
html {
view-transition-name: none;
}
/* Named transition for specific element */
.header {
view-transition-name: header;
}
/* Transition animation */
::view-transition-old(root) {
animation: fade-out 0.3s ease forwards;
}
::view-transition-new(root) {
animation: fade-in 0.3s ease forwards;
}
đ Penjelasan Detail:
âĸ view-transition-name
- Mengidentifikasi elemen untuk animasi transisi
âĸ ::view-transition-old()
- Mewakili tampilan lama yang keluar
âĸ ::view-transition-new()
- Mewakili tampilan baru yang masuk
âĸ document.startViewTransition()
- API JavaScript untuk memulai transisi
/* Basic page transition */
::view-transition-old(root) {
animation: fade-out 0.3s ease;
}
::view-transition-new(root) {
animation: fade-in 0.3s ease;
animation-delay: 0.3s;
}
/* Custom element transition */
.main-image {
view-transition-name: main-image;
}
::view-transition-group(main-image) {
animation-duration: 0.5s;
}
View Transitions API didukung di Chrome 111+, Edge 111+, Opera 97+. Firefox dan Safari belum mendukung secara native (per 2023).
/* view-transition-name Values */
none /* Default, tidak ada transisi */
<custom-ident> /* Nama custom untuk elemen */
/* Pseudo-elements untuk animasi */
::view-transition /* Root pseudo-element */
::view-transition-group() /* Grup elemen terkait */
::view-transition-image-pair() /* Pasangan old/new */
::view-transition-old() /* State sebelumnya */
::view-transition-new() /* State baru */
/* Jenis Transisi Umum */
fade /* Memudar */
slide /* Geser */
scale /* Perubahan ukuran */
đ Penjelasan Detail:
âĸ View Transition Groups - Mengelompokkan elemen terkait dalam transisi
âĸ Image Pairs - Menghubungkan state old dan new dari elemen
âĸ Custom Animations - Bisa menggunakan keyframes CSS standar
âĸ Fallbacks - Selalu sediakan fallback untuk browser yang tidak mendukung
/* Multiple named transitions */
.product-image {
view-transition-name: product-image;
}
/* Custom animation */
::view-transition-group(product-image) {
animation-duration: 0.5s;
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
/* Different animations for in/out */
::view-transition-old(product-image) {
animation: slide-out 0.5s ease;
}
::view-transition-new(product-image) {
animation: slide-in 0.5s ease;
animation-delay: 0.1s;
}
/* Zustand management */
::view-transition-old(details) {
mix-blend-mode: normal;
}
Fitur lanjutan seperti multiple named transitions dan animation customization membutuhkan Chrome 115+ dengan flag experimental Web Platform Features.
Gunakan View Transitions untuk meningkatkan UX, bukan sekadar efek visual. Pastikan konten tetap mudah diakses dan performa tidak terganggu.
/* â
Good - Simple and effective */
::view-transition-old(root) {
animation: fade-out 0.2s ease;
}
::view-transition-new(root) {
animation: fade-in 0.2s ease;
animation-delay: 0.2s;
}
/* â
Good - Named element transition */
.hero-image {
view-transition-name: hero;
contain: paint;
}
/* â Avoid - Overusing transitions */
* {
view-transition-name: transition-all;
}
/* â Avoid - Long animations */
::view-transition-old(root) {
animation: fancy-out 2s;
}
đ Penjelasan Detail:
âĸ Gunakan dengan bijak - Hanya untuk transisi yang meningkatkan UX
âĸ Durasi pendek - 200-500ms ideal untuk kebanyakan kasus
âĸ Optimasi performa - Hindari animasi yang berat/complex
âĸ Sediakan fallback - Pastikan situs tetap berfungsi tanpa transisi
âĸ Test di berbagai device - Animasi mungkin berbeda di perangkat berbeda