Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Les REGEX

Le principe du sélecteur CSS et des spécificités

Temps de lecture estimé : 1 minutes
Accueil CSS3 Le principe du sélecteur CSS et des spécificités

Quand on débute en CSS, on a souvent l’impression que certaines règles s’appliquent « comme par magie »… ou pas du tout. Vous écrivez une couleur, une taille, une marge, et pourtant le navigateur semble vous ignorer. Rassurant ? Pas vraiment. Mais la bonne nouvelle, c’est qu’il n’y a rien de magique là-dedans. C’est bien souvent le sélecteur CSS le responsable !

  • Comprendre pourquoi certaines règles CSS s’appliquent et d’autres non, afin de ne plus corriger son code au hasard et gagner du temps.
  • Savoir choisir le bon sélecteur au bon moment pour écrire un CSS plus clair, plus logique et plus facile à maintenir, même quand le projet grandit.
  • Acquérir une méthode de raisonnement pour anticiper les conflits de styles et maîtriser le comportement du navigateur, au lieu de le subir.

Derrière ce comportement se cachent deux notions absolument fondamentales : le sélecteur CSS et la spécificité. Tant que ces concepts restent flous, le CSS peut vite devenir frustrant. À l’inverse, une fois qu’ils sont compris, tout devient plus logique, presque prévisible.

Dans ce chapitre, nous allons prendre le temps de repartir de zéro. Pas à pas, avec des mots simples, des exemples concrets et du code commenté. L’objectif est clair : que vous sachiez exactement pourquoi une règle CSS s’applique… ou pourquoi elle ne s’applique pas.

Qu’est-ce qu’un sélecteur CSS, concrètement ?

En CSS, on ne stylise jamais « au hasard ». Chaque règle commence par désigner une ou plusieurs cibles. C’est précisément le rôle du sélecteur CSS.

Un sélecteur CSS indique au navigateur quels éléments HTML doivent recevoir les styles définis entre accolades. Sans sélecteur, le CSS ne saurait tout simplement pas quoi modifier.

Prenons un premier exemple très simple :

p {
  color: blue;
}

Ici, le sélecteur CSS est p. Il signifie : « applique cette règle à tous les paragraphes de la page ». Le navigateur lit cela comme une instruction très claire : chaque balise <p> doit afficher son texte en bleu.

Vous pouvez déjà retenir une chose importante : un sélecteur CSS est toujours lié à la structure HTML. Il ne vit jamais tout seul.

Le sélecteur de type : le plus simple pour commencer

Le premier sélecteur CSS que l’on apprend est souvent le sélecteur de type, aussi appelé sélecteur de balise. Il correspond directement au nom d’une balise HTML.

Exemple :

h2 {
  font-size: 32px;
}

Ce sélecteur CSS cible toutes les balises <h1> du document. Il est simple, lisible, mais aussi assez large. Si votre page contient dix titres de niveau 2, ils recevront tous la même taille.

C’est pratique pour poser des bases globales, comme une typographie cohérente. En revanche, dès que vous voulez différencier certains éléments, ce sélecteur devient trop général.

Le sélecteur de classe : le plus utilisé en pratique

Très rapidement, vous allez vouloir appliquer un style à certains éléments, mais pas à tous. C’est là que le sélecteur de classe devient indispensable.

En HTML, une classe s’ajoute avec l’attribut class :

<p class="important">Attention à ce point précis.</p>

En CSS, le sélecteur de classe commence toujours par un point :

.important {
  color: red;
  font-weight: bold;
}

Ce sélecteur CSS cible tous les éléments qui possèdent la classe important, quelle que soit leur balise. Cela peut être un paragraphe, un lien ou même un titre.

C’est pour cette raison que les classes sont au cœur du CSS moderne. Elles permettent de structurer visuellement une page sans dépendre uniquement du HTML.

Le sélecteur d’identifiant : puissant, mais à manier avec précaution

Un autre type de sélecteur CSS repose sur l’identifiant, défini avec l’attribut id en HTML.

<div id="header"></div>

Le sélecteur CSS correspondant utilise le symbole # :

#header {
  background-color: #333;
}

Un identifiant doit être unique dans la page. Cela signifie qu’un sélecteur CSS basé sur un id cible un seul élément précis.

Cette unicité rend le sélecteur très puissant… parfois trop. Nous verrons plus loin que les identifiants ont une spécificité très élevée, ce qui peut compliquer la maintenance du CSS si on en abuse.

Comprendre les sélecteurs combinés

Un sélecteur CSS peut devenir plus précis en combinant plusieurs éléments. Par exemple :

p.important {
  color: red;
}

Ce sélecteur CSS cible uniquement les paragraphes qui ont la classe important. Un <div class="important"> ne sera pas concerné.

