Savoir comment utiliser les sélecteurs CSS 2.1 et les nouveautés CSS 3

Les sélecteurs CSS sont certainement un des aspects les plus puissants en CSS. Ils permettent de cibler un élément spécifique du balisage HTML pour lui affecter un style. Les sélecteurs CSS sont variés, allant du simple nom d’un élément jusqu’à une expression de sélection riche d’une liste d’éléments HTML.
Cet article vous fait un rappel sur les possibilités des sélecteurs CSS et vous présente les nouveautés CSS 3 qui s’avèrent très puissantes pour éviter des id, classes ou Javascript non nécessaires.

Sélecteur CSS 2.1

Syntaxe des sélecteurs

Les sélecteurs peuvent être de type simple (cas du sélecteur universel), de type sélecteurs d’attributs ou encore de type sélecteurs d’id.
Les sélecteurs de type simple peuvent être combinés à l’aide de caractères spéciaux comme un espace, un « + » ou un « > ».
Enfin on peut combiner les sélecteurs dans une liste quand on veut appliquer un même style aux éléments ciblés par plusieurs sélecteurs.
h1 { color: red; }
h2 { color: red; }
h1, h2 { color: red; } /* équivalent aux 2 lignes ci-dessus */

Sélecteur universel

Le sélecteur universel correspond au caractère « * », il représente l’ensemble des éléments de l’arbre HTML et peut être omis.
*.warning
.warning
/* les 2 syntaxes sont équivalentes */

Sélecteur de type

Un sélecteur de type correspond au nom de l’élément HTML. Il permet d’appliquer un style à tous les éléments de ce type dans le document HTML.
La règle suivante concerne tous les éléments h1.
h1 { font-family: sans-serif; }

Sélecteur descendant

Un sélecteur descendant permet de cibler les éléments enfants d’un autre élément.
L’exemple suivant appliquera une couleur jaune au texte de tous les éléments strong contenus dans un paragraphe.
p strong { color: yellow; }

Sélecteur d’enfant

Un sélecteur d’enfant est utilisé pour vérifier qu’un élément est un enfant d’un autre élément. Pour utiliser le sélecteur d’enfant on utilise le caractère « > » avec à gauche le parent et à droite l’enfant.
L’exemple suivant appliquera un fond bleu aux éléments strong enfants d’un paragraphe.
p>strong { background-color: blue; }

La différence entre le sélecteur d’enfant et le sélecteur descendant est que le sélecteur descendant correspond aux éléments strong où qu’ils soient dans le paragraphe, alors que le sélecteur d’enfant est plus spécifique et correspond uniquement aux éléments strong qui sont enfants du paragraphe.
Dans l’exemple suivant :
<p>Martin dit : <q>super site sur le référencement naturel à <strong>Marseille</strong></q>, en plus il connaissait bien les sujets <strong>SEO</strong>!</p>Le code sélecteur descendant précédent mettra en jaune les deux textes entre les balises strong alors que le code sélecteur d’enfant précédent appliquera un fond bleu uniquement au 2e strong soit le mot SEO car seulement cet élément est un enfant du paragraphe. L’élément strong Marseille est un enfant de la citation q.

Les sélecteurs d’enfants ne sont pas supportés par IE6.

Sélecteur d’enfant adjacent

Les enfants adjacents sont les éléments qui suivent immédiatement un autre élément qui partage le même parent. On utilise le signe « + » pour les enfants adjacents.
L’exemple suivant appliquera un fond vert à tous les éléments h2 qui suivent immédiatement un élément h1 si ses éléments partagent le même parent.
h1+h2 { background-color: green; }

Les sélecteurs d’enfants adjacents ne sont pas supportés par IE6.

Sélecteur d’attribut

Les sélecteurs d’attribut correspondent aux éléments qui ont des attributs définis dans l’arbre HTML. Il y a 4 types de sélécteurs d’attribut.

[att]
Le sélecteur d’attribut basique correspond aux éléments qui ont l’attribut spécifié indépendamment de la valeur de l’attribut.
L’exemple suivant appliquera un fond rouge à tous les liens qui possèdent un attribut title.
a[title] { background-color: red; }

