CSS Dasar #3 - Mengenal CSS Reset dan Box Sizing

Setelah memahami sintaks dasar CSS, sekarang saatnya mengenal dua konsep penting yang sering menjadi sumber masalah bagi pemula: CSS Reset dan Box Sizing. Kedua konsep ini membantu kita mengatasi perbedaan default browser dan perilaku perhitungan ukuran elemen.


Masalah: Browser Memiliki Default Style Berbeda

Setiap browser (Chrome, Firefox, Safari, Edge) memiliki style default yang berbeda. Contohnya:

  • Tag <h1> memiliki ukuran font berbeda di setiap browser
  • Tag <ul> dan <ol> memiliki margin dan padding berbeda
  • Tag <body> memiliki margin default

Akibatnya, website yang sama bisa tampil berbeda di browser yang berbeda. Inilah mengapa kita membutuhkan CSS Reset.

Contoh Perbedaan Default Browser:
- Chrome: <body> memiliki margin 8px
- Firefox: <body> juga margin 8px (mirip, tapi beberapa elemen lain berbeda)
- Safari: Margin dan padding beberapa elemen bisa berbeda

Solusi: Gunakan CSS Reset untuk menyamakan style di semua browser.

Apa Itu CSS Reset?

CSS Reset adalah kumpulan aturan CSS yang bertujuan untuk menghilangkan atau menyamakan style default browser. Dengan CSS Reset, kita memulai dari kondisi yang benar-benar kosong (nol) sehingga website akan tampil konsisten di semua browser.

CSS Reset paling sederhana dan paling banyak digunakan:

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

Kode di atas menggunakan selektor universal (*) untuk mereset margin dan padding SEMUA elemen menjadi 0.

Mengapa CSS Reset Penting?
  • Menyamakan tampilan website di semua browser
  • Memudahkan pengaturan layout (tidak ada margin/padding tersembunyi)
  • Menghemat waktu debugging karena tidak perlu mencari margin default browser
  • Memberikan kontrol penuh kepada developer

CSS Reset yang Lebih Lengkap

Selain reset sederhana, ada CSS Reset yang lebih lengkap (dikenal sebagai Normalize.css atau reset dari Eric Meyer). Berikut contoh CSS Reset yang lebih komprehensif:

/* CSS Reset Modern (dikembangkan dari Eric Meyer's Reset) */
*,
*::before,
*::after {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
}

body {
    min-height: 100vh;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
}

img, picture, video, canvas, svg {
    display: block;
    max-width: 100%;
}

input, button, textarea, select {
    font: inherit;
}

p, h1, h2, h3, h4, h5, h6 {
    overflow-wrap: break-word;
}

ul, ol {
    list-style: none;
}

a {
    text-decoration: none;
    color: inherit;
}

button {
    background: none;
    border: none;
    cursor: pointer;
}
Penjelasan Reset Lengkap:
  • *::before, *::after → reset pseudo-element juga
  • scroll-behavior: smooth → scrolling halus
  • min-height: 100vh → body minimal setinggi layar
  • max-width: 100% → gambar tidak overflow
  • font: inherit → form elemen mewarisi font dari parent
  • list-style: none → hilangkan bullet list
  • text-decoration: none → hilangkan garis bawah link

Perbandingan Sebelum dan Sesudah CSS Reset

Tanpa CSS Reset

Heading 1

Paragraf dengan margin default.

  • List item 1
  • List item 2
Box 200px + padding = 220px
Dengan CSS Reset

Heading 1

Paragraf tanpa margin default.

  • List item 1
  • List item 2
Box 200px + padding = 200px (karena box-sizing: border-box)

Apa Itu Box Sizing?

Box sizing adalah properti CSS yang mengatur bagaimana lebar dan tinggi elemen dihitung. Ada dua nilai utama:

Nilai Perilaku Rumus Lebar Total
content-box (default) Width/height hanya untuk konten, padding dan border ditambahkan di luar width + padding + border border-box Width/height sudah termasuk padding dan border width (sudah termasuk padding + border)

Contoh Perbedaan content-box vs border-box:

<style>
    .content-box {
        width: 200px;
        padding: 20px;
        border: 5px solid black;
        box-sizing: content-box;
        background: lightblue;
    }
    .border-box {
        width: 200px;
        padding: 20px;
        border: 5px solid black;
        box-sizing: border-box;
        background: lightgreen;
    }
</style>

