CSS Flexbox
Ucapkan selamat tinggal pada float dan trik layout kuno! Pelajari CSS Flexbox, cara modern dan powerful untuk mengatur tata letak item dalam satu dimensi (baris atau kolom).
Flexbox ini bikin ngatur item-item dalam satu baris atau satu kolom jadi jauuuh lebih gampang dan fleksibel.
Flexbox: Jurus Sakti Ngatur Layout Satu Dimensi di CSS!
Udah pusing ngatur elemen biar dijejerin rapi pake float
atau inline-block
yang kadang suka aneh kelakuannya? Tenang, CSS punya solusi yang jauh lebih elegan dan powerful buat ngatur layout item dalam satu dimensi (baris ATAU kolom): namanya Flexbox (Flexible Box Layout Module).
Flexbox ini dirancang buat bikin kontainer jadi "fleksibel" dalam ngatur ukuran, urutan, dan perataan anak-anaknya (flex items), bahkan kalau ukuran anak-anaknya itu gak diketahui atau dinamis. Ini bener-bener game-changer buat bikin menu navigasi, barisan kartu, alignment vertikal, dan banyak lagi.
Konsep Dasar Flexbox: Container dan Items
Ada dua pemain utama dalam dunia Flexbox:
-
Flex Container (Kontainer Fleksibel):
- Ini adalah elemen induk (parent) yang mau kita jadiin fleksibel.
- Cara ngaktifinnya: kasih properti
display: flex;
ataudisplay: inline-flex;
ke elemen induk ini.display: flex;
: Kontainer jadi elemen block.display: inline-flex;
: Kontainer jadi elemen inline.
-
Flex Items (Item-item Fleksibel):
- Ini adalah anak-anak langsung (direct children) dari Flex Container.
- Begitu parent-nya jadi Flex Container, anak-anaknya otomatis jadi Flex Items dan bakal ngikutin aturan main Flexbox.
Sumbu Utama (Main Axis) dan Sumbu Silang (Cross Axis): Flexbox bekerja berdasarkan dua sumbu:
- Main Axis (Sumbu Utama): Arah utama di mana flex items dijejerin. Bisa horizontal (baris) atau vertikal (kolom). Ditentuin sama properti
flex-direction
. - Cross Axis (Sumbu Silang): Arah yang tegak lurus sama Main Axis. Kalau Main Axis horizontal, Cross Axis vertikal, dan sebaliknya.
(Sumber Gambar: CSS-Tricks - Ganti jika ada gambar yang lebih sesuai)
Properti buat Si Flex Container (Induk)
Properti-properti ini diterapin ke elemen induk yang udah dijadiin Flex Container (display: flex;
atau inline-flex;
).
-
flex-direction
: Nentuin Arah Sumbu Utama- Ngatur arah jejeran flex items.
- Nilai:
row
(default): Item dijejerin horizontal dari kiri ke kanan (kalau tulisannya LTR).row-reverse
: Item dijejerin horizontal dari kanan ke kiri.column
: Item dijejerin vertikal dari atas ke bawah.column-reverse
: Item dijejerin vertikal dari bawah ke atas.
css .container { display: flex; flex-direction: row; /* atau column, row-reverse, column-reverse */ }
-
flex-wrap
: Boleh Gak Itemnya "Turun Baris"?- Ngatur apakah flex items boleh "turun baris" (wrap) kalau gak muat di satu baris/kolom.
- Nilai:
nowrap
(default): Semua item dipaksa dijejerin di satu baris/kolom, meskipun jadi menciut.wrap
: Item boleh turun ke baris/kolom berikutnya kalau gak muat.wrap-reverse
: Item boleh turun, tapi urutan baris/kolom barunya kebalik.
css .container { display: flex; flex-wrap: wrap; /* atau nowrap, wrap-reverse */ }
-
flex-flow
: Shorthand buatflex-direction
danflex-wrap
- Kamu bisa nulis dua properti di atas jadi satu.
- Contoh:
flex-flow: row wrap;
(sama kayakflex-direction: row; flex-wrap: wrap;
)
-
justify-content
: Ngatur Perataan Item di Sumbu Utama (Main Axis)- Ini penting banget buat ngatur gimana item-item didistribusiin di sepanjang sumbu utama.
- Nilai umum (kalau
flex-direction: row
):flex-start
(default): Item nempel di awal sumbu utama (kiri).flex-end
: Item nempel di akhir sumbu utama (kanan).center
: Item dijejerin di tengah sumbu utama.space-between
: Item pertama nempel di awal, item terakhir nempel di akhir, spasi di antaranya dibagi rata.space-around
: Spasi di sekitar tiap item dibagi rata (spasi di tepi jadi setengah dari spasi antar item).space-evenly
: Spasi di antara tiap item dan di tepi-tepinya bener-bener sama rata.
css .container { display: flex; justify-content: space-between; /* atau center, flex-start, dll. */ }
(Kalau
flex-direction: column
, nilai-nilai ini ngatur perataan vertikal). -
align-items
: Ngatur Perataan Item di Sumbu Silang (Cross Axis)- Ngatur gimana item-item dijejerin di sepanjang sumbu silang (dalam satu baris, kalau
flex-direction: row
). - Nilai umum (kalau
flex-direction: row
):stretch
(default): Item diregangin biar tingginya sama kayak item tertinggi (atau tinggi kontainer kalau item gak punya tinggi spesifik).flex-start
: Item nempel di awal sumbu silang (atas).flex-end
: Item nempel di akhir sumbu silang (bawah).center
: Item dijejerin di tengah sumbu silang (tengah vertikal).baseline
: Item dijejerin berdasarkan baseline teksnya.
css .container { display: flex; height: 200px; /* Kasih tinggi ke kontainer biar efek align-items keliatan */ align-items: center; /* atau stretch, flex-start, dll. */ }
- Ngatur gimana item-item dijejerin di sepanjang sumbu silang (dalam satu baris, kalau
-
align-content
: Ngatur Perataan Baris-Baris Fleksibel (Kalau Adaflex-wrap: wrap
)- Properti ini cuma ngefek kalau kamu punya beberapa baris flex items (artinya,
flex-wrap: wrap;
dan itemnya beneran nge-wrap). - Dia ngatur gimana baris-baris itu didistribusiin di dalem kontainer di sepanjang sumbu silang. Mirip
justify-content
tapi buat sumbu silang dan buat baris-barisnya. - Nilai:
flex-start
,flex-end
,center
,space-between
,space-around
,stretch
(default).
css .container-multi-baris { display: flex; flex-wrap: wrap; height: 300px; /* Butuh tinggi biar ada ruang buat distribusi baris */ align-content: space-around; }
- Properti ini cuma ngefek kalau kamu punya beberapa baris flex items (artinya,
Properti buat Si Flex Items (Anak)
Properti-properti ini diterapin ke anak-anak langsung dari Flex Container.
-
order
: Ngubah Urutan Tampilan Item- Secara default, item tampil sesuai urutannya di HTML. Pake
order
, kamu bisa ngubah urutan visualnya. - Nilainya angka integer (positif, negatif, atau 0). Defaultnya
0
. - Item dengan
order
lebih kecil bakal tampil duluan.
css .item-satu { order: 2; } .item-dua { order: 1; } /* Item dua bakal tampil sebelum item satu */ .item-tiga { order: 3; }
- Secara default, item tampil sesuai urutannya di HTML. Pake
-
flex-grow
: Seberapa "Rakus" Item Ini Ngambil Ruang Sisa?- Nentuin kemampuan item buat "tumbuh" (ngegedein) kalau ada ruang kosong di kontainer.
- Nilainya angka non-negatif (default
0
). - Kalau semua item
flex-grow: 0
, ruang sisa gak bakal dipake. - Kalau satu item
flex-grow: 1
dan sisanya0
, item itu bakal ngambil semua ruang sisa. - Kalau beberapa item punya
flex-grow
positif, ruang sisa bakal dibagi proporsional sesuai nilaiflex-grow
masing-masing.
css .item-rakus { flex-grow: 1; } .item-biasa { flex-grow: 0; }
-
flex-shrink
: Seberapa Rela Item Ini "Menciut"?- Nentuin kemampuan item buat "menciut" kalau gak ada cukup ruang di kontainer.
- Nilainya angka non-negatif (default
1
). - Item dengan
flex-shrink
lebih besar bakal menciut lebih banyak. Kalau0
, dia gak mau menciut.
css .item-keras-kepala { flex-shrink: 0; } /* Gak mau menciut */ .item-fleksibel { flex-shrink: 2; } /* Lebih rela menciut */
-
flex-basis
: Ukuran Awal Ideal Item di Sumbu Utama- Nentuin ukuran awal item di sepanjang sumbu utama sebelum ruang didistribusiin (sebelum
flex-grow
atauflex-shrink
kerja). - Nilainya bisa kayak
width
/height
(misal,200px
,auto
(default),content
). - Kalau
auto
, ukurannya ngikutinwidth
/height
item atau kontennya.
- Nentuin ukuran awal item di sepanjang sumbu utama sebelum ruang didistribusiin (sebelum
-
flex
: Shorthand buatflex-grow
,flex-shrink
, danflex-basis
- Ini cara paling umum buat ngatur fleksibilitas item.
- Sintaks:
flex: flex-grow flex-shrink flex-basis;
- Nilai default:
flex: 0 1 auto;
(gak tumbuh, mau menciut, ukuran basis otomatis). - Beberapa shorthand umum:
flex: auto;
(sama kayak1 1 auto
) -> item bisa tumbuh dan menciut, ukuran basis otomatis.flex: none;
(sama kayak0 0 auto
) -> item gak bisa tumbuh, gak bisa menciut, ukuran basis otomatis.flex: 1;
(sama kayak1 1 0%
atau1 1 0
) -> item bisa tumbuh dan menciut, ukuran basisnya diabaikan (dianggap 0), jadi ruang dibagi rata. Sering dipake buat bikin kolom sama lebar.
css .item { flex: 1; } /* Semua item dengan class ini bakal bagi ruang sama rata */
-
align-self
: Ngatur Perataan Item Individual di Sumbu Silang- Ini kayak
align-items
tapi buat satu flex item spesifik. Dia bisa "ngalahin" nilaialign-items
yang diset di kontainer. - Nilainya sama kayak
align-items
(auto
(default, ngikutin kontainer),flex-start
,flex-end
,center
,stretch
,baseline
).
css .container { display: flex; align-items: flex-start; /* Semua item nempel atas */ } .item-spesial { align-self: center; /* Tapi item ini mau di tengah sendiri */ }
- Ini kayak
Contoh Kasus Penggunaan Flexbox
- Menu Navigasi Horizontal:
html <nav> <ul> <li><a href="#">Beranda</a></li> <li><a href="#">Produk</a></li> <li><a href="#">Kontak</a></li> </ul> </nav>
css nav ul { display: flex; /* Bikin <li> dijejerin */ list-style-type: none; /* Ilangin bullet */ padding: 0; justify-content: center; /* Item menu di tengah */ } nav ul li a { padding: 10px 15px; text-decoration: none; }
- Kartu Produk Berjajar Rapi:
html <div class="container-kartu"> <div class="kartu">Produk 1</div> <div class="kartu">Produk 2 Lebih Panjang Isinya</div> <div class="kartu">Produk 3</div> </div>
css .container-kartu { display: flex; flex-wrap: wrap; /* Boleh turun baris kalau gak muat */ gap: 16px; /* Jarak antar kartu (properti baru, bisa juga pake margin di item) */ } .kartu { flex: 1 1 200px; /* Bisa tumbuh, bisa menciut, basisnya 200px */ /* Artinya, coba jadi 200px, tapi kalau ada ruang lebih dia bisa gedein, */ /* kalau ruang kurang dia bisa kecilin. Bikin kartu responsif. */ border: 1px solid #ccc; padding: 16px; }
- Centering Vertikal Sempurna:
html <div class="parent-tengah"> <div class="anak-di-tengah">Ini di tengah</div> </div>
css .parent-tengah { display: flex; justify-content: center; /* Tengah horizontal */ align-items: center; /* Tengah vertikal */ height: 300px; /* Parent harus punya tinggi */ border: 1px solid black; } .anak-di-tengah { padding: 20px; background-color: lightblue; }
Flexbox itu bener-bener alat yang super berguna buat ngatur layout di CSS. Awalnya mungkin propertinya keliatan banyak, tapi coba deh fokus pahamin konsep Flex Container vs Flex Items dan properti-properti utama kayak flex-direction
, justify-content
, align-items
, dan shorthand flex
buat item.
Cara terbaik buat belajar Flexbox adalah dengan banyak latihan dan nyoba-nyoba langsung. Ada banyak game interaktif online buat belajar Flexbox (kayak Flexbox Froggy) yang seru banget!
Coba ubah properti justify-content
atau align-items
di bawah ini:
Kuis CSS Flexbox
Pertanyaan 1 dari 5
Untuk mengaktifkan Flexbox pada sebuah elemen sehingga anak-anak langsungnya menjadi flex items, properti CSS apa yang harus diterapkan pada elemen induk (container) tersebut?