15# Les pseudo-sélecteurs
Les pseudo-sélecteurs permettent d’interagir avec des données qui ne sont pas identifiés dans l’arbre des éléments HTML : comme la première ligne ou la première lettre du contenu d’un élément, ou encore son état (actif, survolé par la souris de l’utilisateur,…).
Sur cette page :
- Les pseudo-sélecteurs
15.1# Sélecteur par attribut
La sélection par attribut permet de discriminer une sélection par nature d’élément, identifiant ou classe selon la présence d’attributs et de leur valeur. Le sélecteur par attribut est placé entre crochets à la droite d’un sélecteur simple :
/* Sélectionne l'ensemble des liens référençant le parent de la page courante */ a[rel=up] /* Sélectionne l'ensemble des liens référençant le parent et dont la langue est précisée */ a[rel=up][hreflang]
Il est possible de tester la valeurs des attributs selon plusieurs méthodes :
[attr]teste la présence de l’attributattr, aucun test sur la valeur n’est effectué,[attr=valeur]sélectionne les éléments possédant un attributattret dont la valeur est exactementvaleur,[attr~=valeur]sélectionne les éléments possédant un attributattret dont la valeur contient le motvaleur, les mots sont séparés par des espaces dans l’attribut :- img[alt~=animal]
- { border: 1px red solid; }
L’image sera entourée d’une bordure rouge d’un pixel,- <img src="images/mon_chat.jpg" alt="Photographie de mon animal de compagnie : mon chat félix" />
[attr|=valeur]sélectionne les éléments possédant un attributattret dont la valeur commence parvaleur:- *[lang=en]
- { color: blue; }
supporté
supporté à partir de la version 7
supporté
supporté
supporté
15.2# Pseudo-classes et pseudo-éléments
15.2.1# Pseudo-classes
Les pseudo-classes permettent de sélectionner un élément sans pouvoir le caractériser par sa forme dans l’arbre des éléments HTML, c’est à dire, sans sa nature, son identifiant, l’une de ses classes ou encore ses attributs. Il est possible de combiner plusieurs pseudo-classes, par exemple a:link:visited, cependant, ceci peut parfois poser des problèmes avec Internet Explorer.
15.2.2# :first-child
:first-child sélectionne un élément si celui-ci est le premier d’un nœud :
.contenu > p:first-child { color: grey; }
<div class="contenu">
supporté, mais sur Firefox 2, si un élément est inséré comme premier fils avec Javascript l’élément devenu deuxième fils est toujours sélectionné
supporté à partir de la version 7, cependant, si un élément est inséré comme premier fils avec Javascript l’élément devenu deuxième fils est toujours sélectionné
supporté
supporté
supporté
15.2.3# :link
:link sélectionne l’élément si celui-ci est un lien hypertexte.
a { color: green; } a:link { color: red; }
supporté
supporté, cependant, un bug est apparu sous la version 7 : le pseudo élément est ignoré si le sélecteur contient :link:visited
supporté
supporté
supporté
15.2.4# :active
:active sélectionne un élément quand l’utilisateur l’active, par exemple, pendant qu’il clique dessus avec la souris
supporté
supporté seulement pour un élément <a>contenant l’attributhrefavant la version 8
supporté
supporté
supporté
15.2.5# :hover
:hover sélectionne un élément lorsque l’utilisateur interagit avec celui-ci sans l’activer, notamment en passant le curseur de la souris dessus.
supporté
supporté seulement pour un élément <a>contenant l’attributhrefavant la version 7, quelques bugs peuvent apparaître avec la version 7
supporté
supporté
supporté
15.2.6# :visited
:visited sélectionne l’élément si il représente un lien qui a été visité par l’utilisateur (généralement, si celui-ci est toujours dans l’historique).
supporté
supporté mais des bugs peuvent apparaître quand plusieurs pseudo-classes sont chaînées jusqu’à la version 7
supporté
supporté
supporté
15.2.7# :focus
:focus sélectionne l’élément si l’élément à le focus, c’est-à-dire qu’il a été sélectionné par l’utilisateur est prêt à recevoir des informations tapées au clavier. Cette pseudo-classe s’applique généralement à des champs de formulaires.
supporté
supporté à partir d’internet explorer 8, cependant, la perte du focus n’est pas détectée si le focus est ensuite attribué à un élément fils
supporté
supporté
supporté
15.2.8# :lang
La pseudo-classe :lang permet d’effectuer des tests sur la langue d’un élément.
La syntaxe complète de la pseudo-classe est :lang(ln) où ln correspond au code représentant la langue recherchée, ou tout du moins, au début du code, on peut le comparer à [lang|=ln], mais sur ce point uniquement.
Il diffère du test sur les attributs HTML lang ou XHTML xml:lang par son aspect indépendant de la syntaxe du document sur lequel est appliquée la feuille de styles. Par ailleurs, cette pseudo-classe évalue la langue en fonction des éléments parents :
<div lang="fr" xml:lang="fr">
Ici, le pseudo-sélecteur :lang(fr) agira sur l’élément <div> mais également sur l’élément <p>, tandis que [lang|=fr] ne sélectionnera que l’élément <div>.
supporté
supporté à partir d’internet explorer 8
supporté
supporté
supporté
15.2.9# Les pseudo-éléments
Les pseudo-éléments permettent de désigner des emplacements qui ne sont pas explicitement décris par l’arbre HTML. Les pseudo-éléments ne peuvent s’appliquer que sur le dernier sélecteur d’une combinaison.
15.2.10# :first-line
Le pseudo-élément :first-line permet de sélectionner la première ligne de texte d’un élément.
supporté
Avec Internet Explorer 6, un bug vous obligera à respecter la syntaxe :first-line[espace]{ /*propriétés*/ }
supporté
supporté
supporté
15.2.11# :first-letter
:first-letter permet de sélectionner la première lettre d’un élément, pour appliquer des effets de lettrines par exemple.
.article:first-letter { font-size: 200%; font-style: italic; font-weight: bold; float: left; }
Voilà le résultat ! Attention, si vous regardez le code source, vous verrez que pour obtenir ce résultat, j’ai triché… mais c’est pour la démonstration !
supporté, avant Firefox 3, la propriété letter-spacingn’est pas utilisable
Avec Internet Explorer 6, un bug vous obligera à respecter la syntaxe :first-letter[espace]{ /*propriétés*/ }, avant la version 8, la propriétéletter-spacingn’est pas utilisable
supporté
supporté
supporté
15.2.12# :before et :after
:before et :after permettent d’insérer du contenu avant et après le contenu actuel d’un élément. La spécification CSS2 ne permet pas d’utiliser certaines propriétés sur ce contenu inséré, la version CSS 2.1 supprime ces limitations.
pre.code:before { content: "Listing de code :"; } pre.code:after { content: "Fin de listing de code."; }
supporté, cependant, certaines propriétés ne peuvent être utilisées, conformément à la spécification CSS2.
Supporté à partir de la version 8
supporté
supporté, mais le contenu sera affiché en respectant les espaces de la valeur de la propriété content, comme si la propriétéwhite-spaceétait fixée à la valeurpre
supporté
Vous trouverez sur Web Devout un tableau récapitulant le support des styles par les principaux navigateurs. N’hésitez pas à consulter la spécification officielle.