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.
- 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.
- 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;
}
*::before, *::after→ reset pseudo-element jugascroll-behavior: smooth→ scrolling halusmin-height: 100vh→ body minimal setinggi layarmax-width: 100%→ gambar tidak overflowfont: inherit→ form elemen mewarisi font dari parentlist-style: none→ hilangkan bullet listtext-decoration: none→ hilangkan garis bawah link
Perbandingan Sebelum dan Sesudah CSS Reset
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>
Perhatikan perbedaan lebar kedua kotak!
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:
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-boxhanya 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.
- 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-sizingsudahborder-box - Gunakan Computed tab untuk melihat lebar final elemen (termasuk padding dan border)
Latihan Singkat
- Buat file HTML baru tanpa CSS Reset, buat heading, paragraf, list, dan div dengan padding
- Lihat tampilan di browser, catat margin dan padding default yang muncul
- Tambahkan CSS Reset
* { margin: 0; padding: 0; }di dalam tag <style> - Lihat perubahannya - semua margin dan padding hilang
- Tambahkan
box-sizing: border-boxke reset - 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
- 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)
