Box Model — CSS

Setiap elemen HTML adalah sebuah kotak (box). Box Model menjelaskan bagaimana ukuran kotak itu dihitung. Dari dalam ke luar, box model terdiri dari: 💡…

Di CSS, setiap elemen adalah kotak. Box model adalah cara browser menghitung ukuran kotak itu: isinya di tengah, lalu dibungkus tiga lapis, yaitu padding, border dan margin. Kayak paket kiriman: barangnya, bubble wrap di dalam kardus, kardusnya, lalu jarak ke paket sebelahnya.

🧪 Tebakan cepat: kotak dengan width: 200px dikasih padding: 20px. Di layar, lebarnya masih 200px? Tebak dulu, jawabannya ada di bagian "Kenapa kotaknya jadi lebih lebar".

Empat lapis sebuah kotak

<div class="box">Konten</div>

<style>
.box {
  width: 200px;
  padding: 20px;
  border: 5px solid black;
  margin: 10px;
}
</style>

Jadi urutannya dari dalam ke luar: content, padding, border, margin. Tiap baris ditulis properti: nilai; (satu titik dua, diakhiri titik koma), dan semuanya ada di dalam { } milik selectornya.

Kenapa kotaknya jadi lebih lebar

Bawaan browser adalah box-sizing: content-box. Artinya width cuma mengatur lebar isinya. Padding dan border ditambahkan di luarnya, dan dua-duanya ada di kiri dan kanan:

200 (content) + 20 + 20 (padding) + 5 + 5 (border) = 250px

Jawaban tebakan: bukan 200px. Dengan padding: 20px saja, kotaknya jadi 240px. Margin gak dihitung, karena margin itu jarak di luar kotak, bukan bagian kotaknya.

border-box: width jadi lebar total

.box {
  box-sizing: border-box;
  width: 200px;
  padding: 20px;
  border: 5px solid black;
}

Dengan box-sizing: border-box, padding dan border masuk ke dalam width. Kotaknya tetap 200px di layar, dan isinya yang mengalah: 200 - 40 - 10 = 150px. Lebih gampang ditebak, makanya banyak developer menaruh ini di awal CSS-nya. Tanda * artinya "semua elemen":

* {
  box-sizing: border-box;
}

Butuh dua kotak dengan box-sizing yang beda? Selector dengan koma, misalnya .a, .b { ... }, memberi nilai yang sama ke dua-duanya. Nilai yang beda butuh aturan sendiri per class, masing-masing dengan { dan }:

.a { box-sizing: content-box; }
.b { box-sizing: border-box; }

⚠️ Jebakan yang sering ketemu

🔬 Coba sendiri

Geser nilainya dan lihat tiap lapis berubah.

TL;DR: Tiap elemen adalah kotak dengan empat lapis, dari dalam ke luar: content, padding, border, margin. Dengan bawaan box-sizing: content-box, width cuma lebar isinya, jadi padding dan border menambah lebar di kiri dan kanan (200 + 20 + 20 + 5 + 5 = 250px). Dengan box-sizing: border-box, padding dan border masuk ke dalam width, jadi kotaknya tetap selebar width. Margin selalu di luar kotak.

Yang akan kamu pelajari