Margin — CSS

Coba antri di kasir minimarket. Ada orang yang berdiri 1 meter di belakang kamu (santai), ada yang nyomot 30cm di belakang (gak nyaman), ada juga yang…

Margin adalah ruang kosong di luar garis tepi (border) sebuah elemen. Fungsinya bikin jarak antara elemen itu dan elemen di sekitarnya. Kayak jarak antre di kasir: badan kamu gak jadi lebih besar, kamu cuma berdiri lebih jauh dari orang lain.

🧪 Tebakan cepat: paragraf atas punya margin-bottom: 30px, paragraf bawah punya margin-top: 20px. Jarak di antara keduanya 50px? Tebak dulu, jawabannya ada di bagian "Dua margin yang bertemu".

Jarak di satu sisi

<h1>Judul</h1>
<p>Paragraf</p>

<style>
p {
  margin-top: 20px;
}
</style>

Hasilnya, paragraf turun 20px menjauh dari judul. Sisi lainnya punya properti sendiri: margin-right, margin-bottom dan margin-left.

Selector-nya harus menunjuk elemen yang mau digeser. h1 > p artinya "<p> yang ada di dalam <h1>". Di contoh ini gak ada <p> di dalam <h1>, jadi aturan itu gak kena elemen apa pun.

Empat sisi dalam satu baris

Properti margin saja bisa mengatur empat sisi sekaligus. Jumlah nilainya menentukan artinya:

.a { margin: 40px; }                 /* semua sisi 40px */
.a { margin: 40px 32px; }            /* atas-bawah 40px, kanan-kiri 32px */
.a { margin: 40px 32px 24px; }       /* atas, kanan-kiri, bawah */
.a { margin: 40px 32px 24px 16px; }  /* atas, kanan, bawah, kiri */

Empat nilai dibaca searah jarum jam, mulai dari atas. Jadi margin: 20px sama dengan margin-top: 20px plus tiga sisi lainnya.

Angkanya selalu butuh satuan: 20px, bukan 20. Angka tanpa satuan gak dimengerti CSS, jadi barisnya dibuang. Cuma 0 yang boleh tanpa satuan.

Ke tengah dengan auto, dan margin negatif

.kartu {
  width: 300px;
  margin: 0 auto;
}

margin: 0 auto artinya atas-bawah 0, kanan-kiri auto. Browser membagi sisa ruang kiri dan kanan sama rata, jadi kotaknya pas di tengah. Syaratnya, elemennya punya width yang lebih kecil dari induknya.

Margin juga boleh negatif, misalnya margin-top: -10px. Elemennya ditarik ke arah sebaliknya, jadi mendekat atau menimpa tetangganya. Padding gak bisa begitu, padding gak boleh negatif.

Dua margin yang bertemu

.atas  { margin-bottom: 30px; }
.bawah { margin-top: 20px; }

Jaraknya bukan 50px, tapi 30px. Kalau margin bawah satu elemen bertemu margin atas elemen di bawahnya, browser gak menjumlahkan keduanya, yang dipakai cuma yang paling besar. Namanya margin collapse. Ini cuma terjadi ke atas-bawah, gak ke samping. Di dalam induk display: flex atau display: grid, margin gak collapse, jadi jaraknya beneran 50px.

⚠️ Jebakan yang sering ketemu

TL;DR: Margin adalah jarak di luar border. Pakai margin-top, margin-right, margin-bottom, margin-left buat satu sisi, atau margin dengan satu sampai empat nilai (searah jarum jam dari atas). Nilainya butuh satuan, misalnya 20px. margin: 0 auto menaruh kotak yang punya width di tengah, margin negatif menarik elemen ke arah sebaliknya, dan dua margin atas-bawah yang bertemu gak dijumlah: yang paling besar yang dipakai.

Yang akan kamu pelajari