Cara Marketer Indonesia Pasang CSS Subgrid di Next.js untuk Card Katalog Selaras Tanpa min-height Hack 2026
TL;DR: CSS Subgrid memungkinkan card grid mewarisi track row parent sehingga title, body, dan CTA selaras antar card meski isinya beda panjang. Tanpa subgrid, layout butuh min-height fixed yang sering picu CLS atau JavaScript yang menambah INP. Penerapan di katalog Nalesha pangkas CSS komponen 40 persen dan stabilkan CLS dari 0,18 ke 0,04.
Saat membangun katalog produk parfum Nalesha, satu masalah klasik muncul: card dengan judul 1 baris vs 3 baris bikin tinggi card berbeda. Tombol "Tambah ke Keranjang" pun tidak sejajar antar baris. Pendekatan lama saya pakai min-height fixed untuk title section, tapi ini bikin layout shift saat font load dan jadi sumber CLS tinggi.
Subgrid menyelesaikan masalah ini secara deklaratif tanpa JavaScript dan tanpa hack height. Per Mei 2026, fitur ini sudah Baseline di semua browser modern (Chrome 117+, Firefox 71+, Safari 16+).
Masalah: Tinggi Section Antar Card Tidak Sinkron
Di katalog produk standar, satu card biasanya punya 4 section: image, title, body, dan CTA. Saat isi title bervariasi (misal "Eau de Parfum" vs "Eau de Parfum Premium Limited Edition Spring Collection"), tinggi section title beda antar card. Akibatnya CTA di card pertama lebih tinggi dari card kedua.
Pendekatan tradisional ada tiga, semuanya kompromi:
- Truncate dengan line-clamp: kehilangan konten, jelek di SEO.
- min-height fixed: picu CLS saat font swap, butuh debug per breakpoint.
- JavaScript samaratakan tinggi: tambah render cost, bikin INP meningkat.
Solusi: Subgrid dengan 4 Row Inheritance
Implementasi di Next.js cukup di CSS modules, tanpa client component:
.cardGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
.card {
display: grid;
grid-template-rows: subgrid;
grid-row: span 4;
}
Lalu di JSX:
export function ProductCard({ product }: { product: Product }) {
return (
<article className={styles.card}>
<div className={styles.imageWrapper}>
<Image src={product.image} fill alt={product.name} />
</div>
<h3>{product.name}</h3>
<p>{product.description}</p>
<Button>Tambah ke Keranjang</Button>
</article>
);
}
Karena card display: grid dengan grid-template-rows: subgrid dan grid-row: span 4, browser otomatis menyamakan tinggi tiap section di seluruh row card. Konfigurasi ini bekerja sama dengan container-queries untuk responsive yang lebih granular.
Studi Kasus Nalesha: Katalog 47 SKU Parfum
Saat refactor katalog Nalesha pada April 2026, saya migrasi dari pendekatan min-height ke subgrid. Hasilnya dalam 7 hari pengukuran lapangan pakai RUM Vercel Analytics:
| Metrik | Sebelum | Sesudah |
|---|---|---|
| CLS p75 | 0,18 | 0,04 |
| LCP p75 | 2,8 detik | 2,5 detik |
| CSS komponen card (gzip) | 3,1 KB | 1,8 KB |
| Layout debug ticket per bulan | 5 | 0 |
Studi referensi web.dev subgrid menyebutkan adopsi subgrid berkorelasi dengan stabilitas CLS di pattern card-based design.
Studi Kasus Vetmo: Listing Produk Pet Care
Pendekatan sama dipakai untuk halaman kategori Vetmo dengan 120+ produk. Sebelum subgrid, tim sering buka Issue setiap minggu soal card yang misalignment di breakpoint tablet. Setelah migrasi, isue tipe "alignment" turun ke nol selama 6 minggu pengukuran.
Fallback Strategi
Subgrid sudah Baseline, tapi untuk audience Indonesia dengan device Android lama, tetap pakai @supports:
@supports not (grid-template-rows: subgrid) {
.card {
display: flex;
flex-direction: column;
}
.card h3 { min-height: 3em; }
}
Browser yang tidak support tetap dapat layout fungsional, walaupun tanpa keselarasan otomatis.
Pertanyaan Umum
Apakah subgrid menggantikan flexbox?
Tidak. Subgrid unggul untuk alignment antar item beda parent (card grid). Flexbox tetap pilihan untuk layout 1-dimensi seperti nav bar atau tag list.
Bagaimana dengan dukungan di Safari iOS?
Safari iOS 16+ mendukung subgrid. Berdasarkan data CrUX untuk audience Indonesia, coverage Safari 16+ sudah di atas 92 persen per kuartal pertama 2026.
Apakah subgrid berdampak ke SEO?
Tidak langsung. Tapi CLS yang lebih stabil adalah faktor Core Web Vitals, yang merupakan ranking signal sejak 2021.
Berapa lama migrasi katalog existing?
Untuk katalog 50-100 SKU, migrasi biasanya 1-2 hari termasuk testing. Kuncinya: refactor satu card component, sisa otomatis ikut.
Apakah perlu JavaScript untuk subgrid?
Tidak sama sekali. Subgrid 100 persen CSS native.
Kesimpulan Praktis
Subgrid bukan optimasi micro. Untuk e-commerce katalog dan landing page yang heavy card-based, ini investasi infrastruktur design yang menghapus seluruh kelas bug alignment. Mulai dari satu komponen, ukur dampak ke CLS lewat RUM, lalu rollout ke layout lain.
Artikel Terkait
Website Bisnis
Cara Marketer Indonesia Pasang CSS field-sizing di Next.js untuk Form Feedback Auto-Grow Pangkas Bundle 11 KB dan INP dari 240 ke 95 ms di 2026
Panduan teknis pasang CSS field-sizing native di Next.js untuk textarea feedback dan komentar. Hemat library auto-grow, naikkan INP, dan kurangi long task di mobile.
Website Bisnis
Cara Marketer Indonesia Kalibrasi Prerender Trigger Rate di Next.js dari 9 ke 47 Persen dan Pangkas LCP Navigasi ke 90 ms di 2026
Panduan praktis kalibrasi Speculation Rules API di Next.js 15 lewat metrik Prerender Trigger Rate, memangkas LCP navigasi ke bawah 100 ms tanpa boros memori user.
Website Bisnis
Cara Marketer Indonesia Pasang Rate Limiting API di Next.js untuk Lindungi Form Lead dan Pangkas Biaya Bot Spam 78 Persen di 2026
Form lead Anda dihantam bot puluhan kali per menit, biaya email validator naik. Rate limiting di Next.js Edge Middleware bisa pangkas spam 78 persen tanpa sentuh database.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp Sekarang