Ce type de combinaison permet d’affiner les styles sans multiplier les classes inutiles. C’est une bonne pratique, tant que cela reste lisible.

Sélecteurs de descendants et de hiérarchie

Le CSS est très fort pour exploiter la structure du HTML. Les sélecteurs CSS hiérarchiques permettent de cibler un élément en fonction de son parent.

article p {
  line-height: 1.6;
}

Ici, le sélecteur CSS signifie : « cible tous les paragraphes qui se trouvent à l’intérieur d’un <article> ». Les paragraphes ailleurs dans la page ne seront pas affectés.

Ce mécanisme est extrêmement utile pour créer des styles contextualisés, par exemple pour un blog, une carte ou une section spécifique.


Il y a un moment que beaucoup de développeurs ont vécu. Vous écrivez une règle CSS simple, elle fonctionne. Puis vous en ajoutez une autre, et soudain… la première ne s’applique plus. Vous changez l’ordre, vous ajoutez des couleurs au hasard, vous soupçonnez presque le navigateur de vous provoquer.

En réalité, ce moment marque souvent la première rencontre avec la spécificité CSS. Et croyez-le ou non, c’est un excellent signe : vous êtes en train de passer du stade « je teste au hasard » au stade « je cherche à comprendre ».

La spécificité CSS : la règle invisible qui décide de tout

La spécificité CSS est le mécanisme qui permet au navigateur de trancher lorsqu’un même élément est ciblé par plusieurs règles.

Prenons un exemple simple :

p {
  color: blue;
}

.important {
  color: red;
}

Et le HTML suivant :

<p class="important">Texte important</p>

Quelle couleur va s’appliquer ? Le rouge. Pourquoi ? Parce que le sélecteur CSS de classe est plus spécifique que le sélecteur de type.

La spécificité est une sorte de score que le navigateur calcule pour chaque règle CSS. La règle avec le score le plus élevé l’emporte.

Comment le navigateur calcule la spécificité

Sans entrer dans des mathématiques compliquées, il faut comprendre que chaque type de sélecteur CSS a un poids différent.

  • Les identifiants ont le poids le plus fort.
  • Les classes, attributs et pseudo-classes ont un poids intermédiaire.
  • Les balises et pseudo-éléments ont le poids le plus faible.

Ainsi, un sélecteur CSS utilisant un id écrasera presque toujours une règle basée sur une classe ou une balise.

Exemple :

#content p {
  color: green;
}

p {
  color: blue;
}

Même si la règle p est écrite après, le texte sera vert, car la spécificité du premier sélecteur CSS est plus élevée.

L’ordre du code : le dernier critère

Lorsque deux sélecteurs CSS ont exactement la même spécificité, c’est l’ordre d’écriture qui fait foi. La dernière règle rencontrée par le navigateur est appliquée.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?
p {
  color: blue;
}

p {
  color: red;
}

Ici, tous les paragraphes seront rouges. Non pas parce que le rouge est plus fort, mais simplement parce qu’il arrive après.

Ce principe est souvent mal compris par les débutants, alors qu’il explique énormément de comportements en CSS.

Et le fameux !important dans tout ça ?

Il est difficile de parler de spécificité CSS sans évoquer !important.

p {
  color: blue !important;
}

Cette instruction force la règle à passer avant presque toutes les autres. Elle casse volontairement la logique normale de la spécificité.

!important peut dépanner ponctuellement, mais son usage excessif rend le CSS difficile à maintenir. C’est un peu comme crier plus fort que tout le monde pour avoir raison. Ça marche… mais ça crée souvent des problèmes plus tard.


Comprendre les sélecteurs CSS et la spécificité, ce n’est pas seulement apprendre des règles techniques. C’est surtout apprendre à raisonner comme le navigateur. Une fois cette logique intégrée, le CSS devient beaucoup moins frustrant et bien plus agréable à utiliser.

Vous allez progressivement passer d’un CSS hésitant à un CSS maîtrisé, où chaque règle a une intention claire. Et c’est exactement à ce moment-là que le CSS cesse d’être un obstacle pour devenir un véritable outil de création.

Éviter les conflits de styles dès le départ

Quand on débute, on a tendance à empiler les règles CSS au fil des essais. Une couleur par-ci, une marge par-là, puis une correction « rapide » quand quelque chose ne s’affiche pas comme prévu. Sur le moment, ça fonctionne. Mais très vite, le fichier CSS devient difficile à comprendre, même pour vous.

La clé pour éviter ces situations repose sur un principe simple : écrire des sélecteurs CSS intentionnels. Avant d’ajouter une règle, posez-vous une question très concrète : « À quels éléments exactement ce style doit-il s’appliquer, et pourquoi ? »

Par exemple, si vous souhaitez styliser les paragraphes d’un article de blog, il est rarement judicieux de cibler tous les <p>de la page. Une règle plus réfléchie pourrait ressembler à ceci :

