Perbedaannya dalam satu gambar
Padding ada di dalam border. Margin ada di luarnya. Kedua kotak di bawah punya isi yang sama dan nilai 24px yang sama, hanya property-nya yang berbeda. Warna abu-abu adalah container di belakangnya.
Dengan padding, 24px itu berwarna biru: ruang itu bagian dari kotak, berada di dalam border, dan kotaknya membesar. Dengan margin, 24px itu berwarna abu-abu: kotaknya tetap rapat di sekitar teks, dan ruang di luarnya mendorong tepi container menjauh.
Coba keduanya pada satu kotak
Geser kedua slider. Padding memperbesar kotak biru, sedangkan margin menjauhkan kotak dari tepi abu-abu tanpa mengubah kotaknya.
Perhatikan baris ukurannya: nilainya berubah saat kamu menggeser slider padding dan tetap sama saat kamu menggeser slider margin.
Margin vs padding secara ringkas
| Padding | Margin | |
|---|---|---|
| Letak | Di dalam border | Di luar border |
| Background | Menampilkan background elemen | Selalu transparan |
| Bagian dari area klik | Ya | Tidak |
| Menambah ukuran elemen | Ya, dengan content-box | Tidak |
Bisa auto | Tidak | Ya (margin: 0 auto menengahkan) |
| Bisa negatif | Tidak | Ya |
| Nilai vertikal menyatu | Tidak pernah | Ya, margin vertikal yang bersebelahan menyatu |
| Persentase relatif terhadap | Lebar containing block | Lebar containing block |
| Penggunaan umum | Ruang di dalam tombol, kartu, input | Jarak antar elemen, menengahkan |
Setiap property punya halamannya sendiri dengan semua detailnya: CSS padding dan CSS margin.
Mana yang dipakai
Ajukan satu pertanyaan: apakah ruang itu milik elemennya, atau berada di antara elemen?
- Ruang di sekitar label tombol, bagian dalam kartu, jarak antara teks input dan border-nya: padding. Padding ikut memakai background dan memperbesar area sasaran.
- Jarak antara dua paragraf, antar kartu, di sekitar sebuah bagian: margin, atau
gapkalau elemen induknya adalah container flex atau grid.
Area klik adalah tempat pilihan ini paling berpengaruh. Kedua link di bawah memakan ruang yang sama di halaman, tetapi ruang link pertama adalah padding, sedangkan ruang link kedua adalah margin. Hanya link pertama yang mudah diklik:
Garis putus-putus berwarna kuning adalah tepi elemen, yaitu area yang merespons klik dan ketukan. Margin di sekitar link kedua hanyalah ruang kosong yang tidak berfungsi apa-apa.
Jarak antar item: margin atau gap
Untuk deretan atau grid item, gap pada elemen induk flex atau grid biasanya lebih rapi daripada margin di setiap child: jaraknya hanya ada di antara item, tidak pernah sebelum item pertama atau setelah item terakhir, jadi tidak ada yang perlu dibatalkan.
Di sini container abu-abu memakai padding (ruang di dalamnya, abu-abu), item memakai padding (ruang di dalam setiap item, hijau), dan gap mengatur jarak di antara item.
Kesalahan yang sering terjadi
- Memakai margin untuk ruang yang seharusnya berwarna. Margin itu transparan. Kalau ruangnya harus menampilkan background, berarti itu padding.
- Memakai margin untuk memperbesar link. Area klik berakhir di border, jadi pakai padding.
- Mengira dua margin vertikal 20px menghasilkan 40px. Margin vertikal yang bersebelahan menyatu menjadi 20px. Padding tidak pernah menyatu.
- Mencoba
padding: autountuk menengahkan. Hanya margin yang menerimaauto. - Lupa bahwa padding memperbesar kotak. Tambahkan
box-sizing: border-boxagarwidthsudah termasuk padding.
Pertanyaan yang sering diajukan
Apa perbedaan margin dan padding?
Padding adalah ruang di antara isi elemen dan border-nya, di dalam elemen. Margin adalah ruang di luar border, di antara elemen dan elemen di sekitarnya. Padding menampilkan background elemen, sedangkan margin selalu transparan.
Kapan sebaiknya memakai padding, bukan margin?
Pakai padding untuk ruang yang menjadi bagian dari elemen: ruang di sekitar teks tombol, bagian dalam kartu, atau apa pun yang harus ikut memakai background atau bisa diklik. Pakai margin (atau gap di flex dan grid) untuk jarak antar elemen yang terpisah.
Apakah padding atau margin memperbesar ukuran elemen?
Padding memperbesarnya, dengan box-sizing: content-box yang merupakan default: padding ditambahkan ke lebar dan tinggi. Margin tidak pernah ditambahkan ke ukuran elemen, margin menambah ruang di sekitarnya (blok dengan width: auto malah menjadi lebih sempit, karena margin-nya mengambil sebagian lebar yang tersedia). Dengan box-sizing: border-box, padding justru diambil dari bagian dalam lebar.
Apakah padding bisa negatif seperti margin?
Tidak bisa. Padding negatif tidak valid dan diabaikan, sedangkan margin negatif diperbolehkan dan bisa membuat elemen saling tumpang tindih. Padding juga tidak bisa bernilai auto, itulah sebabnya menengahkan elemen memakai margin: 0 auto.