Les sélecteurs CSS 2 et 3

Les règles des feuilles de styles sont composées d'un sélecteur qui désigne l'élément du code HTML et d'une définition comportant une liste de propriétés relatives à cet élément HTML ou cette classe d'éléments.

Un sélecteur peut être un sélecteur simple ou un sélecteur composé, ou une chaîne de sélecteurs simples ou composés séparés par des combinateurs. Ceux-ci sont les signes > ou + ou espace blanc.

Le sélecteur simple

Ce peut être le nom d'une balise, celui d'une classe précédé d'un point, celui d'un identifieur précédé du symbole dièse.

Exemple, un code HTML:

<div id="identifieur" class="box" >

La feuille de style associée:

div { background:white; }

Tous les calques auront un fond blanc.

#identifieur { color:red; }

Le seul calque dont l'identifieur est "identifieur" aura un texte de couleur rouge. Les autres auront la couleur de texte par défaut du conteneur ou la page.

.box { border: 1px solid gray; }

Tous les calques appartenant à la classe "box" auront un bord gris d'un pixel d'épaisseur. Ainsi que tous les autres éléments HTML auxquels on associera cette classe.

En conclusion, les sélecteurs permettent d'associer un style à un élément unique, à une balise ou à des balises différentes mais ayant une même classe.

Le sélecteur universel

Le symbole * représente tout éléments, toutes les classes, id, ou balises.

La règle:

* { color:blue; }

s'applique à <p>, <h1> et toutes autres balises, ainsi que tout élément nommé.

Règle de regroupement

Si l'on a deux règles dont le corps est le même, mais définissant des sélecteurs différents, par exemple:

h2 { color: blue; }
h3 { color: blue; }  

On peut les regrouper en une seule, en séparant les sélecteurs par une virgule:

h2, h3 { color: blue; }

Règles de sous-ensembles

On peut définir une règle pour un type de balise, pour une classe ou un objet unique mais aussi plus précisément, pour une classe assignée à un type de balise.

Pour récapituler:

Par exemple, pour désigner cet élément:

<a class="blue" href="" >Lien</a> 

on utilisera la troisième règle.

Règles de combinaison

Les combinaisons permettent de désigner élément par rapport à un autre élément, selon diverses voies.

CSS 3 ajoute element1 ~ element2. Le symbole "~" exprime la succession indirecte. L'élément 2 succède à l'élément 1, mais il peut y avoir d'autres éléments entre eux.

Sélecteur d'attribut

Pour les balises comme <input> qui correspondent à des objets différent selon l'attribut type, il est possible de sélectionner les balises en fonction de l'attribut et retenir celles qui ont un attribut donné ou dont l'attribut à une value donnée.

Syntaxe:

balise[attribut]

ou:

balise [attribut="valeur"] 

Par exemple:

input [type="button"]
{
...
}

Ceci permet d'associer un style à tous les boutons mais pas à toutes les balises input.

Le sélecteur element[attribut|="chaîne"] retient l'ensemble des balises/classes avec l'attribut "attribut", la valeur une liste de termes séparés par une espace et contenant le mot "chaîne".

Sélecteurs d'états

Pour les balises comme <a> qui ont plusieurs états dépendant de la navigation et non du code HTML, le séparateur ":" permet de spécifier un état.

Soit element la balise ou la classe attribuée à un lien ou un ensemble de liens:

CSS 3 a inclut de nouveaux états que l'on verra plus loin. En outre ces états peuvent s'appliquer à d'autres balises que <a>.

Sélecteurs de parties

Le symbole "::" permet de définir plus spécifiquement une partie à l'intérieur du contenu d'une balise.

Ainsi que d'autres d'intérêt moindre.

CSS 3, nouveaux sélecteurs

La terminologie a un peu évolué avec la nouvelle spécification. Le mot simple désigne une composante d'une séquence de sélecteurs alors qu'en CSS 2 cela désignait cette séquence.
Le combinateur tilda fait son apparition.

Attributs et expressions régulières

Eléments contenus

Eléments contenus de même type

Différence entre first-child et first-of-type

Dans le premier cas, le premier descendant du parent doit avoir le type de l'élément, c'est le cas d'une liste où tous les éléments sont de type <li>.
Dans le second cas le parent peut avoir des descendants de différents types, et c'est le premier qui a le type "element" qui est concerné.

Différence entre nth-child() et nth-of-type()

Comme précédemment, mais c'est le nème élément qui est concerne.
Dans le premier cas le parent contient n éléments de type "element".
Dans le second le parent contient n éléments de différents type et le nème de type "element" est considéré.

Autres critères de descendance

Sélection selon l'état

Cela complète les états de balises en CSS 2.

Sélection complémentaire

Quelques autres sélecteurs dont l'intérêt semble marginal et l'implémentation concrète incertaine ont été omis.

Tous les sélecteurs sont insensibles à la casse avec cette limitation que les identifieurs peuvent comporter des majuscules en XHTML, et non en HTML.

Spécification du W3C

© 2010-2012 Xul.fr