Layout Menggunakan Flexbox

1. Flexbox

Flexbox (Flexible Box Layout) adalah salah satu metode layout modern dalam CSS yang dirancang untuk mengatur elemen dalam satu dimensi — baik dalam arah horizontal (baris) maupun vertikal (kolom). Flexbox sangat bermanfaat dalam menyusun layout yang dinamis, responsif, dan rapi tanpa bergantung pada teknik lama seperti float atau positioning.

2. Konsep Utama: Main Axis dan Cross Axis

Untuk memahami cara kerja Flexbox, penting memahami dua konsep utama:

  • Main Axis: Arah utama layout elemen. Ditentukan oleh properti flex-direction.
  • Cross Axis: Arah tegak lurus dari Main Axis.
flex-directionMain AxisCross Axis
row (default)HorizontalVertikal
columnVertikalHorizontal

3. Struktur Dasar Flexbox

.container {
  display: flex;
}

Semua elemen anak dalam .container akan menjadi fleksibel dan mengikuti aturan Flexbox.

4. Properti Penting dalam Flexbox

4.1 flex-grow

Mengatur seberapa banyak elemen dapat bertambah lebar untuk mengisi ruang yang tersedia.

.item {
  flex-grow: 1;
}

Semakin besar nilainya, semakin besar elemen akan tumbuh.

4.2 flex-shrink

Mengatur seberapa banyak elemen akan mengecil jika ruang tidak cukup.

.item {
  flex-shrink: 1;
}

Nilai 0 berarti elemen tidak akan mengecil sama sekali.

4.3 flex-basis

Menentukan ukuran awal elemen sebelum ruang dibagi dengan flex-grow atau flex-shrink.

.item {
  flex-basis: 200px;
}

4.4 flex (Shorthand)

Menggabungkan flex-grow, flex-shrink, dan flex-basis dalam satu baris:

.item {
  flex: 1 0 200px;
}

5. Contoh Implementasi Layout

5.1 Membuat Navbar Responsif

HTML:

<nav class="navbar">
  <div class="logo">LOGO</div>
  <ul class="menu">
    <li>Beranda</li>
    <li>Tentang</li>
    <li>Kontak</li>
  </ul>
</nav>

CSS:

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem;
  background-color: #2c3e50;
  color: white;
}

.menu {
  display: flex;
  gap: 1.5rem;
  list-style: none;
}

5.2 Galeri Responsif

HTML:

<div class="gallery">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>

CSS:

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

.item {
  flex: 1 1 200px;
  background-color: #ecf0f1;
  height: 150px;
  text-align: center;
  line-height: 150px;
  font-size: 1.5rem;
}

5.3 Form Dua Kolom

HTML:

<form class="form">
  <div class="form-group">
    <label for="name">Nama</label>
    <input type="text" id="name">
  </div>

  <div class="form-group">
    <label for="email">Email</label>
    <input type="email" id="email">
  </div>
</form>

CSS:

.form {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
}

.form-group {
  flex: 1 1 45%;
  display: flex;
  flex-direction: column;
}

6. Kesimpulan

Flexbox memungkinkan pembuatan layout yang fleksibel, mudah dipahami, dan responsif tanpa perlu menggunakan float atau teknik lawas. Dengan memahami properti utama seperti flex-grow, flex-shrink, dan flex-basis, serta konsep main axis dan cross axis, pengembang dapat membuat struktur UI yang rapi dan adaptif terhadap berbagai ukuran layar.