Cos'è la specificità del selettore CSS e come funziona?
Il browser determina quali stili mostrare su un elemento in base alla specificità delle regole CSS. Partiamo dal presupposto che il browser abbia già determinato le regole che corrispondono a un particolare elemento. Tra le regole corrispondenti, la specificità, quattro valori separati da virgola, 'a, b, c, d' vengono calcolati per ogni regola in base a quanto segue:
- 'a' indica se vengono utilizzati stili in linea. Se la dichiarazione della proprietà è uno stile in linea sull'elemento, 'a' è 1, altrimenti 0.
- 'b' è il numero di selettori ID.
- 'c' è il numero di selettori di classi, attributi e pseudo-classi.
- 'd' è il numero di selettori di tag e pseudo-elementi.
La specificità risultante non è un punteggio, ma una matrice di valori che possono essere confrontati colonna per colonna. Quando si confrontano i selettori per determinare quale ha la specificità più alta, si guarda da sinistra a destra e si confronta il valore più alto in ogni colonna. Quindi un valore nella colonna 'b' sovrascriverà i valori nelle colonne 'c' e 'd', qualunque essi siano. Pertanto, una specificità di '0,1,0,0' sarà maggiore di una di '0,0,10,10'.
Nei casi di specificità uguale: la regola più recente è quella che conta. Se hai scritto la stessa regola nel tuo foglio di stile (indipendentemente dal fatto che sia interno o esterno) due volte, allora la regola inferiore nel tuo foglio di stile è più vicina all'elemento da stilizzare, si ritiene che sia più specifica e quindi verrà applicata.
Scriverei regole CSS con bassa specificità in modo che possano essere facilmente sovrascritte se necessario. Quando si scrive codice per una libreria di componenti UI CSS, è importante che abbiano basse specificità in modo che gli utenti della libreria possano sovrascriverle senza utilizzare regole CSS troppo complicate solo per il gusto di aumentare la specificità o ricorrere a '!important'.