Langkau ke kandungan
WANCODE
EN

Box Model: Padding, Border dan Margin

15 minitPemulaHTML · CSS · JS

Dalam pelajaran ini

  • Namakan empat lapisan setiap kotak: content, padding, border dan margin
  • Guna padding untuk ruang di dalam kotak dan margin untuk ruang di antara kotak
  • Kira lebar sebenar sesuatu elemen, dan guna box-sizing: border-box supaya kiraannya mudah

Idea utama

Bagi pelayar, setiap elemen ialah segi empat yang terdiri daripada empat lapisan. Bila anda nampak lapisan-lapisan ini, susun jarak tak lagi main teka.

Tajuk, perenggan, gambar, butang — pelayar melukis setiap satunya sebagai kotak. Setiap kotak ada empat lapisan yang sama, dari dalam ke luar:

content
Teks atau gambar itu sendiri. width dan height menetapkan bahagian ini (secara default).
padding
Ruang di dalam kotak, antara content dan border. Ia menunjukkan warna latar belakang kotak.
border
Garisan di sekeliling padding. Ia ada ketebalan, gaya (solid, dashed…) dan warna.
margin
Ruang di luar border yang menolak kotak lain menjauh. Sentiasa lut sinar (transparent).
Seret slider dan perhatikan lebar di skrin berubah. Kemudian tandakan border-box dan seret sekali lagi.

Padding lawan margin

Tanya diri anda satu soalan: patutkah ruang ini ada warna latar kotak? Kalau ya, itu padding (ruang bernafas di dalam kad). Kalau tidak, itu margin (jarak antara dua kad).

style.css
.card {
  padding: 24px;              /* all four sides */
  border: 2px solid #d9cfb8;  /* width, style, colour */
  margin-bottom: 24px;        /* gap below the card */
}

/* Shorthands go clockwise: top right bottom left */
.tag {
  padding: 4px 12px;          /* top+bottom 4px, left+right 12px */
  margin: 0 0 8px 0;          /* only a bottom margin */
}

Tengahkan blok dengan margin auto

Blok yang ada width tetap boleh ditengahkan dengan margin-left: auto dan margin-right: auto — atau ringkasnya margin: 0 auto. Pelayar bahagikan ruang yang tinggal sama rata di kedua-dua belah.

Perangkap kiraan lebar

Secara default (box-sizing: content-box), width hanya menetapkan content. Padding dan border ditambah di atasnya. Jadi kad ini sebenarnya bukan 300px lebar di skrin:

content-box (default): 300 + 24 + 24 + 2 + 2 = 352px

CSS
.card {
  width: 300px;
  padding: 24px;
  border: 2px solid;
}
/* on screen: 352px wide */

border-box: tepat 300px, padding muat di dalam

CSS
.card {
  box-sizing: border-box;
  width: 300px;
  padding: 24px;
  border: 2px solid;
}
/* on screen: 300px wide */

Dengan border-box, lebar yang anda tulis ialah lebar yang anda dapat. Ruang content mengecil untuk beri tempat.

Sebab itulah hampir setiap stylesheet profesional bermula dengan reset kecil ini, supaya semua elemen guna border-box:

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

Margin menegak boleh 'bergabung'

Bila dua blok bertindan, margin bawah blok pertama dan margin atas blok kedua tidak dicampur — yang lebih besar menang. 24px + 16px memberi jarak 24px, bukan 40px. Ini memang perangai biasa CSS (dipanggil margin collapsing), bukan bug dalam kod anda.

Dalam pelayar sebenar, klik kanan mana-mana elemen → Inspect. DevTools melukis rajah empat lapisan yang sama dengan nilai piksel sebenar. Inilah cara paling cepat untuk debug masalah jarak.

Kad menu ini terhimpit. Dalam style.css, kemas kini peraturan .card:

1. Tambah padding sekurang-kurangnya 16px pada setiap sisi. 2. Tambah border yang boleh dilihat (contohnya 2px solid #d9cfb8). 3. Tambah margin supaya ada jarak sekurang-kurangnya 16px antara dua kad itu.

Semakan

  • Setiap kad ada padding sekurang-kurangnya 16px di semua sisi
  • Setiap kad ada border yang kelihatan
  • Ada jarak sekurang-kurangnya 16px antara dua kad

Uji kefahaman

Q1

Sebuah kotak ada width: 200px; padding: 20px; border: 2px solid; dan content-box (default). Berapa lebarnya di skrin?

Q2

Lapisan mana yang berada di luar border dan tidak pernah menunjukkan warna latar kotak?

Q3

Dengan box-sizing: border-box; width: 200px; padding: 20px; (tiada border), berapa lebar ruang content?

Apa yang anda pelajari

  • Setiap elemen ialah kotak: content → padding → border → margin.
  • Padding ialah ruang di dalam (menunjukkan latar); margin ialah ruang di luar (lut sinar).
  • margin: 0 auto menengahkan blok yang ada lebar.
  • box-sizing: border-box menjadikan width bermaksud lebar penuh di skrin — gunakannya di mana-mana.
Pratonton

Output konsol daripada kod anda akan dipaparkan di sini.

Langkah 1 daripada 3