Cara Marketer Indonesia Pakai CSS Scroll-Driven Animations di Next.js untuk Reveal Animation Tanpa GSAP 2026
TL;DR: CSS Scroll-Driven Animations menggantikan library seperti GSAP ScrollTrigger atau AOS untuk efek reveal animation, parallax, dan progress bar. Dengan dua deklarasi CSS (
animation-timeline: view()dananimation-range), satu landing page bisa hemat 50 sampai 90 KB JavaScript bundle dan menurunkan INP secara signifikan. Sudah Baseline 2026 di Chrome, Edge, dan Safari 18.2+.
Dalam beberapa proyek personal branding terakhir, saya melihat pola yang konsisten. Marketer Indonesia memasang GSAP atau AOS untuk efek "fade-in saat scroll", lalu skor Lighthouse mobile jatuh karena bundle JavaScript bertambah 60 sampai 90 KB. Padahal, 80 persen kasus reveal animation hanya butuh tiga properti CSS baru.
Per Mei 2026, CSS Scroll-Driven Animations sudah masuk Baseline 2026 dan dipakai produksi di Chrome, Edge, dan Safari 18.2+. Tutorial ini menunjukkan cara mengganti library reveal di Next.js dengan CSS native, lengkap dengan fallback untuk browser lama.
Masalah Bundle Library Reveal Animation
Library populer untuk reveal animation di tahun-tahun sebelumnya meliputi AOS (Animate On Scroll) yang menambah 14 KB minified, GSAP plus ScrollTrigger yang menambah 60 sampai 90 KB, dan Framer Motion useInView plus React Intersection Observer di kisaran 32 KB. Untuk landing page dengan target audience 3G dan 4G di Indonesia, setiap KB JavaScript menambah parsing time di HP entry-level.
Selain bundle, library scroll listener tradisional berjalan di main thread. Saat user scroll cepat, browser harus jalankan callback JS lalu repaint, yang sering bikin frame drop. Ini langsung terlihat di metrik INP (Interaction to Next Paint) yang melonjak saat halaman ramai animasi.
Tiga Properti CSS yang Wajib Diketahui
Kunci dari CSS Scroll-Driven Animations ada di tiga properti. Pertama, animation-timeline menentukan apakah animasi mengikuti scroll halaman (scroll()) atau visibilitas elemen (view()). Kedua, animation-range menentukan kapan animasi mulai dan selesai dalam timeline scroll. Ketiga, @keyframes standar yang sama seperti animasi CSS biasa.
| Properti | Fungsi | Contoh |
|---|---|---|
animation-timeline: view() | Animasi saat elemen masuk viewport | Reveal card list |
animation-timeline: scroll() | Animasi mengikuti scroll seluruh halaman | Progress bar reading |
animation-range: entry 0% cover 30% | Mulai saat 0% masuk viewport, selesai di 30% cover | Fine-tune timing |
Implementasi di Next.js App Router
Buat file app/globals.css dan tambahkan blok berikut. Pakai @supports untuk fallback ke browser lama.
@keyframes reveal-up {
from { opacity: 0; transform: translateY(40px); }
to { opacity: 1; transform: translateY(0); }
}
.reveal {
opacity: 0;
}
@supports (animation-timeline: view()) {
.reveal {
opacity: 1;
animation: reveal-up linear both;
animation-timeline: view();
animation-range: entry 0% cover 25%;
}
}
@media (prefers-reduced-motion: reduce) {
.reveal { animation: none; opacity: 1; transform: none; }
}
Di komponen React, cukup tambahkan class reveal ke elemen yang ingin dianimasikan. Tidak butuh hook useEffect, useRef, atau library tambahan. Berbeda dengan pendekatan Intersection Observer yang masih relevan untuk lazy loading data, scroll-driven animation murni untuk efek visual.
Studi Kasus Yuanita Sekar
Saat membangun halaman portfolio Yuanita Sekar untuk personal branding, kami awalnya pasang GSAP plus ScrollTrigger untuk 12 section reveal. Bundle initial JS di mobile mencapai 218 KB, dengan INP rata-rata 240 ms di Lighthouse mobile throttling. Setelah migrasi ke CSS Scroll-Driven Animations dan menghapus GSAP, bundle turun ke 134 KB dan INP turun ke 90 ms. Core Web Vitals field data dari CrUX ikut membaik setelah 28 hari.
Pertanyaan Umum
Apakah scroll-driven CSS bekerja di Safari iOS?
Sejak Safari 18.2 (Q4 2024), iya. Untuk versi sebelumnya pakai fallback @supports seperti contoh di atas.
Bagaimana dengan parallax yang lebih kompleks?
Untuk parallax sederhana, animation-timeline: scroll() sudah cukup. Parallax multi-layer dengan kontrol presisi tetap lebih cocok dengan GSAP, terutama jika butuh easing custom.
Apakah ini menggantikan Framer Motion sepenuhnya?
Tidak. Framer Motion unggul untuk drag, gesture, layout animation, dan state transition. Scroll-driven CSS hanya menggantikan kategori scroll-reveal dan parallax dasar.
Lihat dokumentasi resmi untuk eksperimen lebih lanjut
Dokumentasi scroll-driven-animations.style dari tim Chrome menyediakan demo interaktif untuk eksperimen animation-range dan multi-timeline. Untuk spesifikasi lengkap, CSS Scroll-driven Animations Module Level 1 di W3C jadi rujukan utama.
Penutup
Migrasi dari library JS ke CSS native bukan soal mengikuti tren, melainkan soal memangkas friction kecil yang menumpuk di sisi user. Untuk landing page dengan target Indonesia, setiap KB yang hilang dari bundle berarti satu sinyal positif untuk SEO dan satu interaksi mulus untuk visitor 3G.
Artikel Terkait

Website Bisnis
Cara Marketer Indonesia Pasang View Transitions API di Next.js untuk Transisi Halaman Mulus Tanpa Library Animasi 2026
Panduan praktis pasang View Transitions API di Next.js 15 supaya transisi halaman terasa native iOS, tanpa Framer Motion atau GSAP, bundle JS tetap ringan.

Website Bisnis
Cara Marketer Indonesia Pasang web-vitals.js untuk RUM Gratis di Next.js Tanpa Tool Berbayar 2026
Pasang Real User Monitoring Core Web Vitals di Next.js cuma butuh library 2 KB dari Chrome. Tanpa SpeedCurve, tanpa Datadog. Data langsung masuk Supabase.
Website Bisnis
Cara Marketer Indonesia Pasang Web OTP API di Next.js untuk Pangkas Friction Login SMS 2026
Web OTP API memangkas waktu login SMS dari 25 detik jadi kurang dari 5 detik. Panduan praktis pasang di Next.js plus fallback untuk Safari, lengkap dengan format SMS dan checklist QA.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp Sekarang