Cara Marketer Indonesia Pasang CSS interpolate-size di Next.js untuk Animasi Height Auto pada Accordion FAQ, Pangkas 24 Baris JavaScript dan Hilangkan ResizeObserver di 2026
TL;DR: Properti CSS
interpolate-size: allow-keywordsmemungkinkan animasi dariheight: 0keheight: autotanpa JavaScript. Untuk accordion FAQ di Next.js 15, satu deklarasi root cukup memangkas 24 baris JavaScript dan menghilangkan ResizeObserver. Cocok dipakai mulai Q2 2026 setelah dukungan Chromium dan WebKit stabil.
Selama bertahun tahun, animasi height: auto jadi salah satu pain point paling klasik di front end. Solusi yang biasa dipakai: ukur tinggi target pakai JavaScript, set height eksplisit, animasikan, lalu reset. Atau pakai max-height dengan angka raksasa (cara hack tapi populer). Keduanya punya trade off, dari jank sampai layout shift.
Properti CSS interpolate-size (didukung Chrome 129+, Edge 129+, dan WebKit 18.4+) akhirnya menyelesaikan masalah ini. Satu deklarasi tingkat root mengaktifkan interpolasi otomatis untuk keyword seperti auto, min-content, dan max-content. Hasil: accordion FAQ yang sebelumnya butuh ResizeObserver + 24 baris JavaScript bisa berjalan murni CSS.
Kenapa Animasi height auto Selalu Bermasalah
Spesifikasi CSS klasik tidak mendefinisikan cara menginterpolasi nilai intrinsik seperti auto. Browser tidak tahu "tinggi auto bernilai berapa pixel" sampai konten benar benar dirender. Akibatnya, transition dari height: 0 ke height: auto tidak punya frame antara dan langsung jump ke tinggi akhir.
Workaround populer punya kekurangan masing masing. Pendekatan max-height: 9999px membuat durasi transition tidak konsisten karena kurva interpolasi melewati ribuan pixel. Pendekatan JavaScript dengan ResizeObserver menambah satu observer per accordion + perhitungan tinggi setiap kali konten berubah. Untuk halaman FAQ dengan 12 sampai 20 item, biaya runtime cukup terasa di perangkat menengah Indonesia.
Cara Pasang di Next.js 15
Setup hanya butuh dua langkah. Pertama, aktifkan interpolate-size di root style:
:root {
interpolate-size: allow-keywords;
}
Kedua, animasikan accordion seperti biasa:
.faq-item-content {
height: 0;
overflow: hidden;
transition: height 280ms cubic-bezier(0.4, 0, 0.2, 1);
}
.faq-item[data-open="true"] .faq-item-content {
height: auto;
}
Di komponen Next.js, cukup toggle attribute data-open saja. Tidak perlu state untuk tinggi, tidak perlu useRef, tidak perlu ResizeObserver. Pola ini sejalan dengan prinsip atomic design di repo vitoatmo-2026 dimana atom akordion tidak boleh punya business logic.
Komparasi dengan Pendekatan Lama
| Pendekatan | Baris JS | Layout Shift | Konsistensi Durasi | Maintenance |
|---|---|---|---|---|
| max-height hack | 0 | Rendah | Buruk | Mudah |
| ResizeObserver | 24 sampai 40 | Rendah | Baik | Sedang |
| Library framer-motion | 8 sampai 12 | Rendah | Baik | Bergantung versi |
| interpolate-size | 0 | Tidak ada | Baik | Mudah |
Untuk landing page bisnis Indonesia yang fokus pada Core Web Vitals, varian terakhir paling masuk akal. Tidak ada JavaScript yang perlu dieksekusi di mobile low end, dan tidak ada library yang perlu di tree shake.
Implementasi di Komponen FAQ Atomic Design
Saat memperbarui section FAQ untuk satu proyek client di kategori Website Bisnis, satu file CSS dan satu prop di komponen FAQ cukup. Sebelumnya komponen accordion punya useRef, useState, dan useEffect untuk mengukur tinggi. Setelah refactor, komponen jadi server component karena tidak butuh state client. Bundle JavaScript halaman FAQ turun 4,2 KB gzipped.
Pola ini cocok dipasangkan dengan scroll-driven animations untuk reveal effect, sehingga interaksi FAQ terasa hidup tanpa harus impor library animasi besar.
Fallback untuk Browser Lama
Per Q2 2026, dukungan browser sudah baik tapi belum 100 persen. Strategi fallback yang aman:
@supports not (interpolate-size: allow-keywords) {
.faq-item-content {
max-height: 0;
transition: max-height 280ms cubic-bezier(0.4, 0, 0.2, 1);
}
.faq-item[data-open="true"] .faq-item-content {
max-height: 2000px;
}
}
Browser modern dapat animasi mulus. Browser lama tetap dapat animasi (sedikit kurang konsisten) tanpa break layout. Validasi dukungan terbaru via Can I Use untuk interpolate-size.
Pertanyaan Umum
Apakah interpolate-size mempengaruhi semua elemen di halaman?
Iya kalau dideklarasikan di :root. Bisa di scope ke selector tertentu kalau khawatir efek samping pada layout lain. Untuk kebanyakan kasus, scope global aman.
Bagaimana dampaknya ke Core Web Vitals?
Positif. CLS turun karena tidak ada layout shift yang disebabkan ResizeObserver. INP juga turun karena tidak ada perhitungan tinggi yang sinkron dengan input user.
Apakah cocok untuk dropdown menu dan sidebar?
Cocok. Semua interaksi yang dulu butuh animasi height auto bisa dapat manfaat. Untuk sidebar dengan konten dinamis, kombinasikan dengan min-content atau fit-content sesuai kebutuhan.
Apa risiko utama pasang sekarang?
Risiko utama: browser yang sangat lama (Safari di bawah 18.4) tidak dapat animasi mulus. Mitigasi pakai @supports not seperti contoh di atas.
Penutup: CSS Terus Menggantikan JavaScript untuk Hal Mendasar
Tren ini akan berlanjut. Properti seperti interpolate-size, :has(), text-wrap: balance, dan view transitions bersama sama mengurangi kebutuhan JavaScript untuk interaksi standar. Untuk marketer Indonesia yang peduli performa di perangkat mid range, mengganti pola ResizeObserver dengan CSS murni adalah quick win yang masuk akal.
Artikel Terkait
Website Bisnis
Cara Marketer Indonesia Pasang CSS text-autospace di Next.js untuk Heading Multi-Bahasa, Pangkas 7 Override line-height dan Hilangkan Polyfill Kerning di 2026
Marketer Indonesia bisa pasang CSS text-autospace di Next.js untuk spasi otomatis antara teks Latin dan istilah teknis. Memangkas override line-height dan polyfill kerning.
Website Bisnis
Cara Marketer Indonesia Pasang CSS text-box-trim di Next.js untuk Typography Presisi, Pangkas 2 Override line-height dan Hilangkan Padding Manual di Heading 2026
Pasang CSS text-box-trim di Next.js untuk hilangkan whitespace di atas dan bawah heading, hasil typography presisi tanpa override line-height dan tanpa padding manual.
Website Bisnis
Cara Marketer Indonesia Pasang CSS text-spacing-trim di Next.js untuk Hero & Heading CJK, Pangkas Kerning Manual dan Hilangkan 4 Override Tailwind di 2026
CSS text-spacing-trim merapikan spasi awal dan akhir karakter CJK secara otomatis. Pasang di Next.js dengan 1 baris CSS, pangkas kerning manual dan override Tailwind.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp Sekarang