Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
Pour produire des interfaces dynamique sans devoir recourir à JavaScript (mais grâce au CSS),
il faut pouvoir cibler de façon très précise un ou plusieurs éléments de la page.
Pour cibler un seul élément du DOM c'est simple il suffit de lui affecter un ID avec une valeur unique
mais pour cibler plusieurs éléments il faut créer des sélecteurs plus ou moins sophistiqués.
Dans ce présent chapitre je rappelle les anciens sélecteurs mais je présente aussi ceux introduits par la version 3 de CSS.
Rappelons les sélecteurs basiques par des exemples :
h1 : cible toutes les balises H1
* : cible tous les éléments ; * est le sélecteur universel !
h1, h2, h3 : cible les balises H1 et H2 et H3
div p : cible les éléments P inclus dans le conteneur DIV. On dit que div p est un sélecteur de descendants.
.info: cible tous les noeuds ayant l'attribut class ="info" ; sélecteur de classe générique.
p.remarque: cible les balises P affectées de la classe "remarque" ; sélecteur de classe spécifique.
#entete : cible l'élément unique (en principe) de la page ayant l'attribut ID ="entete". On parle de sélecteur d'identifiant.
L'opérateur '+' permet de cibler un noeud qui suit immédiatement un élément donné.
Exemple : div + p cible n'importe quel élément P qui suit immédiatement un élément DIV.
Le combinateur '~' permet de cibler les nœuds qui suivent un élément et qui ont le même parent.
Exemple : p ~ span cible les éléments SPAN qui suivent (immédiatement ou non) un élément P et qui ont le même élément parent.
Le combinateur '>' permet de cibler les nœuds qui sont des enfants directs d'un élément donné.
Exemple : ul > li cible tous les éléments LI qui sont directement situés sous une balise UL.
Dans la pratique on utilise surtout le sélecteur de voisin direct.
Exemple : le sélecteur img + p cible les légendes d'images.
Illustrons les sélecteurs d'attributs par des exemples !
[href] : cible tous les éléments ayant l'attribut href
img [alt] : cible les images ayant l'attribut alt.
input [type="text"] : cible les éléments INPUT avant pour l'attribut TYPE la valeur exacte "text".
[alt* ="mollusque"] : cible les noeuds ayant l'attribut ALT et dont la valeur contient la chaine "mollusque". Notez le caractère * juste
après le nom de l'attribut.
Il existe aussi des opérateurs pour préciser "se termine par telle chaine" et "commence par telle chaine".
Le sélecteur peut comprendre une pseudo-classe OU un pseudo-élément.
Un pseudo-élément est un mot-clé ajouté à un sélecteur qui permet de mettre en forme une partie de l'élément ciblé par le sélecteur.
Ainsi le pseudo-élément ::firt-letter ne s'applique qu'à la première lettre du texte ciblé.
Non vous ne voyez pas double ... Il faut bien insérer deux fois le double point lorsqu'il s'agit d'un pseudo-élément.
Maintenant rassurez vous, les navigateurs tolèrent toujours l'ancienne syntaxe (un seul ":").
Je rappelle que le pseudo-élément ::before est à la base de la numérotation automatique des titres (balises H1 à H6) qu'il est désormais possible de réaliser avec CSS. Voir dans le même tuto la page sur la "numérotation automatique des titres".
Les pseudo-classes sont utilisées afin de mettre en forme un élément en fonction de son état.
Les deux pseudo-classes les plus connues sont :active et :hover c'est à dire respectivement sur clic ou sur survol d'un élément.
CSS3 introduit de nouvelles pseudo-classes, certaines pour les tableaux HTML et d'autres pour les formulaires HTML.
Il devient désormais très facile de cibler une ligne ou un groupe de ligne d'un tableau pour le styler.
Une page comprend deux tableaux.
Il est identique pour les deux tableaux sauf en ce qui concerne la valeur de l'ID.
Pour le deuxième tableau lire ... table ID ="tableau2"
Nouveauté CSS3 : la pseudo-classe :empty qui permet de cibler les éléments vides.
La première ligne du tableau a un fond jaune, la dernière un fond rose et les autres un fond "aqua".
Les bordures entre cellules sont très espacées (10px). Une cellule vide a un fond blanc.
Nous avons donc deux nouvelles pseudo-classes : :first-child et :last-child qui peuvent être utilisées avec n'importe quelle balise mais sont particulièrement indiquées avec les tableaux.
Dans ce deuxième tableau les lignes impaires ont un fond "aqua" et les lignes paires un fond "grey". et les bordures contiguës sont fusionnées !
Le paramètre de :nth-child peut être un nombre. Par exemple tr:nth-child(3) désigne la troisième ligne du tableau !
Aperçu de la page dans un iframe :
Un petit exemple vaut mieux qu'un long discours.
Je suis obligé de faire ici une digression HTML5 en évoquant les nouveaux types de champs et
les nouveaux attributs introduits par la version 5 de HTML.
Il y a une étroite complémentarité entre les nouveautés HTMl 5 pour les formulaires et les nouveautés CSS pour ces mêmes formulaires.
Le même terme peut désigner un nouvel attribut et une nouvelle pseudo-classe.
Un seul exemple : le nouvel attribut required de la balise INPUT (pour créer un champ à saisie obligatoire) a pour pendant
la pseudo-classe :required pour styler ce champ obligatoire.
HTML 5 introduit de nouveaux types pour la balise INPUT.
Les atttributs optional, required, autofocus n'ont pas besoin de valeur !
Une expression régulière définit un gabarit de saisie. Tant qu'une saisie dans un champ ne correspond pas à son gabarit la soumission des données sera impossible.
La soumission est aussi impossible si une saisie en correspond pas au type du champ (exemple : pas de caractère @ dans un champ de type email).
Dans les deux premières expressions régulières le caractère espace est "échappé" : précédé du caractère \
Pour dessiner des boutons de soumission il est désormais conseillé d'utiliser la syntaxe :
<button type ="submit">Envoi </button>
plutôt que :
<input type ="submit" value ="envoi" >
Les autres types du conteneur button sont : reset (effacement des données) et button (pour associer une fonction JavaScript au bouton).
On retrouve aussi des sélecteurs CSS2. Par exemple input[type = radio] qui cible uniquement les boutons radio ou input[type =number] qui cible uniquement les champs de type number. Il s'agit de sélecteurs d'attribut.
Aperçu de la page dans un iframe :
Le traitement des données soumissionnées (emploi du PHP) n'est pas évoqué dans cette page.
Donc si vous cliquez sur "Validez" après avoir renseigné correctement tous les champs obligatoires il ne passera rien ...
Par contre toute tentative de soumission sera bloquée tant qu'il y aura des champs obligatoires non ou mal remplis.
Les nouveautés en matière de pseudo-classes dans la spéciification CSS3 sont tellement nombreuses qu'il est difficile de les citer toutes. Cependant je ne peux m'empécher de vous présenter des pseudo-classes qui permettent de représenter de façon très visuelle la validité ou non d'une saisie.
La note doit être comprise entre 1 et 19. Si elle est contenue dans cet intervalle elle sera affichée en vert, sinon en rouge.
Aperçu de la page dans un cadre :
La pseudo-classe de négation est une nouveauté CSS3 qui devrait s'avérer très utile car elle devrait simplifier considérablement les feuilles de style.
Aperçu de la page dans un cadre :
Tous les titres sont en italique, gras et centrés.
Toutes les images sont centrées, de grande taille et ombrées sauf la première.
Notez que la première image est affectée de la classe "miniature".