CSS : nouveaux sélecteurs introduits par CSS3

Le sélecteur d"une règle de style peut correspondre à une pseudo-classe ou un pseudo-élément.

Pseudo-éléments et pseudo-classes

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 double point).

À la différence des pseudo-éléments, les pseudo-classes peuvent être utilisées afin de mettre en forme un élément en fonction de son état.
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 nouvelles pseudo-classes pour les tableaux

Revenons aux pseudo-classes.

Il devient désormais très facile de cibler une ligne ou un groupe de ligne d'un tableau pour le styler.

Exemples

Une page comprend deux tableaux.

Le code HTLM

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"

Les règles de style relatives aux deux tableaux

	table{width : 90%; margin : 10px auto 10px auto ; border : 2px solid navy}
	tr{height : 50px ;}
	td,th { border : 1px solid black ; }
	td {padding-left : 10px ; }
	td:empty {background : white;}

Nouveauté CSS3 : la pseudo-classe :empty qui permet de cibler les éléments vides.

Les règles de style propres au premier tableau identifié "tableau1"

	#tableau1 {border-spacing : 10px ;}
	#tableau1 tr {background : aqua ;}
	#tableau1 tr:first-child {background: yellow; }
	#tableau1 tr:last-child {background: pink; }

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.

Les règles de style propres au deuxième tableau identifié "tableau2"

Dans ce deuxième tableau les lignes impaires ont un fond aqua et les lignes paires un fond gris.
Les bordures contigues sont fusionnées !

:nth-child(even) et :nt-child(odd) sont de nouvelles pseudo classes introduites par le CSS3.
Appliquées à TR elles permettent de sélectionner les lignes paires et impaires d'un tableau.


Le paramètre de :nth-child peut être un nombre. Par exemple tr:nth-child(3) désigne la troisième ligne du tableau ! Testez ce code !

Nouveaux sélecteurs pour les formulaires

Le code HTML de l'exemple

Je suis obligé de faire une digression HTML5 en évoquant les nouveaux types de champs et les nouveaux attributs de ces balises introduits par la version 5 de HTML.
En effet on retrouve des mêmes termes dans les deux langages.
Un seul exemple : le nouvel attribut required de la balise input (champ obligatoire) a pour pendant la pseudo-classe :required pour formater ce champ obligatoire.

Nouvelles valeurs de l'attribut type

HTML5 introduit de nouveaux types pour la balise input.

Nouveaux attributs de la balise input :

Les atttributs optional, required, autofocus n'ont pas besoin de valeur !

Les expressions régulières

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 \

Les boutons de commande

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).

Le code CSS pour le formulaire

	...
	form {width : 90%; margin : auto; border :2px solid black ;}
	input,label, button, select {display : inline-block ; width : 40% ; 
		height : 30px ; margin : 1% ; 
		vertical-align : top ;}
	input:required {border : 2px solid red ; }
	input:optional {border : 1px solid black ; }
	input:valid {color : green ; }
	input:invalid {color : red ;}                       
	input:focus {background : pink }
	input[type = radio], input[type =checkbox],
		input[type =number] {width : 5%; margin :1%;  }
	input[type = radio]+label, input[type = checkbox]+label, 
		input[type = number] + label {width :9%; text-align : left;}
	...

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.

Testez ce code !

La pseudo- classe de négation

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.

Exemple

Observez le rendu !

Tout les titres sont en italique.
Toutes les images sont centrées, de grande taille et ombrées sauf une !

Le code HTML

La feuille de style

	body { width : 600px ; margin : auto ; }
	body *:not(p) {font-style : italic; }
	img.miniature {width : 10% ; float : left ; margin : 1%; }
	img:not(.miniature) 
		{box-shadow : 10px 10px 10px gray ; display : block ; width :60% ;   
		margin : 10px auto 10px auto ; ) 

Retour menu