Flex container adalah elemen yang memiliki display: flex. Semua property berikut diterapkan pada container (elemen induk) untuk mengatur bagaimana item-item di dalamnya berprilaku.
Mengatur bagaimana item didistribusikan sepanjang sumbu utama (horizontal jika flex-direction: row):
.container { display: flex; }
.flex-start { justify-content: flex-start; } /* kiri (default) */
.flex-end { justify-content: flex-end; } /* kanan */
.center { justify-content: center; } /* tengah */
.space-between { justify-content: space-between; } /* jarak sama, ujung menempel */
.space-around { justify-content: space-around; } /* jarak sama, termasuk ujung (setengah) */
.space-evenly { justify-content: space-evenly; } /* jarak sama rata termasuk ujung */
Visualisasi:
flex-start: [A][B][C]__________
center: ____[A][B][C]______
flex-end: __________[A][B][C]
space-between: [A]_____[B]_____[C]
space-around: _[A]___[B]___[C]_
space-evenly: __[A]__[B]__[C]__
Mengatur perataan item sepanjang sumbu silang (vertikal jika flex-direction: row):
.stretch { align-items: stretch; } /* default: rentangkan mengisi tinggi container */
.flex-start { align-items: flex-start; } /* rata atas */
.flex-end { align-items: flex-end; } /* rata bawah */
.center { align-items: center; } /* rata tengah vertikal */
.baseline { align-items: baseline; } /* rata berdasarkan baseline teks */
Centering sempurna horizontal + vertikal:
.terpusat {
display: flex;
justify-content: center; /* horizontal */
align-items: center; /* vertikal */
height: 100vh; /* isi penuh viewport */
}
Secara default, semua item dipaksa muat dalam satu baris. Dengan flex-wrap, item yang tidak muat akan pindah ke baris berikutnya:
.container {
display: flex;
flex-wrap: nowrap; /* default: semua satu baris */
flex-wrap: wrap; /* pindah baris jika tidak muat */
flex-wrap: wrap-reverse; /* pindah baris, tapi arah terbalik */
}
/* Contoh: grid kartu responsif tanpa media query */
.grid-kartu {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.kartu {
flex: 1 1 280px; /* min 280px, tapi bisa tumbuh */
}
Menggantikan cara lama menggunakan margin untuk jarak antar item:
.container {
display: flex;
gap: 16px; /* jarak sama di semua arah */
gap: 16px 24px; /* row-gap | column-gap */
row-gap: 16px; /* jarak antar baris */
column-gap: 24px; /* jarak antar kolom */
}
Kelebihan gap dibanding margin: tidak menambah jarak di tepi luar pertama dan terakhir — hanya di antaranya.
Hanya bekerja ketika flex-wrap: wrap dan ada lebih dari satu baris item:
.container {
display: flex;
flex-wrap: wrap;
align-content: flex-start; /* semua baris di atas */
align-content: center; /* semua baris di tengah */
align-content: space-between; /* jarak sama antar baris */
align-content: stretch; /* baris direntangkan (default) */
}
Gabungkan flex-direction dan flex-wrap:
.container {
flex-flow: row wrap; /* sama dengan: flex-direction: row; flex-wrap: wrap; */
flex-flow: column nowrap;
}
/* Layout halaman dengan sidebar */
.layout {
display: flex;
gap: 24px;
min-height: 100vh;
align-items: flex-start;
}
.sidebar {
width: 240px;
flex-shrink: 0; /* sidebar tidak menyusut */
}
.konten-utama {
flex: 1; /* mengambil sisa ruang yang ada */
}
| Property | Fungsi |
|---|---|
flex-direction |
Arah main axis (row/column) |
justify-content |
Distribusi item di main axis |
align-items |
Perataan item di cross axis |
flex-wrap |
Pembungkusan item ke baris baru |
align-content |
Perataan baris di cross axis |
gap |
Jarak antar item |
flex-flow |
Shorthand direction + wrap |
💡 Tips: Kombinasi
justify-content: space-betweendanalign-items: centeradalah pola yang paling sering digunakan untuk navbar — logo di kiri, menu di kanan, keduanya rata tengah secara vertikal. Hafalkan ini! 🎯
Kursus
CSS Dasar
Kategori
Flexbox
Durasi Pelajaran
20 menit