CSS

CSS Margins: Panduan Lengkap Spacing di Luar Element

  • Senin, 20 Oktober 2025
  • Dibaca 90x views
CSS Margins: Panduan Lengkap Spacing di Luar Element belajar css lengkap tentang css margin

Hai kawan Maya! Margin adalah salah satu properti terpenting dalam CSS untuk mengatur spacing. Bedanya dengan padding? Margin adalah ruang DI LUAR element, sedangkan padding adalah ruang di dalam!

Di artikel ini kita akan belajar semua tentang CSS margins, termasuk fenomena misterius bernama margin collapse. Let’s dive in!

Apa Itu Margin?

Margin adalah ruang kosong di luar border element. Margin membuat jarak antara element dengan element lain di sekitarnya.

┌─────────────────────┐
│     MARGIN          │  ← Ruang di luar
│  ┌───────────────┐  │
│  │   BORDER      │  │
│  │ ┌───────────┐ │  │
│  │ │  PADDING  │ │  │
│  │ │ ┌───────┐ │ │  │
│  │ │ │Content│ │ │  │
│  │ │ └───────┘ │ │  │
│  │ └───────────┘ │  │
│  └───────────────┘  │
└─────────────────────┘

CSS Margin Properties

Ada 5 properti untuk margin:

  1. margin-top – Margin atas
  2. margin-right – Margin kanan
  3. margin-bottom – Margin bawah
  4. margin-left – Margin kiri
  5. margin – Shorthand untuk semua

Individual Margin Properties

.box {
    margin-top: 20px;
    margin-right: 15px;
    margin-bottom: 25px;
    margin-left: 10px;
}

Nilai yang Bisa Digunakan

/* Pixels */
margin-top: 20px;

/* Em units */
margin-top: 1.5em;

/* Rem units */
margin-top: 2rem;

/* Percentages (relative ke parent width) */
margin-top: 5%;

/* Auto */
margin-left: auto;

/* Zero (no unit needed) */
margin: 0;

/* Negative values */
margin-top: -10px;

Margin Shorthand – Super Efisien!

Property margin bisa set 1, 2, 3, atau 4 values sekaligus!

1 Value – All Sides

.box {
    margin: 20px;
    /* Sama dengan:
       margin-top: 20px;
       margin-right: 20px;
       margin-bottom: 20px;
       margin-left: 20px;
    */
}

2 Values – Vertical & Horizontal

.box {
    margin: 20px 40px;
    /* top+bottom: 20px, left+right: 40px */
    
    /* Sama dengan:
       margin-top: 20px;
       margin-bottom: 20px;
       margin-left: 40px;
       margin-right: 40px;
    */
}

3 Values – Top, Horizontal, Bottom

.box {
    margin: 10px 20px 30px;
    /* top: 10px, left+right: 20px, bottom: 30px */
    
    /* Sama dengan:
       margin-top: 10px;
       margin-left: 20px;
       margin-right: 20px;
       margin-bottom: 30px;
    */
}

4 Values – Clockwise (Top Right Bottom Left)

.box {
    margin: 10px 20px 30px 40px;
    /* top: 10px, right: 20px, bottom: 30px, left: 40px */
}

Tip Mengingat: Urutan searah jarum jam, mulai dari TOP!

    TOP
     ↑
LEFT ← → RIGHT
     ↓
   BOTTOM

Margin Auto – Horizontal Centering

Keyword auto sangat berguna untuk centering horizontal!

.container {
    width: 800px;
    margin: 0 auto;
    /* top+bottom: 0, left+right: auto (centered!) */
}

.card {
    width: 300px;
    margin-left: auto;
    margin-right: auto;
    /* Sama hasilnya - centered */
}

PENTING:

  • margin: auto works untuk horizontal centering
  • margin: auto TIDAK works untuk vertical centering

Negative Margins – Advanced Trick!

Margin bisa pakai nilai negatif untuk pull element closer atau overlap!

/* Pull element up */
.header {
    margin-top: -20px;
}

/* Pull element left */
.sidebar {
    margin-left: -15px;
}

