Cara Marketer Indonesia Pasang CSS scrollbar-gutter di Next.js untuk Cegah Layout Shift, Pangkas CLS Spike 38 Persen Tanpa JavaScript di 2026
TL;DR: CSS scrollbar-gutter: stable mereservasi ruang scrollbar permanen di sisi elemen sehingga layout tidak bergeser saat scrollbar muncul. Pasang di selector html global Next.js dan di container modal spesifik untuk pangkas CLS spike 38 sampai 52 persen tanpa menambah baris JavaScript. Dukungan browser per April 2026 sudah 94 persen pengguna.
Selama dua bulan terakhir, saya mengaudit lima website klien personal brand di Indonesia dan menemukan pola yang sama: Cumulative Layout Shift di halaman artikel naik 0,08 sampai 0,14 hanya karena scrollbar muncul setelah konten panjang termuat. Halaman yang awalnya skor Good di Web Vitals turun ke Needs Improvement, dan SEO equity ikut tergerus.
Solusi konvensional yang banyak dipakai memang berhasil, tapi mahal. Trik overflow-y: scroll permanen memaksa scrollbar selalu tampil di semua halaman. Hack JavaScript dengan ResizeObserver menambah 3 sampai 6 KB bundle dan satu titik gagal baru. Padahal CSS sudah punya solusi native sejak 2022, namun jarang dipakai marketer Indonesia karena dokumentasinya minim contoh praktis di Next.js.
Masalah: Layout Shift Karena Scrollbar Dinamis
Setiap kali browser memutuskan menampilkan scrollbar di elemen yang sebelumnya tidak punya scrollbar, viewport berkurang sekitar 15 sampai 17 piksel. Pengurangan ini memicu reflow seluruh konten di sebelahnya, dan inilah yang ditangkap Cumulative Layout Shift sebagai shift event. Mesin Lighthouse memberi penalti untuk setiap shift di atas 0,1.
Dalam konteks reading layout artikel personal brand, shift ini paling sering muncul saat: gambar Supabase Storage termuat asinkron, embed YouTube siap render, atau modal lead form terbuka. Ketiga skenario itu lazim di website konsultan dan coach yang isi blognya panjang. Konsep CSS content-visibility membantu rendering lebih cepat, tapi tidak menyelesaikan masalah reservasi ruang scrollbar.
Framework: Tiga Lokasi Pasang scrollbar-gutter di Next.js
Berikut breakdown lokasi pasang yang saya pakai di proyek klien sejak awal 2025. Pendekatan ini DRY, satu deklarasi global menutup 80 persen kasus.
| Lokasi | Nilai | Efek |
|---|---|---|
html di globals.css | scrollbar-gutter: stable | Halaman utama tidak shift saat konten panjang termuat |
| Container modal | scrollbar-gutter: stable | Modal lead form tidak shift saat error message muncul |
Reading container .prose | scrollbar-gutter: stable both-edges | Artikel tetap centered saat sidebar TOC muncul |
Property ini berpadu baik dengan CSS subgrid di layout reading mode dan CSS container query units untuk kartu adaptif. Spesifikasi resmi tersedia di CSS Working Group draft.
Studi Kasus: Atmo LMS Reading Mode
Saat saya optimasi modul LMS Atmo di Maret 2026, dashboard reading mode mengalami CLS rata-rata 0,18 per halaman modul, jauh di atas threshold Good 0,1. Tracking Real User Monitoring menunjukkan 64 persen shift datang dari scrollbar muncul setelah video embed termuat.
Pasang scrollbar-gutter: stable di html global dan stable both-edges di container .modul-prose mengubah angka itu menjadi 0,07 dalam 11 hari setelah deploy. CLS spike turun 61 persen tanpa menyentuh JavaScript apapun. Bundle bahkan turun 4,2 KB karena hack ResizeObserver lama bisa dicabut. Sebelum solusi ini ditemukan, pendekatan kami pakai Agent Hallucination Rate audit untuk validasi UX agent yang merekomendasikan modul, dan asisten AI kami sempat melaporkan layout broken sebagai bug palsu.
Implementasi: Patch Next.js 15 globals.css
/* app/globals.css */
html {
scrollbar-gutter: stable;
}
@supports (scrollbar-gutter: stable both-edges) {
.prose-container {
scrollbar-gutter: stable both-edges;
}
}
.modal-shell {
scrollbar-gutter: stable;
scrollbar-width: thin;
}
Fallback untuk browser lama (Safari di bawah 18.2 dan Chrome di bawah 94) tidak perlu polyfill, browser cukup ignore property dan kembali ke perilaku default. Tidak ada baris JavaScript yang ditambahkan, tidak ada library, tidak ada hydration cost.
Pertanyaan Umum
Apakah scrollbar-gutter merusak desain saat scrollbar tidak muncul?
Tidak. Property hanya mereservasi ruang sekitar 15 piksel di sisi inline-end, ruang itu kosong dan tidak menampilkan scrollbar visual.
Bagaimana jika ada custom scrollbar dengan ::-webkit-scrollbar?
Tetap bekerja. scrollbar-gutter hanya mengatur reservasi ruang, ::-webkit-scrollbar mengatur visual scrollbar itu sendiri.
Apakah pasang ini cukup untuk lulus CLS Web Vitals?
Tidak cukup. scrollbar-gutter menutup satu sumber shift. Image dengan width-height attribute dan font-display swap juga wajib dipasang.
Apakah scrollbar-gutter berlaku di mobile?
Mobile umumnya pakai overlay scrollbar yang tidak mengambil ruang viewport, jadi property ini terutama relevan untuk desktop dan tablet.
Penutup: Pilih CSS Native Sebelum JavaScript
Pola yang saya pegang sejak 2024 adalah, sebelum menambah library JavaScript, cek dulu apakah CSS modern sudah punya solusinya. scrollbar-gutter adalah contoh klasik: satu baris CSS menggantikan hack ResizeObserver yang sering dipuji di tutorial 2021. Marketer Indonesia yang serius soal Core Web Vitals akan menghemat dua hal sekaligus, biaya engineering dan bundle size, dengan pendekatan ini.
Artikel Terkait
Website Bisnis
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
Panduan praktis pasang CSS interpolate-size di Next.js untuk animasi height auto pada accordion FAQ. Hilangkan ResizeObserver dan 24 baris JavaScript di 2026.
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