Menu

Sélecteur de classe CSS et sélecteur d'ID (.class et #id)

Le sélecteur de classe (.nom) met en forme tous les éléments qui ont cette classe ; le sélecteur d'ID (#nom) cible le seul élément qui a cet id. Découvrez la syntaxe, les classes multiples et enchaînées, class ou id, les règles de nommage et l'ajout de classes avec JavaScript.

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

Le sélecteur de classe

Un sélecteur de classe est un point suivi d'un nom de classe. Il met en forme tous les éléments dont l'attribut class contient ce nom, quel que soit le type d'élément.

Le point n'apparaît que dans le CSS. En HTML, l'attribut est class="badge", sans point. Les noms de classes sont sensibles à la casse : .Badge ne correspond pas à class="badge".

Plusieurs classes sur un élément

Un élément peut porter autant de classes que vous voulez, séparées par des espaces. Chacune apporte ses propres règles, et c'est ainsi que l'on construit des variantes à partir de petites briques :

.btn.danger, sans espace, cible les éléments qui ont les deux classes. Le dernier span a danger mais pas btn, donc la règle enchaînée l'ignore.

Variantes du sélecteur de classe

SélecteurCible
.noteTout élément avec la classe note
p.noteSeulement les éléments <p> avec la classe note
.btn.primaryLes éléments qui ont à la fois btn et primary
.card .titleUn .title n'importe où dans un .card
.card > .titleUn .title dont le parent est un .card
.a, .bLes éléments avec a ou b

La différence entre l'espace et l'absence d'espace est détaillée, avec d'autres combinateurs, sur la page des sélecteurs CSS.

Le sélecteur d'ID

Un sélecteur d'ID est un dièse suivi de l'id : #site-header met en forme l'élément avec id="site-header". Un id doit être unique dans la page, donc un sélecteur d'ID cible exactement un élément.

Les id servent à plus que le style : href="#details" fait défiler jusqu'à l'élément, <label for="email"> pointe vers l'id d'un champ, et JavaScript le trouve avec document.getElementById('details'). C'est la raison habituelle de donner un id à un élément ; pour le style, une classe est le meilleur outil.

Classe ou ID

Classe .nameID #name
Par pagePlusieurs élémentsUn élément
Par élémentPlusieurs, séparées par des espacesUn
Spécificité(0,1,0)(1,0,0)
Cible d'un lien (#name dans une URL)NonOui
Idéal pourLe styleAncres, labels, points d'accroche JavaScript

L'écart de spécificité est la raison pratique de styliser avec des classes. Un ID bat n'importe quel nombre de classes, donc une règle écrite avec un ID ne peut être surchargée que par un autre ID, un style inline ou !important :

Ajouter et retirer des classes avec JavaScript

Les classes sont la façon normale pour JavaScript de changer l'apparence d'un élément : le CSS définit les états, le script ne fait que les basculer.

classList propose aussi add, remove, contains et replace. Évitez d'affecter className directement : cela remplace toutes les classes de l'élément.

Nommer les classes

  • Les lettres, chiffres, traits d'union et underscores sont sûrs : card, card-title, card__title, is-open.
  • Ne commencez pas un sélecteur par un chiffre ni par un trait d'union suivi d'un chiffre. .2col est du CSS invalide. Commencez par une lettre (.cols-2) ou échappez le chiffre (.\32 col).
  • Nommez selon le rôle, pas selon l'apparence : .error survit à une refonte, .red-text non.
  • Une convention de nommage aide sur les gros projets. BEM écrit block__element--modifier, par exemple .card__title--large.

Erreurs courantes

  • Mettre le point dans le HTML. class=".badge" ne correspond jamais à .badge.
  • Deux attributs class. <p class="a" class="b"> ne garde que a. Utilisez class="a b".
  • Un espace alors que vous vouliez les deux classes. .btn .primary cherche un élément imbriqué ; .btn.primary désigne le même élément.
  • Réutiliser un id. Des id en double cassent getElementById, les liens d'ancre et les associations de labels, même si le CSS semble fonctionner.
  • Tout styliser avec des id. Leur spécificité rend les surcharges ultérieures pénibles ; utilisez des classes.

Questions fréquentes

Comment sélectionner une classe en CSS ?

Écrivez un point suivi du nom de la classe : .card { ... } met en forme tous les éléments avec class="card". Le point n'existe que dans le CSS ; l'attribut HTML n'en a pas.

Quelle est la différence entre une classe et un id en CSS ?

Une classe peut servir sur autant d'éléments que vous voulez, et un élément peut en avoir plusieurs ; un id doit être unique dans la page, et un élément en a au plus un. En CSS, #id a une spécificité bien plus élevée que .class, donc les règles par ID sont plus difficiles à surcharger.

Comment donner deux classes à un élément ?

Séparez les noms par un espace dans un seul attribut : class="btn primary". Écrire class deux fois sur un élément ne fonctionne pas ; le navigateur ne garde que le premier attribut.

Comment sélectionner un élément qui a deux classes ?

Enchaînez les sélecteurs de classe sans espace : .btn.primary cible les éléments qui ont les deux classes. Avec un espace, .btn .primary désigne un élément .primary à l'intérieur d'un élément .btn.

Un nom de classe CSS peut-il commencer par un chiffre ?

En HTML oui, mais un sélecteur ne peut pas commencer par un chiffre non échappé, donc .1col est du CSS invalide. Échappez le chiffre (.\31 col) ou, mieux, commencez les noms de classes par une lettre.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER