Chaque sélecteur en CSS se voit attribuer un pointage. Lorsque deux sélecteurs ciblent les mêmes propriétés d’un même élément, le sélecteur avec le plus haut pointage l’emporte. Le style de sa propriété est donc attribué à l’élément ciblé au détriment de celui du sélecteur plus faible.
En règle générale, il est conseillé de garder le pointage de ses sélecteurs le plus faible possible. Ainsi, si l’apparence d’un élément doit changer dans un contexte spécifique, il sera facilement possible d’écraser ses styles de bases avec un sélecteur doté d’un plus grand pointage.
Universel *
Le sélecteur universel * est le plus faible des sélecteurs avec une valeur de 0 point. Il peut donc être écrasé par tout autre sélecteur.
Balise
Un sélecteur avec une balise à une valeur de 1 point.
Classe, pseudo-classe et attribut
Ont tous une valeur de 10 points de spécificité.
ID
Un sélecteur avec un ID à une valeur de 100 points.
Style en ligne
Les styles en ligne ont une valeur de 1 000 points, ils sont donc extrêmement difficiles à écraser en cas de besoin, d’où pourquoi leur usage est à éviter autant que possible.
!important
En dernier recours, il est possible d’ajouter la mention !important à la fin d’une déclaration CSS afin de lui attribuer 10 000 points de spécificité et ainsi s’assurer d’écraser tout autre style.
Puisque !important est ajouté à une propriété directement, sa présence n’impacte que la valeur de cette propriété et non celle de l'ensemble de la règle CSS.
La valeur de chaque sélecteur s'additionne dans un groupe de sélecteurs.
Par exemple l’élément HTML suivant:
Balise seule
Ciblé avec uniquement sa balise
La balise ne vaut que 1 point.
La classe seule ne vaut que 10 points.
Balise & Classe
Combiné la balise et une classe
donne au groupe de sélecteur une valeur de 11 points.
Classe & Classe
Combiner les 2 classes
donne une valeur de 20 points.
Balise & Classe & Classe
Et finalement combiner la balise aux deux classes
donne 21 points.
Lorsque deux sélecteurs ont un pointage identique.
Par exemple pour l’élément HTML suivant:
Les sélecteurs ci-dessous auront tous deux une valeur de spécificité équivalente à 10 points.
Cependant, les styles du sélecteur .no1 auront priorité sur ceux de .element puisque .no1 est écrit en dernier et est donc considéré comme étant la définition la plus récente, donc celle prioritaire en cas d’égalité.
Le simple fait d’inverser ces sélecteurs dans le code CSS donnerait priorité aux styles de .element au détriment de ceux de .no1.