Sélecteurs d'attribut
Comme vous l'avez appris en étudiant le HTML, les éléments peuvent posséder des attributs qui fournissent des informations supplémentaires sur l'élément balisé. En CSS, vous pouvez utiliser des sélecteurs d'attributs pour cibler des éléments dotés de certains attributs. Cette leçon vous apprend à utiliser ces sélecteurs très utiles.
| Prérequis : | Les bases de HTML (étudier Syntaxe de base HTML), Sélecteurs CSS de base. |
|---|---|
| Objectifs d'apprentissage : |
|
Sélecteurs sur la présence et la valeur
Ces sélecteurs permettent de cibler un élément selon la simple présence d'un attribut (par exemple href), ou selon certains critères sur la valeur de l'attribut.
| Sélecteur | Exemple | Description |
|---|---|---|
[attr] |
a[title] |
Cible les éléments avec un attribut attr (le nom de l'attribut est indiqué entre crochets). |
[attr=valeur] |
a[href="https://exemple.fr"] |
Cible les éléments avec un attribut attr qui vaut exactement value. La valeur attendue est alors indiquée entre doubles quotes. |
[attr~=valeur] |
p[class~="special"] |
Cible les éléments avec un attribut attr qui vaut exactement value, ou qui contient value dans sa liste de valeurs (séparées par des espaces). |
[attr|=valeur] |
div[lang|="zh"] |
Cible les éléments avec un attribut attr qui vaut exactement value, ou qui commence par value suivie immédiatement d'un tiret. |
Voyons un cas d'usage de ces sélecteurs avec un exemple.
- En utilisant
li[class], on peut cibler tout élément de liste avec un attributclass. Dans notre exemple ci-après, cela correspond à tous les éléments de liste, à l'exception du premier. li[class="a"]cible ceux qui ont une classea, mais pas les éléments dont la classe contientaparmi une liste de valeurs. Dans notre exemple, ce sélecteur cible le deuxième élément de la liste.li[class~="a"]cible les éléments de liste avec une classe qui vautaet ceux dont la classe contientaparmi la liste des valeurs. Dans notre exemple, le deuxième et le troisième élément sont ciblés.
<h1>Présence d'attributs et sélecteurs de valeur</h1>
<ul>
<li>Élément 1</li>
<li class="a">Élément 2</li>
<li class="a b">Élément 3</li>
<li class="ab">Élément 4</li>
</ul>
body {
font-family: sans-serif;
}
li[class] {
font-size: 120%;
}
li[class="a"] {
background-color: yellow;
}
li[class~="a"] {
color: red;
}
Essayez de modifier le CSS ci-dessus pour ajouter une règle qui sélectionne uniquement les éléments de liste avec une valeur d'attribut class de ab, et leur donne une color de texte white et un background-color purple.
Cibler en fonction d'une sous-chaîne de caractères
Les sélecteurs suivant permettent de cibler un élément en fonction de la valeur de l'attribut et d'une sous-chaîne de caractères donnée. Par exemple, si on utilise deux classes box-warning et box-error et qu'on souhaite cibler tous les éléments avec une classe commençant par box-, on peut utiliser [class^="box-"] afin de cibler les deux (ou [class|="box"] comme décrite ci-dessus).
| Sélecteur | Exemple | Description |
|---|---|---|
[attr^=valeur] |
li[class^="box-"] |
Cible les éléments où la valeur de l'attribut attr commence par valeur. |
[attr$=valeur] |
li[class$="-box"] |
Cible les éléments où la valeur de l'attribut attr finit par valeur. |
[attr*=valeur] |
li[class*="box"] |
Cible les éléments où la valeur de l'attribut attr contient valeur au sein de la chaîne de caractères. |
Dans l'exemple qui suit, on illustre ces sélecteurs :
li[class^="a"]cible tout élément de liste avec un attributclassdont la valeur commence para. Dans notre exemple, cela correspond aux deux premiers éléments de la liste.li[class$="a"]cible tout élément de liste avec un attributclassdont la valeur finit para. Dans notre exemple, cela correspond au premier et troisième éléments de la liste.li[class*="a"]cible tout élément de liste avec un attributclasscontienta, n'importe où dans la valeur. Dans notre exemple, cela correspond à tous les éléments de la liste.
<h1>Sélecteurs de correspondance de sous-chaîne de caractères d'attribut</h1>
<ul>
<li class="a">Élément 1</li>
<li class="ab">Élément 2</li>
<li class="bca">Élément 3</li>
<li class="bcabc">Élément 4</li>
</ul>
body {
font-family: sans-serif;
}
li[class^="a"] {
font-size: 120%;
}
li[class$="a"] {
background-color: yellow;
}
li[class*="a"] {
color: red;
}
Essayez de modifier le CSS ci-dessus pour ajouter une règle qui sélectionne uniquement les éléments de liste dont la valeur de l'attribut class se termine par b ou c, et leur donne une border de 2px, solid, black. Vous devez peut-être utiliser une liste de sélecteurs pour résoudre cet exercice.
Résumé
Maintenant que nous avons terminé avec les sélecteurs d'attribut, vous pouvez continuer avec le prochain article et lire sur les sélecteurs de pseudo-classe et de pseudo-élément.