CSS Flexbox untuk Pemula: Properti dan Contoh Kodenya

Blog Jetorbit Indonesia oleh Waktu baca 8 menit 444x dilihat
CSS Flexbox untuk Pemula: Properti dan Contoh Kodenya

Bagikan Postingan

CSS flexbox adalah metode menyusun elemen di halaman web dalam satu arah, berderet ke samping sebagai baris maupun ke bawah sebagai kolom. Cukup pasang display: flex pada elemen induk, kemudian kalian bisa mengatur jarak, perataan, dan ukuran semua elemen anaknya dari satu tempat.

Contoh CSS flexbox di artikel ini bisa langsung dicoba: simpan HTML dan CSS-nya dalam satu file, kemudian buka di browser. Editor apa pun bisa dipakai, pilihannya ada di daftar aplikasi coding terbaik di PC dan laptop. Kalau kalian baru mulai belajar CSS, baca dahulu pengertian dan metode menulis kode CSS agar istilah seperti selektor dan properti tidak asing.

Apa itu CSS flexbox dan kapan dipakai

Nama resminya CSS Flexible Box Layout. CSS flexbox disebut tata letak satu dimensi karena cuma mengurus satu arah dalam satu waktu: baris maupun kolom. Untuk tata letak dua dimensi, ketika baris dan kolom mesti diatur berbarengan (misalnya galeri yang kolomnya mesti lurus dari atas ke bawah), CSS Grid lebih cocok.

Flexbox pas untuk elemen yang isinya mengalir searah: menu navigasi, deretan tombol, kartu produk yang berjajar, maupun satu elemen yang mau diletakkan tepat di tengah. Keduanya bisa dipakai berbareng di satu halaman, misalnya grid untuk kerangka besar dan flexbox untuk isi tiap bagian.

Flex container dan flex item

Dalam CSS flexbox, elemen yang diberi display: flex disebut flex container. Anak langsungnya otomatis menjadi flex item. Cucunya tidak ikut, kecuali anak itu juga diberi display: flex.

<div class="wadah"> <div class="kotak">1</div> <div class="kotak">2</div> <div class="kotak">3</div> </div>
.wadah { display: flex; }

Tanpa properti lain, ketiga kotak langsung berderet dalam satu baris. Menurut MDN, ini perilaku bawaannya:

  • item tersusun sebagai baris karena harga mula flex-direction adalah row;
  • item mulai dari tepi mula sumbu utama;
  • item tidak melebar mengisi sisa ruang di sumbu utama, tetapi bisa menyusut;
  • item meregang memenuhi tinggi container di sumbu silang (align-items berperilaku stretch);
  • semua item dipaksa dalam satu baris karena harga mula flex-wrap adalah nowrap.

Main axis dan cross axis

Semua properti CSS flexbox bekerja terhadap dua sumbu. Main axis (sumbu utama) adalah arah item disusun, ditentukan oleh flex-direction. Cross axis (sumbu silang) tegak lurus terhadapnya.

Dengan flex-direction: row, sumbu utama horizontal dan sumbu silang tegak. Untuk bahasa yang ditulis dari kiri ke kanan seperti bahasa Indonesia, tepi awalnya di kiri. Ganti ke column, dan keduanya bertukar: sumbu utama jadi tegak, sumbu silang jadi mendatar. Pahami ini dulu, karena justify-content selalu bekerja di sumbu utama dan align-items di sumbu silang.

Properti flex container

Properti di bagiankecil ini dipasang pada elemen induk, yaitu .wadah pada contoh sebelumnya.

flex-direction

Menentukan arah sumbu utama. Nilainya row (bawaan), row-reverse, column, dan column-reverse. Contoh berikut menumpuk kotak dari atas ke bawah:

.wadah { display: flex; flex-direction: column; }

flex-wrap

Bawaannya nowrap, jadi semua item dipaksa statis satu baris meski tidak muat. Dengan wrap, item yang tidak muat pindah ke baris berikutnya. Pada contoh ini, jika lebar container kurang dari 600px, kotak ketiga turun ke baris kedua:

.wadah { display: flex; flex-wrap: wrap; } .kotak { width: 200px; }