[att=val]
Ce sélecteur d’attribut est utilisé pour sélectionner les éléments qui contiennent un attribut spécifique avec une valeur particulière.
L’exemple suivant appliquera un fond rouge à tous les liens qui possèdent un attribut rel avec la valeur external.
a[rel=external] { background-color: red; }

[att~=val]
Certains attributs autorisent une liste de valeurs séparées par des espaces. En utilisant le « ~ » avant le caractère « = », vous pouvez positionner un style sur les éléments qui possèdent un attribut spécifique avec une valeur particulière présente dans la liste des valeurs.
L’exemple suivant appliquera un fond rouge à tous les paragraphes qui contiennent la classe attention.
p[class~=marseille] { background-color: red; }
/* p[class~=marseille] est équivalent à p.marseille */

[att|=val]
Ce sélecteur d’attribut est utilisé pour sélectionner les éléments qui possèdent un attribut spécifique et dont la valeur est une liste de mots séparés par des tirets et commençant par val.
L’exemple suivant appliquera le style sur les liens avec un hreflang dont la valeur commence par « en », incluant « en-US », « en-GB », etc.
a[hreflang|=en] { background-color: red; }Plusieurs sélecteurs d’attributs peuvent être utilisés dans la même instruction.
L’exemple suivant utilise 2 sélecteur d’attribut pour appliquer un fond rouge à tous les liens qui ont un attribut title et dont l’attribut rel à la valeur external.
a[title][rel~=external] { background-color: red; }

Sélecteur de classe

Comme vu précédemment, on utilise le caractère « . » comme sélecteur de classe.
Le sélecteur suivant représente un élément h1 portant la class « referenceur ».
h1.referenceur

Sélecteur d’ID

Le sélecteur d’ID correspond au caractère « # ». Dans l’exemple suivant, le sélecteur d’ID représente un élément h1 dont l’attribut id a la valeur « referencement ».
h1#referencement

Pseudo-éléments et pseudo-classes

Les sélecteurs de pseudo-classes et de pseudo-éléments sont utilisés dans les scénarios où sélectionner la position de l’élément dans l’arbre HTML n’est pas suffisant. Pour utiliser les pseudo-classes et les pseudo-éléments on utilise le caractère « : ».

La pseudo-classe :first-child
La pseudo-classe :first-child correspond au premier élément enfant d’un autre élément.
div > p:first-child { text-indent: 0; }

Les pseudo-classes d’ancre :link et :visited
La pseudo-classe :link s’applique aux liens qui n’ont pas été visités et la pseudo-classe :visited s’applique lorsque le lien a été visité par l’utilisateur.

Les pseudo-classes dynamiques :hover, :active et :focus
Les pseudo-classes dynamiques appliquent un changement de style en fonction d’une action utilisateur. La pseudo-classe :hover applique un style quand l’utilisateur désigne un élément (par exemple au survol de la souris), la pseudo-classe :active applique un style quand l’utilisateur active un élément (par exemple au moment où l’utilisateur presse le bouton de la souris et le relâche) et la pseudo-classe :focus applique un style quand un élément reçoit l’attention (par exemple quand l’utilisateur se positionne sur l’élément à l’aide du clavier).
a:link { color: red } /* lien non-visité */
a:visited { color: blue } /* lien visité */
a:hover { color: yellow } /* lien survolé */
a:active { color: lime } /* lien activé */

La pseudo-classe de langue :lang
La pseudo-classe :lang permet de cibler un élément dont la langue correspond à une certaine valeur.
p:lang(en) { background-color: red; }

Le pseudo-élément :first-line
Le pseudo-élément :first-line associé à un paragraphe produit un style particulier sur la première ligne formatée d’un paragraphe.
p:first-line { text-transform: uppercase; }

Le pseudo-élément :first-letter
Le pseudo-élément :first-letter peut être employé pour faire des capitales initiales et des lettrines.

Les pseudo-éléments :before et :after
Les pseudo-élément :before et :after servent à insérer un contenu généré avant ou après celui d’un élément.

Nouveautés CSS 3 sur les sélecteur

Sélecteur d’attribut

3 nouveaux sélecteurs d’attribut sont introduits par la norme CSS 3 :