.article p {
  line-height: 1.7;
}

Ici, le sélecteur CSS limite clairement le périmètre d’action. Vous réduisez les risques de conflits, et votre intention est immédiatement compréhensible, même plusieurs mois plus tard.

Pourquoi la simplicité est souvent votre meilleure alliée

Un piège fréquent consiste à vouloir être trop précis trop tôt. On voit parfois des sélecteurs CSS extrêmement longs, mélangeant balises, classes et hiérarchie complexe.

body .container main article .content p span {
  color: red;
}

Ce type de sélecteur fonctionne, mais il pose plusieurs problèmes. D’abord, sa spécificité est élevée, ce qui complique toute tentative de surcharge ultérieure. Ensuite, il devient fragile : le moindre changement dans la structure HTML peut casser le style.

Dans la majorité des cas, une classe bien choisie suffit largement :

.highlight {
  color: red;
}

En CSS, la lisibilité et la maintenabilité sont souvent plus importantes que la précision extrême. Un bon sélecteur CSS est celui que l’on comprend sans effort.

La spécificité comme outil, pas comme contrainte

La spécificité CSS est parfois vécue comme une punition. En réalité, c’est un outil puissant quand on apprend à l’utiliser consciemment.

Imaginez que vous définissiez un style de base pour tous les boutons :

button {
  background-color: #ddd;
}

Puis, vous souhaitez un bouton principal plus visible :

.button-primary {
  background-color: #007bff;
}

Ici, la logique est saine. Le sélecteur CSS de classe vient naturellement surcharger le style générique. Vous utilisez la spécificité à votre avantage, sans conflit, sans astuce cachée.

C’est exactement cette hiérarchie volontaire qui rend un CSS agréable à travailler.

Quand plusieurs règles ciblent le même élément

Il est important de comprendre qu’un élément HTML peut être concerné par plusieurs sélecteurs CSS en même temps. C’est non seulement normal, mais prévu pour.

Prenons cet exemple :

p {
  font-size: 16px;
}

.article p {
  font-size: 18px;
}

Un paragraphe situé dans .article correspond aux deux sélecteurs. Le navigateur compare alors leur spécificité et applique la règle la plus forte. Résultat : le texte sera en 18 pixels.

Ce mécanisme permet de créer des styles globaux, puis de les ajuster localement sans tout réécrire.

Les pseudo-classes : ajouter du contexte sans alourdir

Les pseudo-classes sont une extension naturelle des sélecteurs CSS. Elles permettent de cibler un élément selon son état ou son contexte, sans ajouter de classe supplémentaire dans le HTML.

Exemple simple avec un lien :

a:hover {
  color: orange;
}

Ici, le sélecteur CSS ne cible pas tous les liens en permanence, mais uniquement lorsqu’ils sont survolés. C’est une manière élégante d’ajouter de l’interactivité tout en gardant un code propre.

Les pseudo-classes participent aussi à la spécificité. Une classe avec une pseudo-classe sera plus spécifique qu’une simple balise, ce qui peut expliquer certains comportements inattendus quand on débute.

Comprendre pour ne plus subir le CSS

À ce stade, vous commencez probablement à voir le CSS autrement. Les règles ne sont plus arbitraires. Chaque sélecteur CSS a un poids, une intention et une conséquence.

Lorsque quelque chose ne fonctionne pas, vous avez désormais une méthode de réflexion. Vous pouvez identifier les sélecteurs en concurrence, comparer leur spécificité et comprendre pourquoi le navigateur a fait ce choix précis.

C’est une transformation importante. Vous passez d’une logique d’essais-erreurs à une logique d’analyse.

Vers un CSS plus propre et plus professionnel

Les développeurs expérimentés ne connaissent pas « plus de CSS » que les autres. Ils écrivent simplement moins de règles inutiles. Ils s’appuient sur des sélecteurs CSS clairs, des classes bien nommées et une hiérarchie volontaire.

En comprenant la spécificité, vous posez les bases d’un CSS durable, évolutif et agréable à maintenir. Et surtout, vous vous offrez quelque chose de précieux : la confiance dans votre code.


Maîtriser les sélecteurs CSS et la spécificité, ce n’est pas une étape optionnelle. C’est un passage obligé pour sortir de la frustration et entrer dans une vraie logique de conception. À partir de là, le CSS cesse d’être imprévisible et devient cohérent.

Plus vous pratiquerez avec ces principes en tête, plus ils deviendront naturels. Vous n’aurez même plus besoin de réfléchir à la spécificité : vos choix seront instinctifs, car fondés sur une compréhension solide.

Et c’est précisément à ce moment-là que vous commencez à coder non plus « pour que ça marche », mais pour que ce soit propre, clair et durable.

Chapitre suivant : Couleur, unité et typographie