Properti flex-flow menggabungkan keduanya, misalnya flex-flow: row wrap;.

justify-content

Mengatur pembagian ruang kosong di sumbu utama. Nilai yang sering dipakai: flex-start, center, flex-end, space-between (item pertama dan terakhir menempel ke tepi, sisanya berjarak sama), space-around (ruang di kedua ujung separuh dari rentang antaritem), dan space-evenly (semua jarak, termasuk ke tepi, sama besar).

.wadah { display: flex; justify-content: space-between; }

align-items

Meratakan semua item di sumbu silang. Nilainya antara lain stretch (bawaan), flex-start, center, flex-end, dan baseline (rata garis alas teks baris pertama). Contoh ini meletakkan kotak di tengah tinggi container 200px:

.wadah { display: flex; align-items: center; height: 200px; }

align-content

Mengatur rentang antarbaris item, bukan antaritem. Properti ini cuma berpengaruh jika item dibolehkan turun baris (flex-wrap: wrap) dan tinggi container lebih besar dari yang dibutuhkan semua baris. Contoh ini mengumpulkan semua baris di bagiankecil atas container:

.wadah { display: flex; flex-wrap: wrap; align-content: flex-start; height: 400px; }

gap

Memberi rentang antaritem tanpa margin. Satu harga berjalan untuk dua arah. Dua harga berarti rentang antarbaris lebih dulu, kemudian rentang antaritem dalam satu baris. Di sini 16px antarbaris dan 24px antaritem:

.wadah { display: flex; flex-wrap: wrap; gap: 16px 24px; }

Properti flex item

Properti berikut dipasang pada anak, bukan pada container.

flex-grow

Menentukan seberapa besar item ikut memungut sisa ruang di sumbu utama. Nilai awalnya 0, artinya item tidak melebar. Pada contoh ini cuma kotak B yang diberi flex-grow: 1, jadi B memungut semua sisa ruang dan A serta C statis selebar isinya:

<div class="wadah"> <div class="kotak">A</div> <div class="kotak lebar">B</div> <div class="kotak">C</div> </div>
.wadah { display: flex; } .lebar { flex-grow: 1; }

flex-shrink

Kebalikan dari flex-grow: menentukan seberapa besar item ikut menyusut ketika ruang kurang. Nilai awalnya 1 dan tidak boleh negatif. Nilai 0 membikin item menolak menyusut, berguna untuk logo maupun ikon yang mesti statis utuh:

.logo { width: 120px; flex-shrink: 0; }

flex-basis

Ukuran mula item di sumbu utama sebelum sisa ruang dibagi maupun dikurangi. Nilai awalnya auto, yaitu memakai lebar maupun isi item. Di sini setiap kotak mulai dari 150px:

.kotak { flex-basis: 150px; }

Shorthand flex

Properti flex menggabungkan tiga properti di atas dengan urutan flex-grow, flex-shrink, flex-basis. MDN menyarankan memakai shorthand ini daripada menulis ketiganya terpisah. Nilai yang paling sering ditemui:

  • flex: 1 sama dengan 1 1 0, sehingga item berbagi ruang sama rata;
  • flex: auto sama dengan 1 1 auto, item bisa melebar dan menyusut dari ukuran isinya;
  • flex: none sama dengan 0 0 auto, item beku dan tidak berubah ukuran;
  • flex: initial sama dengan 0 1 auto, alias harga bawaan.
.kotak { flex: 1; }

order

Mengubah urutan tampil item. Nilai mula semua item 0. Item dengan harga lebih besar tampil lebih belakang, dan item bermutu sama mengikuti urutan di HTML. Aturan ini memindahkan kotak pertama ke paling akhir:

.kotak:first-child { order: 1; }

align-self

Versi align-items untuk satu item saja. Nilainya sama, ditambah auto yang balik mengikuti container. Di sini semua kotak rata atas, kecuali kotak terakhir yang turun ke bawah:

.wadah { display: flex; align-items: flex-start; height: 200px; } .kotak:last-child { align-self: flex-end; }

Tabel ringkas properti CSS flexbox

