[Easy] Specificità dei selettori
1. Come si calcola la specificità dei selettori?
La specificità (specificity) decide quale regola CSS vince quando più regole puntano allo stesso elemento.
Un modello mentale semplice:
inline style > ID > class/attribute/pseudo-class > element/pseudo-element
2. Punteggio della specificità
Ragiona per colonne:
- A: inline style
- B: ID
- C: class, attributi, pseudo-class
- D: nomi di elementi e pseudo-element
Confronta da sinistra a destra.
<div id="app" class="wrapper">Testo</div>
#app {
color: blue;
}
.wrapper {
color: red;
}
#app vince perché la specificità dell'ID è più alta.
3. Esempi comuni
p {} /* 0-0-0-1 */
.card p {} /* 0-0-1-1 */
#root .card p {} /* 0-1-1-1 */
4. E riguardo !important?
!important sovrascrive l'ordine normale della cascata all'interno della stessa origine/layer, ma usarlo ovunque rende il CSS difficile da mantenere.
Preferire:
- Una migliore struttura dei selettori
- Minore profondità di annidamento
- Scope dei componenti prevedibile
5. Best practice (buone pratiche)
- Mantenere la specificità bassa e coerente
- Evitare selettori concatenati profondi
- Preferire lo styling basato su class per UI riutilizzabili
- Usare classi utility o scope dei componenti per evitare conflitti tra selettori
6. Risposte rapide per i colloqui
D1: L'ordine conta se la specificità è uguale?
Sì. Le dichiarazioni successive vincono.
D2: Lo styling basato su ID è consigliato?
Di solito no per sistemi UI scalabili; le class sono più riutilizzabili.
D3: Perché evitare l'uso frequente di !important?
Rompe la cascata prevedibile e aumenta i costi di manutenzione.