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 via des exemples :
h1 : cible toutes les éléments H1
* : cible tous les éléments ; * est le sélecteur universel !
h1, h2, h3 : cible les titres H1,h2 et H3
article p : cible les éléments P inclus dans le conteneur ARTICLE. On dit que article p est un sélecteur de descendants.
.info: cible tous les éléments ayant l'attribut class ="info" ; il s'agit d'un sélecteur de classe générique.
p.remarque: cible les éléments P affectés de la classe "remarque" ; il s'agit d'un 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.
Dans ce paragraphe je vous présente de sélecteurs moins connues qui peuvent s'avérer très utiles : éviter la multiplication des classes, éviter la règle de style en ligne (attribut style dans l'instruction HTML).
L'opérateur "+" permet de cibler la balise qui suit immédiatement un élément donné.
Exemple : le sélecteur img + p permet de styliser la légende d'une image.
C'est plus élégant qu'une classe "legende_image" ou du CSS dans l'élément P.
Le combinateur '>' permet de cibler les balises 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.
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".
Le sélecteur peut être composé à partir d'une pseudo-classe OU d'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 désormais 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 avec un seul ":"/
Je rappelle que le pseudo-élément ::before est à la base de la numérotation automatique des titres.
Numéroter automatiquement les titres
Les pseudo-classes sont utilisées afin de mettre en forme un élément en fonction de son état.
Cette liste est loin d'être exhaustive. Il existe d'autres pseudo-classes utilisées principalement dans le cadre des tableaux et d'autres dédiées plutôt aux formulaires. Je vais les présenter dans la suite de ce chapitre.
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"
table{width : 90%; margin : 10px auto ; border : 2px solid navy}
tr{height : 50px ;}
td,th { border : 1px solid black ; }
td {padding-left : 10px ; }
td:empty {background : white;}
La pseudo-classe :empty qui permet de cibler les éléments vides.
#tableau1 {border-spacing : 10px ;}
#tableau1 tr {background : aqua ;}
#tableau1 tr:first-child {background: yellow; }
#tableau1 tr:last-child {background: pink; }
#tableau2 {border-collapse : collapse ;}
#tableau2 tr:nth-child(even) {background: grey; color : white ; }
#tableau2 tr:nth-child(odd) {background: aqua ;color : navy ;}
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 du document HTML dans un iframe :
Un petit exemple plutôt qu'un long discours.
Il s'agit d'un formulaire de soumission (avec envoi des données dans la même page).
Mais ici il n'y aucun traitement des données soumissionnées.
Concernant les nouveautés HTML : les nouveaux types pour le champ INPUT et les nouveaux attributs
de l'élément INPUT, je vous invite à lire le chapitre ad hoc dans mon tuto sur HTML5.
HTML5 & les formulaires
Le plus souvent un formulaire HTML est accompagné de code JS.
Il y a aussi beaucoup de nouveautés en matière de traitement via JS d'un formulaire.
Je ne citerai que la méthode event.preventDefault
Je vous conseille de lire le chapitre en lien :
JavaScript pour les formulaires
form {width : 80%; margin : 10px auto;}
input,label, button{display : inline-block ;
width : 40% ; height : 30px ; margin : 1% ;
vertical-align : top ;}
input:required {border : 1px solid red ; }
input:optional {border : 1px solid black ; }
input:valid {color : green ; }
input:invalid {color : red ;}
input:focus {background : pink }
input::placeholder {color: purple;}
input[type =number] {width : 10%;}
input[type = radio],
input[type = checkbox],
input[type = radio]+label,
input[type = checkbox]+label,
input[type =number]+label {width : 5% ; }
On a aussi une règle de style basée sur un pseudo élément :
input::placeholder {color: purple;}
Donc le texte dans un INPUT avant saisie est en violet.
On retrouve aussi des sélecteurs d'attributs : input[type = radio] & input[type = checkbox],
Donc les boutons radio et les cases à cocher n'auront une largeur de 40% (voir première règle) mais de 5% (voir dernière règle)
puisqu'en cas de conflit entre deux règles de style de même niveau hiérarchique c'est la dernière qui est prise en compte.
Dans le document HTML ci-dessous, j'utilise des pseudo-classes pour visualiser la valité (ou non) de la saisie.
input[type ="number"]:in-range {color : green; }
input[type ="number"]:out-of-range {color : red; }
Chaque sélecteur est composite comprenant un sélecteur d'attribut + une pseudo-classe.
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.
En effet si via la molette il est impossible de saisir une note en dehors de cet intervalle, c'est possible
via le clavier ...
Notez l'emploi de l'événement de formulaire onInput et l'utilisation de l'élément OUTPUT (nouveauté HTML5).
La pseudo-classe de négation est une nouveauté CSS3 qui devrait être fort pratique car elle devrait simplifier sensiblement les feuilles de style.
Tous le texte est en italic gras et centré sauf le contenu des éléments P.
Toutes les images sont centrées, de grande taille et ombrées sauf la première.
On n'utilise dans ce document que les éléments BODY, H1,h2,P & IMG.
* {font-size : 18px ; }
body {width : 600px ; margin : 10px auto ; }
body *:not(p) {font-style : italic; font-weight : bold ; text-align : center; }
img.miniature {width : 10% ; float : left ; margin : 1%; }
img:not(.miniature) {box-shadow : 10px 10px 10px gray ; display : block ;
width :40% ; margin : 20px auto ; )