Sélecteur CSSSélecteurs

[attribut]

Sélectionne les éléments selon un attribut HTML et sa valeur : exacte, au début, à la fin, un fragment, ou un mot dans une liste.

Sur cette page

Exemple

#
CSS
a[href^="https"]::after {
  content: " ↗";
}

a[href$=".pdf"]::before {
  content: "PDF";
  margin-right: 6px;
  padding: 1px 5px;
  border-radius: 4px;
  background: #f43f5e;
  color: #fff;
  font-size: 11px;
  font-weight: 700;
}
Aperçu

Définition et utilisation

#

Un sélecteur d’attribut s’écrit entre crochets. [title] seul sélectionne chaque élément qui a un attribut title, quelle que soit sa valeur, même vide. Une fois que vous ajoutez un opérateur et une valeur, vous vérifiez le contenu de l’attribut : la valeur exacte, son début, sa fin, un fragment quelconque ou un seul mot d’une liste.

C’est un moyen pratique de styliser sans ajouter de classes. Vous distinguez les champs de formulaire par leur type (input[type="email"]), les liens externes par le début de l’adresse (a[href^="https"]), et les fichiers par leur extension (a[href$=".pdf"]). Cela fonctionne aussi très bien avec les attributs data-* et aria-*, qui décrivent l’état d’un composant, par exemple [aria-expanded="true"].

Une valeur entre guillemets est toujours sûre. Vous ne pouvez omettre les guillemets que si la valeur est un simple mot fait de lettres, de chiffres, de traits d’union et de tirets bas, qui ne commence pas par un chiffre. La casse de la valeur compte généralement, sauf si vous ajoutez le drapeau i avant le crochet fermant.

La spécificité d’un sélecteur d’attribut est (0, 1, 0), autant qu’une classe. Vous rencontrerez plus rarement l’opérateur |= : [lang|="fr"] correspond à la valeur fr ainsi qu’aux valeurs qui commencent par fr-, par exemple fr-FR.

Syntaxe

#
Syntaxe
[attribut] | [attribut="v"] | [attribut^="v"] | [attribut$="v"] | [attribut*="v"] | [attribut~="v"] | [attribut|="v"] | [attribut="v" i]

Variantes d’écriture

#
  • [title]

    [attribut]

    Seule la présence de l’attribut compte, la valeur n’a pas d’importance. Seul le lien avec un attribut title correspond.
  • [data-tags="css-grid"]

    [attribut="v"]

    Exactement cette valeur, caractère pour caractère. L’élément avec « css new » ne correspond pas, même s’il contient aussi le mot css.
  • [href^="https"]

    [attribut^="v"]

    La valeur commence par le texte indiqué. C’est la façon la plus courante de repérer les liens externes.
  • [href$=".pdf"]

    [attribut$="v"]

    La valeur se termine par le texte indiqué. Le fichier MAP.PDF ne correspond pas, car la casse compte.
  • [href*="files"]

    [attribut*="v"]

    Le texte indiqué apparaît n’importe où dans la valeur, même au milieu de l’adresse. Les deux liens vers des fichiers correspondent.
  • [data-tags~="css"]

    [attribut~="v"]

    La valeur est une liste de mots séparés par des espaces, et l’un d’eux est exactement « css ». Le mot « css-grid » ne compte pas.
  • [href$=".pdf" i]

    drapeau i

    Le drapeau i désactive la sensibilité à la casse, donc les deux fichiers PDF correspondent : en minuscules et en majuscules.

Variantes d’écriture en pratique

#

[title]

Seule la présence de l’attribut compte, la valeur n’a pas d’importance. Seul le lien avec un attribut title correspond.
[title] { background: #7c3aed; color: #fff; }

[data-tags="css-grid"]

Exactement cette valeur, caractère pour caractère. L’élément avec « css new » ne correspond pas, même s’il contient aussi le mot css.
[data-tags="css-grid"] { background: #7c3aed; color: #fff; }

[href^="https"]

La valeur commence par le texte indiqué. C’est la façon la plus courante de repérer les liens externes.
[href^="https"] { background: #7c3aed; color: #fff; }

[href$=".pdf"]

La valeur se termine par le texte indiqué. Le fichier MAP.PDF ne correspond pas, car la casse compte.
[href$=".pdf"] { background: #7c3aed; color: #fff; }

[href*="files"]

Le texte indiqué apparaît n’importe où dans la valeur, même au milieu de l’adresse. Les deux liens vers des fichiers correspondent.
[href*="files"] { background: #7c3aed; color: #fff; }

[data-tags~="css"]

La valeur est une liste de mots séparés par des espaces, et l’un d’eux est exactement « css ». Le mot « css-grid » ne compte pas.
[data-tags~="css"] { background: #7c3aed; color: #fff; }

[href$=".pdf" i]

Le drapeau i désactive la sensibilité à la casse, donc les deux fichiers PDF correspondent : en minuscules et en majuscules.
[href$=".pdf" i] { background: #7c3aed; color: #fff; }

Plus d’exemples

#
L’état d’un composant stocké dans un attribut ARIA
CSS
.toggle[aria-expanded="true"] {
  background: #7c3aed;
}

.toggle[aria-expanded="false"] + .details {
  display: none;
}
Aperçu

Cliquez sur le bouton. Le script ne change que la valeur aria-expanded ; la couleur du bouton et la visibilité des détails ne dépendent que du CSS.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Gardez l’état d’un composant dans des attributs comme aria-expanded ou data-state, et stylisez-le avec un sélecteur d’attribut. L’apparence correspondra alors toujours à ce qu’entendent les utilisateurs de lecteurs d’écran.
  • Un sélecteur d’attribut ne voit que les attributs écrits dans le HTML. input[value=""] ne réagira pas à la saisie, et [checked] ne réagira pas au clic sur le champ. Les pseudo-classes comme :checked et :placeholder-shown servent à l’état en cours.
  • Les adresses et les extensions de fichiers s’écrivent parfois différemment, c’est pourquoi avec ^=, $= et *= il vaut la peine d’envisager le drapeau i.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.