BAB 7: Error CSS
Memahami bagaimana browser menangani error CSS dan cara mendebugnya.
Di bab sebelumnya kita belajar menonaktifkan rule dengan komentar — teknik debugging paling sederhana yang ada di CSS. Tapi komentar hanya berguna ketika kamu tahu kode mana yang bermasalah. Bagaimana kalau gaya yang kamu tulis sama sekali tidak tampak, dan kamu tidak tahu mengapa?
Inilah yang membuat CSS berbeda dari JavaScript. JavaScript akan melempar error ke konsol dan menghentikan eksekusi. CSS tidak melakukan itu — browser diam-diam mengabaikan kode yang tidak valid dan melanjutkan parsing sisanya. Diam ini bisa membingungkan, tapi ada logika di baliknya.
Kenapa Browser Tidak Melempar Error
Filosofi CSS adalah graceful degradation — browser dirancang untuk tetap berjalan sekalipun ada bagian kode yang tidak dipahami. Kalau browser berhenti memproses seluruh stylesheet hanya karena satu nilai yang salah ketik, halaman web akan hancur total hanya karena kesalahan kecil.
Perilaku diam ini juga memungkinkan fitur CSS baru berjalan di browser modern tanpa merusak browser lama. Browser lama cukup mengabaikan properti yang tidak dikenal dan meneruskan ke deklarasi berikutnya.
Inilah kenapa teknik progressive enhancement di CSS bisa bekerja: tulis fallback terlebih dahulu, lalu tambahkan properti baru di baris berikutnya. Browser lama mengabaikan yang baru; browser modern menimpa yang lama.
Empat Kesalahan yang Paling Sering Terjadi
Browser tidak memilih-milih dalam hal error — semua jenis kesalahan sintaks diperlakukan dengan cara yang sama: diabaikan. Namun apa yang diabaikan bergantung pada di mana kesalahan itu terjadi.
Titik Koma yang Hilang
Ini adalah penyebab error paling umum. Ketika browser menemukan baris tanpa ;, ia terus membaca ke depan sampai menemukan titik koma berikutnya — dan semua teks di antara keduanya dianggap bagian dari satu nilai yang panjang. Hasilnya: dua deklarasi sekaligus menjadi tidak valid.
/* portofolio.css */
.judul {
color: #1a2744 /* <- titik koma hilang di sini */
font-size: 2rem; /* baris ini ikut diabaikan */
line-height: 1.3; /* baris ini valid, dijalankan */
}
Browser membaca #1a2744 font-size: 2rem sebagai satu nilai untuk color — yang tentu saja tidak valid. Karena tidak valid, kedua deklarasi itu dibuang. line-height selamat karena sudah melewati titik koma yang ada.
Nama Properti Tidak Valid
Salah ketik nama properti menghasilkan kegagalan yang sama senyapnya:
/* portofolio.css */
.bio {
colour: #4b5563; /* salah ketik — 'colour' bukan properti CSS */
max-width: 60ch; /* valid, dijalankan */
}
Browser tidak mengenal colour sebagai properti yang sah, sehingga satu deklarasi itu dibuang. Deklarasi lain di dalam blok yang sama tetap dijalankan karena error di CSS memiliki scope yang terbatas.
Nilai Tidak Valid
Propertinya benar, tapi nilainya salah format:
/* portofolio.css */
.kartu-proyek {
width: -200px; /* lebar negatif tidak valid */
background-color: 45deg; /* sudut bukan warna */
border-radius: 8px; /* valid, dijalankan */
}
-200px dan 45deg tidak memenuhi tipe nilai yang diharapkan oleh masing-masing properti. Keduanya diabaikan secara individual — border-radius di bawahnya tidak terpengaruh sama sekali.
Kurung Kurawal Tidak Tertutup
Ini adalah kesalahan dengan dampak paling luas. Ketika browser tidak menemukan } penutup, ia tidak tahu kapan satu rule berakhir dan rule berikutnya dimulai.
/* portofolio.css */
.header {
background-color: #1a2744;
padding: 16px 0;
/* lupa menutup dengan } */
.header__nav { /* browser masih menganggap ini bagian dari .header */
display: flex;
gap: 24px;
}
Semua kode setelah kurung kurawal yang hilang kemungkinan besar tidak akan dijalankan dengan benar. Ini adalah satu-satunya jenis error CSS yang bisa merusak banyak rule sekaligus.
Scope Error: Seberapa Jauh Dampaknya
Memahami scope dari setiap error membantu kamu mempersempit area pencarian saat debugging.
| Jenis Error | Yang Diabaikan |
|---|---|
| Properti atau nilai tidak valid | Hanya deklarasi itu (satu baris) |
| Titik koma hilang | Deklarasi sebelum dan sesudah titik koma yang hilang |
| Selector tidak valid | Seluruh blok deklarasi untuk selector tersebut |
| Kurung kurawal tidak tertutup | Semua rule sejak kurawal yang tidak tertutup |
Pola ini penting: semakin kecil scope error, semakin mudah diisolasi. Kesalahan dalam satu deklarasi tidak akan merusak deklarasi lain di blok yang sama — berbeda dengan kurung kurawal yang hilang, yang bisa merusak separuh file.
Cara Mendeteksi Error
Browser tidak berteriak, tapi browser memberikan petunjuk. Dua alat yang paling berguna ada di browser itu sendiri.
DevTools: Panel Styles
Buka DevTools (tekan F12 di Chrome, Firefox, atau Edge), klik elemen yang bermasalah, lalu lihat panel Styles di sebelah kanan.
Browser menampilkan beberapa indikator visual:
- Teks dicoret — deklarasi tidak valid atau ditimpa oleh rule lain dengan spesifisitas lebih tinggi
- Ikon peringatan — nilai valid secara sintaks tapi tidak berpengaruh dalam konteks ini (misalnya
align-itemspada elemen yang bukan flex container) - Teks memudar — selector tidak cocok dengan elemen yang sedang dipilih
.judul {
color: ~~#1a2744~~ <-- dicoret: ada rule lain yang menimpa
font-size: 2rem;
⚠ line-height: 1.3 <-- peringatan: tidak berpengaruh karena...
}
A clean technical diagram showing Chrome DevTools Styles panel with CSS debugging indicators. Three rows of CSS properties inside a white panel box: first row "color: #1a2744" with a strikethrough line, second row "font-size: 2rem" normal text in green, third row with a yellow warning triangle icon next to "line-height: 1.3" in pale text. Labels pointing to each row: "ditimpa cascade" for strikethrough, "valid dan aktif" for normal, "tidak berpengaruh" for pale text. Clean technical diagram, flat design, white background, sans-serif font, 16:9 aspect ratio. All text labels in Indonesian.
CSS Validator
Untuk audit lebih menyeluruh, gunakan validator CSS resmi milik W3C. Tempel kode CSS kamu atau masukkan URL halaman, dan validator akan melaporkan semua kesalahan sintaks beserta nomor baris.
Bagi kode CSS menjadi bagian-bagian kecil dan uji secara bertahap — jangan tunggu sampai file panjang ratusan baris baru mulai debug. Semakin kecil unit yang diuji, semakin cepat kamu menemukan sumber masalah.
Alur Debug yang Efektif
Ketika gaya tidak muncul seperti yang kamu harapkan, ikuti urutan berikut:
- Buka DevTools dan pilih elemen yang bermasalah.
- Cari deklarasi yang dicoret atau berwarna pudar di panel Styles.
- Periksa apakah selector sudah cocok dengan elemen yang dipilih.
- Kalau semua terlihat benar di panel Styles tapi tampilan masih salah, periksa apakah ada rule lain dengan spesifisitas lebih tinggi yang menimpa (ini akan dibahas lebih dalam di bab tentang Specificity dan Cascade).
- Jika masih tidak ketemu, salin rule yang bermasalah ke validator W3C.
Latihan
Buat file debug-latihan.css baru dan masukkan kode berikut:
/* debug-latihan.css */
.artikel {
font-family: 'Inter', sans-serif
color: #1e293b;
line-height: 1.7;
}
.artikel__judul {
font-size: 1.5rem;
fon-weight: 700;
colour: #0f172a;
}
.artikel__meta {
font-size: 0.875rem;
color: #64748b;
/* kurung kurawal sengaja tidak ditutup
.artikel__konten {
margin-top: 24px;
padding: 0 16px;
}
-
Buka file di browser, klik tiap elemen dengan DevTools, dan catat deklarasi mana yang dicoret atau diabaikan. Coba cocokkan temuan kamu dengan empat kategori error yang sudah dibahas.
-
Perbaiki semua error di file tersebut satu per satu, bukan sekaligus. Perhatikan bagaimana setiap perbaikan mengubah output di DevTools.
-
Setelah semua diperbaiki, jalankan melalui validator W3C dan pastikan hasilnya bersih.
Memahami cara browser menangani error mengubah cara kamu membaca kode CSS. Kamu tidak lagi bertanya "kenapa ini tidak jalan?" tanpa arah — sekarang kamu tahu bahwa ada pola dalam kegagalan itu, dan ada alat yang bisa membaca pola tersebut. Dengan bekal ini, kita siap masuk ke salah satu aspek paling ekspresif di CSS: cara bekerja dengan warna.