Kapan Menggunakan Flexbox?
**Flexbox (Flexible Box Layout) dirancang untuk mengatur tata letak dalam satu dimensi pada satu waktu**—baik sebagai satu baris horizontal (row) maupun satu kolom vertikal (column).
Gunakan Flexbox ketika Anda ingin:
- Menyusun bilah navigasi (logo di kiri, deretan menu di kanan).
- Menyejajarkan ikon dengan teks di dalam tombol atau lencana.
- Membagi ruang sisa di antara sekumpulan komponen yang ukurannya dinamis.
- Memaksa kaki kartu (card footer) selalu menempel rata di bagian paling bawah kartu meskipun panjang teks tiap kartu berbeda.
Begitu Anda menulis display: flex pada sebuah elemen:
- Elemen tersebut menjadi Flex Container (wadah flex).
- Seluruh **anak langsung (direct children) di dalamnya otomatis menjadi Flex Items**. (Cucu di dalam anak tidak ikut menjadi flex item kecuali anaknya juga diberi
display: flex).
1. Memahami Dua Poros Flexbox: Main Axis dan Cross Axis
Kunci utama agar Anda tidak pernah bingung antara justify-content dan align-items adalah memahami bahwa Flexbox bekerja berdasarkan dua poros yang saling tegak lurus:
A. Saat flex-direction: row (Bawaan):
Main Axis (Poros Utama) ===> Horizontal (Kiri ke Kanan)
Cross Axis (Poros Silang) ===> Vertikal (Atas ke Bawah)
+-------------------------------------------------------+
| [ Item 1 ] [ Item 2 ] [ Item 3 ] | <-- justify-content mengatur
| | sepanjang Main Axis (Horizontal)
+-------------------------------------------------------+
^
|-- align-items mengatur sepanjang Cross Axis (Vertikal)
B. Saat flex-direction: column:
Main Axis (Poros Utama) ===> Vertikal (Atas ke Bawah)
Cross Axis (Poros Silang) ===> Horizontal (Kiri ke Kanan)
Aturan Menghafal Perataan di Flexbox:
justify-contentSELALU mengatur distribusi di sepanjang Main Axis (Poros Utama):flex-start(awal poros),center(tengah),flex-end(ujung poros)space-between(item pertama dan terakhir menempel di ujung, ruang kosong dibagi rata di tengah)space-around/space-evenly
align-itemsSELALU mengatur perataan di sepanjang Cross Axis (Poros Silang):stretch(bawaan: merentangkan tinggi item agar sama tinggi dengan kontainer)center(rata tengah secara tegak lurus — sangat sering dipakai untuk menyejajarkan ikon dan teks!)flex-start,flex-end,baseline(sejajar garis dasar huruf teks).
2. Membungkus Baris (flex-wrap) dan Mengatur Jarak (gap)
Secara bawaan, Flexbox berusaha memaksakan semua anak masuk ke dalam satu baris tunggal (flex-wrap: nowrap), bahkan jika harus menyempitkan item-item tersebut. Jika Anda ingin item turun ke baris baru saat ruang tidak lagi cukup, tambahkan flex-wrap: wrap.
Untuk memberi jarak antar-item di dalam Flexbox, jangan lagi menggunakan trik margin negatif lama; gunakan properti gap (serta row-gap dan column-gap, berstatus Baseline Widely Available):
.daftar-tag {
display: flex;
flex-wrap: wrap;
gap: 0.5rem 0.75rem; /* 0.5rem jarak antar-baris, 0.75rem jarak antar-kolom */
align-items: center;
}
Keunggulan gap dibandingkan margin: jarak gap hanya disisipkan di antara item yang bertetangga, tidak pernah bocor menambahkan jarak ekstra di tepi luar kontainer!
3. Mengendalikan Ukuran Flex Item: flex-grow, flex-shrink, dan flex-basis
Ketiga properti ini dipasang pada anak (Flex Item), bukan pada wadah induknya, dan hampir selalu ditulis menggunakan singkatan flex: <grow> <shrink> <basis>:
flex-basis(Ukuran Awal Ideal): Ukuran awal item di sepanjang Main Axis sebelum ruang kosong dibagi atau ruang sempit dipangkas (bawaannyaauto, yaitu mengikutiwidth/heightatau isi kontennya).flex-grow(Faktor Tumbuh): Menentukan apakah item boleh membesar menyerap ruang kosong yang tersisa di dalam kontainer (bawaannya0= tidak ikut membesar).flex-shrink(Faktor Susut): Menentukan apakah item boleh menyusut ketika ruang kontainer lebih sempit dari jumlah ukuran item (bawaannya1= boleh menyusut).
Empat Nilai Singkatan flex yang Wajib Anda Hafal
| Deklarasi Singkatan | Ekivalen Lengkap | Perilaku Praktis |
|---|---|---|
flex: initial (bawaan) | flex: 0 1 auto | Ukuran mengikuti kontennya; tidak tumbuh jika ada ruang sisa, tetapi mau menyusut jika layar sempit. |
flex: 1 | flex: 1 1 0% | Semua item dengan flex: 1 berbagi ruang secara sama rata dari titik dasar 0% tanpa peduli panjang pendek teks awalnya. |
flex: auto | flex: 1 1 auto | Item ikut tumbuh menyerap ruang sisa, namun ukuran dasarnya tetap mempertimbangkan panjang konten masing-masing. |
flex: none | flex: 0 0 auto | Kaku: ukuran mengikuti konten/width, dilarang tumbuh dan dilarang menyusut (wajib dipasang pada ikon atau avatar agar tidak gepeng tertekan teks panjang!). |
4. Tiga Pola Komponen Dunia Nyata dengan Flexbox
/* Pola 1: Bilah Navigasi (Logo dan Menu di kiri, Tombol Masuk mendorong ke ujung kanan) */
.navbar {
display: flex;
align-items: center;
gap: 1.5rem;
}
.navbar .tombol-masuk {
/* margin-inline-start: auto pada flex item akan menyerap seluruh ruang kosong di kirinya! */
margin-inline-start: auto;
}
/* Pola 2: Kartu dengan Tinggi Seragam dan Tombol Selalu Rata di Dasar Bawah */
.kartu {
display: flex;
flex-direction: column;
}
.kartu .kaki-kartu {
margin-block-start: auto; /* Mendorong kaki kartu ke ujung paling bawah */
padding-block-start: 1rem;
}
/* Pola 3: Mencegah Ikon SVG Gepeng di Samping Teks Panjang */
.item-fitur {
display: flex;
align-items: flex-start;
gap: 0.75rem;
}
.item-fitur svg {
flex-shrink: 0; /* Ikon tidak akan pernah menyusut meskipun teks di sebelahnya panjang */
}
<pre> yang Merusak Lebar Flex ItemSecara bawaan, setiap flex item memiliki nilai min-width: auto (tidak mau menyusut lebih kecil dari kata terpanjang atau blok <pre> di dalamnya). Akibatnya, jika di dalam kolom flex: 1 terdapat <pre><code> yang lebar atau teks dengan text-overflow: ellipsis, kolom tersebut justru membengkak menembus layar! Solusinya: Tambahkan min-width: 0 (atau min-inline-size: 0) pada flex item tersebut agar ia diizinkan menyusut mengikuti batas kontainernya.
Latihan Praktik: Membangun Bilah Navigasi dan Deretan Kartu Fitur
Buatlah berkas flexbox-komponen.html dan flexbox.css yang berisi:
- Sebuah
<header class="navbar">yang menyejajarkan logo di kiri, tautan navigasi di tengah, dan tombol aksi di ujung kanan menggunakandisplay: flex,align-items: center,gap, danmargin-inline-start: auto. - Tiga kartu fitur berdampingan di mana salah satu kartu memiliki 4 baris paragraf sementara dua kartu lainnya hanya 1 baris paragraf, namun tombol "Pelajari Modul" di bagian bawah ketiga kartu tetap sejajar rata di garis dasar yang sama menggunakan
flex-direction: columndanmargin-block-start: auto.