/* Overlap elements */
.overlap {
    position: relative;
    margin-top: -50px;
    /* Element ini akan overlap dengan element di atasnya */
}

Contoh Praktis: Negative Margin

.hero {
    background-color: #3498db;
    padding: 60px 20px;
}

.content-card {
    background-color: white;
    border-radius: 8px;
    padding: 30px;
    margin-top: -40px; /* Pull up ke dalam hero section */
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

Margin Collapse – Fenomena Misterius!

Ini adalah salah satu quirk paling confusing di CSS. Margin collapse terjadi ketika vertical margins bertemu dan “bergabung” jadi satu!

Apa Itu Margin Collapse?

Ketika dua vertical margins (top/bottom) bertemu, browser akan menggunakan margin yang lebih besar, bukan menjumlahkannya.

.box1 {
    margin-bottom: 30px;
}

.box2 {
    margin-top: 50px;
}

/* Expected: 30px + 50px = 80px gap
   Reality: 50px gap only! (yang lebih besar menang) */

Rules of Margin Collapse

1. Hanya Vertical Margins

/* ✅ COLLAPSE - vertical margins */
.box {
    margin-top: 20px;
    margin-bottom: 20px;
}

/* ❌ NO COLLAPSE - horizontal margins */
.box {
    margin-left: 20px;
    margin-right: 20px;
}

2. Adjacent Siblings

<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
.box1 {
    margin-bottom: 40px;
}

.box2 {
    margin-top: 30px;
}

/* Gap between them: 40px (bukan 70px!) */

3. Parent-Child Collapse

<div class="parent">
    <div class="child">Child</div>
</div>
.parent {
    background-color: lightblue;
    /* No padding or border */
}

.child {
    margin-top: 50px;
    /* Margin ini akan "collapse" ke parent! */
}

Child’s margin akan “keluar” dari parent dan apply ke parent itu sendiri!

4. Empty Blocks

.empty-box {
    margin-top: 30px;
    margin-bottom: 20px;
    /* Jika box kosong (no height, no padding, no border)
       maka 30px dan 20px akan collapse jadi 30px */
}

Cara Prevent Margin Collapse

Ada beberapa cara untuk prevent collapse:

1. Padding atau Border

.parent {
    padding-top: 1px; /* Prevent collapse */
    /* atau */
    border-top: 1px solid transparent;
}

2. Overflow

.parent {
    overflow: hidden; /* atau auto */
}

3. Display Flexbox atau Grid

.parent {
    display: flex;
    flex-direction: column;
    /* Margins dalam flexbox TIDAK collapse! */
}

.parent-grid {
    display: grid;
    /* Margins dalam grid juga TIDAK collapse! */
}

4. Position atau Float

.box {
    position: absolute;
    /* atau */
    float: left;
    /* Margin tidak collapse */
}

Negative Margin Collapse

Negative margins juga collapse, tapi dengan rules berbeda!

.box1 {
    margin-bottom: -20px;
}

.box2 {
    margin-top: -30px;
}

/* Result: -30px (yang lebih negative menang) */

Positive + Negative:

.box1 {
    margin-bottom: 40px;
}

.box2 {
    margin-top: -20px;
}

/* Result: 40px + (-20px) = 20px */

Percentage Margins

Margin dengan percentage selalu relative ke WIDTH parent, even untuk top/bottom!

.container {
    width: 400px;
}

.box {
    margin: 10%; /* 10% of 400px = 40px on ALL sides */
}

Tricky: Bahkan margin-top: 10% dihitung dari width, bukan height!

Praktis: Common Patterns

1. Card Spacing

.card {
    background-color: white;
    border-radius: 8px;
    padding: 20px;
    margin-bottom: 20px; /* Space between cards */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

2. Section Spacing

section {
    margin: 60px 0; /* Vertical spacing between sections */
}

section:first-child {
    margin-top: 0; /* No margin on first section */
}

section:last-child {
    margin-bottom: 0; /* No margin on last section */
}

3. Centered Container

.container {
    width: 90%;
    max-width: 1200px;
    margin: 0 auto; /* Centered horizontally */
    padding: 20px;
}

4. Text Spacing

p {
    margin-bottom: 1em; /* Space between paragraphs */
}

h2 {
    margin-top: 2em;
    margin-bottom: 1em;
}

5. List Reset

ul, ol {
    margin: 0;
    padding: 0;
    list-style: none;
}

Margin vs Padding – Kapan Pakai Apa?

Gunakan MARGIN untuk:

  • ✅ Space between elements
  • ✅ Centering elements horizontally
  • ✅ Push elements away from each other

Gunakan PADDING untuk:

  • ✅ Space inside element
  • ✅ Increase clickable area
  • ✅ Space between border and content
/* MARGIN - space outside */
.card {
    margin: 20px; /* Space around card */
}

/* PADDING - space inside */
.card {
    padding: 20px; /* Space inside card */
}

Reset CSS – Remove Default Margins

Browser punya default margins. Banyak developer reset ini:

/* Universal reset */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* Specific reset */
body, h1, h2, h3, h4, h5, h6, p, ul, ol {
    margin: 0;
    padding: 0;
}

Responsive Margins

.section {
    margin: 40px 20px;
}

@media (min-width: 768px) {
    .section {
        margin: 60px 40px;
    }
}

@media (min-width: 1024px) {
    .section {
        margin: 80px auto;
        max-width: 1200px;
    }
}

Browser DevTools – Debugging Margins

Cara lihat margins:

  1. Inspect element (F12)
  2. Lihat Box Model diagram
  3. Orange area = Margin
  4. Green area = Padding
  5. Blue area = Content

Common Mistakes

❌ Margin Auto untuk Vertical Centering

/* TIDAK BEKERJA! */
.box {
    height: 100px;
    margin-top: auto;
    margin-bottom: auto;
}

/* Gunakan ini instead: */
.parent {
    display: flex;
    align-items: center; /* Vertical center */
}

❌ Lupa Width saat Margin Auto

/* TIDAK BEKERJA - no width! */
.box {
    margin: 0 auto;
}

/* BEKERJA - with width */
.box {
    width: 80%;
    margin: 0 auto;
}

❌ Margin pada Inline Elements

/* Vertical margin TIDAK BEKERJA pada inline elements! */
span {
    margin-top: 20px; /* No effect */
    margin-bottom: 20px; /* No effect */
}

/* Horizontal margin works */
span {
    margin-left: 10px; /* Works! */
    margin-right: 10px; /* Works! */
}

/* Solution: change display */
span {
    display: inline-block;
    margin: 20px; /* Now works! */
}

Tips & Best Practices

1. Consistent Spacing Scale

:root {
    --space-xs: 0.5rem;   /* 8px */
    --space-sm: 1rem;     /* 16px */
    --space-md: 1.5rem;   /* 24px */
    --space-lg: 2rem;     /* 32px */
    --space-xl: 3rem;     /* 48px */
}

.card {
    margin-bottom: var(--space-md);
}

2. Prefer One Direction

/* GOOD - consistent direction */
h2 { margin-bottom: 1em; }
p { margin-bottom: 1em; }

/* AVOID - mixing directions can cause collapse issues */
h2 { margin-bottom: 1em; }
p { margin-top: 1em; }

3. Use Flexbox Gap

/* Modern approach - no margin collapse! */
.container {
    display: flex;
    flex-direction: column;
    gap: 20px; /* Space between items */
}

Kesimpulan

CSS Margins adalah fundamental spacing tool! Key points:

  1. margin creates space outside element
  2. 4 individual properties: top, right, bottom, left
  3. Shorthand: 1-4 values (clockwise from top)
  4. auto for horizontal centering (with width)
  5. Negative margins for overlapping
  6. Margin collapse – vertical margins merge (confusing!)
  7. Prevent collapse: padding, border, flexbox, grid
  8. Use margin between elements, padding inside

Master margins dan kawan Maya bisa kontrol spacing dengan sempurna!

Ditulis oleh: Maya
Maya
Maya adalah tokoh hayalan, hanya tampaknya ada, tetapi nyatanya tidak ada, tokoh Maya dibangun untuk lebih mendekatkan karyamaya pada kalian.

ads by Google