Les sélecteurs composés

Les sélecteurs simples se révèlent vite un peu trop grossiers. Les sélecteurs de type de balise sélectionnent tous les éléments du type en question, par exemple tous les paragraphes (p) ou tous les items de listes (li). On a vu qu'on pouvait utiliser des classes pour affiner la sélection, mais cela oblige à modifier le code html des pages elles-mêmes - des classes trop nombreuses diminuent la lisibilité et augmentent les manipulations.
Les sélecteurs composés autorisent une sélection plus fine des éléments à mettre en forme, à partir de leurs ascendants ou de leurs frères précédents.

Opérateurs de sélecteurs

Un sélecteur composé est formé à partir des sélecteurs simples déjà vus (type de balise, classe, identificateur, ou encore *) et d'opérateurs, par exemple:

Ou encore: #entete>h1+ul (ici, 3 sélecteurs séparés par + et >)

Quelles sont les balises ciblées par ces sélecteurs? C'est toujours l'élément le plus à droite :

Quels sont ces opérateurs, et que permettent-ils de sélectionner? Voici un tableau pour quatre d'entre eux, les plus courants, et qu'il faut connaître. Dans ce tableau, s1 et s2 sont deux sélecteurs quelconques.

SélecteurSélection
s1>s2 les éléments sélectionnés par s2 qui sont enfants d'un élément sélectionné par s1
s1 s2les éléments sélectionnés par s2 qui sont descendants d'un élément sélectionné par s1
s1+s2les éléments sélectionnés par s2 qui sont frère adjacent d'un élément sélectionné par s1
s1~s2les éléments sélectionnés par s2 qui sont frères suivants d'un élément sélectionné par s1

Quel est leur intérêt ? Nous verrons par la suite (dans certains exercices en dernière page, mais surtout dans des TDs à venir) qu'ils permettent de mieux cibler les éléments à mettre en forme en utilisant leur généalogie dans l'arbre des éléments. En attendant, l'exercice ci-dessous permet de visualiser leur effet.

Exercice

Téléchargez cette page web (arbre.html), ouvrez-la avec Bluefish et Firefox, et faites ce qui est écrit dedans.
Ne la fermez pas à la fin, on s'en ressert tout de suite.