PropertiDipasang diNilai umumEfek
displaycontainerflexanak langsung jadi flex item
flex-directioncontainerrow, columnarah sumbu utama
flex-wrapcontainernowrap, wrapitem boleh turun baris maupun tidak
justify-contentcontainercenter, space-betweenruang kosong di sumbu utama
align-itemscontainerstretch, centerposisi item di sumbu silang
align-contentcontainerflex-start, space-betweenjarak antarbaris saat item turun baris
gapcontainer16pxjarak antaritem dan antarbaris
flex-growitem0, 1bagian sisa ruang yang diambil
flex-shrinkitem1, 0ikut menyusut maupun tidak
flex-basisitemauto, 200pxukuran mula di sumbu utama
flexitem1, 1 1 240pxshorthand grow, shrink, basis
orderitem0, -1, 1urutan tampil
align-selfitemauto, centerposisi satu item di sumbu silang

Tiga contoh tata letak dengan CSS flexbox

Logo di kiri, tautan menu di kanan. Kuncinya margin-right: auto pada logo: margin otomatis menghabiskan semua sisa ruang di sumbu utama, sehingga tautan lain terdorong ke kanan. Kode warna #1e293b di bawah bisa kalian ganti dengan kode warna CSS lain.

<nav class="menu"> <a href="/" class="logo">NamaSitus</a> <a href="/artikel">Artikel</a> <a href="/tentang">Tentang</a> <a href="/kontak">Kontak</a> </nav>
.menu { display: flex; align-items: center; gap: 24px; padding: 16px; background: #1e293b; } .menu a { color: #ffffff; text-decoration: none; } .logo { margin-right: auto; font-weight: bold; }

Elemen di tengah layar

justify-content: center memusatkan secara horizontal, align-items: center secara vertikal. Container butuh tinggi, di sini min-height: 100vh maupun setinggi layar. Margin antaran body dihapus agar halaman tidak memunculkan scroll.

<div class="layar"> <div class="pesan">Halo!</div> </div>
body { margin: 0; } .layar { display: flex; justify-content: center; align-items: center; min-height: 100vh; }

Deretan kartu yang turun baris di layar kecil

Setiap kartu punya lebar alas 240px (belum termasuk padding dan border), melebar mengisi baris, dan turun ke baris berikutnya ketika layar menyempit. Di layar HP biasanya tersisa satu kartu per baris, tanpa media query.

<div class="daftar-kartu"> <article class="kartu">Kartu 1</article> <article class="kartu">Kartu 2</article> <article class="kartu">Kartu 3</article> <article class="kartu">Kartu 4</article> </div>
.daftar-kartu { display: flex; flex-wrap: wrap; gap: 16px; } .kartu { flex: 1 1 240px; padding: 16px; border: 1px solid #cccccc; border-radius: 8px; }

Ada satu efek samping: kartu di baris terakhir ikut melebar memenuhi baris, jadi bisa lebih lebar dari kartu di atasnya. Kalau semua kartu mesti sama lebar dan kolomnya lurus, itu tanda kalian butuh CSS Grid.

Kesalahan lazim saat memakai CSS flexbox

  • Mengira justify-content selalu horizontal. Properti ini mengikuti sumbu utama, jadi setelah flex-direction: column, ia mengatur posisi vertikal.
  • Memasang align-content pada container satu baris. Tanpa flex-wrap: wrap, properti ini tidak berpengaruh apa-apa.
  • Memusatkan vertikal tanpa memberi tinggi. Container yang tingginya mengikuti isi tidak punya ruang lebih, jadi align-items: center kelihatan tidak bekerja.
  • Memakai order untuk menyusun ulang tombol maupun tautan. Urutan tampilnya berubah, tetapi urutan Tab di keyboard statis mengikuti HTML, sehingga membingungkan pelanggan keyboard. Lebih terlindungi mengubah urutan di HTML-nya.
  • Memasang display: flex pada elemen yang mau diatur posisinya. Yang diberi display: flex adalah induknya, karena cuma anak langsung yang menjadi flex item.

Daftar komplit harga setiap properti ada di panduan konsep alas flexbox di MDN Web Docs, dokumentasi yang juga menjadi rujukan artikel ini.

Artikel Lainnya Blog Jetorbit Indonesia
↑
Close Right Ads
Close Left Ads