Priorités

En cas de déclaration de plusieurs règles CSS sur un même élément, il existe deux sortes de priorités.

Une au niveau de l'intégration des règles (attribut, balise ou feuille) et une au niveau de l'écriture des sélecteurs.

Définitionattribut, balise et feuille

Pour changer la couleur de fond d'une balise, il existe trois endroits différents pour l'écrire.

Dans une feuille de style externe :

1
p {background-color:blue}

Dans la balise style de la page :

1
<style>
2
  p {background-color:white}
3
</style>

Dans l'attribut style de la balise :

1
<p style="background-color:red" >Je suis en rouge</p>

De quelle couleur sera le paragraphe ?

La réponse est l'information la dernière interprétée.

En effet, le navigateur commence par interpréter les feuilles externes ou la balise <style> dans l'ordre de leur écriture, puis l'attribut style. Chaque lecture pouvant écraser les informations précédentes.

Dans notre cas le paragraphe sera en rouge. Dans tous les cas, s'il existe, c'est l'attribut style qui l'emporte.

DéfinitionLes sélecteurs

En cas de sélecteurs identiques voir précédemment. Mais, plusieurs sélecteurs différents peuvent aboutir à la même balise.

1
<div class="unDiv" id="leDiv">
2
  <p class="unP" id="leP">C'est moi</p>
3
</p>
1
p {background-color:blue}
2
div p {background-color:white}
3
.unP {background-color:red}
4
#leDiv p.unP {background-color:gray}

Pour trouver la bonne règle à appliquer, On cherche le sélecteur qui a le plus de poids :

  • On compte le nombre d'identifiants dans le sélecteur

    • Celui qui en a le plus a gagné

    • En cas d'égalité, on compte le nombre de classes et d'attributs

      • Celui qui en a le plus a gagné

      • En cas d'égalité, on compte le nombre d'éléments (tag) et de pseudo-éléments ( :before, :after...)

        • Celui qui en a le plus a gagné

        • En cas d'égalité voir la règle de l'ordre d'interprétation.

1
div#leDiv.unDiv p#leP.unP:before // 2,2,3
2
#leDiv p.#leP // 2,0,1
3
p // 0,0,1

Exemple

1
p{
2
  background-color:bisque;
3
}
4
p[lang]{
5
  background-color:rosybrown; 
6
}
7
#titi p{
8
  color : darkcyan;
9
}
10
.toto {
11
  color : red;
12
}
13
p.toto, p#tata.toto {
14
  color: chartreuse;
15
}
1
<div id="titi">
2
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
3
  <p lang="la">exercitation ullamco laboris nisi ut aliquip ex ea</p>
4
  <p id="tata" class="toto">Sed ut perspiciatis unde omnis iste natus error sit voluptatem</p>
5
  <p class="toto">At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis</p>
6
</div>

Lorem ipsum dolor sit amet, consectetur adipisicing elit

exercitation ullamco laboris nisi ut aliquip ex ea

Sed ut perspiciatis unde omnis iste natus error sit voluptatem

At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis

Interprétation de CSS