Menu

Sélecteurs CSS : types, combinateurs et sélecteurs d'attribut

Un sélecteur CSS choisit les éléments qu'une règle met en forme. Découvrez tous les types de sélecteurs, les quatre combinateurs (descendant, enfant, frère adjacent, frère général), les sélecteurs d'attribut, le regroupement, et testez des sélecteurs en direct.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Ce qu'est un sélecteur CSS

Un sélecteur est la partie d'une règle placée avant les accolades. Il décide à quels éléments s'appliquent les déclarations.

p.note { color: #2563eb; }
/* selector: p.note    declaration: color: #2563eb */

Les cinq sélecteurs de base couvrent la plupart des feuilles de style réelles :

Les types de sélecteurs en un coup d'œil

SélecteurExempleCible
Universel*Tous les éléments
TypepTous les <p>
Classe.tipLes éléments avec class="tip" (entre autres classes)
ID#main-titleL'élément avec id="main-title"
Attribut[type="email"]Les éléments dont l'attribut correspond
Pseudo-classea:hover, li:first-childLes éléments dans un état ou une position
Pseudo-élémentp::first-line, .x::beforeUne partie d'un élément
Groupeh1, h2, h3Tout ce qui correspond à un élément de la liste
Composép.tipUn <p> qui a aussi la classe

Les classes et les ID ont leur propre page, le sélecteur de classe CSS. Les pseudo-classes comme :nth-child() et :not() sont traitées sur la page des pseudo-classes.

Combinateurs : descendant ou enfant

Un combinateur relie deux sélecteurs selon leur relation dans l'arbre HTML. Il en existe quatre.

CombinateurSyntaxeCible B quand
DescendantA B (espace)B est n'importe où dans A
EnfantA > BLe parent de B est A
Frère adjacentA + BB vient juste après A, même parent
Frère généralA ~ BB vient quelque part après A, même parent

L'espace et le > sont la paire que l'on confond. Le sélecteur descendant atteint n'importe quelle profondeur ; le sélecteur d'enfant s'arrête à un niveau :

Combinateurs de frères : + et ~

Les frères ne regardent que vers l'avant. Il n'existe pas de combinateur « frère précédent », mais :has() permet de l'exprimer : h2:has(+ p) cible un h2 immédiatement suivi d'un p.

Sélecteurs d'attribut

Les crochets ciblent les attributs et leurs valeurs :

SélecteurCible
[disabled]A l'attribut, quelle que soit la valeur
[type="email"]La valeur est exactement email
[href^="https"]La valeur commence par https
[href$=".pdf"]La valeur se termine par .pdf
[class*="icon"]La valeur contient icon n'importe où
[lang|="en"]La valeur est en ou commence par en-
[data-state="open" i]Correspondance exacte, sans tenir compte de la casse

Les sélecteurs d'attribut sur les attributs data-* sont une façon propre de styliser un état défini par JavaScript, sans inventer de noms de classes.

Testez n'importe quel sélecteur

Tapez un sélecteur dans le champ. Chaque élément ciblé reçoit un contour ambre, et le nombre s'affiche en dessous.

Essayez #demo a, ul > li, h2 ~ *, a[href^="https"], li:not(.active).

Composé ou descendant : l'espace compte

p.note et p .note ne diffèrent que d'un espace et n'ont pas le même sens.

Comment les navigateurs lisent les sélecteurs

Quand plusieurs règles ciblent le même élément et définissent la même propriété, le sélecteur le plus spécifique gagne, et en cas d'égalité le dernier l'emporte. Un ID pèse plus que n'importe quel nombre de classes, et une classe plus que n'importe quel nombre de sélecteurs de type ; la page sur !important donne le tableau complet de la spécificité.

Un groupe a un piège : si un seul sélecteur d'une liste simple est invalide, toute la règle est ignorée. Dans a, b:unknown { }, même les liens ne sont pas stylisés. Entourer la liste de :is() la rend tolérante, et :is(a, b:unknown) stylise toujours les liens.

Erreurs courantes

  • Oublier le point ou le dièse. tip { } cible un élément <tip>, pas class="tip". Écrivez .tip.
  • Un espace dans un sélecteur composé. p .note n'est pas p.note.
  • Croire que > atteint les petits-enfants. Utilisez un espace pour toute profondeur.
  • Une faute de frappe casse tout un groupe. Dans h1, h2:hovr, h3, rien n'est stylisé.
  • Des sélecteurs trop longs. body div.wrapper ul li a est lent à lire et difficile à surcharger. Une seule classe suffit en général.

Questions fréquentes

Qu'est-ce qu'un sélecteur CSS ?

La partie d'une règle CSS placée avant la {, qui indique à quels éléments s'appliquent les déclarations. Dans p.note { color: blue; }, le sélecteur p.note cible chaque <p> qui a la classe note.

Quelle différence entre un espace et > dans un sélecteur CSS ?

Un espace est le combinateur descendant : nav a cible tous les liens n'importe où dans un nav, à toute profondeur. > est le combinateur enfant : nav > a ne cible que les liens dont le parent direct est le nav.

Que signifie + en CSS ?

+ est le combinateur de frère adjacent. h2 + p cible un <p> qui suit immédiatement un <h2> de même parent. ~ est plus souple : h2 ~ p cible tous les <p> frères qui suivent.

Comment sélectionner des éléments par attribut en CSS ?

Mettez l'attribut entre crochets : [disabled] cible les éléments qui l'ont, [type="email"] une valeur exacte, [href^="https"] une valeur qui commence par une chaîne, [href$=".pdf"] une valeur qui se termine par elle, et [class*="btn"] une valeur qui la contient.

Le CSS peut-il sélectionner un élément parent ?

Oui, avec la pseudo-classe :has(), prise en charge par les versions actuelles de Chrome, Firefox et Safari. li:has(> a.active) cible les éléments de liste qui contiennent directement un lien actif.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER