Gap di Grid
gap, row-gap, column-gap di grid dan kenapa lebih baik dari margin.
Kenapa gap penting di grid?
Bayangkan galeri 3 kolom dengan margin: tiap item punya margin 12px, tapi item di tepi kiri-kanan ikut terdorong sehingga total lebar meluber, dan kamu harus menghitung ulang lebar kolom dikurangi margin. Menyakitkan. gap menyelesaikan ini: jarak hanya ada di antara trek, tidak di tepi wadah, dan lebar kolom fr dihitung setelah gap dikurangi.
.galeri {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px; /* 16px antar kolom DAN antar baris */
}gap dua arah
.tabel {
display: grid;
grid-template-columns: repeat(4, 1fr);
row-gap: 24px; /* jarak vertikal antar baris */
column-gap: 12px; /* jarak horizontal antar kolom */
}
/* shorthand: gap: <row> <column> */
.tabel2 {
gap: 24px 12px;
}Satu nilai gap: 16px berarti kedua arah sama. Dua nilai berarti baris dulu, kolom kemudian.
gap vs margin: perbandingan nyata
Contoh masalah margin:
/* CARA LAMA dengan margin: perlu hack */
.item { margin: 8px; }
.galeri { margin: -8px; } /* kompensasi tepi, jelek! */Dengan gap, tidak ada hack apa pun. Lebih jauh lagi, gap ikut diperhitungkan mesin layout: 1fr berarti "satu bagian dari ruang setelah gap dikurangi", sehingga kolom tidak pernah meluber.
/* CARA MODERN: bersih */
.galeri {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}Gap responsif
Gap juga bisa menyesuaikan ukuran layar, misalnya lebih rapat di mobile:
.galeri {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: clamp(8px, 2vw, 24px);
}clamp() membuat gap tumbuh mengikuti lebar viewport, dibatasi minimal 8px dan maksimal 24px.
Catatan teknis:
gapdi grid didukung semua browser modern sejak lama (lebih dulu dari gap di flexbox). Properti lamagrid-gap,grid-row-gap,grid-column-gapsudah usang: pakaigapsaja.
Tips profesional
- Konsistensi gap = konsistensi desain. Tetapkan skala (8/16/24/32px) sebagai variabel dan pakai di semua grid.
- Gap besar (24px+) untuk section landing; gap kecil (8-12px) untuk galeri foto rapat.
gapjuga berfungsi di grid bersarang: tiap level grid boleh punya gap sendiri.
Pola siap salin: skala gap konsisten
:root {
--gap-sm: 8px;
--gap-md: 16px;
--gap-lg: 32px;
}
.galeri { display: grid; gap: var(--gap-md); }
.hero-grid { display: grid; gap: var(--gap-lg); }Satu skala gap untuk seluruh situs: galeri rapat, section lega, selalu konsisten.
Gap sebagai design token
:root { --gap: clamp(12px, 2vw, 24px); }
.galeri {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--gap);
}Gap yang ikut membesar di layar besar dan merapat di HP: satu variabel, seluruh situs responsif.
Rangkuman
gap memberi jarak antar trek tanpa mengotori tepi dan tanpa hack margin. Pakai row-gap/column-gap untuk jarak berbeda per arah, dan ingat fr dihitung setelah gap.
export default function App(): JSX.Element { return <h1>Hello world</h1> }
Tantangan
Gap Beda Arah
Menguasai gap membuat galerimu rapi tanpa perhitungan manual yang rawan salah.
Di playground:
- Buat jarak antar baris 32px dan antar kolom 8px memakai row-gap/column-gap.
- Coba ganti gap menjadi margin pada .item (margin: 8px), amati tepi galeri ikut terdorong dan tidak rapi. Kembalikan ke gap.
- Di komentar, jelaskan kenapa gap lebih aman dari margin untuk grid.
<!doctype html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styles.css" /> </head> <body> <h1>Halo CSS</h1> <p>Edit styles.css dan lihat hasilnya.</p> </body> </html>