<div class="content-box">content-box: lebar total 250px</div>
<div class="border-box">border-box: lebar total 200px</div>
content-box: lebar total 200 + 30 + 6 = 236px
border-box: lebar total 200px (padding dan border di dalam)

Perhatikan perbedaan lebar kedua kotak!

Masalah dengan content-box (default):
Jika Anda mengatur lebar elemen menjadi 200px, lalu menambahkan padding 20px dan border 5px, lebar sebenarnya menjadi 250px! Ini sering menyebabkan layout berantakan dan muncul scrollbar horizontal yang tidak diinginkan.

Solusi: Gunakan box-sizing: border-box agar lebar yang diatur sudah termasuk padding dan border.

Mengapa box-sizing: border-box Sangat Direkomendasikan?

Dengan box-sizing: border-box, hidup menjadi lebih mudah karena:

  • Lebar yang Anda atur benar-benar lebar final elemen
  • Tidak perlu menghitung manual padding dan border
  • Layout lebih prediktif dan tidak mudah berantakan
  • Membuat layout responsif lebih mudah

Karena itu, hampir semua website modern menggunakan:

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

Kode ini menjadi standar wajib di hampir setiap proyek CSS.

Contoh Proyek: Halaman dengan CSS Reset dan Border Box

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Reset dan Box Sizing - Contoh</title>
    <style>
        /* CSS Reset dan Box Sizing */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        /* Styling dasar */
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: #f0f4f8;
            padding: 20px;
        }
        
        .container {
            max-width: 800px;
            margin: 0 auto;
        }
        
        /* Card styling */
        .card {
            background: white;
            border-radius: 16px;
            padding: 25px;
            margin-bottom: 20px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.05);
        }
        
        h1 {
            color: #1e293b;
            margin-bottom: 15px;
        }
        
        p {
            color: #475569;
            line-height: 1.6;
            margin-bottom: 15px;
        }
        
        /* Demo box sizing */
        .demo-box {
            background: #3b82f6;
            color: white;
            text-align: center;
            padding: 15px;
            margin-bottom: 10px;
        }
        
        .grid-2 {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 15px;
            margin-top: 15px;
        }
        
        .info {
            background: #eef2ff;
            padding: 15px;
            border-radius: 10px;
            margin-top: 20px;
        }
        
        .info code {
            background: #e2e8f0;
            padding: 2px 6px;
            border-radius: 4px;
            font-family: monospace;
        }
        
        .info pre {
            background: #1e1e2e;
            color: #fff;
            padding: 12px;
            border-radius: 8px;
            overflow-x: auto;
            margin-top: 10px;
            font-size: 13px;
        }
        
        hr {
            margin: 20px 0;
            border: none;
            border-top: 1px solid #e2e8f0;
        }
    </style>
</head>
<body>

    <div class="container">
        <div class="card">
            <h1>CSS Reset dan Box Sizing</h1>
            <p>Halaman ini menggunakan CSS Reset untuk menghilangkan margin/padding default browser, dan box-sizing: border-box untuk perhitungan lebar yang lebih mudah.</p>
            
            <h2 style="margin: 20px 0 10px 0; color: #1e293b;">Demo Box Sizing</h2>
            <div class="grid-2">
                <div class="demo-box" style="width: 100%;">width: 100%</div>
                <div class="demo-box" style="width: 50%;">width: 50%</div>
                <div class="demo-box" style="width: 200px;">width: 200px</div>
                <div class="demo-box" style="width: 150px;">width: 150px</div>
            </div>
            
            <div class="info">
                <strong>Kode CSS Reset yang Digunakan:</strong>
                <pre>* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}</pre>
                <p style="margin-top: 10px; margin-bottom: 0;">Dengan reset ini, semua elemem dimulai dari kondisi nol (tanpa margin/padding), dan perhitungan lebar menjadi lebih mudah karena padding dan border sudah termasuk dalam width.</p>
            </div>
        </div>
        
        <div class="card">
            <h2>Perbandingan Content-box vs Border-box</h2>
            <p>Dua kotak di bawah memiliki lebar yang sama (200px), tapi hasilnya berbeda:</p>
            
            <div style="background: #fee2e2; padding: 15px; border-radius: 8px; margin: 15px 0;">
                content-box (default)
                <div style="width: 200px; padding: 15px; border: 3px solid #ef4444; box-sizing: content-box; background: #fecaca; margin-top: 8px;">
                    Lebar total = 200 + 30 + 6 = 236px
                </div>
            </div>
            
            <div style="background: #dcfce7; padding: 15px; border-radius: 8px; margin: 15px 0;">
                border-box (direkomendasikan)
                <div style="width: 200px; padding: 15px; border: 3px solid #22c55e; box-sizing: border-box; background: #bbf7d0; margin-top: 8px;">
                    Lebar total = 200px (padding dan border di dalam)
                </div>
            </div>
            
            <p>Dengan border-box, layout menjadi lebih mudah diprediksi dan tidak mudah berantakan.</p>
        </div>
        
        <div class="card">
            <h2>Kesimpulan</h2>
            <ul style="margin-left: 20px; color: #475569;">
                <li>CSS Reset menghilangkan perbedaan default browser</li>
                <li>Reset paling sederhana: * { margin: 0; padding: 0; }</li>
                <li>box-sizing: border-box membuat perhitungan lebar lebih mudah</li>
                <li>Kombinasi keduanya adalah best practice di hampir semua proyek CSS</li>
                <li>Letakkan CSS Reset di paling atas file CSS Anda</li>
            </ul>
        </div>
    </div>