[att^= »val »]
Représente un attribut dont la valeur commence exactement par le préfixe « val ».

[att$=ident]
Représente un attribut dont la valeur finit exactement par le suffixe « ident ».

[att*= »val »]
Représente un attribut dont la valeur contient au moins une fois la sous-chaîne « val ».

Le seul navigateur qui ne supporte pas les sélecteurs d’attribut CSS3 est IE6. IE7, IE8, Opera et les navigateurs basés les moteurs Webkit (Safari et Chrome) et Gecko (Firefox) supporte ces sélecteurs.

Combinateur d’adjacence indirecte

Les combinateurs d’adjacence indirecte sont composés du caractère « ~ » séparant deux séquences de sélecteurs simples.
L’exemple suivant permet d’ajouter une bordure grise à toutes les images qui suivent une div particulière (l’image et la div doivent avoir le même parent).
div~img { border: 1px solid #ccc; }

Tous les navigateurs supportent le combinateur d’adjacence indirecte sauf votre navigateur favori : Internet Explorer 6.

Pseudo-classes

Contient les plus grosses nouveautés de la norme CCS 3.

La pseudo-classe :nth-child()
Ce sélecteur vous permet de cibler les éléments en se basant sur leur position dans la liste des enfants de leur parent. Vous pouvez utiliser un numéro, une expression numérique ou les mots « odd » et « even » correspondant à impair et pair (parfait pour faire un style alternatif pour vos tableaux).
tr:nth-child(2n+1) /* correspond aux lignes paires */
tr:nth-child(odd) /* pareil */

La pseudo-classe :nth-last-child()
Ce sélecteur ressemble beaucoup au sélecteur précédent sauf qu’il correspond au dernier enfant d’un élément parent.
tr:nth-last-child(-n+2) /* correspond aux 2 dernières lignes du tableau */

La pseudo-classe :last-child
Identique à :nth-last-child(1). La pseudo-classe :last-child pseudo-class représente un élément qui est le dernier fils d’un autre élément.

La pseudo-classe :checked
Correspond aux éléments qui sont cochés.

La pseudo-classe :empty
Correspond aux éléments qui n’ont pas d’enfant ou qui sont vides.

La pseudo-classe de negation
La pseudo-classe de négation est une notation fonctionnelle prenant un sélecteur simple pour argument. Elle représente un élément qui n’est pas représenté par l’argument.
L’exemple ci-dessous permet d’afficher le texte des paragraphes qui n’ont pas la classe « lead » en noir.
p:not([class*="lead"]) { color: black; }

Les navigateurs basés sur le moteur Webkit ou Opera supportent toutes les nouveautés CSS 3 des sélecteurs de pseudo-classe. Firefox 2 et 3 supporte uniquement :not(s), :last-child, :only-child, :root, :empty, :target, :checked, :enabled et :disabled, mais Firefox 3.5 aura un support complet des sélecteurs CSS 3. Internet Explorer n’a aucun support actuel de ces pseudo-classes.

Pseudo-élément

Les pseudo-éléments fragments d’éléments d’interface
Le nouveau pseudo-élément ::selection s’applique à la portion du document qui a été mise en exergue par l’utilisateur.
L’exemple suivant permet de modifier la couleur de fond du texte en cours de sélection.
::selection { background-color: blue; }

[Mise à jour du 26 juin 2009]
LetStudio, site professionnel de graphiste à Marseille met gratuitement à notre disposition un « print » superbement illustré : un dépliant PDF résumant les nouveautés sélecteurs CSS 3 et Média Queries.
Merci à ce studio marseillais de mettre ainsi un peu de ses grands talents en matière de print et de graphisme dans nos machines.

Pour en savoir plus

6 réflexions au sujet de « Savoir comment utiliser les sélecteurs CSS 2.1 et les nouveautés CSS 3 »

  1. Super résumé que je m’empresse d’ajouter à mes favoris.
    Vivement la disparition de Internet Explorer 6 que l’on puisse enfin vivre dans un monde meilleur.

  2. Salut
    Je suis vos posts régulièrement et je vais m’empresser de créer un aide-mémoire grâce aux infos de ce petit dernier ! Un très bon condensé effectivement. Merci.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *