[Easy] Selector Specificity
1. Bagaimana cara menghitung specificity selector?
Specificity menentukan aturan CSS mana yang menang ketika beberapa aturan menargetkan elemen yang sama.
Model mental sederhana:
inline style > ID > class/attribute/pseudo-class > element/pseudo-element
2. Penghitungan specificity
Pikirkan dalam bentuk kolom:
- A: inline style
- B: ID
- C: class, attribute, pseudo-class
- D: nama elemen dan pseudo-element
Bandingkan dari kiri ke kanan.
<div id="app" class="wrapper">Text</div>
#app {
color: blue;
}
.wrapper {
color: red;
}
#app menang karena specificity ID lebih tinggi.
3. Contoh umum
p {} /* 0-0-0-1 */
.card p {} /* 0-0-1-1 */
#root .card p {} /* 0-1-1-1 */
4. Bagaimana dengan !important?
!important mengesampingkan urutan cascade normal dalam origin/layer yang sama, tetapi menggunakannya di mana-mana membuat CSS sulit dipelihara.
Lebih baik gunakan:
- Struktur selector yang lebih baik
- Kedalaman nesting yang lebih rendah
- Scope komponen yang mudah diprediksi
5. Praktik terbaik
- Jaga specificity tetap rendah dan konsisten
- Hindari selector berantai yang terlalu dalam
- Gunakan styling berbasis class untuk UI yang dapat digunakan ulang
- Gunakan utility class atau scope komponen untuk menghindari perang selector
6. Jawaban cepat untuk wawancara
Q1: Apakah urutan berpengaruh jika specificity sama?
Ya. Deklarasi yang lebih belakangan yang menang.
Q2: Apakah styling berbasis ID direkomendasikan?
Biasanya tidak untuk sistem UI yang skalabel; class lebih mudah digunakan ulang.
Q3: Mengapa menghindari penggunaan !important yang sering?
Karena merusak cascade yang mudah diprediksi dan meningkatkan biaya pemeliharaan.