Website Bisnis

Cara Marketer Indonesia Pasang CSS scrollbar-gutter di Next.js untuk Cegah Layout Shift, Pangkas CLS Spike 38 Persen Tanpa JavaScript di 2026

Vito Atmo
Vito Atmo·29 Mei 2026·0 kali dibaca·4 min baca
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.

LokasiNilaiEfek
html di globals.cssscrollbar-gutter: stableHalaman utama tidak shift saat konten panjang termuat
Container modalscrollbar-gutter: stableModal lead form tidak shift saat error message muncul
Reading container .prosescrollbar-gutter: stable both-edgesArtikel 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

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.

Bagikan

Artikel Terkait

#css#nextjs#core-web-vitals#performance#layout

Butuh website yang benar-benar bekerja?

Hubungi Vito untuk konsultasi gratis 15 menit.

WhatsApp Sekarang