</body>
</html>

Hasil visual halaman demo:

CSS Reset dan Box Sizing

Halaman ini menggunakan CSS Reset untuk menghilangkan margin/padding default browser.

Kode CSS Reset:
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

Perbandingan Content-box vs Border-box

content-box
Lebar total 236px
border-box
Lebar total 200px

Kesalahan Umum Pemula

  • Lupa menambahkan CSS Reset → Website tampil berbeda di browser yang berbeda.
  • Meletakkan CSS Reset di tengah atau akhir file → Letakkan di Paling ATAS agar reset tidak menimpa style lain.
  • Menggunakan box-sizing: border-box hanya pada beberapa elemen → Terapkan ke semua elemen dengan selektor universal (*).
  • Mengira CSS Reset menghilangkan semua style → CSS Reset hanya mereset margin, padding, dan beberapa properti dasar, bukan semua properti CSS.
  • Lupa bahwa * selektor memiliki performa lebih rendah → Untuk website besar, pertimbangkan reset yang lebih spesifik.
Debugging Tips:
  • Buka Developer Tools (F12) → inspect elemen → lihat apakah margin/padding masih ada dari default browser
  • Jika elemen lebih lebar dari yang diharapkan, cek apakah box-sizing sudah border-box
  • Gunakan Computed tab untuk melihat lebar final elemen (termasuk padding dan border)

Latihan Singkat

  1. Buat file HTML baru tanpa CSS Reset, buat heading, paragraf, list, dan div dengan padding
  2. Lihat tampilan di browser, catat margin dan padding default yang muncul
  3. Tambahkan CSS Reset * { margin: 0; padding: 0; } di dalam tag <style>
  4. Lihat perubahannya - semua margin dan padding hilang
  5. Tambahkan box-sizing: border-box ke reset
  6. Buat dua kotak dengan lebar 200px, satu dengan padding 20px, bandingkan lebarnya

Intisari Hari Ini

  • CSS Reset → menyamakan style default browser yang berbeda-beda
  • Reset paling sederhana: * { margin: 0; padding: 0; box-sizing: border-box; }
  • Letakkan CSS Reset di paling atas file CSS Anda
  • content-box (default) → width hanya untuk konten, padding dan border ditambahkan di luar
  • border-box → width sudah termasuk padding dan border
  • border-box adalah best practice dan direkomendasikan untuk semua proyek
  • Kombinasi CSS Reset dan border-box menghemat waktu debugging layout
Tantangan: Buat sebuah halaman layout 2 kolom (sidebar dan konten utama) yang menggunakan CSS Reset dan box-sizing: border-box! Persyaratan:
  • Gunakan CSS Reset lengkap (minimal margin, padding, box-sizing)
  • Sidebar lebar 250px, konten utama mengisi sisa ruang (gunakan flexbox atau grid)
  • Sidebar dan konten utama memiliki padding 20px dan border 1px
  • Pastikan lebar total sidebar tetap 250px (tidak berubah karena padding/border)
  • Tambahkan header dan footer
  • Di bagian bawah halaman, tuliskan penjelasan mengapa box-sizing: border-box sangat membantu dalam layout ini

Selamat mencoba!

Artikel Sebelumnya: CSS Dasar #2 - Sintaks Dasar CSS: Selektor, Properti, dan Nilai
Artikel Selanjutnya: CSS Dasar #4 - Selektor Dasar: Tag, Class, dan ID (Review + Contoh Praktis)

Lebih baru Lebih lama

نموذج الاتصال