Lompat ke konten
Kembali ke modul

Browser: HTML, CSS, DOM, dan Aksesibilitas · 4/8

Layout dengan flexbox dan grid

Satu sumbu atau dua. Pilih yang tepat dan layout berhenti jadi coba-coba.

Baca 32 menit

Setelah pelajaran ini kamu bisa

  • Memilih antara flexbox dan grid dengan sadar
  • Menjelaskan main axis dan cross axis
  • Memprediksi cara flex membagikan ruang sisa
  • Mencegah sebuah item menyusut di bawah ukuran kontennya

Satu keputusan sudah mencakup sebagian besar kasus: flexbox untuk satu arah, grid untuk dua. Sederet button itu flex. Halaman dengan sidebar dan header itu grid.

FlexboxGrid
DimensiSatu per satuBaris dan kolom bersamaan
Digerakkan olehUkuran kontennya sendiriLayout yang kamu definisikan
Cocok untukToolbar, deret button, memusatkan, kartu dalam satu barisLayout halaman, galeri, form
Penentuan ukuranItem bernegosiasi soal ruangTrack dideklarasikan di awal

Flexbox: dua sumbunya

Ini konsep yang membuat flexbox jadi masuk akal. flex-direction menentukan main axis; yang satunya jadi cross axis. justify-content selalu bekerja sepanjang main axis, align-items selalu sepanjang cross axis.

flex-directionMain axisjustify-content menggerakkanalign-items menggerakkan
row (default)HorizontalKiri dan kananAtas dan bawah
columnVertikalAtas dan bawahKiri dan kanan
css
.toolbar {
  display: flex;
  gap: 0.5rem;              /* use gap, never margins between children */
  align-items: center;      /* vertically centred, because direction is row */
  justify-content: space-between;
}

/* Perfect centring, both axes, three lines. */
.centre {
  display: flex;
  align-items: center;
  justify-content: center;
}
Di Tailwind blok pertama itu jadi flex gap-2 items-center justify-between — property yang sama, ditulis inline.

Bagaimana ruang dibagikan

Tiga property mengontrol ukuran sebuah item, dan singkatan flex: 1 mengatur ketiganya. Memahami hitungannya membuat layout bisa diprediksi alih-alih coba-coba.

PropertyArtinya
flex-basisUkuran awal sebelum pembagian apa pun
flex-growPorsi ruang sisa yang diambil. 0 berarti tidak mengambil.
flex-shrinkSeberapa rela ia melepas ruang saat ruangnya tidak cukup
flex: 1Singkatan untuk 1 1 0% — tumbuh, menyusut, abaikan ukuran konten
Coba sendiri

Hitungan pembagiannya. Ubah lebar container atau nilai grow-nya lalu tebak hasilnya sebelum menjalankan.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Lihat kasus ketiga: flex-basis: 200px dengan flex-grow: 0 dan flex-shrink: 0 adalah sidebar tetap yang standar, dan flex: 1 pada kontennya mengambil semua sisanya. Pola itu mencakup banyak sekali layout nyata.

Grid

css
.gallery {
  display: grid;
  /* Responsive with no media queries at all: as many columns as fit,
     each at least 250px, sharing the leftover space equally. */
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 1rem;
}

.page {
  display: grid;
  grid-template-columns: 250px 1fr;    /* fixed sidebar, flexible content */
  grid-template-rows: auto 1fr auto;   /* header, body that fills, footer */
  min-height: 100vh;
}
1fr berarti "satu porsi dari ruang sisa" — padanan flex-grow: 1 di grid. minmax(250px, 1fr) berarti "jangan pernah di bawah 250px, selebihnya bagi rata".

Tugas praktik

Di DevTools pada halaman beranda proyek ini, temukan daftar modul dan grid statistiknya. Chrome menaruh lencana kecil flex atau grid di sebelah elemen seperti itu di panel Elements — klik untuk menampilkan garis dan jaraknya. Lalu ubah grid-template-columns secara langsung dan lihat ia menata ulang.

Hasil yang diharapkan

Overlay visual yang menampilkan track dan gap-nya.