Menu

Box Model CSS: Content, Padding, Border, Margin

Setiap elemen adalah kotak yang terdiri dari empat lapisan: content, padding, border, dan margin. Pelajari bagaimana setiap lapisan menambah ukuran, bagaimana box-sizing: border-box mengubah hitungannya, dan lihat setiap lapisan diukur secara langsung.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Empat lapisan setiap kotak

Setiap elemen di halaman digambar sebagai persegi panjang yang terdiri dari empat lapisan, dari dalam ke luar:

  1. Content: teks, gambar, atau elemen anak, ukurannya diatur oleh width dan height.
  2. Padding: ruang di dalam kotak, di antara content dan border. Padding menampilkan background elemen.
  3. Border: garis di sekeliling padding.
  4. Margin: ruang di luar border yang mendorong kotak lain menjauh. Selalu transparan.

Di contoh ini setiap lapisan punya warna sendiri: content biru, padding hijau, border gelap, dan area kuning tua di sekeliling kotak yang merupakan margin (digambar oleh elemen pembungkus, karena margin sendiri transparan).

Baris di bawah kotak diukur oleh browser: 160 + 20 + 20 + 10 + 10 = 220px. Margin menambah 24px lagi di setiap sisinya, tetapi margin berada di luar kotak, jadi tidak termasuk dalam 220 itu.

Hitungan lebar: content-box vs border-box

Secara default (box-sizing: content-box), width hanya mengatur content. Padding dan border ditambahkan di atasnya, jadi kotak akhirnya lebih lebar dari angka yang kamu tulis. Dengan box-sizing: border-box, width adalah seluruh kotak, dan content menyusut untuk memberi ruang bagi padding dan border.

content-box (default)border-box
Arti widthContentContent + padding + border
width: 200px; padding: 20px; border: 5pxLebar 250pxLebar 200px
Area content dalam kasus itu200px150px
MarginDi luar, tidak dihitungDi luar, tidak dihitung

Reset border-box

Karena border-box membuat ukuran terjumlah dengan benar, hampir setiap stylesheet modern dimulai dengan aturan ini:

*,
*::before,
*::after {
  box-sizing: border-box;
}

Hal ini paling penting saat memakai persentase. Dua kolom width: 50% dengan padding tidak muat dalam satu baris jika memakai content-box, karena masing-masing lebarnya 50% ditambah padding-nya:

(Komentar HTML menghilangkan spasi di antara kolom inline-block, yang kalau tidak akan menambah beberapa piksel.)

Melihat box model di DevTools

Setiap browser menggambar box model untukmu. Klik kanan sebuah elemen, pilih Inspect, lalu buka tab Computed (Layout di Firefox): sebuah diagram menampilkan ukuran content di tengah, dikelilingi nilai padding, border, dan margin. Mengarahkan kursor ke elemen di panel Elements juga mewarnai halaman: content biru, padding hijau, margin oranye.

Kotak inline mengikuti aturan yang berbeda

Box model di atas menjelaskan kotak block seperti <div> dan <p>. Elemen inline seperti <span>, <a>, dan <strong> mengalir di dalam satu baris teks, dan memperlakukan ruang vertikal secara berbeda:

PropertiPada elemen inline
width, heightDiabaikan
Padding, border, margin horizontalDiterapkan, dan mendorong elemen di sebelahnya ke samping
Padding dan border vertikalDigambar, tetapi tidak mendorong baris di atas dan di bawahnya
Margin vertikalDiabaikan

display: inline-block memberi elemen di dalam baris box model yang lengkap: width, height, padding, dan margin-nya semua memakan ruang. Lihat padding CSS dan margin CSS untuk penjelasan rinci setiap lapisan.

Kesalahan umum

  • Menambahkan padding ke kotak berlebar tetap lalu heran kenapa kotaknya membesar. Dengan content-box, padding dan border ditambahkan ke width. Pakai border-box.
  • Berharap margin ikut berwarna background. Margin selalu transparan; pakai padding untuk ruang yang berwarna.
  • Mengatur height atau margin vertikal pada elemen inline. Tidak terjadi apa-apa; pakai display: inline-block atau block.
  • Lupa memperhitungkan border. Border 1px pada elemen width: 100% membuatnya kelebihan 2px dengan content-box, yang bisa memunculkan scrollbar horizontal.
  • Tertukar antara margin dan padding. Versi singkatnya: padding ada di dalam border, margin di luarnya. Halaman margin vs padding membandingkan keduanya berdampingan.

Pertanyaan yang sering diajukan

Apa itu box model CSS?

Box model adalah aturan bahwa setiap elemen ditampilkan sebagai kotak persegi panjang dengan empat lapisan: content, padding di sekelilingnya, border di sekeliling padding, dan margin di luar border. Lebar, tinggi, dan jarak di CSS semuanya diatur pada lapisan-lapisan ini.

Apa fungsi box-sizing: border-box?

Nilai ini membuat width dan height sudah mencakup padding dan border. Kotak width: 200px dengan padding: 20px dan border 5px jadi tepat 200px lebarnya, dan area content menyusut menjadi 150px agar muat. Nilai default, content-box, menambahkan padding dan border di atasnya, sehingga hasilnya 250px.

Bagaimana cara menghitung lebar total sebuah elemen?

Dengan content-box default: width + padding kiri dan kanan + border kiri dan kanan. Dengan border-box: cukup width. Di kedua kasus, margin berada di luar kotak, jadi ia menambah ruang yang dipakai elemen, bukan lebar elemen itu sendiri.

Apakah margin termasuk bagian dari box model?

Ya, margin adalah lapisan paling luar, tetapi selalu transparan dan tidak pernah dihitung dalam lebar maupun background elemen itu sendiri. Margin hanya mendorong kotak di sekitarnya menjauh.

Perlukah saya mengatur box-sizing: border-box untuk semua elemen?

Kebanyakan proyek melakukannya, dengan *, *::before, *::after { box-sizing: border-box; } di bagian atas stylesheet. Dengan begitu, lebar persentase dan padding terjumlah seperti yang diharapkan orang, dan framework seperti Bootstrap dan Tailwind juga menyertakan reset yang sama.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai