Wat is CSS-selector specificiteit en hoe werkt het?
De browser bepaalt welke stijlen op een element worden weergegeven, afhankelijk van de specificiteit van CSS-regels. We gaan ervan uit dat de browser de regels die overeenkomen met een bepaald element al heeft bepaald. Onder de overeenkomende regels wordt de specificiteit, vier kommagescheiden waarden, 'a, b, c, d', voor elke regel berekend op basis van het volgende:
- 'a' is of inline stijlen worden gebruikt. Als de eigenschapsdeclaratie een inline stijl op het element is, is 'a' 1, anders 0.
- 'b' is het aantal ID-selectors.
- 'c' is het aantal klassen, attributen en pseudo-klassen selectors.
- 'd' is het aantal tags en pseudo-elementen selectors.
De resulterende specificiteit is geen score, maar een matrix van waarden die kolom voor kolom kunnen worden vergeleken. Bij het vergelijken van selectors om te bepalen welke de hoogste specificiteit heeft, kijkt u van links naar rechts en vergelijkt u de hoogste waarde in elke kolom. Dus een waarde in kolom 'b' overschrijft waarden in kolommen 'c' en 'd', ongeacht wat deze ook mogen zijn. Als zodanig zou specificiteit van '0,1,0,0' groter zijn dan die van '0,0,10,10'.
In gevallen van gelijke specificiteit: de laatste regel is degene die telt. Als u dezelfde regel tweemaal in uw stylesheet hebt geschreven (ongeacht of deze intern of extern is), dan is de onderste regel in uw stylesheet dichter bij het te stylen element, wordt deze als specifieker beschouwd en zal daarom worden toegepast.
Ik zou CSS-regels schrijven met lage specificiteit, zodat ze indien nodig gemakkelijk kunnen worden overschreven. Bij het schrijven van CSS UI-componentbibliotheekcode is het belangrijk dat deze lage specificiteiten hebben, zodat gebruikers van de bibliotheek ze kunnen overschrijven zonder al te ingewikkelde CSS-regels te gebruiken alleen om de specificiteit te verhogen of hun toevlucht te nemen tot '!important'.