Als u van plan bent om regelmatig CSS te gebruiken, moet u inzicht krijgen in wat specificiteit is en hoe het wordt toegepast.

Anders dan drijvers en posities, kan specificiteit een van de moeilijkste dingen zijn om aan te wennen, laat staan ​​te beheersen. De selectors die u in uw CSS gebruikt, hebben allemaal verschillende gewichten en die worden bepaald op specificiteit. Daarom wordt het soms niet weergegeven in je ontwerp wanneer je een regel op een element toepast.

Als je ooit hebt vertrouwd op het gevreesde! Belangrijke sleutelwoord om je CSS te hacken, dan is dit artikel iets voor jou.

Hoe een browser CSS leest

Om je fundamenten solide te maken, moet je weten hoe de browser CSS leest en hoe regels worden opgeheven.

Ten eerste zal de browser een stylesheet van boven naar beneden lezen, wat betekent dat met deze code:

/*Line 10*/ul li a {color: red;}/*Line 90*/ul li a {color: blue;}

De regel die u op regel 10 hebt opgegeven, wordt overschreven en die ankertag wordt blauw omdat de browser regels verderop in uw CSS beschouwt om een ​​hogere prioriteit te behouden.

Dit werkt ook met de daadwerkelijke volgorde waarin u uw CSS-bestanden importeert, bijvoorbeeld:

Aangezien je de custom.css na de style.css hebt geplaatst, wordt alles wat je in style.css schrijft (voor nu disconteren, het gewicht van selectors) onderdrukt en vervangen door wat zich in custom.css bevindt, wordt deze techniek vaak gebruikt door makers van thema's om de gebruiker wat ruimte te geven om hun eigen stijlen toe te voegen zonder het hoofdbestand te wijzigen. (Merk echter op dat custom.css style.css niet volledig vervangt, alleen die regels die specifiek zijn overschreven, zullen worden vervangen.)

specificiteit

Alles hierboven is alleen van toepassing als u bij elke selector hetzelfde gewicht gebruikt. Als u ID's, klassen of stapelelementen opgeeft, geeft u ze gewicht en dat is specificiteit.

Er zijn vier categorieën die het specificiteitsniveau van een selector bepalen: inline stijlen (deze worden soms gebruikt door javascript), ID's, Klassen en elementen. Hoe de specificiteit te meten? Specificiteit wordt gemeten in punten, waarbij de hoogste puntenwaarde wordt toegepast.

  • ID's zijn 100 punten waard.
  • Lessen zijn 10 punten waard.
  • Elementen zijn 1 punt waard.

Dit wetende, als je een selector als volgt gebruikt:

#content .sidebar .module li a

Het totale gewicht is 122 punten (100 + 10 + 10 + 1 +1), wat een ID, twee klassen en twee elementen is.

Dingen om te onthouden

  • ID's hebben veel te veel gewicht in vergelijking met klassen en elementen, dus je zou het gebruik van ID's in je stylesheets tot het absolute minimum moeten beperken.
  • In gevallen waarin de selectors hetzelfde gewicht hebben, wordt de volgorde waarnaar ze verschijnen teruggedraaid, waarbij de laatste de hogere prioriteit heeft.
  • Stijlen die zijn ingesloten in uw HTML-troefstijlen in stijlbladen, omdat ze dichter bij het element staan.
  • De enige manier om inline stijlen te overschrijven is het gebruik van de! Belangrijke verklaring.
  • Pseudo-klassen en -attributen hebben hetzelfde gewicht als normale klassen.
  • Pseudo-elementen hebben ook hetzelfde gewicht als een normaal element.
  • De universele selector (*) houdt geen gewicht.

Voorbeelden

ul li a {color: red;}

Deze selector heeft een gewicht van 3, wat betekent dat alleen door een klasse ergens anders toe te voegen, je deze kunt overschrijven.

.content #sidebar {width: 30%;}

Deze selector heeft een gewicht van 110 punten, voornamelijk vanwege de ID die 100 punten van het totaal van 110 optelt.

.post p:first-letter {font-size: 16px;}

Deze selector heeft een gewicht van 12 punten, omdat het pseudo-element: de eerste letter weegt slechts 1 punt en dat geldt ook voor de p-tag.

p {font-family: Helvetica, arial, sans-serif;}

Deze selector weegt slechts 1 punt, dit type selector moet bovenaan de pagina worden gebruikt wanneer u de basisstijlen markeert die later kunnen worden opgeheven voor specifieke gebieden.

Houd er altijd rekening mee dat voor het overschrijven van een ID-selector, je 256 klassen voor hetzelfde element moet schrijven, zoals:

#title {font-weight: bold;}.home .page .content .main .posts .post .post-content .headline-area .wrapper /* ... etc. ... */ .title {font-weight: normal;}

Alleen op deze manier zal de tweede selector degene verslaan die de ID gebruikt.

Conclusie

Specificiteit is geen flitsend aspect van CSS, maar naar mijn mening is dit het gebied dat het meest over het hoofd wordt gezien. Door je specifieke eigenschappen te verbeteren, kun je niet alleen bugs vermijden, maar het versnelt ook je ontwikkeling en je uiteindelijke site.

Gebruik je ID's te vaak bij het schrijven van CSS? Val je ooit terug, belangrijk? Laat het ons weten in de comments.

Uitgelichte afbeelding / thumbnail, precisie afbeelding via Shutterstock.