BAB 11: Margin CSS
Mengatur jarak luar elemen menggunakan properti margin — dari shorthand, nilai auto untuk centering, hingga fenomena margin collapse yang sering membingungkan.
Margin sudah berjalan dengan baik di bab sebelumnya — border yang kita pelajari di Bab 10 memberi batas visual yang tegas pada elemen. Tapi border sendirian tidak cukup: ketika elemen-elemen berjejer, mereka butuh ruang antar satu sama lain. Di situlah margin berperan, mengatur jarak di luar setiap elemen agar tata letak halaman terasa lapang dan terorganisir.
Margin bekerja dari sisi luar elemen, mendorong elemen lain menjauh. Ini berbeda dengan padding yang bekerja dari dalam — tapi keduanya saling melengkapi. Memahami margin adalah separuh perjalanan memahami ruang di CSS.
Properti Margin per Sisi
Seperti border-width, margin bisa diatur per sisi menggunakan properti individual. Masing-masing properti menerima nilai dalam berbagai satuan CSS.
/* profil.css */
.kartu-proyek {
margin-top: 24px;
margin-right: 16px;
margin-bottom: 24px;
margin-left: 16px;
}
Satuan yang bisa digunakan antara lain px untuk nilai tetap, em untuk nilai relatif terhadap ukuran font elemen, dan % untuk nilai relatif terhadap lebar elemen induk. Satu aturan penting: margin tidak menerima nilai negatif dalam arti yang sama seperti padding — tapi margin negatif memang valid dan berguna untuk kasus tertentu seperti menarik elemen lebih dekat dari posisi normalnya.
Shorthand Margin
Daripada menulis keempat properti secara terpisah, gunakan shorthand margin dengan pola yang sama seperti border-width:
/* profil.css */
/* 1 nilai: semua sisi sama */
.judul-section {
margin: 24px;
}
/* 2 nilai: atas-bawah | kiri-kanan */
.kartu-artikel {
margin: 16px 24px;
}
/* 3 nilai: atas | kiri-kanan | bawah */
.panel-info {
margin: 8px 16px 24px;
}
/* 4 nilai: atas | kanan | bawah | kiri (searah jarum jam) */
.blok-kode {
margin: 8px 0 24px 16px;
}
Pola 4 nilai adalah yang paling eksplisit — urutan searah jarum jam mulai dari atas ini konsisten dengan banyak properti CSS lain yang sudah kita pelajari.
Margin Auto untuk Centering
Salah satu penggunaan margin yang paling sering adalah memusatkan elemen secara horizontal menggunakan margin: auto. Nilai auto di sisi kiri dan kanan akan membagi ruang kosong secara merata, sehingga elemen terdorong ke tengah.
/* profil.css */
.container-konten {
width: 800px;
margin: 0 auto; /* atas-bawah: 0, kiri-kanan: otomatis = tengah */
}
margin: auto hanya bekerja untuk elemen block yang memiliki lebar (width) yang ditetapkan secara eksplisit. Elemen yang lebarnya penuh (100%) tidak memiliki ruang kosong di sisi kiri dan kanan, sehingga auto tidak menghasilkan efek centering.
Margin Collapse
Ini adalah perilaku CSS yang paling sering membingungkan pemula: ketika dua elemen block berurutan secara vertikal, margin bawah elemen pertama dan margin atas elemen kedua tidak dijumlahkan — melainkan digabungkan (collapsed) menjadi nilai yang lebih besar dari keduanya.
/* profil.css */
.judul-artikel {
margin-bottom: 24px;
}
.paragraf-pertama {
margin-top: 16px;
}
/* Jarak aktual antara keduanya: 24px, bukan 40px */
Margin collapse terjadi antara elemen block bersaudara secara vertikal, antara elemen induk dan anak pertama/terakhirnya (jika tidak ada border, padding, atau konten yang memisahkan mereka), dan pada elemen yang tidak memiliki konten, border, atau padding sama sekali.
Margin collapse hanya terjadi secara vertikal. Margin horizontal tidak pernah collapse. Selain itu, margin collapse tidak terjadi pada elemen flex atau grid — perilaku ini eksklusif untuk elemen block dalam alur normal.
Cara Menghindari Margin Collapse
Ketika margin collapse menghasilkan jarak yang tidak diinginkan, ada beberapa teknik untuk mencegahnya:
/* profil.css */
/* tambahkan padding kecil di elemen induk */
.wrapper-artikel {
padding-top: 1px; /* mencegah collapse dengan anak pertama */
}
/* atau gunakan border */
.wrapper-artikel {
border-top: 1px solid transparent;
}
Teknik paling bersih di CSS modern adalah menggunakan Flexbox atau Grid pada elemen induk — keduanya menonaktifkan margin collapse sepenuhnya.
Latihan
Buka file profil.css dari proyek portofolio yang sudah kita kerjakan bersama:
-
Terapkan
margin: 0 autopada.container-kontendengan lebar 700px. Amati bagaimana elemen tersebut terpusat di halaman. -
Buat dua paragraf berurutan, masing-masing dengan
margin-bottom: 32pxdanmargin-top: 20px. Gunakan DevTools browser untuk mengukur jarak aktual di antara keduanya — apakah 52px atau 32px? -
Coba tambahkan
padding-top: 1pxpada elemen induk kedua paragraf tersebut, lalu ukur kembali jaraknya. Amati bagaimana collapse berubah.
Margin mengatur jarak di luar elemen. Tapi ada sisi lain dari ruang yang sama pentingnya: jarak di dalam elemen, antara kontennya dan batasnya. Itu yang akan kita bahas berikutnya — padding, pasangan margin yang bekerja dari dalam.