Layout CSS telah berkembang secara dramatis selama bertahun-tahun. Apa yang dulunya memerlukan float yang kompleks, clearfix, dan hack positioning kini dapat diselesaikan dengan kode yang bersih dan intuitif menggunakan Flexbox dan Grid. Kedua sistem layout ini adalah fondasi desain web modern, dan memahaminya sangat penting untuk setiap pengembang front-end.
Panduan komprehensif ini akan mengajarkan Anda semua yang perlu Anda ketahui tentang CSS Flexbox dan Grid. Kami akan membahas dasar-dasar setiap sistem, kapan menggunakan salah satu versus yang lain, pola layout umum, dan contoh praktis yang dapat Anda gunakan dalam proyek Anda hari ini.
Memahami CSS Flexbox
Flexbox, singkatan dari Flexible Box Layout, adalah sistem layout satu dimensi yang dirancang untuk mendistribusikan ruang sepanjang satu sumbu โ baik secara horizontal (row) atau vertikal (column). Flexbox sangat unggul dalam menyelaraskan item, mendistribusikan ruang, dan menangani ukuran konten yang dinamis.
Dasar-dasar Flexbox
Untuk membuat flex container, cukup atur display: flex pada elemen parent. Semua child langsung secara otomatis menjadi flex item:
.container {
display: flex;
}
Secara default, flex item disusun dalam row (horizontal), tetapi Anda dapat mengubahnya dengan flex-direction:
.container {
display: flex;
flex-direction: column; /* Susun secara vertikal */
}
Properti Flexbox Utama
justify-content mengontrol penyelarasan sepanjang main axis (horizontal untuk row, vertikal untuk column):
.container {
display: flex;
justify-content: center; /* Pusatkan item */
/* Opsi lain: flex-start, flex-end, space-between, space-around, space-evenly */
}
align-items mengontrol penyelarasan sepanjang cross axis (tegak lurus dengan main axis):
.container {
display: flex;
align-items: center; /* Pusatkan secara vertikal (untuk arah row) */
/* Opsi lain: flex-start, flex-end, stretch, baseline */
}
flex-wrap memungkinkan item untuk wrap ke beberapa baris:
.container {
display: flex;
flex-wrap: wrap; /* Izinkan item untuk wrap */
}
Properti Flex Item
flex-grow menentukan seberapa banyak item dapat tumbuh relatif terhadap yang lain:
.item {
flex-grow: 1; /* Item dapat tumbuh untuk mengisi ruang */
}
.item-double {
flex-grow: 2; /* Item tumbuh dua kali lipat */
}
flex-shrink menentukan seberapa banyak item dapat menyusut:
.item {
flex-shrink: 0; /* Item tidak akan menyusut */
}
flex-basis mengatur ukuran awal item:
.item {
flex-basis: 200px; /* Mulai dari 200px, kemudian tumbuh/susut */
}
Shorthand flex menggabungkan grow, shrink, dan basis:
.item {
flex: 1 0 200px; /* grow: 1, shrink: 0, basis: 200px */
/* Atau sederhananya: */
flex: 1; /* grow: 1, shrink: 1, basis: 0% */
}
Memahami CSS Grid
CSS Grid adalah sistem layout dua dimensi yang menangani baris dan kolom secara bersamaan. Grid sangat sempurna untuk layout halaman keseluruhan dan desain berbasis grid yang kompleks.
Dasar-dasar Grid
Buat grid container dengan display: grid:
.container {
display: grid;
}
Tentukan struktur grid Anda dengan grid-template-columns dan grid-template-rows:
.container {
display: grid;
grid-template-columns: 200px 200px 200px; /* Tiga kolom 200px */
grid-template-rows: 100px 100px; /* Dua baris 100px */
gap: 20px; /* Ruang antar grid item */
}
Grid Tracks Fleksibel
Gunakan unit fr untuk sizing fleksibel:
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* Kolom tengah dua kali lebih lebar */
}
.container-equal {
display: grid;
grid-template-columns: repeat(3, 1fr); /* Tiga kolom sama */
}
Grid Template Areas
Area bernama membuat layout kompleks menjadi mudah dibaca:
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }
Penempatan Grid Item
Kontrol di mana item muncul:
.item {
grid-column: 1 / 3; /* Span dari garis kolom 1 ke 3 */
grid-row: 1 / 2; /* Span dari garis baris 1 ke 2 */
}
/* Shorthand: */
.item {
grid-column: span 2; /* Span 2 kolom */
}
Flexbox vs Grid: Kapan Menggunakan Masing-masing
| Kasus Penggunaan | Pilihan Terbaik | Alasan |
|---|---|---|
| Navigation bars | Flexbox | Satu dimensi, penyelarasan mudah |
| Layout kartu | Grid | Kontrol dua dimensi |
| Layout halaman | Grid | Kontrol 2D penuh atas area |
| Centering elemen | Flexbox | Sederhana dan andal |
| Layout form | Salah satu | Tergantung pada kompleksitas |
Pola Layout Umum
Holy Grail Layout dengan Grid
.layout {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
min-height: 100vh;
gap: 1rem;
}
Responsive Card Grid
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
Perfect Centering dengan Flexbox
.center-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
Sticky Footer
body {
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
Kesimpulan
CSS Flexbox dan Grid adalah alat yang ampuh yang menyelesaikan masalah layout yang berbeda. Flexbox unggul dalam layout satu dimensi dan penyelarasan tingkat komponen, sementara Grid bersinar dalam layout dua dimensi dan struktur tingkat halaman. Kuasai keduanya, dan Anda akan dapat membuat layout apa pun yang dapat Anda bayangkan dengan kode yang bersih dan mudah dipelihara.
Mulailah berlatih hari ini dengan mengubah layout berbasis float lama untuk menggunakan Flexbox atau Grid. Semakin sering Anda menggunakan sistem ini, semakin intuitif mereka menjadi. Selamat coding!