Travaux Pratiques CSS3 - Fabrice Lemainque
Travaux Pratiques CSS3 - Fabrice Lemainque
CSS 3
Maîtrisez la conception
de vos pages web
Fabrice Lemainque
Toutes les marques citées dans cet ouvrage sont des
marques déposées par leurs propriétaires respectifs
© Dunod, 2018
11 rue Paul Bert, 92240 Malakoff
www.dunod.com
ISBN 978-2-10-077281-0
Table des matières
Avant-propos ............................................................................................................................................................................................. 1
Introduction
Préfixes dédiés .......................................................................................................................................................................................... 3
Terminologie : les valeurs CSS ........................................................................................................................................................... 4
Présentation des exercices ................................................................................................................................................................... 6
Mise en œuvre
TP
1 Mise en œuvre de CSS ......................................................................................................................................................................... 8
TP
2 Rédaction d’une feuille de styles externe .....................................................................................................................................10
Les sélecteurs
TP
3 Sélecteurs d’éléments ......................................................................................................................................................................... 14
TP
4 Sélecteurs d’attributs ............................................................................................................................................................................ 17
TP
5 Sélecteurs de pseudo-classes dynamiques ................................................................................................................................. 19
TP
6 Sélecteurs de pseudo-classes structurelles .................................................................................................................................. 21
TP
7 Sélecteurs de pseudo-éléments ...................................................................................................................................................... 24
TP
8 Spécificité d’un sélecteur ................................................................................................................................................................... 27
14
TP
15 Propriétés de couche ........................................................................................................................................................................... 42
TP
16 Propriétés d’effet visuel ....................................................................................................................................................................... 43
@
III
TP
22 Multi-colonnage .................................................................................................................................................................................... 62
TP
23 Propriétés d’interface utilisateur ...................................................................................................................................................... 64
Listes et compteurs
TP
24 Propriétés de liste ..................................................................................................................................................................................68
TP
25 Propriétés de compteur et de numérotation ..............................................................................................................................71
Avancées CSS
TP
28 Modèle de boîte flexible (flexbox) ................................................................................................................................................. 78
TP
29 Transformations 2D ............................................................................................................................................................................. 82
TP
30 Transformations 2D multiples .......................................................................................................................................................... 84
TP
31 Transformations 3D ............................................................................................................................................................................. 86
TP
32 Transformations 3D multiples .......................................................................................................................................................... 88
TP
33 Transitions ................................................................................................................................................................................................ 90
TP
34 Animations .............................................................................................................................................................................................. 92
TP
35 Modèle de quadrillage (grid) ........................................................................................................................................................... 95
TP
36 Variables en cascade ......................................................................................................................................................................... 101
Annexes
Rappel sur les documents W3C ................................................................................................................................................... 105
État d’avancement actuel CSS ....................................................................................................................................................... 106
Tableaux résumés .............................................................................................................................................................................. 108
Index ....................................................................................................................................................................................................... 121
@
IV
Avant-propos
L
e langage CSS (Cascading Style Sheet, feuille de styles en cascade) permet la définition et la manipulation des
styles appliqués à chaque élément d’un document rédigé dans un langage structurel de balisage (HTML,
XHTML, XML, etc.) par la rédaction de feuilles de styles. Cela contribue à l’objectif essentiel de séparation de la
structure et de la présentation et apporte de multiples avantages :
• possibilité de partager des feuilles de styles entre plusieurs documents et/ou sites ;
• indépendance entre présentation et document source structuré ;
AVANT-propos
• les navigateurs peuvent charger les feuilles de styles sélectivement, de façon à s’adapter au périphérique d’affi-
chage (conception adaptative ou responsive design).
Comme généralement en informatique, c’est un langage en perpétuelle évolution, mais qui présente toutefois
l’exceptionnelle caractéristique de toujours construire sur l’existant, en l’améliorant et en le complétant. En effet, CSS
ne possède pas (ou plus exactement ne possède plus) de versions au sens traditionnel du terme mais propose à la
place des niveaux attribués à des modules indépendants. Chaque niveau CSS complète le précédent en affinant ses
définitions et en ajoutant des fonctionnalités. Tout nouveau niveau est un sur-ensemble des niveaux précédents, si bien
que les fonctionnalités offertes par un niveau donné sont toujours un sous-ensemble de celles offertes par un niveau
supérieur : un navigateur prenant en charge un niveau CSS élevé prendra toujours en charge tous les niveaux
inférieurs.
Vous pourrez rencontrer des références à CSS 1, 2 ou 3, mais cela correspond désormais à la seule date d’approbation :
l’unique recommandation officielle (à ce jour) est CSS 2.1, mise à jour lorsque nécessaire par ajout de modules
développés indépendamment (comme par exemple Sélecteurs Niveau 3 ou Couleurs Niveau 3, intégrés à la
recommandation). Chaque module évolue ensuite à son rythme. En pratique et pour résumer :
• tout module préexistant dans CSS 2.1 verra ses améliorations ultérieures être de niveau 3 et supérieur ;
• tout module absent de CSS 2.1 commencera au niveau 1 lors de son intégration.
C’est ainsi que le module Multi-colonnage, initialement présenté comme CSS 3 puisque mis au point après CSS 2.1,
porte en fait le nom de module Multi-colonnage Niveau 1. Nous traiterons ici tant de la recommandation de base
CSS 2.1 (constituée de CSS 1 complété de CSS 2 et de quelques modules récents, souvent de niveau 3) que des
modules récents nouveaux considérés comme stables et atteignant les stades finaux (CR, candidat à la recommandation,
ou PR, proposé pour la recommandation).
De nombreux outils permettant de réaliser des pages web ou d’en optimiser la conception exploitent le langage CSS :
© Dunod – Toute reproduction non autorisée est un délit
par exemple Bootstrap ou WordPress, mais il existe de nombreux autres systèmes de gestion de contenu et/ou
bibliothèques concernés. Les utilisateurs de ces produits ne disposent pas forcément des connaissances leur permettant
de personnaliser facilement à leur guise les modèles gouvernant ces pages et d’ainsi les optimiser. Examiner la
spécification n’est pas toujours suffisant tout en restant souvent fastidieux.
Ce livre s’adresse à tout public, avec pour but de mieux le familiariser pas à pas avec ce langage pour qu’il puisse par
la suite en tirer le meilleur parti. Il détaille la recommandation en de nombreux travaux pratiques individuels s’appuyant
sur des pages web exemples soigneusement élaborées afin de permettre de tester et de maîtriser successivement
chaque aspect du langage CSS. Apprendre en pratiquant, tel est le principe directeur. Nous n’avons pas la prétention
d’être exhaustifs mais avons toutefois essayé de couvrir tous les aspects actuellement exploitables de ce langage. En
principe, vous devriez réaliser l’ensemble des exercices en une dizaine d’heures, chaque TP individuel demandant de
@
1
Avant-propos
10 minutes (le plus fréquemment) à 45 minutes (pour les deux TP les plus complexes). N’hésitez toutefois pas à passer
plus de temps sur chaque TP, en testant d’autres valeurs afin de voir le résultat, et d’y revenir par la suite pour mener
vos propres exprériences. Seule la pratique vous assurera la maîtrise de ce langage.
Il sera supposé que vous possédiez une connaissance au moins de base du HTML et de ses principaux éléments : nous
nous intéressons ici uniquement à la présentation, pas à la structure, même si nous devrons évidemment nous appuyer
sur celle-ci. Pour réaliser les exercices, vous devrez disposer d’un éditeur de texte. Si le bloc-notes de base (notepad.
exe sous Windows) peut remplir cet office, je vous recommande toutefois l’éditeur gratuit Notepad++ disponible à
l’adresse https://notepad-plus-plus.org/fr/ pour de nombreux systèmes d’exploitation. Vous devrez également disposer
d’un navigateur Internet, de préférence dans sa dernière version, mais il n’est pas nécessaire d’avoir de connexion
Internet : tout se déroulera en local.
Certaines conventions classiques de la programmation sont employées dans ce livre, essentiellement lors de la
présentation de la syntaxe des propriétés ou fonctions :
AVANT-propos
Une dernière précision : CSS est un langage qui applique des propriétés de présentation à des éléments sélectionnés.
Il peut donc être décomposé en deux parties : les sélecteurs et les propriétés. Il est indispensable de maîtriser au moins
raisonnablement les sélecteurs avant de passer à l’étude des propriétés CSS. Il est relativement simple de retrouver la
syntaxe de telle ou telle propriété, si vous vous souvenez de son existence, mais bien plus délicat de sélectionner le ou
les éléments appropriés et eux seulement. Les TP 3 à 8 doivent donc impérativement être effectués et raisonnablement
compris avant de pouvoir passer à la suite.
@
2
Préfixes dédiés
L
a plus grande partie des derniers travaux CSS sont pris en charge par les navigateurs récents. La situation évolue
en permanence, au rythme de la diffusion de nouvelles versions tant des modules CSS que des navigateurs.
Pour assurer une prise en charge des propriétés récentes avant leur intégration définitive, les navigateurs ont
traditionnellement recours à des variantes dédiées accessibles à l’aide de préfixes qui leur sont propres, présentés dans
le tableau suivant.
Internet Explorer -ms-
Introduction
Firefox -moz-
Chrome/Safari -webkit-
Opera -o-
Ces préfixes permettent ainsi à des versions plus anciennes des navigateurs de pouvoir interpréter les propriétés CSS.
Attention toutefois, la prise en charge de telle ou telle propriété par un navigateur, même en employant son préfixe,
dépend de chaque propriété. Parfois, certaines valeurs uniquement ne sont pas prises en charge pour une propriété
par un navigateur, même avec préfixe.
Par exemple, pour un multi-colonnage avec Firefox, il faudrait encore écrire :
{c-moz-column-count: 3 ;}
Pour garantir une fonctionnalité maximale, il conviendrait d’écrire dans le code, par sécurité :
{-moz-column-count: 3 ;
-ms-column-count: 3 ;
-webkit-column-count: 3 ;
-o-column-count: 3 ;
column-count: 3 ;}
Manifestement, une surcharge importante. Pour éviter de devoir saisir du code inutile, vous pouvez recourir à un
script qui génère automatiquement ces préfixes pour les propriétés et fonctions concernées, en fonction du
navigateur appelant la page. Un des plus célèbres, même s’il en existe bien d’autres, est sans doute prefix-free
(http://leaverou.github.io/prefixfree/). C’est un petit fichier JavaScript (2 ko), développé par Lea Verou, dont le rôle
est d’ajouter automatiquement des préfixes propriétaires.
prefix-free est très simple d’emploi. Ajoutez simplement la ligne
<script type="text/javascript"
© Dunod – Toute reproduction non autorisée est un délit
src="https://raw.github.com/LeaVerou/prefixfree/master/prefixfree.min.js">
</script>
juste après la déclaration du CSS.
Vous pouvez également installer ce script à la racine de votre site et l’appeler depuis cet emplacement en insérant la
ligne suivante juste après votre feuille de styles (ou l’appel à celle-ci) :
<script type="text/javascript" src="prefixfree.min.js"> </script>
Reportez-vous si nécessaire au site officiel de prefix-free pour plus de détails.
Nous avons inclus ce script dans les fichiers proposés en téléchargement et l’employons systématiquement dans les fichiers
d’exercice afin de garantir la meilleure compatibilité possible avec une vaste palette de navigateurs, même un peu anciens.
En cas de doute sur la prise en charge d’une propriété par tel ou tel navigateur, je vous invite à vérifier sur l’excellent
site http://caniuse.com/.
@
3
Terminologie : les valeurs CSS
I
l est important de comprendre comment sont exprimées en CSS les valeurs et les unités. Cela est défini par le
module Valeurs et unités Niveau 3 de la spécification CSS 2.1.
Entiers et nombres
Certaines propriétés demandent comme valeur un entier ou un nombre. Celui-ci doit toujours être spécifié selon une
notation décimale, avec zéro ou plus décimales, avec comme séparateur décimal un point. Par exemple :
Introduction
left: 10.5cm
Dimensions
Une dimension est un nombre immédiatement suivi d’un identifiant d’unité, facultatif si la valeur est 0. Il existe deux
types d’unités de distance, relatives (la dimension est proportionnelle à la valeur d’une autre propriété de dimension)
ou absolues.
Type d’unité Identifiant Signification
Unités relatives em Valeur de la propriété font-size de la police du parent
ex Valeur de la propriété x-height de la police du parent
Unités absolues in Pouce. 1in est égal à 2,54 cm.
cm Centimètre
mm Millimètre
pt Point. Un point CSS est égal à 1/72e de pouce.
pc Pica. 1pc est égal à 12 pt.
px Unité pixel. 1px est égal à 0,75 pt.
Par exemple :
font-size: 1.5em
Un pourcentage s’exprime par un nombre immédiatement suivi du signe %. Il est toujours relatif à une autre valeur.
Par exemple :
width: 50%
Couleurs
Une couleur CSS peut être définie de diverses façons, selon le module Couleur Niveau 3 :
• Trois valeurs RGB, exprimées à l’aide de la fonction rgb() sous forme décimale, hexadécimale ou comme pour-
centages.
• Quatre valeurs RGBA à l’aide de la fonction rgba(). Les valeurs hexadécimales ne sont pas autorisées en RGBA.
Le quatrième chiffre, compris entre 0 et 1, détermine l’opacité de la couleur. Les deux déclarations ci-dessous
définissent une opacité explicite de 1 (la valeur par défaut) :
color: rgba(255,0,0,1)
color: rgba(100%,0%,0%,1)
@
4
Introduction • Terminologie : les valeurs CSS
• Trois valeurs HSL (hue-saturation-lightness, teinte-saturation-luminosité) à l’aide de la fonction hsl(). La teinte est
la couleur exprimée en degrés d’un cercle chromatique (0-360) et la saturation et la luminosité sont exprimées
en pourcentages. Soit par exemple color: hsl(0, 100%, 50%) pour du rouge ou color: hsl(120,
100%, 50%) pour du vert sombre.
• Trois valeurs HSLA à l’aide de la fonction hsla(). C’est la contrepartie de la notation RGBA :
color: hsla(120, 100%, 50%, 1)
• Des noms de couleur étendus, comme blue, red, olive, lightgrey, etc. La valeur transparent
est équivalente à la définition d’un noir transparent rgba(0,0,0,0).
Introduction
encadré d’espaces vierges. Les trois exemples ci-dessous sont donc identiques :
url("http://www.monsite.fr/redpoint.png")
url( http://www.monsite.fr/redpoint.png )
url(http://www.monsite.fr/redpoint.png)
© Dunod – Toute reproduction non autorisée est un délit
@
5
Présentation des exercices
Bloc-notes
À chaque début d’exer-
cice un bloc-notes vous
indique le numéro du TP.
Ce numéro est utile car il
sert de référence pour
d’autres exercices. TP
Sélecteurs de pseudo-classes
5 dynamiques
Introduction
C SS introduit le concept de pseudo-éléments et de pseudo-classes pour permettre une mise en forme fondée
sur des informations extérieures à l’arborescence du document. Les pseudo-classes classifient des éléments
selon certaines de leurs caractéristiques qui ne peuvent être déduites de l’arborescence du document, plutôt que
d’après leur nom, leurs attributs ou leur contenu. Les pseudo-classes peuvent être dynamiques, dans le sens où
une caractéristique peut être modifiée et l’élément perdre ou acquérir une pseudo-classe selon les interactions de
l’utilisateur.
Introduction
LEs sÉLEcTEurs
Prérequis : TP 3 à 4
L’introduction procure des Fichier exemple : TP_CSS_05_début.html
indications sur l’exercice à Durée nécessaire : 10 minutes
venir et contient un encadré
précisant les TP éventuelle-
Ouvrez dans votre éditeur de texte le fichier TP_CSS_05_début.html, puis enregistrez-le sous le nom
ment prérequis et les fichiers
d’exercice employés (à télé-
1 TP_CSS_05.html. Affichez ce fichier dans votre navigateur.
charger sur le site des édi- Certains liens (les éléments A en HTML) font référence
tions Dunod, www.dunod. 2 à un emplacement au sein d’une ressource. Ce type
d’URI se termine par un signe dièse (#) suivi d’un iden-
com). Le temps de réalisation tifiant d’ancre, nommé identificateur de fragment, et constitue
est une estimation du un lien vers un élément du document nommé élément cible
(target), comme dans le fichier exemple (dans le premier
nombre de minutes à accor- élément p) :
der par exercice. <a href="#cible">
Un élément cible peut être représenté par la pseudo-classe :
target. Saisissez :
capture
© Dunod – Toute reproduction non autorisée est un délit
Les pseudo-classes :link et :visited s’appliquent respectivement à des liens non visités et visités. Ces deux pseudo-
Les copies d’écran présen-
tées dans ce livre sont réali-
3 classes sont mutuellement exclusives. En HTML, ces pseudo-classes s’appliquent exclusivement aux éléments a dotés d’un
attribut href. Les deux déclarations suivantes sont équivalentes :
@
6
Introduction • Présentation des exercices
puce
Les puces des pas à pas
vous aident à suivre
l’ordre de lecture de
l’exercice.
Introduction
La pseudo-classe :hover s’applique lorsque l’utilisateur place son pointeur sur un élément sans l’activer. La pseudo-classe
4 :active s’applique lorsqu’un élément est activé par l’utilisateur, par exemple entre le moment où l’utilisateur appuie sur le
bouton de la souris et celui où il le relâche. La pseudo-classe :focus s’applique lorsque l’élément possède le focus. Un
élément peut posséder simultanément plusieurs de ces pseudo-classes. Saisissez :
color: blue}
saisir de nouvelles règles CSS.
PrIsE EN MAIN
Lorsque vous placez le pointeur de la souris sur le lien, sa police double de taille. Si vous cliquez sur le lien et maintenez enfoncé le
bouton de la souris, il s’agrandit encore et devient bleu. Presque toujours, les fichiers
d’exercices possèdent déjà une
partie de feuille de styles
remplie : dans l’élément
style, des règles CSS sont
encadrées par les
commentaires /* ne pas
Dans une page, l’utilisateur peut cocher une case ou une option. Certains éléments de menu sont cochés lorsque l’utilisateur toucher à ces règles
5 les sélectionne. En ce cas, la pseudo-classe :checked s’applique. Cette pseudo-classe est dynamique par essence mais peut
être fondée sur la présence d’attributs dans le document (comme les attributs HTML selected et checked). Saisissez :
*/ et /* saisir les
nou velles règles à
:checked {width: 100px ;}
partir d’ici */. Ignorez
ces règles : vous pourrez
toujours y revenir plus tard.
Elles servent à mettre en
forme de façon optimale
l’exercice qui vous est
Lorsque vous cochez une des cases des options, l’élément s’agrandit.
proposé. Vous apprendrez
Fermez le fichier TP_CSS_05.html dans l’éditeur et le navigateur. peu à peu ce qu’elles
signifient. Saisissez les
nouvelles règles après le
dernier commentaire.
@
20
zoom
Le plus souvent, les
captures d’écran sont
recadrées sur la zone
pertinente.
@
7
TP
1
Mise en œuvre de CSS
V ous pouvez appliquer un ou plusieurs styles à votre page de plusieurs façons : dans le corps du document, dans
un élément, à l’aide de l’attribut style ou dans l’élément head, à l’aide d’un élément style ou d’un élément
link.
Prérequis : néant
Fichier exemple : TP_CSS_01_début.html
Durée nécessaire : 10 minutes
Mise en œuvre
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_01_début.html, puis enregistrez-le sous le nom
1 TP_CSS_01.html. Affichez ce fichier dans votre navigateur (avec Notepad++, choisissez Execution, puis sélectionnez
votre navigateur dans la liste des propositions Launch in…).
La première méthode consiste à saisir des styles dans la À l’intérieur de l’élément head, avec un élément
2 balise d’ouverture d’un élément lui-même, à l’aide de
son attribut style. Cette méthode est hautement
3 style. Cette méthode est normalement réservée à la
mise au point provisoire d’une feuille de styles ou pour
déconseillée. Dans le fichier exemple, ajoutez dans le premier une page unique. C’est pour cette dernière raison que nous
élément p l’attribut et sa valeur figurant en gras ci-dessous : l’emploierons par facilité dans ce livre. Saisissez le code en gras
ci-dessous à l’intérieur de l’élément head, avant sa balise de
<body> fermeture :
<h1>Ce titre est en bleu</h1>
<p style="color:green"> <head>
ce paragraphe est en vert. (…)
</p> <style type="text/css">
</body> h1 {color: blue}
</style>
Enregistrez votre fichier, puis rafraîchissez votre navigateur. Le </head>
paragraphe s’affiche en vert.
Enregistrez votre fichier, puis rafraîchissez votre navigateur. Le
titre s’affiche en bleu.
@
8
TP 1 • Mise en œuvre de CSS
À l’intérieur de l’élément head, avec un élément Ouvrez dans l’éditeur le fichier style01.css pour
4 link vers une feuille de styles externe. C’est la mé-
thode fortement recommandée. Ajoutez le code en gras
5 en examiner grossièrement le code (sans entrer dans le
détail). Le mécanisme de cascade permet au navigateur
ci-dessous à l’intérieur de l’élément head, avant l’élément de classer les règles selon leur spécificité pour déterminer celle
style : qui est applicable.
Fondamentalement, tout élément hérite du style de son parent
<head> (l’élément qui le contient), sauf si la feuille de styles précise le
(…) contraire. La théorie de l’héritage est donc très simple : vous par-
<link href="style01.css" tez de l’information la plus externe (la feuille de styles externe) et
rel="stylesheet"> progressez vers l’intérieur, comme suit :
<style>
(…) • propriétés de feuille de styles externe de l’élément courant ;
</head>
• propriétés de feuille de styles locale de l’élément courant ;
Enregistrez votre fichier, puis rafraîchissez votre navigateur. Vous • styles de ligne de l’élément courant.
voyez de nouvelles mises en forme s’appliquer au document.
C’est pourquoi dans notre cas, même si la feuille de styles ex-
Mise en œuvre
terne définit une couleur pour le titre et les paragraphes, les
styles définis en interne (dans le head pour le titre et dans l’attri-
but style pour le p) prennent le dessus.
Remarquez toutefois que si l’élément link avait été situé après
l’élément style, dans le head, la feuille de styles externe au-
rait pris le dessus sur les règles de l’élément style, car venant
après. Ce comportement semble toutefois parfois dépendre du
navigateur.
Fermez les fichiers dans l’éditeur et le navigateur.
© Dunod – Toute reproduction non autorisée est un délit
@
9
TP Rédaction d’une feuille
2
de styles externe
U ne feuille de styles externe est un fichier texte ordinaire, créé dans un éditeur de texte quelconque et enregistré
avec une extension .css. Elle est composée de règles CSS et de commentaires. Une règle CSS se compose d’un
sélecteur suivi d’un bloc contenant une ou plusieurs déclarations.
Prérequis : néant
Fichier exemple : TP_CSS_02_début.html
Mise en œuvre
Ouvrez dans votre éditeur de texte le fichier Veillez à toujours commenter votre code CSS : un commentaire
1 TP_CSS_02_début.html, puis enregistrez-le
sous le nom TP_CSS_02.html. Dans ce fichier,
initial précisant le but de la feuille de styles est indispensable pour
vous y retrouver par la suite.
ajoutez dans l’élément head la ligne en gras ci-dessous :
Saisissez en dessous votre première règle CSS :
<head>
(…)
<link href="style02.css"
4
rel="stylesheet"> h1 {font-style: italic}
</head> Une règle CSS se compose d’un sélecteur suivi d’un bloc de
Enregistrez le fichier puis exécutez-le dans votre navigateur. déclaration(s) :
@
10
TP 2 • Rédaction d’une feuille de styles externe
Saisissez maintenant à la suite les règles ci-dessous. Ne cherchez pas à quoi correspondent les sélecteurs ou les déclarations
5 employés, nous y reviendrons largement : regardez simplement la structure.
h1 {font-weight: bold}
h1 {font-size: 2em}
Plusieurs déclarations peuvent être rassemblées en un bloc, sous
forme de liste séparée par des points-virgules (;). Les trois règles
précédentes peuvent être rassemblées en procédant comme
montré ci-dessous : ajoutez les points-virgules bleus et remplacez
ce qui est rouge barré par des espaces.
h1 {font-style: italic ;}
h1 {font-weight: bold ;}
hi {font-size: 2em ;}
Mise en œuvre
N’oubliez surtout pas le point-virgule à la fin de chaque déclaration. Il est d’ailleurs conseillé de le mettre même lorsqu’il n’y a qu’une
déclaration, cela évitant toute erreur potentielle en cas d’ajout de déclaration. Et remarquez comme les indentations clarifient le code.
Enregistrez le fichier, puis rafraîchissez le navigateur.
Saisissez à la suite les règles ci-dessous : Pour attribuer une même règle à plusieurs éléments,
6 7 séparez les sélecteurs par une virgule. Saisissez la règle
suivante :
Même si elle reste rudimentaire, vous avez construit ici une pre-
mière feuille de styles. C’est ainsi qu’il faudrait rédiger votre CSS,
que ce soit avec une feuille externe ou dans un élément style
à l’intérieur de l’élément head. Dans ce livre, nous placerons
toujours les déclarations CSS à l’intérieur de l’élément head,
dans un élément style, comme exposé à l’étape 3 du TP pré-
cédent, afin d’éviter une inutile multiplication de fichiers.
© Dunod – Toute reproduction non autorisée est un délit
Fermez le fichier TP_CSS_02.html dans l’éditeur et le navigateur, ainsi que le fichier CSS dans l’éditeur.
@
11
Les sélecteurs
Fondamentalement, CSS se décompose en deux parties : les sélecteurs, pour sélectionner le ou les éléments
concernés, et les propriétés appliquées à ou aux éléments sélectionnés. Il est indispensable de maîtriser au moins
raisonnablement les sélecteurs avant de passer à l’étude des propriétés CSS. Nous ne le rappellerons pas dans les
prérequis tellement cela est fondamental.
Un sélecteur CSS détermine quels éléments sont identifiés dans le document : autrement dit, à quoi vont s’appliquer
LES SÉLECTEURS
le ou les styles définis dans le bloc de déclaration qui le suit. Ce peut être un simple nom d’élément ou une chaîne
complexe de sélecteurs séparés par des opérateurs de combinaison. Le module Sélecteurs Niveau 3 a été intégré
à la spécification CSS 2.1.
© Dunod – Toute reproduction non autorisée est un délit
@
13
TP
3
Sélecteurs d’éléments
L a première catégorie de sélecteurs sélectionne des éléments directement d’après leur nom ou leur situation directe
dans le document.
Prérequis : néant
Fichier exemple : TP_CSS_03_début.html
Durée nécessaire : 10 minutes
LES SÉLECTEURS
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_03_début.html, puis enregistrez-le sous le nom
1 TP_CSS_03.html. Affichez ce fichier dans votre navigateur.
Le sélecteur universel * correspond à tous les types Il est parfois souhaitable de sélectionner des éléments
2 d’éléments de l’arborescence du document, donc à tous
les éléments. Un sélecteur de type, plus restrictif, identi-
3 qui sont des descendants d’un autre élément. Vous
créez un sélecteur de descendant en combinant deux
fie toute instance d’un unique type d’élément dans le document. sélecteurs séparés par un espace vierge. Ajoutez une nouvelle
Saisissez dans l’élément style de l’élément head : règle dans l’élément style :
@
14
TP 3 • Sélecteurs d’éléments
Il est possible de créer des sélecteurs de descendants
4 plus complexes. Saisissez :
LES SÉLECTEURS
Vous pouvez combiner des sélecteurs de descendants
6 et d’enfants. Ajoutez la règle :
@
15
TP 3 • Sélecteurs d’éléments
Un sélecteur de parent adjacent identifie un élément Vous pouvez sélectionner un élément frère d’un autre
7 frère d’un autre élément et situé immédiatement après
ce dernier. Il est créé à l’aide du combinateur +.
8 élément, situé n’importe où après lui à l’aide du sélec-
teur de frère, créé à l’aide du combinateur ~ .
@
16
TP
4
Sélecteurs d’attributs
L a seconde catégorie de sélecteurs sélectionne des éléments d’après certains de leurs attributs, dont essentiellement
la classe (attribut class) ou l’identifiant (attribut id).
Prérequis : TP 3
Fichier exemple : TP_CSS_04_début.html
Durée nécessaire : 10 minutes
LES SÉLECTEURS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_04_début.html, puis enregistrez-le sous le nom
1 TP_CSS_04.html. Affichez ce fichier dans votre navigateur.
En HTML, div.valeur et div[class~=valeur] signifient la même chose. Les règles suivantes sont équivalentes.
3 Cette syntaxe avec le point se nomme sélecteur de classe :
@
17
TP 4 • Sélecteurs d’attributs
Vous pouvez définir un sous-ensemble de valeurs séparées par un point. Saisissez :
CSS a accordé tant de puissance à l’attribut class que les auteurs conçoivent souvent leur propre langage de document
4 d’après des éléments dépourvus de toute présentation associée (comme des div et span), en affectant les informations de
style à l’aide de l’attribut class. C’est une (mauvaise) habitude à éviter : les éléments structuraux d’un langage possèdent
des significations universelles, contrairement aux classes définies par l’utilisateur.
Un attribut de type identifiant (ID) permet d’identifier de façon unique un élément. En HTML cet attribut se nomme id.
5 L’attribut id permet d’affecter un identifiant à une instance unique d’un élément dans l’arborescence de document. Un sélec-
teur d’id CSS contient un signe dièse (#) immédiatement suivi de la valeur de l’id, qui doit être un identifiant. Par exemple,
saisissez :
Un sélecteur d’ID est plus spécifique qu’un sélecteur d’attribut. Par exemple, en HTML, le sélecteur #p123 est plus spécifique que le
sélecteur [id=p123] en termes de cascade.
@
18
TP
Sélecteurs de pseudo-classes
5 dynamiques
C SS introduit le concept de pseudo-éléments et de pseudo-classes pour permettre une mise en forme fondée
sur des informations extérieures à l’arborescence du document. Les pseudo-classes classifient des éléments
selon certaines de leurs caractéristiques qui ne peuvent être déduites de l’arborescence du document, plutôt que
d’après leur nom, leurs attributs ou leur contenu. Les pseudo-classes peuvent être dynamiques, dans le sens où
une caractéristique peut être modifiée et l’élément perdre ou acquérir une pseudo-classe selon les interactions de
l’utilisateur.
LES SÉLECTEURS
Prérequis : TP 3 à 4
Fichier exemple : TP_CSS_05_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_05_début.html, puis enregistrez-le sous le nom
1 TP_CSS_05.html. Affichez ce fichier dans votre navigateur.
<a href="#cible">
Un élément cible peut être représenté par la pseudo-classe :
target. Saisissez :
Les pseudo-classes :link et :visited s’appliquent respectivement à des liens non visités et visités. Ces deux pseudo-
3 classes sont mutuellement exclusives. En HTML, ces pseudo-classes s’appliquent exclusivement aux éléments a dotés d’un
attribut href. Les deux déclarations suivantes sont équivalentes :
@
19
TP 5 • Sélecteurs de pseudo-classes dynamiques
Saisissez une des règles pour :link, puis la règle pour :visited. Enregistrez le fichier, rafraîchissez votre navigateur (désormais,
nous ne rappellerons plus ces étapes, mais vous devez les respecter après chaque modification du fichier html). Comme nous avons
déjà visité le lien, il s’affiche en vert.
La pseudo-classe :hover s’applique lorsque l’utilisateur place son pointeur sur un élément sans l’activer. La pseudo-classe
4 :active s’applique lorsqu’un élément est activé par l’utilisateur, par exemple entre le moment où l’utilisateur appuie sur le
bouton de la souris et celui où il le relâche. La pseudo-classe :focus s’applique lorsque l’élément possède le focus. Un
élément peut posséder simultanément plusieurs de ces pseudo-classes. Saisissez :
color: blue}
prise en main
Lorsque vous placez le pointeur de la souris sur le lien, sa police double de taille. Si vous cliquez sur le lien et maintenez enfoncé le
bouton de la souris, il s’agrandit encore et devient bleu.
Dans une page, l’utilisateur peut cocher une case ou une option. Certains éléments de menu sont cochés lorsque l’utilisateur
5 les sélectionne. En ce cas, la pseudo-classe :checked s’applique. Cette pseudo-classe est dynamique par essence mais peut
être fondée sur la présence d’attributs dans le document (comme les attributs HTML selected et checked). Saisissez :
Lorsque vous cochez une des cases des options, l’élément s’agrandit.
@
20
TP
Sélecteurs de pseudo-classes
6 structurelles
L e concept de pseudo-classes structurelles correspond à des classes présentes dans l’arborescence du document
mais qui ne peuvent être représentées par d’autres sélecteurs simples ou combinateurs. Par exemple, la pseudo-
classe :root correspond à l’élément racine du document. En HTML, c’est toujours l’élément html.
Prérequis : néant
Fichier exemple : TP_CSS_06_début.html
LES SÉLECTEURS
Durée nécessaire : 20 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_06_début.html, puis enregistrez-le sous le nom
1 TP_CSS_06.html. Affichez ce fichier dans votre navigateur.
Le sélecteur :nth-child(x) identifie un élément La valeur an+b peut être remplacée par odd ou even.
2 qui est le xe enfant d’un parent. Sa syntaxe exacte est
:nth-child(an+b), où a et b sont des entiers
3 odd est équivalent à 2n+1 et even à 2n. Il est ainsi
possible de sélectionner chaque ligne d’un tableau, ou
positifs, négatifs ou nuls (mais pas simultanément). Pour des va- d’alterner les couleurs de paragraphes. Saisissez, avec ou sans le
leurs de a et b supérieures à zéro, cela répartit les enfants de commentaire :
l’élément en groupes de a éléments (le dernier groupe compre-
nant le reste) et sélectionne le b élément de chaque groupe. Le tr:nth-child(odd) {
premier enfant d’un élément possède comme index 1. Par background-color:
exemple, saisissez : rgba(210,210,255,.8);}
/* chaque ligne impaire */
tr:nth-child(4n+1) {color: navy ;} tr:nth-child(even) {
tr:nth-child(4n+2) {color: green ; background-color:
font-style: italic ;} rgba(200,235,230,.8) ;}
tr:nth-child(4n+3) {color: red ; /* chaque ligne paire */
font-weight: bold ;}
tr:nth-child(4n+4) {color: purple ; Les valeurs de a et b sont interprétées comme suit :
font-family: monospace ;}
• si a et b sont tous deux égaux à zéro, la pseudo-classe ne
Ici, nous avons créé des groupes de 4 éléments (a = 4) et avons représente aucun élément du document. La valeur a peut
attribué un style à chaque élément de chaque groupe. Remar- être négative, mais seules les valeurs positives de an+b (n
quez qu’il a été ajouté des modifications de la police pour mieux étant toujours positif) peuvent représenter un élément du
mettre en évidence les différences. document ;
© Dunod – Toute reproduction non autorisée est un délit
@
21
TP 6 • Sélecteurs de pseudo-classes structurelles
Saisissez :
La pseudo-classe :first-child identifie un
4 élément qui est le premier enfant d’un autre élément.
Elle est strictement identique à :nth-child(1). th:nth-of-type(2n) {font-size: 1.3em ;}
Saisissez :
Chaque en-tête pair (donc ici uniquement le deuxième) voit sa
h1 > span:first-child { police agrandie. Cette pseudo-classe permet par exemple de faire
font-style:italic ; alterner la position d’images flottantes :
font-size: 0,75em ;}
img:nth-of-type(2n+1) {float: right ;}
img:nth-of-type(2n) {float: left ;}
@
22
TP 6 • Sélecteurs de pseudo-classes structurelles
Il existe de nombreuses autres pseudo-classes structu-
8 relles :
La pseudo-classe :first-of-type représente un
élément qui est le premier enfant de ce type dans la liste des
enfants de son élément parent. Identique à :nth-of-
type(1). Par exemple, table tr:first-of-type
identifie la première ligne tr d’un tableau HTML :
.ventes tr:first-of-type {
background-color:
rgba(100,100,100,1) ;
color: white ;}
LES SÉLECTEURS
élément dépourvu de tout enfant et de tout contenu.
Les commentaires, les instructions de traitement et
autres nœuds sont sans effet. Saisissez :
.ventes tr:last-of-type {
11 comme argument un sélecteur simple (sauf la pseudo-
classe de notation elle-même). Elle représente un élé-
background-color: ment qui n’est pas représenté par son argument. Il est interdit
rgba(50,50,50,1) ; d’imbriquer des négations ou d’employer des pseudo-éléments
color: white ; (qui ne sont pas des sélecteurs simples) comme arguments. Par
font-weight: bold ;} exemple, button:not([disabled]) représente tous les
éléments button d’un document HTML qui ne sont pas dé-
sactivés. Saisissez :
@
23
TP
Sélecteurs
7 de pseudo-éléments
U n pseudo-élément crée une abstraction d’arborescence de document allant au-delà de ce qui est spécifié par le
langage du document. Les pseudo-éléments CSS permettent d’affecter un style à un contenu inexistant dans le
document source. Un pseudo-élément était autrefois écrit avec un signe deux-points (:) suivi du nom du pseudo-
élément. Il doit désormais s’écrire avec deux signes deux-points (::) suivis du nom du pseudo-élément, afin de mieux
distinguer les pseudo-éléments des pseudo-classes. Si l’ancienne syntaxe reste toutefois acceptée pour les pseudo-
éléments CSS 1 et 2, mieux vaut adopter la syntaxe standard pour tous les pseudo-éléments.
LES SÉLECTEURS
Un sélecteur ne peut posséder qu’un seul pseudo-élément, obligatoirement situé après le dernier sélecteur simple
prise en main
d’un sélecteur.
Prérequis : TP 3 à 6
Fichier exemple : TP_CSS_07_début.html
Durée nécessaire : 20 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_07_début.html, puis enregistrez-le sous le nom
1 TP_CSS_07.html. Affichez ce fichier dans votre navigateur.
Le pseudo-élément ::first-line applique un style au contenu de la première ligne mise en forme d’un paragraphe.
2 Vous pouvez lui appliquer toutes les propriétés de police, de couleur, de fond, d’espacement de mots et de lettres, de déco-
ration et de transformation de texte et de hauteur de ligne. Saisissez :
Cette règle agrandit d’une demi-fois la taille de la police de la première ligne du paragraphe de classe un, bien que le sélecteur
p::first-line n’identifie aucun élément HTML réel.
La longueur de la première ligne mise en forme dépend de nombreux facteurs, dont la largeur de la page, la taille de la police, etc.
Modifiez la largeur de la fenêtre du navigateur pour modifier en conséquence la largeur de la première ligne.
@
24
TP 7 • Sélecteurs de pseudo-éléments
Le pseudo-élément ::first-letter sélectionne la première lettre de la première ligne d’un bloc, non précédée d’un
3 autre contenu. Cet élément peut être employé pour créer des lettrines, un classique effet typographique. Les signes de ponc-
tuation, dont les guillemets et apostrophes, qui précèdent ou suivent la première lettre sont inclus. Un chiffre est considéré
comme première lettre (le 1 de 12, par exemple). Des lettres combinées (comme le œ de œil en français) sont considérées comme
première lettre. Saisissez :
La première lettre doit obligatoirement être présente dans la première ligne de texte mise en forme. Vous pouvez employer ce
pseudo-élément avec tout élément bloc renfermant du texte, ou un descendant de même flux renfermant du texte. Vous pouvez lui
LES SÉLECTEURS
appliquer les propriétés de police, de transformation et de décoration de texte, de marge, d’espacement, de bordure, de couleur, de
fond, d’espacement de lettres et de mots (si adéquat), de hauteur de ligne, et d’alignement vertical (uniquement si float est fixé à
none).
Si l’élément ::first-letter est inclus dans un élément ::first-line, il hérite, tout en les outrepassant le cas
4 échéant, des propriétés définies sur ::first-ligne.
p::first-letter {
font-style: italic ;
font-size: 1.5em ;
color: red ;}
© Dunod – Toute reproduction non autorisée est un délit
@
25
TP 7 • Sélecteurs de pseudo-éléments
Les pseudo-éléments ::before et ::after servent à insérer du contenu généré avant ou après le contenu d’un
5 élément. Le contenu inséré est spécifié à l’aide de la propriété content, employée exclusivement avec ces deux pseudo-
éléments. Sa syntaxe complète est la suivante :
Cette règle insère la chaîne « REMARQUE : » avant le contenu de tout élément P dont l’attribut class a pour valeur remarque.
Il est possible d’insérer des sauts de ligne dans une chaîne générée à l’aide de la séquence d’échappement \A. Un contenu généré
ne modifie pas l’arborescence du document. Comme vous pouvez le constater, lorsque les pseudo-éléments ::first-letter et/
ou ::first-line sont appliqués à du contenu généré avec ::before et ::after, ils s’appliquent à la première lettre ou ligne
de l’élément qui comprend le contenu généré.
Cette règle insère l’image nommée attention.jpg et située dans le dossier img situé à la racine du site avant tout élément
P dont l’attribut class a pour valeur remarque2.
@
26
TP
8
Spécificité d’un sélecteur
T ous les sélecteurs n’ont pas la même spécificité. En principe, toute règle annule une règle précédente (située plus
haut dans la feuille de styles), sauf si la premièrte est plus spécifique, autrement dit plus précise.
Prérequis : TP 3 à 7
Fichier exemple : TP_CSS_08_début.html
Durée nécessaire : 10 minutes
LES SÉLECTEURS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_08_début.html, puis enregistrez-le sous le nom
1 TP_CSS_08.html. Affichez ce fichier dans votre navigateur.
La spécificité d’un sélecteur est calculée à l’aide de trois nombres a, b et c, comme suit :
2
• a = nombre de sélecteurs d’ID dans le sélecteur ;
• b = nombre de sélecteurs de classe, d’attribut et de pseudo-classe dans le sélecteur ;
• c = nombre de sélecteurs de type et de pseudo-élément dans le sélecteur.
Le sélecteur universel est ignoré. De multiples occurrences du même sélecteur sont toutes comptées. Un sélecteur présent dans une
pseudo-classe de négation est compté, mais pas la pseudo-classe de négation elle-même.
Les trois nombres a, b et c sont concaténés (et non additionnés) pour donner la spécificité. Saisissez une par une les règles suivantes,
en regardant à chaque étape l’aspect obtenu :
* {font-style: italic ;}
Tous les éléments voient leur texte s’afficher en italique. Cette règle ne possède aucun sélecteur, puisque le sélecteur universel est
ignoré. Sa spécificité est donc de zéro.
li {font-style: normal ;}
Cette règle possède un sélecteur de type. On obtient a = 0, b = 0, c = 1, donc une spécificité de 001 ou 1 : cette règle l’emporte sur
la précédente et les éléments li (lignes de liste) ne sont plus affichées en italique.
ul li {color: blue ;}
© Dunod – Toute reproduction non autorisée est un délit
Cette règle possède deux sélecteurs de type. On obtient a = 0, b = 0, c = 2, donc une spécificité de 002 ou 2 : cette règle l’emporte
sur les précédentes et les lignes de listes à puces (éléments li enfants d’un élément ul) sont affichées en bleu.
@
27
TP 8 • Spécificité d’un sélecteur
Poursuivez en saisissant de nouvelles règles :
3
ul li + li {color: green ;}
Il y a ici trois sélecteurs de type, donc une spécificité de 3. Les lignes qui suivent une autre ligne dans une liste à puces (autrement dit,
toutes sauf la première) sont affichées en vert.
rouge pâle.
prise en main
Poursuivez en saisissant trois dernières règles, en regardant toujours à chaque fois l’effet obtenu :
4
li.red.cadre {border: 4px solid green ;}
Un sélecteur de type mais deux sélecteurs de classe, d’où une spécificité de 21. La ligne de classe red cadre affiche un cadre vert.
@
28
Modèle de boîtes CSS
à l’exception (normalement) du contenu, ces zones sont souvent de taille nulle (même si cela dépend également
du navigateur). De ce fait, il est facile de penser abusivement que la taille visuelle d’un élément est celle de sa boîte
© Dunod – Toute reproduction non autorisée est un délit
de contenu. Cela est faux. Le bord externe gauche représente le bord d’un élément, y compris l’espacement, la
bordure et la marge. Le bord interne gauche représente le bord du seul élément, à l’exclusion de l’espacement, la
bordure et la marge. Et il en va de même pour les trois autres côtés.
Cela est compliqué du fait que la propriété width (largeur) d’un élément définit la largeur du contenu, soit la
distance entre le bord interne gauche et le bord interne droit. De même, sa hauteur (propriété height) est égale
à la hauteur du contenu, soit la distance entre le bord interne haut et le bord interne bas. Mais les largeurs affichées
dépendront du paramètrage des propriétés des trois autres aires.
@
29
TP
9
Propriétés de marge
L ’aire de marge est la boîte la plus externe d’un bloc CSS. Elle occupe le maximum de l’espace disponible (ou
MODÈLE DE BOÎTES CSS
spécifié). Les marges sont toujours transparentes et leurs dimensions sont gérées par la propriété margin, qui à
l’aide de ses propriétés associées définit la taille de l’espace transparent entre le bord de l’écran (ou d’un élément parent)
et l’élément actif.
Prérequis : néant
Fichier exemple : TP_CSS_09_début.html
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_09_début.html, puis enregistrez-le sous le nom
1 TP_CSS_09.html. Affichez ce fichier dans votre navigateur.
Les propriétés de marge se nomment assez logiquement margin-côté, où côté possède les valeurs left,
2 right, top ou bottom. La syntaxe de ces propriétés est la suivante :
@
30
TP 9 • Propriétés de marge
Les propriétés de marge possèdent une forme raccourcie, la propriété margin. Celle-ci peut accepter de une à quatre
3 valeurs, dont la signification est la suivante :
margin: touscôtés
margin: hautbas droitgauche
margin: haut droitgauche bas
margin: haut droit gauche bas
Remarquez que seuls des espaces séparent les valeurs individuelles. Pour obtenir une marge de 20 pixels en haut et en bas et une
marge de 50 pixels à droite et à gauche pour des éléments div de classe a, vous pourriez employer indifféremment :
Un emploi souvent méconnu des marges est pour centrer un élément non textuel dans son conteneur parent. Pour le texte,
4 il existe la propriété text-align, comme nous le verrons plus loin, mais celle-ci est inopérante pour les contenus non
textuels. L’astuce consiste à employer la valeur auto de la propriété margin : le navigateur répartit alors également les
espaces. Pour ce faire, on se sert de la forme à deux paramètres. Attention, pour que cela fonctionne il est indispensable d’attribuer
une largeur explicite à l’élément, à l’aide de sa propriété width (étudiée sous peu). Saisissez :
L’élément se centre horizontalement. Un centrage vertical est bien plus délicat à obtenir, la propriété vertical-align ne s’appli-
quant qu’aux tableaux. Mais cela dépasse la portée de ce livre. Nous verrons par la suite, avec le modèle de boîte flexible (flexbox),
comment obtenir différement et plus facilement ces deux types de centrage.
Fermez le fichier TP_CSS_09.html dans le navigateur et l’éditeur.
© Dunod – Toute reproduction non autorisée est un délit
@
31
TP
10
Propriétés de bordure
L ’aire de bordures se situe à l’intérieur de l’aire de marges. Gérée par la propriété border et ses propriétés
MODÈLE DE BOÎTES CSS
Prérequis : TP 9
Fichier exemple : TP_CSS_10_début.html
Durée nécessaire : 15 minutes
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_10_début.html, puis enregistrez-le sous le nom
1 TP_CSS_10.html. Affichez-le dans votre navigateur.
Les bordures sont définies à l’aide des propriétés border-côté et de leurs propriétés apparentées.
2
Ainsi, border-width définit la largeur de la bordure. Les largeurs peuvent être définies avec les valeurs thin (mince), thick
(épaisse), medium (moyenne) ou exprimées en points. Vous pouvez définir individuellement la largeur de la bordure de chaque côté
à l’aide de border-côté-width. L’ordre abrégé de la propriété border-width est identique à celui de margin, soit :
{border-width: haut droite bas gauche}
Saisissez :
@
32
TP 10 • Propriétés de bordure
Cette fois, vous voyez la bordure, avec ses quatre largeurs différentes. Le plus souvent toutefois, on applique à un élément
4 une bordure identique sur les quatre côtés. Pour cela, on emploie la propriété abrégée border. L’ordre à respecter est le
suivant :
{border: border-width border-style border-color ;}
Saisissez :
Il existe une autre propriété CSS 2, outline. Un encadré n’occupe pas d’espace (il se place à la limite de la marge, à l’exté-
6 rieur de la zone de bordure) et peut ne pas être rectangulaire. La propriété outline possède une syntaxe similaire mais
non identique à celle de border :
@
33
TP
Propriétés avancées
11 de bordure
L e module Arrière-plans et bordures Niveau 3 définit de nouvelles propriétés de bordures, permettant d’obtenir des
MODÈLE DE BOÎTES CSS
bordures arrondies, des ombres portées et des bordures créées à partir d’images.
Prérequis : TP 10
Fichier exemple : TP_CSS_11_début.html
Durée nécessaire : 10 minutes
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_11_début.html, puis enregistrez-le sous le nom
1 TP_CSS_11.html. Affichez ce fichier dans votre navigateur.
La propriété border-radius permet d’obtenir des bordures arrondies. Nativement prise en charge par tous les naviga-
2 teurs récents, elle nécessite que la propriété border soit elle-même définie. Vous pouvez employer de une à quatre
valeurs :
border-radius: hautgauche hautdroit basdroit basgauche ;
border-radius: hautgauche hautdroitbasgauche basdroit ;
border-radius: hautgauchebasdroit hautdroitbasgauche ;
border-radius: tousangles ;
Saisissez :
Lorsque vous employez les bordures arrondies, il devient indispensable d’appliquer un espacement (padding) à un élément
contenant du texte, faute de quoi celui-ci serait partiellement recouvert.
Appliquer des valeurs différentes permet d’obtenir des effets particuliers. Saisissez :
3 .br2 {border: 8px solid green ;
border-radius: 0 25px 50px ;}
@
34
TP 11 • Propriétés avancées de bordure
La propriété box-shadow ajoute une ou plusieurs ombres portées à la boîte.
4
box-shadow: ombre-h ombre-v [flou] [portée] [couleur] [inset] ;
Saisissez :
.bs1 {box-shadow: 10px 10px 25px 10px red ;}
Remarquez que l’ombre « sort » du modèle de boîte classique et peut donc empièter sur
Vous pouvez définir à l’aide de cette propriété plusieurs ombres portées, en les séparant à l’aide d’une virgule. Par défaut,
5 l’ombre est extérieure : le paramètre final inset crée une ombre intérieure (à ne pas confondre avec un arrière-plan). Par
exemple :
.bs2 {
box-shadow: 10px 10px 50px 20px pink inset, 10px 10px 5px ;}
La propriété border-image définit une image comme bordure d’un élément. C’est en réalité une propriété raccourcie
6 dont les propriétés individuelles ne sont pas ou peu reconnues par les navigateurs actuels. Il faut donc employer cette pro-
priété raccourcie sous la forme :
@
35
TP 11 • Propriétés avancées de bordure
Le paramètre répétition fixé ici à round impose qu’un nombre entier d’éléments latéraux soient toujours entière-
7 ment affichés : leur taille est légèrement ajustée pour parvenir à un compte rond (round). En choisissant à la place
repeat, les éléments conservent leur taille initiale, sans déformation, si bien qu’il se peut que certains soient tronqués :
.bi2 {border: 30px solid transparent ;
border-image: url(img/borderimg.png) 30 repeat ;}
MODÈLE DE BOÎTES CSS
prise en main
Vous pourriez enfin omettre ce dernier paramètre, ce qui équivaut à retenir la valeur de répétition par défaut, stretch :
8 les côtés sont alors constitués d’un unique élément étiré. Saisissez :
Je vous encourage à modifier le paramètre largeur (légèrement au début !) : vous verrez qu’il est possible d’obtenir une multitude
d’effets très différents. Cela au point qu’il est souvent difficile de prédire ce qui peut être obtenu à partir d’une image donnée…
Lorsque vous aurez achevé vos essais, fermez le fichier TP_CSS_11.html dans l’éditeur et le navigateur.
@
36
TP
12
Propriétés d’espacement
L ’espace suivant dans le modèle de boîte CSS est l’aire d’espacement : la surface entre le contenu et la limite
Prérequis : TP 9 à 11
Fichier exemple : TP_CSS_12_début.html
Durée nécessaire : 10 minutes
Ouvrez le fichier TP_CSS_12_début.html. Examinez bien le résultat obtenu : vous devriez obser-
1 Enregistrez-le sous le nom TP_CSS_12.html.
Affichez ce fichier dans votre navigateur.
3 ver plusieurs choses curieuses, que vous n’attendiez pas
forcément. Par exemple, des espaces sont apparus entre
le texte normal et les mots de code affichés en police Courier.
De même, les différents paragraphes et éléments se sont
La propriété padding établit un espace vierge autour déplacés.
2 du contenu de l’élément, à l’intérieur de la bordure. Elle
utilise la même syntaxe que la propriété margin, y
La raison en tient à ce que nous avons employé le sélecteur uni-
versel * : l’espacement s’applique à tous les éléments quels qu’ils
compris la syntaxe raccourcie. Elle est presque indispensable si soient, y compris body et surtout ici l’élément code qui nous
vous définissez une bordure, pour éviter que le contenu soit servait pour le code. Nous ne voulons d’espacement que pour
collé à celle-ci. Saisissez : l’élément div de classe cadre et les éléments p qu’il contient.
Il faut donc remplacer la règle précédente par :
* {padding: 5px 10px ;}
div.cadre, div.cadre > p
{padding: 5px 10px ;}
© Dunod – Toute reproduction non autorisée est un délit
@
37
TP
13
Propriétés de contenu
L ’aire de contenu est la boîte la plus interne du modèle CSS. Comme son nom l’indique, elle renferme le contenu de
MODÈLE DE BOÎTES CSS
l’élément actif.
Prérequis : TP 9 à 12
Fichier exemple : TP_CSS_13_début.html
Durée nécessaire : 15 minutes
prise en main
Ouvrez dans votre éditeur de texte le fichier Nous avions saisi les valeurs en pixels, donnant une taille
1 TP_CSS_13_début.html, puis enregistrez-le
sous le nom TP_CSS_13.html. Affichez ce fichier
3 absolue. Saisissez ces nouvelles règles, pour donner aux
div suivantes des valeurs en pourcentage de la taille de
dans votre navigateur. leur conteneur :
Les propriétés de l’aire de contenu d’un élément sont div.c {width: 80% ;}
2 height et width. Ils sont analogues aux attributs
HTML correspondants et déterminent la hauteur et la
div.d {height: 45% ;}
@
38
TP 13 • Propriétés de contenu
La propriété overflow, applicable aux conteneurs
4 bloc, peut posséder les valeurs visible (valeur par
défaut, le contenu n’est pas tronqué et peut donc être
affiché en dehors de la boîte bloc), hidden (contenu tronqué
sans dispositif de défilement), scroll (contenu tronqué avec
dispositif de défilement affiché, que le contenu soit tronqué ou
non) et auto (comportement dépendant du navigateur, mais
souvent avec mécanisme de défilement en cas de dépassement).
Saisissez les règles suivantes, puis examinez le comportement en
plein écran et avec une fenêtre réduite.
Quatre propriétés permettent de limiter la dimension du contenu, tant pour le maximum que pour le minimum : min-
5 width, max-width, min-height et max-height. Ces propriétés reçoivent comme valeur une valeur positive ou
nulle (et donc pas négative) ou un pourcentage relatif à la dimension concernée du bloc conteneur. Si la dimension du
conteneur est négative, la valeur devient zéro. Saisissez :
Lorsque vous modifiez la largeur de la fenêtre, la div de classe C3 (celle du bas) possède toujours une largeur comprise entre les
deux valeurs spécifiées.
Fermez le fichier TP_CSS_13.html dans l’éditeur et le navigateur.
@
39
TP
Propriétés de
14 positionnement
E n CSS, une boîte peut désormais être présentée selon quatre schémas de positionnement : le flux normal, un
MODÈLE DE BOÎTES CSS
positionnement absolu dans un bloc conteneur, flottant ou selon le modèle flexible qui fera l’objet d’une étude
détaillée par la suite. Le type de boîte CSS est initialement défini par la propriété display et conditionne largement
son comportement dans le modèle de mise en forme visuel. Elle s’applique à tous les éléments. Viennent ensuite les
propriétés position et float ainsi que, le cas échéant, les propriétés de positionnement top, bottom, left et
right.
prise en main
Prérequis : TP 9 à 13
Fichier exemple : TP_CSS_14_début.html
Durée nécessaire : 15 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_14_début.html, puis enregistrez-le sous le nom TP_
1 CSS_14.html. Affichez ce fichier dans votre navigateur.
li {display: inline ;}
Remarquez que cela fait disparaître les puces.
La valeur flex correspond au modèle de boîte flexible : nous l’étudierons en détail plus loin. La valeur none fait que
3 l’élément n’apparaît pas dans la structure de mise en forme, de même que tous ses descendants, et cela même si leur propre
propriété display possède une valeur autre que none. C’est extrêmement pratique pour ne faire apparaître un élément
au sein de la page que si certaines conditions sont remplies. Tant que la condition n’est pas remplie, l’élément n’apparaît pas et
n’occupe aucune place dans la page. Saisissez :
@
40
TP 14 • Propriétés de positionnement
Hors modèle flexible, les propriétés position et .gche {float: left ;}
4 float conditionnent l’algorithme de positionnement
employé pour calculer la position d’une boîte. La pro-
.dte {float: right ;}
Si vous affectez à des éléments div rassemblés au sein d’un
priété position détermine le type de positionnement de la
boîte. Les valeurs possibles sont static (la valeur par défaut, élément p des valeurs différentes de la propriété float, les
correspondant au flux normal), relative (la position de la éléments se déplacent lorsque la fenêtre est redimensionnée.
boîte est calculée dans le flux normal puis décalée relativement à Pour mieux isoler un élément flottant du contenu flottant autour,
cette position), absolute (position et éventuellement taille mieux vaut définir ses marges. Ajoutez ce qui suit :
spécifiées par les propriétés top, right, bottom et left)
et fixed (position calculée selon le modèle absolu, mais la .gche {float: left ;
margin: 10px ;}
non positionnées créées avant ou après celle-ci s’écoulent verti- Fermez le fichier TP_CSS_14.html dans l’éditeur et le
calement comme si elle n’existait pas, en lui laissant toutefois la navigateur.
place nécessaire. Elle peut posséder les valeurs left (boîte bloc
flottante à gauche) ou right (boîte flottante à droite). Saisis-
sez :
© Dunod – Toute reproduction non autorisée est un délit
@
41
TP
15
Propriétés de couche
C SS définit trois dimensions pour chaque boîte : outre les positions horizontale et verticale, il existe la profondeur
MODÈLE DE BOÎTES CSS
Prérequis : TP 9 à 14
Fichier exemple : TP_CSS_15_début.html
Durée nécessaire : 10 minutes
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_15_début.html, puis enregistrez-le sous le nom
1 TP_CSS_15.html. Affichez ce fichier dans votre navigateur.
L’ordre de dessin d’une arborescence de document est décrit en termes de contextes d’empilement. Ces contextes peuvent
2 être imbriqués. Tout contexte d’empilement est lié au parent : les boîtes situées dans d’autres contextes ne peuvent s’intercaler
entre ses propres boîtes.
L’élément racine constitue le contexte d’empilement racine. Toute boîte appartient à un et un seul contexte d’empilement et possède
un niveau d’empilement : sa position sur l’axe Z par rapport aux autres boîtes du même contexte. Plus le niveau est élevé et plus la
boîte se situe au premier plan. Une boîte peut posséder un niveau négatif. Si deux boîtes du même contexte possèdent le même
niveau, celle située le plus bas dans l’arborescence du document figurera au premier plan.
Pour une boîte positionnée, la propriété z-index spécifie le niveau d’empilement dans le contexte d’empilement actif et si
3 la boîte crée un nouveau contexte d’empilement. Les valeurs possibles sont entier (la boîte génère un nouveau contexte
d’empilement dont le niveau est l’entier spécifié) et auto, la valeur par défaut (le niveau d’empilement est zéro ; la boîte ne
crée de nouveau contexte que s’il s’agit de l’élément racine). Saisissez :
.chef {z-index: 10 ;}
Le troisième élément div se place au premier plan. Remarquez que, par défaut, un fond est transparent et laisse visibles les boîtes
situées en dessous. Vous pouvez modifier ce comportement en employant une des propriétés de fond, comme effectué ici (nous en
apprendrons bientôt plus sur les propriétés de fond).
@
42
TP
16
Propriétés d’effet visuel
P lusieurs effets visuels peuvent être obtenus en jouant sur certaines propriétés de boîtes.
Ouvrez dans votre éditeur de texte le fichier TP_CSS_16_début.html, puis enregistrez-le sous le nom
1 TP_CSS_16.html. Affichez ce fichier dans votre navigateur.
La propriété clip définit la portion de la boîte de bordure d’un élément qui sera visible (par défaut, toute). Elle ne s’applique
2 qu’aux éléments positionnés de façon absolue. Elle accepte les valeurs auto (la valeur par défaut ; l’élément n’est pas
recadré) et forme. Actuellement, la seule forme valide est rect(haut droite bas gauche) où les paramètres
haut, bas, droite et gauche spécifient les décalages respectifs par rapport aux bords externes de la boîte.
Ces décalages peuvent posséder une valeur de type longueur ou le mot clé auto (un côté donné de la région recadrée sera
identique au côté de la boîte de bordure générée pour l’élément). Si les quatre valeurs sont fixées à auto, la zone de recadrage sera
identique à la boîte de bordure de l’élément.
Une région de recadrage élimine toute partie de l’élément (contenu, enfant, fond, bordures, décoration de texte et tout éventuel
mécanisme de défilement visible) extérieure à celle-ci. Un contenu recadré ne provoque jamais de dépassement. Saisissez :
.un {clip: rect(0px 300px 200px 100px) ;}
Vous voyez comment cette propriété « découpe » un rectangle allant du haut jusqu’à 200 px vers le bas et de 100 px à gauche jusqu’à
300 px à droite. L’élément situé juste à côté sert de témoin.
La propriété visibility spécifie si la boîte générée par un élément est affichée. Les boîtes invisibles affectent la présenta-
3
© Dunod – Toute reproduction non autorisée est un délit
tion, contrairement à une propriété display fixée à none. Les valeurs possibles sont visible (valeur par défaut, la
boîte est visible), hidden (la boîte générée est invisible mais affecte la présentation ; les descendants seront visibles si leur
propriété visibility est fixée à visible) et collapse (effet actuellement similaire à hidden). Cette propriété, souvent
employée en combinaison avec des scripts, permet de créer des effets dynamiques. Saisissez :
p:hover {visibility: hidden ;}
Lorsque vous placez votre souris sur un élément p, celui-ci disparaît sans
toutefois modifier la disposition de la page.
Fermez le fichier TP_CSS_16.html dans l’éditeur et le navigateur.
@
43
Propriétés de police,
@
45
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
17
Propriétés de police
C SS permet d’agir très finement sur de nombreux aspects des polices de votre document.
Prérequis : néant
Fichier exemple : TP_CSS_17_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_17_début.html, puis enregistrez-le sous le nom
1 TP_CSS_17.html. Affichez ce fichier dans votre navigateur.
@
46
TP 17 • Propriétés de police
La propriété font-weight définit la graisse de la police à l’aide soit de mots clés, soit de chiffres exprimés en centaines,
4 de 100 à 900. En pratique, la plupart des polices ne possèdent que deux graisses : normal et gras (bold). La propriété
font-size définit la taille de la police, à l’aide des propriétés de dimension. Enfin, la propriété line-height définit la
hauteur de ligne, à l’aide des propriétés de dimension CSS classiques. Saisissez :
La propriété font est une propriété raccourcie permettant de définir en une seule les différentes caractéristiques d’une
5 police.
© Dunod – Toute reproduction non autorisée est un délit
.ar p:last-of-type {
font: italic small-caps bold 1.2em/0.8em
"Times-New-Roman", serif ;}
@
47
TP 17 • Propriétés de police
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
CSS permet aux concepteurs de stocker des polices personnalisées sur leur serveur web : elles seront automatiquement télé-
6 chargées par l’utilisateur lorsque nécessaire à l’aide de la règle @font-face.
Les polices de type .ttf (True Type Fonts) et .otf (OpenType Fonts) sont acceptées par tous les navigateurs récents. Pour
d’autres formats, comme WOFF, WOFF2, SVG et EOT, cela dépend du navigateur. Saisissez :
@font-face {
font-family: scriptina ;
src: url('SCRIPTIN.ttf')
}
La police scriptina est une création de Apostrophic Laboratories ([email protected]), libre de droits même pour une utilisation
commerciale. Lorsque vous employez une police non standard, vérifiez bien que vous avez le droit de le faire.
Vous pouvez ensuite employer la police à votre guise. Saisissez :
@
48
Propriétés de couleur
Prérequis : néant
Fichier exemple : TP_CSS_18_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_18_début.html, puis enregistrez-le sous le nom
1 TP_CSS_18.html. Affichez ce fichier dans votre navigateur.
La propriété color définit la couleur du texte d’un élément, par une valeur de couleur ou le mot clé transparent.
2 Saisissez :
.r {color: pink ;}
.trans {color: transparent ;}
Un paragraphe apparaît en rose, celui situé en dessous disparaît : écrire avec une encre transparente n’a jamais donné un résultat très
lisible…
La propriété background-color définit la couleur de fond d’un élément. Sa valeur est une couleur CSS, comme pour
3 color. Ajoutez ce qui suit en gras à la première règle précédente :
© Dunod – Toute reproduction non autorisée est un délit
.r {color: pink ;
background-color: RGB(50,50,50) ;}
@
49
TP 18 • Propriétés de couleur et de fond
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
La propriété opacity détermine l’opacité du fond de l’élément par rapport à ce qui est en dessous. Elle n’a de sens que si
4 le fond de l’élément comporte une couleur ou une image. La valeur est un nombre compris entre 0 et 1. Cette propriété est
inutile si vous employez une couleur RGBA ou HSLA, pour laquelle l’opacité est déjà définie. Ajoutez ce qui suit en gras à la
règle précédente :
.r {color: pink ;
background-color: RGB(50,50,50) ;
opacity:.5 ;}
Vous pourriez obtenir exactement la même chose en saisissant simplement une valeur RGBA :
.r {color: pink ;
background-color: RGBA(50,50,50, .5) ;}
La propriété background-image permet de définir une image comme fond d’élément. Saisissez :
5 .cadre {background-image: url(img/fleur.jpg) ;}
Remarquez que nous avons placé les images dans un sous-répertoire img situé à la racine du code : c’est une bonne habitude à
prendre, pour éviter le mélange des types de fichiers.
Vous pouvez employer plusieurs images de fond pour un même élément, en les séparant par une virgule.
6 Modifiez comme suit la règle précédente :
Attention, les images sont affichées en partant de la fin : le papillon sera ici au-dessus de la fleur.
@
50
TP 18 • Propriétés de couleur et de fond
La propriété background-attachment détermine si l’image est fixe par rapport au canevas (fixed) ou si elle défile
8 en même temps que le contenu (scroll, valeur par défaut).
La propriété background-position précise la position initiale de l’image. Avec deux paramètres, le premier repré-
9 sente la valeur horizontale, le second la valeur verticale. Un paramètre absent vaut par défaut center. Voici les mots clés
utilisables :
background-position: center ;}
L’image est centrée horizontalement et verticalement. Testez d’autres mots clés et/ou d’autres valeurs pour la propriété
background-position.
@
51
TP 18 • Propriétés de couleur et de fond
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
Il est également possible de donner des valeurs de longueur, éventuellement négatives. Et même d’obtenir quelques effets
10 intéressants… Saisissez ce qui suit :
.mil {
background-image: url(img/icones.jpg) ;
background-repeat: no-repeat ;
background-position: -200px 75px ;}
.mil:hover {background-position: -98px 75px ;}
.mil:active {background-position: 5px 75px ;}
Je suppose que vous vous souvenez de la pseudo-classe : hover, lorsque le pointeur est au-dessus d’un élément, et de la pseudo-
classe :active, lorsqu’on clique sur un élément… Testez à loisir…
La propriété background-size permet de spécifier précisément la taille de l’image de fond, ce qui autorise l’emploi
11 d’une même image dans différents contextes. Sa syntaxe est la suivante :
background-size: longueur|pourcentage|cover|contain ;
Par défaut, une image est affichée selon sa taille réelle (100 %) : ne sera visible que ce qui peut « tenir » dans l’élément conteneur, ou
elle n’occupera qu’une partie de celui-ci s’il est plus grand. Avec contain, l’image est redimensionnée de façon à apparaître tout
entière : c’est la dimension minimale de l’élément conteneur qui conditionne la taille, et l’image peut donc ne pas occuper tout celui-ci.
Avec cover en revanche, l’image est redimensionnée de façon à occuper tout l’élément conteneur, par conséquent selon sa plus
grande dimension : ellle pourra donc se révéler tronquée. Saisissez :
La propriété background-origin permet de définir précisément l’emplacement de début d’une image de fond au-
12 delà de la zone de contenu. Par défaut, c’est la zone de contenu (content-box), mais vous pouvez choisir la zone d’espa-
cement (padding-box) ou la zone de bordure (border-box). La propriété background-clip est analogue,
mais s’applique à une couleur de fond et non à une image. Saisissez :
Remarquez que, avec une bordure continue, le fond est recouvert : border-box et padding-box ont alors le même effet.
Fermez le fichier TP_CSS_18.html dans l’éditeur et le navigateur.
@
52
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
19
Dégradés linéaires
L e module Valeurs images et contenu remplacé Niveau 3 ajoute deux nouvelles valeurs à la propriété background-
image. Ces valeurs sont en réalité des méthodes, qui permettent d’obtenir des dégradés respectivement linéaires
(linear-gradient()) et circulaires (radial-gradient()). Nous étudierons dans un premier temps la méthode
linear-gradient().
Prérequis : TP 11 et 18
Fichier exemple : TP_CSS_19_début.html
Durée nécessaire : 15 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_19_début.html, puis enregistrez-le sous le nom
1 TP_CSS_19.html. Affichez ce fichier dans votre navigateur.
direction est la ligne d’orientation du dégradé. Vous pouvez la spécifier à l’aide d’un angle ou de mots clés : to bottom
(valeur par défaut, équivalente à 180deg), to top (équivalent à 0deg), to right (90deg) ou to left (270deg).
Saisissez :
Les mots clés correspondant à des angles bien déterminés, vous pourriez préférer employer un angle : la pente par rapport
3 à l’horizontale de la droite qui joindrait le point de départ et le point d’arrivée. Saisissez :
@
53
TP 19 • Dégradés linéaires
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
Les paramètres couleur et étendue spécifient respectivement la couleur et la position de début de cette couleur sur
4 l’axe de dégradé. Attention à ne pas séparer ces deux paramètres par autre chose qu’un espace. La couleur est exprimée
comme toute couleur CSS, par exemple en RGBA pour disposer d’une transparence, étendue est un pourcentage. Par
défaut, la première étendue vaut 0 % et la dernière 100 %. Saisissez :
Vous devez spécifier au moins deux couleurs/étendues (celle de début et celle de fin), mais vous pouvez spécifier autant de
5 couleurs intermédiaires que vous le souhaitez. Saisissez :
Puisqu’il s’agit d’une valeur de la propriété background-image et qu’il est possible d’affecter plusieurs images à un
6 arrière-plan (reportez-vous au TP 18), il est de même possible de définir plusieurs dégradés pour un même élément, en les
séparant par une virgule. Saisissez :
.b5 {
background-image:
linear-gradient(rgba(255,230,230,.5), rgba(255,130,130,.5)),
linear-gradient(90deg, rgba(130,200,130,1), rgba(75,255,75,1)) ;}
Attention : comme avec les images, l’ordre d’apparition des dégradés est l’inverse de l’ordre d’écriture. De ce fait, il est impératif que
le ou les dégradés venant au-dessus (et donc écrits en premier) emploient des couleurs avec transparence, faute de quoi le dernier
dégradé recouvrira totalement les dégradés situés en dessous.
@
54
TP 19 • Dégradés linéaires
Dernière propriété en matière de dégradés linéaires, plutôt que d’en mentionner plusieurs vous pouvez en répéter un à l’aide
8 de la propriété repeating-linear-gradient(). Saisissez :
Remarquez que, comme le dégradé est défini en pourcentages, la largeur des bandes s’ajuste si vous modifiez la taille de la fenêtre,
contrairement à l’exemple précédent où les bandes étaient définies en pixels.
En combinant un tel dégradé avec un second dégradé, vous pouvez obtenir des effets saisissants. Saisissez :
9
.b8 {
background-image:
linear-gradient(rgba(255,255,255,1), rgba(100,100,100,0.3)),
repeating-linear-gradient(110deg, yellow 10%, red 20%) ;}
© Dunod – Toute reproduction non autorisée est un délit
Enfin, puisqu’il est possible d’employer une image comme bordure (voir TP 11), et qu’un dégradé est une image, vous pouvez
10 créer des bordures en dégradé. Saisissez :
@
55
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
20 Dégradés radiaux
L a méthode radial-gradient() permet d’obtenir des dégradés circulaires ou radiaux. Cette méthode est
reconnue par tous les navigateurs récents, à l’exception d’Opera. L’emploi des préfixes dédiés (toujours sauf Opera)
permet une certaine rétro-compatibilité avec des versions plus anciennes.
Prérequis : TP 11, 18 et 19
Fichier exemple : TP_CSS_20_début.html
Durée nécessaire : 20 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_20_début.html, puis enregistrez-le sous le nom
1 TP_CSS_20.html. Affichez ce fichier dans votre navigateur.
taille détermine le point de fin du dégradé. Vous pouvez employer les valeurs closest-side, closest-
3 corner, farthest-side et farthest-corner (la valeur par défaut). Si la forme est un cercle, vous pouvez
indiquer comme valeur le rayon du cercle (forcément avec une unité autre qu’un pourcentage). S’il s’agit d’une ellipse (la
valeur par défaut), vous pouvez spécifier deux valeurs (unités ou pourcentages) pour indiquer la forme de l’ellipse. Saisissez :
@
56
TP 20 • Dégradés radiaux
couleur et étendue possèdent les mêmes significations que pour la méthode précédente. Vous pouvez spécifier un
5 nombre quelconque de couleurs situées sur l’axe de la forme.
.b4 {
background-image:
radial-gradient(farthest-side at bottom left, red, yellow 50px,
cyan, blue, black) ;}
Il est important de comprendre que cette méthode crée en réalité toujours plusieurs ellipses concentriques (une par couleur), mais
que seule sera visible la partie définie par l’élément conteneur.
Comme avec les dégradés linéaires, il est possible de définir plusieurs dégradés pour un même élément, en les séparant par
7 une virgule. Saisissez :
© Dunod – Toute reproduction non autorisée est un délit
.b6 {
background-image:
radial-gradient(circle at 90% 25%, white 1%,rgba(255,255,255,.3) 1.1%,
transparent),
radial-gradient(farthest-side at bottom left, red, yellow 50px,
cyan, blue, black);}
@
57
TP 20 • Dégradés radiaux
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
Une fois encore, l’ordre d’apparition des dégradés est l’inverse de leur écriture. Il est impératif que le ou les dégradés venant au-dessus
emploient des couleurs avec transparence, faute de quoi le dernier dégradé recouvrira totalement les dégradés situés en dessous.
En jouant avec les transparences, on peut obtenir des effets intéressants. Saisissez :
8
.b7 {
background-image:
radial-gradient(circle, rgba(252,19,200,0.3) 0px,
rgba(252,19,200,0.3) 40%,rgba(255,255,255,0) 40%),
radial-gradient(circle, rgba(252,176,64,0.3) 0px,
rgba(252,176,64,0.3) 70%,rgba(255,255,255,0) 70%),
radial-gradient(circle, rgba(5,240, 25,0.3) 0px,
rgba(5,240, 25,0.3) 60%,rgba(255,255,255,0) 60%) ;
background-position: 65px 70px, -20px -30px, 10px 10px ;
background-repeat: no-repeat ;}
Remarquez que la position individuelle de chaque dégradé est fixée à l’aide de la propriété background-position et que la
propriété background-repeat est fixée à no-repeat pour n’afficher qu’un exemplaire de chaque dégradé.
Enfin, comme pour les dégradés radiaux, plutôt que d’en mentionner plusieurs, vous pouvez en répéter un à l’aide de la
9 propriété repeating-radial-gradient(). Saisissez :
.b8 {
background-image:
repeating-radial-gradient(at bottom right, yellow 10%, blue 20%) ;}
@
58
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
21
Propriétés de texte
L es propriétés de texte s’appliquent à tout texte contenu dans un élément. Le plus souvent, ces propriétés sont
héritables : elles s’appliquent également aux descendants de l’élément.
Prérequis : néant
Fichier exemple : TP_CSS_21_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_21_début.html, puis enregistrez-le sous le nom
1 TP_CSS_21.html. Affichez ce fichier dans votre navigateur.
La propriété word-spacing définit l’espacement entre mots. La propriété letter-spacing définit l’espacement
2 entre lettres. La valeur par défaut de ces deux propriétés est normal. La propriété text-decoration permet d’ajou-
ter différents effets à du texte. Elle se décompose en trois sous-propriétés correspondant au type de décoration, à son style et
à sa couleur :
text-decoration-line text-decoration-style text-decoration-color
Par défaut, le type est none, mais vous pouvez souligner (underline), surligner (overline) ou barrer (line-through).
Saisissez :
.imp {
word-spacing: 1.2em ;
letter-spacing: .8em ;
text-decoration: underline solid red ;}
La propriété vertical-align définit la position verticale du texte par rapport à la ligne courante. Son effet est souvent
3 peu perceptible, sauf pour les indices (sub), les exposants (top) et des pourcentages élevés.
© Dunod – Toute reproduction non autorisée est un délit
@
59
TP 21 • Propriétés de texte
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
Remarquez que nous avons placé ici les éléments span concernés en bleu de façon à bien les faire ressortir.
La propriété text-transform permet de mettre tout un texte avec une majuscule au début de chaque mot, tout en
4 majuscules ou tout en minuscules, Saisissez :
La propriété text-indent définit une indentation positive ou négative pour la première ligne de texte, tandis que la
5 propriété text-align gère la justification du texte. Par défaut, left. Saisissez :
@
60
TP 21 • Propriétés de texte
Enfin, la propriété word-wrap permet d’imposer, en cas de dépassement latéral de la capacité d’un conteneur, la césure
7 d’un mot à n’importe quel emplacement. Saisissez :
@
61
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
22 Multi-colonnage
I l était antérieurement possible de créer un multi-colonnage sur des pages web, mais au prix d’efforts certains et pour
des résultats parfois aléatoires. Le récent module Multi-colonnage Niveau 1 simplifie énormément le processus en
garantissant un résultat optimal.
Prérequis : néant
Fichier exemple : TP_CSS_22_début.html
Durée nécessaire : 15 minutes
Ouvrez dans votre éditeur de texte le fichier L’écartement est ici égal à la largeur de l’élément diminuée de
1 TP_CSS_22_début.html, puis enregistrez-le
sous le nom TP_CSS_22.html. Affichez ce fichier
300 px et divisée par 2.
Définir des colonnes entraîne des conséquences : dans
dans votre navigateur.
Vous définissez le nombre de colonnes de texte d’un 4 le troisième élément figure une image dont la largeur a
été fixée à 100 % de son conteneur (width:100;).
2 élément à l’aide de la propriété column-count.
Cette propriété possède comme valeur un nombre posi-
Saisissez :
tif ou le mot clé auto, auquel cas le nombre de colonnes est
spécifié par d’autres propriétés (comme column-width). .col3 {column-count: 3 ;
L’écartement entre les colonnes est défini à l’aide de la propriété column-width: 150px ;}
column-gap, avec comme valeur une longueur ou le mot clé
normal (valeur par défaut, correspondant généralement à
1em). Saisissez :
.col {column-count: 3 ;
column-gap: 40px ;}
@
62
TP 22 • Multi-colonnage
col5 {column-count: 3 ;
column-width: 150px ;}
Vous voyez le titre de second niveau limité dans une colonne.
Ajoutez :
h2.sp {column-span: all ;}
Le titre peut désormais s’étendre sur toutes les colonnes. Cette
propriété ne fonctionne actuellement toujours pas avec Fire-
fox 54 (même avec le préfixe) mais ne pose pas de problème
aux autres navigateurs récents. Elle est toutefois ignorée en cas
de dépassement horizontal ou vertical du conteneur parent.
column-rule:
column-rule-width column-rule-style
column-rule-color
Les arguments sont les valeurs admissibles pour les trois proprié-
tés apparentées column-rule-width, column-
rule-style et column-rule-color. Saisissez :
Enfin, il existe une forme abrégée, la propriété columns, dont la syntaxe est :
8
columns: column-count column-width;
Saisissez :
.col5 {columns:4 110px ;}
© Dunod – Toute reproduction non autorisée est un délit
@
63
Propriétés d’interface
PROPRIÉTÉS DE POLICE, DE COULEUR ET DE FOND
TP
23
utilisateur
L e module Interface utilisateur Niveau 3 ajoute plusieurs propriétés concernant l’interface utilisateur. Toutes ne sont
toutefois pas mises en œuvre à l’heure actuelle : seules les propriétés exploitables sont présentées ici.
Prérequis : néant
Fichier exemple : TP_CSS_23_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_23_début.html, puis enregistrez-le sous le nom
1 TP_CSS_23.html. Affichez ce fichier dans votre navigateur.
La propriété box-sizing permet de spécifier l’emplacement où doivent se situer certains éléments. Avec la valeur
3 content-box (le comportement par défaut), les width et height (et min /max) spécifiées s’appliquent aux lar-
geur et hauteur de la boîte de contenu. L’espacement et les bordures sont tracés à l’extérieur. En revanche, avec la valeur
border-box, width et height (et min/max) déterminent la boîte de bordure de l’élément. Espacement et bordures sont
donc tracés à l’intérieur. La largeur et la hauteur du contenu sont calculées en soustrayant les largeurs d’espacement et de bordure des
propriétés width et height spécifiées. Enfin, inherit spécifie que la valeur de box-sizing doit être héritée de l’élément
parent. Saisissez :
@
64
TP 23 • Propriétés d’interface utilisateur
La propriété cursor permet de définir un curseur personnalisé, lorsque le pointeur est à l’intérieur de la boîte de l’élément
6 qui définit un curseur. Sa syntaxe est la suivante :
@
65
Listes et compteurs
CSS propose des propriétés particulières permettant d’outrepasser la disposition par défaut proposée par les
navigateurs pour des listes ainsi que des propriétés de numérotation automatique (compteurs).
Listes et compteurs
© Dunod – Toute reproduction non autorisée est un délit
@
67
TP
24 Propriétés de liste
C SS offre une mise en forme fondamentale des listes. Un élément défini automatiquement ou manuellement par
display: list-item génère une boîte bloc principale pour le contenu de l’élément et, selon les valeurs des
Listes et compteurs
propriétés list-style-type et/ou list-style-image, une éventuelle boîte de marqueur pour signaler que
l’élément est un élément de liste.
Prérequis : néant
Fichier exemple : TP_CSS_24_début.html
Durée nécessaire : 15 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_24_début.html, puis enregistrez-le sous le nom TP_
1 CSS_24.html. Affichez ce fichier dans votre navigateur.
La propriété list-style-image s’applique aux éléments dd, dt, li, ol, ul ou tout autre élément doté de la pro-
2 priété de style display:list-item . Elle spécifie l’image employée comme marqueur de liste. Elle accepte comme
valeur une URI, none ou inherit. Saisissez :
La propriété list-style-type spécifie pour les mêmes éléments l’apparence du marqueur si la propriété list-
3 style-image est absente ou fixée à none ou si l’image définie par l’URI ne peut être affichée. Les valeurs possibles se
répartissent en trois catégories :
• Glyphes (symboles) : normalement employés pour les listes à puces (ul). Saisissez :
@
68
TP 24 • Propriétés de liste
• Numérotations : normalement employées pour les listes numérotées (ol). Saisissez :
Listes et compteurs
Il ne s’agit que d’exemples, car vous pourriez également employer les valeurs hebrew, armenian, georgian, cjk-
ideographic, hiragana, katakana, hiragana-iroha, katakana-iroha, correspondant à des systèmes de
numérotation moins fréquents pour nous.
Vous pouvez toutefois employer n’importe quelle valeur pour n’importe quel élément. Si vous appliquez une propriété
4 list-style-type de type numérotation à une liste à puces ul, celle-ci devient à l’affichage une liste numérotée.
Saisissez :
Cette « bizarrerie » trouve une explication toute simple : par défaut, un élément ul possède comme propriété implicite list-
style-type:decimal, exactement comme un élément ol possède une propriété implicite list-style-type:disc.
Si vous modifiez cette propriété, vous modifiez en conséquence l’affichage et faites potentiellement changer la liste de catégorie.
© Dunod – Toute reproduction non autorisée est un délit
Si vous spécifiez cette propriété à un élément liste (comme ul ou ol), elle s’appliquera par héritage à tous les éléments de
5 cette liste. Vous pouvez toutefois appliquer à un élément particulier cette propriété avec une valeur différente. Saisissez :
.a {list-style-type: lower-latin ;}
.b {list-style-type: upper-latin ;}
.c {list-style-type: lower-greek ;}
@
69
TP 24 • Propriétés de liste
La propriété list-style-position spécifie la position de la boîte du marqueur par rapport à la boîte bloc principale.
6 Deux valeurs sont possibles, outside (valeur par défaut) et inside. Concrètement, cela se traduit par une indentation
supplémentaire. Saisissez :
.d {list-style-position: inside ;}
Listes et compteurs
Il existe une notation raccourcie pour les éléments de liste, list-style rassemblant ces différentes propriétés. Elle reste peu
employée, puisque les deux dernières propriétés le sont elles-mêmes très peu.
list-style: list-style-type | list-style-position | list-style-image
Fermez le fichier TP_CSS_24.html dans l’éditeur et le navigateur.
@
70
TP Propriétés de compteur
25
et de numérotation
L a numérotation automatique CSS est contrôlée par deux propriétés, counter-increment et counter-reset.
Ces compteurs sont employés par les fonctions counter() et counters() de la propriété content. Le module
Listes et compteurs
Styles de compteur Niveau 3, encore en travaux, permettra prochainement de définir des styles de compteur
personnalisés.
Prérequis : TP 23
Fichier exemple : TP_CSS_25_début.html
Durée nécessaire : 15 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_25_début.html, puis enregistrez-le sous le nom TP_
1 CSS_25.html. Affichez ce fichier dans votre navigateur.
La propriété counter-reset sert à créer et initialiser un compteur. Elle accepte comme argument un ou plusieurs noms
2 de compteurs (identifiants) et stipule la valeur initiale de chaque occurrence de l’élément (0 par défaut). Saisissez :
La propriété counter-increment, applicable à tous les éléments, accepte un ou plusieurs noms de compteurs (iden-
3 tifiants), chacun facultativement suivi d’un entier indiquant le niveau d’incrémentation (1 par défaut). Des entiers négatifs ou
nuls sont acceptés.
Saisissez ce qui suit :
@
71
TP 25 • Propriétés de compteur et de numérotation
Continuez en saisissant ce qui suit :
4
h1 {counter-reset: souschap ;}
Vous créez ici un nouveau compteur, souschap, initialisé à sa valeur par défaut, 0. Continuez :
Vous voyez maintenant apparaître avant chaque titre de second niveau une chaîne composée du numéro du chapitre (la valeur ac-
tuelle du compteur chapitre), un point, puis la valeur du compteur souschap, incrémenté à chaque titre de second niveau.
Vous avez réalisé une numérotation automatique à partir d’éléments HTML tels que body, h1 et h2.
La fonction counters() génère une chaîne composée de plusieurs compteurs imbriqués portant le même nom, séparés
5 par une chaîne spécifiée. Saisissez :
ul {counter-reset: item ;}
li:before {content: counters(item, ".") ;
counter-increment: item ;}
La fonction counter() permet de modifier la mise en forme d’un compteur. Par défaut, il s’agit de nombres décimaux,
6 mais vous pouvez employer tous les styles autorisés pour la propriété list-style-type. Vous lui fournissez comme
arguments le nom du compteur puis le type de marqueur, séparé par une virgule. Modifiez comme suit la règle h2 :
h2:before {content: counter(chapitre) "." counter(souschap, lower-latin) " " ;
counter-increment: souschap ;}
@
72
CSS et périphérique
Très tôt, les feuilles de styles pouvaient s’appliquer à un périphérique ou à un groupe de périphérique spécifique.
Une feuille de styles prévue pour un écran peut en effet être éventuellement utilisable pour l’impression mais sera
de peu d’utilité pour un navigateur à synthèse vocale ou un smartphone à écran de faible taille.
Grâce aux requêtes médias (media queries), les feuilles de styles peuvent désormais s’adapter finement en fonction
des caractéristiques du support, qu’il s’agisse d’ailleurs de ses caractéristiques de base ou de celles présentes lors de
l’affichage de la page.
@
73
Spécification de feuille de
CSS et périphérique d’affichage
TP
26
styles dépendant du média
G râce au module Requêtes médias Niveau 3, vous pouvez spécifier l’emploi d’une feuille de styles particulière en
fonction du périphérique de sortie ou média. Cela peut être effectué soit selon un type global de périphérique, soit
selon certaines caractèristiques de celui-ci et être employé soit à l’aide de feuilles de styles distinctes, soit à l’intérieur
d’une même feuille de styles.
Prérequis : néant
Fichier exemple : néant
Durée nécessaire : 5 minutes
Pour définir une feuille de styles propre à un média (un périphérique) particulier, il faut dans tous les cas employer l’attribut
1 media, un descripteur de média unique dont la valeur par défaut est screen (un écran d’ordinateur, le cas le plus fré-
quent). Les valeurs possibles de cet attribut et leur signification sont les suivantes :
• all : tous périphériques ;
• print : matériaux opaques paginés et documents vus en mode Aperçu avant impression ;
• projection : vidéoprojecteurs ;
• screen : écrans d’ordinateurs non paginés.
Il existait d’autres valeurs, désormais abandonnées (tty, tv, handheld, braille, embossed, speech anciennement
aural).
Cet attribut peut être employé pour lier une feuille de styles particulière à un type de périphérique. Cela s’effectue alors dans
2 l’élément link. Par exemple :
Cette distinction selon le type de périphérique restait toutefois grossière et souvent un peu trop globale, ce qui a donné nais-
3 sance aux requêtes médias : la valeur de l’attribut media devient une expression logique combinant un ou plusieurs des-
cripteur de média et surtout des caractéristiques médias. Par exemple :
@
74
TP 26 • Spécification de feuille de styles dépendant du média
La seconde méthode est le recours à une requête média exprimée par la règle @media à l’intérieur d’une feuille de styles,
5 mentionnant un média particulier et/ou une caractéristique média :
C’est cette dernière méthode que nous allons détailler dans le TP suivant.
@
75
CSS et périphérique d’affichage
TP
27 Requêtes médias
U ne requête média (media query) se compose de zéro ou plus descripteurs de périphérique (média) et de zéro ou
plus expressions qui en vérifient certaines caractéristiques particulières. C’est une expression logique qui est vraie
ou fausse. Elle est vraie si le type de périphérique correspond à celui spécifié dans la requête et si toutes les expressions
de la requête sont vraies. C’est grâce aux requêtes médias qu’il est possible de bâtir désormais des sites de qualité
capables de s’afficher sur n’importe quel périphérique, depuis l’ordinateur de bureau au smartphone, en passant par les
tablettes et phablettes.
Prérequis : TP 26
Fichier exemple : TP_CSS_27_début.html
Durée nécessaire : 10 minutes
Ouvrez dans votre éditeur de texte le fichier TP_CSS_27_début.html, puis enregistrez-le sous le nom
1 TP_CSS_27.html. Affichez ce fichier dans votre navigateur.
Modifez la taille de la fenêtre du navigateur. Vous constatez que le site s’adapte plus ou moins à la fenêtre, pour conserver un rendu attrayant.
C’est grâce au modèle de boîte flexible (flexbox) que nous étudierons dans le TP suivant. On peut toutefois aller bien plus loin.
Nous venons de voir dans le TP précédent qu’une re- On peut aller encore plus loin, en modifant plus radica-
2 quête média se créait dans une feuille de styles à l’aide
de la règle @media. Il est possible d’appliquer une re-
3 lement l’aspect de la page présentée. Saisissez :
quête média sur une caractéristique commune à tous les médias, @media (max-width:500px)
soit en employant le mot clé all suivi de and, soit en ne pré- {body {font-size: 9pt ;}
cisant aucun type de média. Saisissez : div.all {flex-direction: row ;}
div.menu {width: 60px ;
@media (max-width: 800px) flex-direction: column ;
{body {font-size: 12pt ;} justify-content: flex-start ;}
} }
Le site peut être considéré comme au moins en partie adaptatif. Une baisse des caractéristiques (comme ici la taille de la police, mais
ce pourrait être aussi la suppression d’images, par exemple) porte le nom de « dégradation progressive ». L’exemple présenté ici est
des plus primitifs, se bornant à présenter le principe de fonctionnement des requêtes médias.
Fermez le fichier TP_CSS_27.html dans l’éditeur et le navigateur.
@
76
Avancées CSS
Les dernières innovations CSS sont souvent qualifiées, par abus de langage, de CSS 3. Ce terme ne sert désormais
qu’à établir une différence chronologique avec les versions monolithiques précédentes de la spécification.
En effet, comme expliqué dans l’avant-propos, le langage CSS s’appuie sur la spécification CSS 2.1 et progresse
désormais module par module, dont chacun est développé de façon indépendante : il n’y aura pas de CSS 4 (même
informellement), mais certains modules pourront individuellement atteindre ou dépasser ce niveau.
Dans les TP suivants sont présentées des propriétés issues de modules stables mais encore en cours de test,
AVANCÉES CSS
susceptibles d’atteindre prochainement le stade de recommandation W3C et donc d’être intégrés à la spécification
de base.
Leur prise en charge dans les navigateurs récents est excellente, et l’emploi systématique dans les fichiers d’exercices
du script prefixfree.min.js (présent dans le téléchargement des fichiers d’exercice) devrait permettre un bon
fonctionnement des exercices sur la quasi-totalité des navigateurs, à l’exception possible d’anciennes versions
d’Internet Explorer.
© Dunod – Toute reproduction non autorisée est un délit
@
77
TP
Modèle de boîte flexible
28 (flexbox)
L e module Flexbox Niveau 1 introduit un tout nouveau modèle de boîte. Ce mode de mise en page révolutionnaire
peut totalement redéfinir les mises en page en CSS. Attention toutefois, ce module n’est pas encore intégré à la
spécification. Comme il a beaucoup et rapidement évolué au fil du temps, bien que très largement pris en charge il peut
encore l’être de façon différente selon les navigateurs et leurs versions.
Prérequis : TP 9 à 16
Fichier exemple : TP_CSS_28_début.html
prise en main
Ouvrez dans votre éditeur de texte le fichier TP_CSS_28_début.html, puis enregistrez-le sous le nom
1 TP_CSS_28.html. Affichez ce fichier dans votre navigateur. Il présente une apparence très classique : des éléments
p répartis dans des éléments div successifs. Pour voir l’effet des différentes propriétés, il sera préférable de modifier la taille
de la fenêtre, dans un sens puis dans l’autre.
Au sein du schéma flexbox, on ne raisonne plus en block ou inline, ni même en float ou autres types de boîtes CSS
habituelles, mais selon un modèle dont les quatre possibilités principales sont :
• distribution horizontale ou verticale des éléments, avec passage à la ligne autorisé ou non ;
• alignements et centrages horizontaux et verticaux, justifiés, répartis ;
• organisation des éléments indépendante de l’ordre du flux ;
• gestion des espaces disponibles (fluidité).
Le modèle se fonde sur un conteneur (flex-container) constituant le contexte général d’affichage et renfermant un ou plusieurs enfants
directs ou flex-items. Le conteneur est un élément HTML quelconque doté de la déclaration display:flex; ou
display:inline-flex;. Ses enfants sont alors automatiquement des éléments de type flex-item. Un élément flex-item n’est
plus considéré comme bloc ou inline : les valeurs de display autres que none et même certaines propriétés telles
que float sont sans effet sur lui.
La distribution est le sens d’affichage horizontal ou vertical des éléments flex-items. Elle est définie par la propriété
2 flex-direction dont les valeurs peuvent être row (distribution horizontale, valeur par défaut), row-reverse
(distribution horizontale inversée), column (distribution verticale) ou column-reverse (distribution verticale inver-
sée). Cette propriété appliquée au conteneur détermine l’axe principal du modèle de boîte flexible. Saisissez :
div.ligne {display:flex ;
flex-direction: row ;}
div.col {display: flex ;
flex-direction: column ;}
@
78
TP 28 • Modèle de boîte flexible (flexbox)
AVANCÉES CSS
Les éléments p contenus dans des div de classe ligne ne sont plus disposés les uns en dessous des autres mais sur une même ligne.
Traditionnellement, aligner des éléments était relativement compliqué. Toutes les propriétés d’alignement n’étant pas applica-
4 bles à tous les éléments, réaliser un centrage était souvent délicat, une modification de la taille de l’affichage pouvant avoir des
conséquences désastreuses. Le modèle de boîte flexible permet désormais de gérer très finement les alignements et centrag-
es, à l’aide de deux propriétés applicables au flex-container.
Les alignements dans l’axe de lecture principal (déterminé par flex-direction) sont définis à l’aide de la propriété justify-
content, dont les valeurs possibles sont flex-start (éléments positionnés au début du sens de lecture,
valeur par défaut), flex-end (éléments positionnés à la fin), center (éléments centrés), space-between (répartition justi-
fiée dans l’espace) et space-around (variante de répartition justifiée). Ajoutez une nouvelle règle :
div.jc {justify-content: space-around ;}
@
79
TP 28 • Modèle de boîte flexible (flexbox)
Les alignements sont gérés sur l’axe secondaire à l’aide de la propriété align-items, pouvant accepter les valeurs
5 stretch (valeur par défaut, étiré dans l’espace disponible), flex-start (au début) flex-end (à la fin), center
(au centre) et baseline (généralement identique à flex-start).
Attention, la valeur stretch ne fonctionne que si les flex-items n’ont pas de dimension fixe dans cette direction. Ajoutez cette
nouvelle règle :
div.st {align-items: stretch ;}
Il est possible d’appliquer un alignement particulier à un flex-item individuel, en lui appliquant la propriété align-self.
6 Cette propriété accepte les mêmes valeurs que align-items. Saisissez :
L’une des fonctionnalités les plus avant-gardistes du modèle de boîte flexible est la possibilité d’agir sur le flux HTML en
7 modifiant individuellement l’ordre des éléments, grâce à la propriété order. Cette propriété s’applique aux flex-items. Sa
valeur par défaut est 0, les éléments étant affichés par order croissant. Si deux éléments possèdent un order identique,
ils sont affichés dans l’ordre du document. Les valeurs négatives sont autorisées. Saisissez :
p.c {order: -1 ;}
La notion de flexibilité est sans surprise la raison d’être du modèle de boîte flexible. Elle s’exprime par la propriété flex,
8 applicable aux flex-items. Cette propriété est un raccourci des trois propriétés flex-grow, flex-shrink et flex-
basis :
flex: flex-growth flex-shrink flex-basis
• flex-grow est le facteur d’augmentation de l’élément, par rapport aux autres, dans l’espace restant. S’il est omis, il vaut 1 ;
• flex-shrink est le facteur de rétrécissement d’un élément si besoin, par rapport aux autres. S’il est omis, il vaut 1 ;
• flex-basis est la taille initiale de l’élément avant redistribution de l’espace restant. S’il est omis, c’est auto.
Attention toutefois : curieusement, par défaut, la propriété flex sans argument représente flex: 0 1 auto. Un flex-item n’occupe
par défaut que la taille minimale de son contenu. Il sera non flexible que si à la fois flex-grow et flex-shrink sont fixés à 0.
Il est conseillé d’employer de préférence la propriété flex plutôt que ses composantes individuelles, car cela évite de voir des para-
mètres particuliers perdurer. À cette fin, il est défini des valeurs classiques pour cette propriété :
• flex: initial : équivalent à flex: 0 1 auto, c’est la valeur par défaut. La taille de l’élément dépendra de ses
propriétés width/height ou, si fixé à auto, de son contenu. L’élément ne s’agrandit pas si de l’espace est disponible mais
diminue jusqu’à sa taille minimale si l’espace est insuffisant ;
• flex: auto : équivalent à flex: 1 1 auto. La taille de l’élément dépendra de ses propriétés width/height mais
il est parfaitement flexible, absorbant tout espace disponible sur l’axe principal. Si tous les éléments sont fixés à flex: auto,
flex: initial ou flex: none, tout espace disponible après l’ajustement des éléments sera redistribué de façon égale
entre les éléments fixés à flex: auto. Saisissez :
@
80
TP 28 • Modèle de boîte flexible (flexbox)
• flex: none : équivalent à flex: 0 0 auto. La taille des éléments dépendra de leurs propriétés width/height
et l’élément est totalement non flexible. Analogue à initial, si ce n’est que les éléments ne peuvent pas rétrécir, même dans
des situations de dépassements (overflow).
• flex: <nombre positif> : équivalent à flex: <nombre positif> 1 0. L’élément est flexible avec une taille de base fixée à 0,
si bien que l’élément bénéficie de la portion définie de l’espace disponible dans le flex-container. Si tous les éléments du conteneur
sont fixés à cette valeur, leur taille sera proportionnelle au facteur flex spécifié. Saisissez :
p.h {flex: 2 ;}
p.i {flex: 3 .5 auto ;}
Regardez notre fichier exemple. L’élément div affiché en haut de la page (les quatre lettres A B C D) est un flex-container nommé
menu qui renferme quatre éléments flex-items eux-mêmes de type div. Voici la partie pertinente du code CSS qui les définit :
div.menu{…
display: flex ;
flex-wrap: nowrap ;
AVANCÉES CSS
width: 120px ;}
div.menu div{…
flex: 1 ;
overflow: hidden ;}
Chaque élément flex-item possède une propriété flex fixée à 1. Les quatre éléments se partagent équitablement les 120 pixels
disponibles. Comme leur propriété overflow a été fixée à hidden, ils ne débordent pas : seule la lettre de gauche est affichée.
Saisissez ce qui suit. C’est une modification lorsque la souris survole un élément :
div.menu:hover {width: 325px ;}
div.menu div:hover{flex: 10 ;}
La largeur de la barre de menu passe à 325 pixels et le flex de l’élément de menu survolé passe à 10 : cet élément occupera donc
10/13e de l’espace disponible (10 + 3 × 1), soit ici maintenant 250 pixels, alors qu’en revanche les autres éléments n’occuperont plus
que 1/13e de cet espace, soit 25 pixels. De ce fait, tout le texte de l’élément survolé s’affiche.
La propriété margin appliquée à un flex-item permet de nouvelles choses, puisque le modèle de boîte flexible n’est pas
9 dépendant d’un sens de lecture particulier. Autrement dit, alors qu’il était très délicat de centrer un élément verticalement,
vous pouvez désormais placer un élément au milieu de son conteneur en donnant la valeur auto à ses propriétés
margin-top et margin-bottom (un équivalent de align-self:flex-end si les éléments sont en ligne). Encore
mieux, vous pouvez centrer à la fois horizontalement et verticalement par un simple margin: auto. Saisissez :
img {margin: auto ;}
© Dunod – Toute reproduction non autorisée est un délit
Une utilisation astucieuse des marges permet ainsi de placer facilement certains éléments à gauche et d’autres à droite dans
10 un menu, une disposition fréquemment rencontrée. Saisissez :
Le modèle de boîte flexible demeure une spécification vaste et complexe, dont de nombreux recoins restent à explorer. Il
répond indéniablement à de nombreuses attentes des concepteurs web depuis de longues années. C’est probablement la méthode
de positionnement la plus pratique et polyvalente de CSS, même si elle risque à terme d’être concurrencée ou même supplantée par
le module Grid, étudié plus loin. Il convient toutefois de rester prudent car la prise en charge de ce modèle par les différents naviga-
teurs n’est pas encore homogène : fonder une présentation totalement sur flexbox pourrait être dangereux.
Il demeure que ce modèle est probablement la meilleure réponse possible pour la création de sites réellement adaptatifs, capables de
s’afficher dans les meilleures conditions quel que soit le support d’affichage.
Fermez le fichier TP_CSS_28.html dans l’éditeur et le navigateur.
@
81
TP
29
Transformations 2D
L a propriété transform du module Transformations Niveau 1 propose plusieurs méthodes qui permettent d’obtenir
différents effets bidimensionnels sur un élément : le déplacer, modifier sa taille, le faire pivoter, le retourner ou le
déformer. Elle est prise en charge par les navigateurs récents à l’aide de leurs préfixes dédiés.
Prérequis : néant
Fichier exemple : TP_CSS_29_début.html
Durée nécessaire : 10 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_29_début.html, puis enregistrez-le sous le nom
1 TP_CSS_29.html. Affichez ce fichier dans votre navigateur.
La première méthode de la propriété transform est translate(), qui déplace un élément de la position actuelle à
2 une nouvelle position, selon les paramètres fournis pour la position gauche (horizontal) et haut (vertical).
Saisissez :
.tr {transform: translate(50px,-100px) ;}
La méthode rotate() fait pivoter l’élément dans le sens des aiguilles d’une montre selon le nombre de degrés spécifié.
3 Les valeurs négatives sont autorisées : l’élément pivote alors dans le sens contraire aux aiguilles d’une montre. Saisissez :
@
82
TP 29 • Transformations 2D
La méthode scale() modifie la taille de l’élément selon les paramètres fournis pour la largeur et la hauteur. Saisissez :
4
.re {transform: scale(0.5,1.2) ;}
Comme vous pouvez le constater, cette modification de taille peut avoir de sérieuses conséquences sur la lisibilité du contenu.
La méthode skew() étire l’élément par rapport au plan, selon les paramètres fournis pour les axes horizontal et vertical.
AVANCÉES CSS
5 Saisissez :
Comme pour la méthode scale, cette transformation peut avoir de sérieuses conséquences sur la lisibilité du contenu.
Ces trois méthodes possèdent chacune deux variantes à argument unique : translateX() et translateY() définissent
respectivement une translation uniquement sur l’axe X (horizontal) ou sur l’axe Y (vertical), scaleX(x) et scaleY(y) ne modi-
fient respectivement que la largeur ou la hauteur, et skewX() et skewY() définissent respectivement un étirement uniquement
sur l’axe X ou sur l’axe Y.
La propriété transform-origin fixe le point de départ de transformation de l’élément transformé à l’aide de deux
6 coordonnées, horizontale et verticale, exprimées en unités, en pourcentage ou par mot clé. Par défaut, le point de départ est
au milieu (50 % 50 %).
transform-origin: axe-x axe-y ;
Ajoutez le code suivant en gras à la règle pour l’élément de classe sk :
© Dunod – Toute reproduction non autorisée est un délit
@
83
TP
30
Transformations 2D multiples
C haque appel à la propriété transform et à ses méthodes annule tout appel précédent. Il existe toutefois plusieurs
façons de combiner des transformations.
Prérequis : TP 29
Fichier exemple : TP_CSS_30_début.html
Durée nécessaire : 10 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_30_début.html, puis enregistrez-le sous le nom
1 TP_CSS_30.html. Affichez ce fichier dans votre navigateur.
Chaque appel à la propriété transform et à ses Pour appliquer plusieurs transformations à un même
2 méthodes annule tout appel précédent. Pour en avoir la
preuve, saisissez :
3 élément, vous devez rassembler ces transformations au
sein d’une unique propriété transform, en les
séparant par un simple espace. Saisissez :
.tr1 {transform: rotate(20deg) ;
transform: scale(.5, 1) ;} .tr2 {
transform: rotate(20deg)
scale(.5, 1) ;}
Lors de la combinaison de transformations, l’ordre possède une importance certaine : si vous appliquez ces deux transforma-
4 tions dans un ordre différent, l’aspect ne sera pas le même. Saisissez :
.tr3 {
transform: scale(.5, 1)
rotate(20deg) ;}
@
84
TP 30 • Transformations 2D multiples
Il existe une autre façon d’appliquer plusieurs transformations. La fonction matrix() est la méthode abrégée qui combine
5 toutes les méthodes 2D précédentes en une seule. C’est toutefois un concept plutôt délicat à appréhender pour un non-
mathématicien. Employant six paramètres, elle s’appuie en réalité sur une matrice 3 × 3 (trois lignes et trois colonnes et est
appliquée aux coordonnées cartésiennes des points d’origine de l’élément concerné, exprimées selon une matrice 3 × 1 (trois lignes
et une colonne). Chaque transformation élémentaire correspond à une matrice mathématiquement connue.
Par exemple, saisissez :
.ro1 {transform: matrix(0.866,0.5,-0.5,0.866,0,0) ;}
.ro2 {transform: rotate(30deg) ;}
AVANCÉES CSS
Ces deux règles imposent une rotation de 30 degrés à l’élément p concerné. Il n’y a ici guère d’intérêt à employer matrix(), dont
la syntaxe est nettement plus complexe.
Imaginez toutefois que vous vouliez transformer un élément div contenant une image. Vous voulez diminuer la taille de
6 10 %, effectuer une rotation de 15° sur le plan (axe Z), déformer l’élément de 10° horizontalement et de 25° verticalement
puis effectuer une translation de 25 pixels vers la droite et de 10 pixels vers le haut.
Vous pourriez tout simplement saisir (faites-le !) :
.tr4 {
transform: scale(.9,.9) rotate(15deg) skew(10deg, 15deg)
translate(25px,10px) ;}
Cela impose au navigateur de convertir chaque instruction en matrice, puis d’effectuer quatre multiplications de matrices. Si
7 vous employez régulièrement cette transformation, la conséquence pourrait être un ralentissement du site. En employant la
fonction matrix(), le rendu sera bien plus plus rapide, puisqu’il n’y aura qu’une multiplication à effectuer. Saisissez :
Le résultat est strictement identique, mais bien plus rapide. Le détail du fonctionnement de la fonction matrix() est complexe et
nécessite de comprendre le fonctionnement mathématique des opérations sur les matrices, ce qui dépasse l’objectif de ce TP.
Fermez le fichier TP_CSS_30.html dans l’éditeur et le navigateur.
@
85
TP
31
Transformations 3D
L e module Transformations Niveau 1 propose via la propriété transform plusieurs méthodes qui permettent
d’obtenir des effets tridimensionnels sur un élément.
Prérequis : TP 29 et 30
Fichier exemple : TP_CSS_31_début.html
Durée nécessaire : 20 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_31_début.html, puis enregistrez-le sous le nom TP_CSS_31.
1 html. Affichez ce fichier dans votre navigateur.
Toutes les méthodes 2D examinées précédemment, Remarquez que si vous faites ainsi pivoter un élément
2 sauf skew, possèdent leur variante 3D, ainsi qu’une
nouvelle variante à argument unique permettant d’ef-
4 plat à 90°, celui-ci sera invisible… Saisissez :
Pour faire pivoter un élément de 120 degrés autour de Ce module introduit d’autres propriétés liées aux trans-
3 l’axe horizontal à l’aide de rotateX(), saisissez : 6 formations 3D. Ainsi, la propriété backface-
visibility définit si un élément doit être visible
lorsqu’il n’est pas face à l’écran. Avec la valeur par défaut
.ro1 {transform: rotateX(120deg) ;} visible, le fond est visible ; avec hidden, il ne l’est pas.
Saisissez :
.bf {transform: rotateX(180deg) ;}
.h {backface-visibility: hidden ;}
@
86
TP 31 • Transformations 3D
Il est fréquent de réaliser un assemblage 3D d’éléments. La propriété perspective définit l’éloignement
7 Cela s’effectue le plus souvent à l’intérieur d’un élément
conteneur, lequel peut ensuite être manipulé selon les
9 d’un élément 3D le long de l’axe Z (avant toute transfor-
mation). Bien que définie sur un élément parent, elle
besoins. La propriété transform-style spécifie le rendu n’agit que sur les éléments enfants en leur affectant le même
des éléments imbriqués dans l’espace tridimensionnel. Avec la point de fuite. none, la valeur par défaut, correspond à une ab-
valeur flat (par défaut), les éléments enfants ne conservent sence de perspective. Si un nombre non nul est spécifié, cela
pas la position 3D de leur parent. Pour conserver celle-ci, em- définit l’éloignement en pixels par rapport à la vue. De manière
ployez la valeur preserve-3d. Cette propriété doit être em- générale, plus vous spécifiez un fort éloignement et moins l’effet
ployée en combinaison avec la propriété transform. 3D sera perceptible. Saisissez :
Dans le fichier exercice, les trois premières div du milieu sont .trois {perspective: 150px ;}
identiques. Elles contiennent elles-mêmes trois div (de classe
respective d1, d2 et d3) assemblées en un triangle. La première
est face à l’écran, les deux autres ont été tournées et déplacées
de façon à former une pointe vers l’arrière (vous pouvez exami
ner le code CSS qui permet d’y parvenir, mais sans le modifier !).
Les angles sont de 120°. Saisissez ce qui suit :
.un {transform: rotateY(120deg) ;}
AVANCÉES CSS
.deux {transform-style: preserve-3d ;
transform: rotateY(120deg) ;}
Là encore, vous constatez que l’effet est sensible.N’hésitez pas à faire varier les paramètres pour bien comprendre le mécanisme.
Fermez le fichier TP_CSS_31.html dans l’éditeur et le navigateur.
@
87
TP
32
Transformations 3D multiples
C haque appel à la propriété transform et à ses méthodes annule tout appel précédent. Comme pour en 2D, il
existe plusieurs façons de combiner des transformations 3D.
Prérequis : TP 29 à 31
Fichier exemple : TP_CSS_32_début.html
Durée nécessaire : 15 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_32_début.html, puis enregistrez-le sous le nom TP_CSS_32.
1 html. Affichez ce fichier dans votre navigateur.
Comme cela a déjà été évoqué, chaque appel à la pro- Comme pour les transformations 2D, l’ordre possède
2 priété transform et à ses méthodes annule tout
appel précédent. Pour appliquer plusieurs transforma-
3 une importance certaine : si vous appliquez ces deux
dans un ordre différent, l’aspect ne sera pas le même.
tions 3D à un même élément, vous devez comme en Saisissez :
2D rassembler ces transformations au sein d’une unique pro-
priété transform, en les séparant par un simple espace. Par .tr2 {
exemple, saisissez : transform: rotateX(25deg)
rotateY(30deg) ;}
.tr1 {
transform: rotateY(30deg)
rotateX(25deg) ;}
Comme en 2D, vous pouvez appliquer plusieurs transformations à l’aide de la fonction matrix3d(), qui combine toutes
4 les méthodes 3D précédentes en une seule. C’est, comme son homologue matrix(), un concept plutôt délicat à appré-
hender pour un non-mathématicien. Employant seize paramètres, elle s’appuie sur une matrice 4 × 4 (quatre lignes et quatre
colonnes) et est appliquée aux coordonnées cartésiennes des points d’origine de l’élément concerné, exprimées selon une matrice
4 × 1 (quatre lignes et une colonne). Chaque transformation élémentaire correspond à une matrice mathématiquement connue.
@
88
TP 32 • Transformations 3D multiples
Par exemple, saisissez :
.ro1 {transform: matrix3d(.985, .174, 0, 0,
-.174, .985, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1) ;}
.ro2 {transform: rotateZ(10deg) ;}
Ces deux règles imposent une rotation sur le plan de 10 degrés aux éléments concernés. Il n’y a ici guère d’intérêt à employer
AVANCÉES CSS
matrix3d(), dont la syntaxe est nettement plus complexe. Certaines situations sont toutefois tout autres…
Imaginez que vous vouliez transformer un élément div. Vous voulez effectuer une rotation de 15° sur le plan (axe Z) et de
5 30° horizontalement (axe X), diminuer la taille de 10 % et effectuer une translation de 10 pixels vers la droite.
Vous pourriez tout simplement saisir à la suite les transformations élémentaires (faites-le !) :
.tr3 {transform: rotateZ(15deg) rotateX(30deg) scale(.9) translate(-10px,0) ;
z-index :5 ;}
La propriété z-index déjà rencontrée sert à mettre au premier plan l’élément transformé, initialement caché sous l’élément qui le
précédait : vous voyez ainsi l’élément initial, en rose, puis l’élément transformé, en bleu. Le navigateur va devoir convertir chaque
instruction en matrice, puis effectuer cinq multiplications de matrices. Si vous employez régulièrement cette transformation, la consé-
quence pourrait être un ralentissement du site. En employant la fonction matrix3d(), le rendu sera bien plus plus rapide, puisqu’il
n’y aura qu’une multiplication à effectuer. Saisissez :
.tr4 {transform: matrix3d(0.869333, 0.232937, 0, 0,
-0.201729, 0.752865, 0.45, 0,
0.12941, -0.482963, 0.866025, 0,
-8.69333, -2.32937, 0, 1)
z-index: 5 ;}
© Dunod – Toute reproduction non autorisée est un délit
Le résultat est strictement identique, mais bien plus rapide. Le détail du fonctionnement de la fonction matrix3d() est complexe
et nécessite de comprendre le fonctionnement mathématique des opérations sur les matrices. Il existe toutefois des outils permettant
la conversion de toute combinaison en fonction matrix3d, comme celui développé par Eric Meyer et Aaron Gustafson (http://
meyerweb.com/eric/tools/matrix/).
Fermez le fichier TP_CSS_32.html dans l’éditeur et le navigateur.
@
89
TP
33
Transitions
L e module Transitions Niveau 1 permet d’ajouter un effet de transition lors du passage d’un style à un autre à l’aide
de la propriété transition. Il est évident que des captures d’écran, par définition statiques, ne pourront refléter
correctement ce qui est exposé : seuls vos essais y parviendront.
Prérequis : TP 29 à 32
Fichier exemple : TP_CSS_33_début.html
Durée nécessaire : 10 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_33_début.html, puis enregistrez-le sous le nom
1 TP_CSS_33.html. Affichez ce fichier dans votre navigateur.
transition: transition-property
transition-duration
transition-timing-function
transition-delay ;
transition-property est la propriété CSS concernée
par la transition. transition-duration est la durée de
la transition exprimée en secondes (un nombre suivi sans espace
de la lettre s ; par défaut, 0, soit pas de transition).
transition-timing-fonction est le mode de calcul
de la vitesse de la transition, avec comme valeurs possibles
linear (vitesse constante), ease (valeur par défaut : début
lent, accélération puis ralentissement), ease-in (début lent),
ease-out (fin lente), ease-in-out (début et fin lents) et
cubic-bezier(a,b,c,d) où a, b, c et d sont des valeurs
comprises entre 0 et 1 de la fonction cubique de Bézier. Enfin
transition-delay est le délai exprimé en secondes
avant le début de la transition (un nombre suivi de s,
0 par défaut).
Saisissez :
.im1:hover {transition: transform 2s ;}
@
90
TP 33 • Transitions
Vous pouvez spécifier ces propriétés élémentaires indépendamment de la propriété raccourcie et vous pouvez définir plu-
4 sieurs propriétés pour une transition en les séparant par une virgule. Complètez avec le code en gras la règle précédente :
AVANCÉES CSS
Les transitions permettent d’obtenir des effets intéressants, comme par exemple simuler la mise en panier d’un article.
5 Saisissez :
@
91
TP
34
Animations
L e module Animations Niveau 1 permet de créer des animations capables de remplacer des images animées, des
animations Flash ou du code JavaScript à l’aide de la règle @keyframes et de la propriété animation. La
plupart des navigateurs exigent encore l’emploi de leur préfixe dédié. Comme avec le TP précédent Il est évident que
des captures d’écran statiques ne pourront refléter correctement ce qui est exposé : seuls vos essais y parviendront.
Prérequis : TP 29 à 33
Fichier exemple : TP_CSS_34_début.html
Durée nécessaire : 10 minutes
prise en main
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_34_début.html, puis enregistrez-le sous le nom
1 TP_CSS_34.html. Affichez ce fichier dans votre navigateur.
Les animations sont rendues possibles par la règle @keyframe, dont voici la syntaxe :
2
@keyframes nom_animation
{
étape1 {style: valeur1}
étape2 {style: valeur2}
…
étapen {style: valeurn}
}
étape est une valeur croissante en pourcentage, allant de 0 % (équivalant au mot clé from) à 100 % (équivalant au mot clé to),
nom _ animation est le nom que vous donnez à l’animation, style une propriété CSS, valeur1 à valeurn les valeurs
successives de cette propriété. Vous pouvez modifier autant de styles que vous voulez, autant de fois que vous le voulez. Il doit toute-
fois y avoir au moins deux étapes. Saisissez :
@keyframes animtest
{
0% {background: red ;}
25% {background: yellow ;
transform: translate(150%, 25%) ;}
50% {background: cyan ;
transform: translate(100%, 175%) ;}
75% {background: green ;
transform: translate(-150%, 300%) ;
color: white ;}
100% {background: red ;}
}
Remarquez que, comme dit précédemment, tout appel à la propriété transform annule toute transformation antérieure : vous
repartez toujours de la position initiale de l’élément. Inutile de tester à ce stade, il ne se passera encore rien.
@
92
TP 34 • Animations
Vous devez ensuite lier l’animation à un sélecteur, pour l’appliquer à celui-ci. La propriété animation, dotée d’au moins
3 deux arguments obligatoires, le nom et la durée de l’animation, vous aide à le faire. Voici la syntaxe complète :
sélecteur {
animation: animation-name animation-duration [animation-timing-function]
[animation-delay] [animation-iteration-count] [animation-direction];}
sélecteur est un sélecteur quelconque, a nimation-name est le nom de l’animation @keyframes,
a
nimation-duration la durée en secondes ou m illisecondes d’un cycle d’animation (par défaut 0, pas d
’animation),
animation-timing-function est le mode de calcul de la durée (identique à la propriété transition-
timing-function), animation-delay le délai avant début de l’animation (par défaut 0), animation-
iteration-count le nombre d’itérations de l’animation (un nombre positif ou nul ou la valeur infinite ; par défaut 1),
et animation-direction spécifie si l’animation doit se dérouler toujours normalement (normal, valeur par défaut) ou
dans l’ordre contraire sur les cycles pairs (alternate). Saisissez :
AVANCÉES CSS
Une dernière propriété apparentée, absente de la propriété abrégée, est animation-play-state. Elle spécifie si
4 l’animation est active (running, la valeur par défaut) ou en pause (paused). Modifier cette valeur à l’aide du CSS ou d’un
script permet de lancer et d’arrêter à volonté une animation. Cela demande toutefois un peu de réflexion et de préparation :
il est nécessaire de disposer d’un quelconque bouton permettant de visualiser notre action. Cela est obtenu à l’aide de trois éléments
input et de leurs étiquettes associées :
<input id="start" name="controles" type="radio" />
<input id="stop" name="controles" type="radio" checked="checked"/>
<input id="reset" name="controles" type="radio" />
@
93
TP 34 • Animations
Il faut enfin lier l’élément div concerné à l’animation. Remarquez que bien qu’employant la même animation nous avons un
5 peu modifié les paramètres.
Cela fonctionne (en principe, sauf erreur de saisie). Toutefois, lorsque vous cliquez sur Off, l’animation s’arrête exactement là où elle
en était. Et reprend à cet endroit si vous cliquez à nouveau sur On.
Il serait agréable de pouvoir réinitialiser l’animation, mais la propriété animation-play-state ne possède que deux
6 valeurs… Le bouton Reset pourtant proposé n’a pour le moment aucun effet. La solution est de l’employer pour fixer la
propriété animation à none : cela revient à la supprimer, donc à la réinitialiser. Saisissez :
@
94
TP
35
Modèle de quadrillage (grid)
L e module Grid Niveau 1, devenu CR en février 2017, propose un type d’affichage bidimensionnel, alors que flexbox
était unidimensionnel. Il constitue une révolution probablement encore plus spectaculaire que le module flebox et
devrait s’imposer à terme comme modèle de base de conception de toute page web.
Ce TP est le plus long de tout le livre, mais cela s’explique par la richesse et la complexité de ce splendide module.
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_35_début.html, puis enregistrez-le sous le nom
1 TP_CSS_35.html. Affichez ce fichier dans votre navigateur.
Le module Grid est encore actuellement mis en œuvre de façon différente selon les navigateurs : vérifiez avant de commen
cer qu’il est bien reconnu par votre navigateur. Si tel est le cas, vous devriez voir dans le premier élément en haut à gauche un qua
drillage composé de neuf cases (trois lignes et trois colonnes). Si ce n’est pas le cas, mettez à jour votre navigateur ou changez-en, ou
reportez-vous au tableau ci-dessous pour essayer d’activer la prise en charge. Vous ne pourrez effectuer ce TP que si vous voyez
correctement ce premier quadrillage. Seuls les navigateurs relativement récents en sont capables.
Le modèle se fonde sur un conteneur (grid-container) constituant le contexte général d’affichage et renfermant un ou plusieurs enfants
directs ou grid-items. Le conteneur est un élément quelconque dont la propriété display est fixée à grid, inline-grid ou
subgrid (uniquement si l’élément est lui-même un grid-item). Sans nécessité d’aucune autre déclaration, ses enfants sont alors
automatiquement des éléments de type grid-item.
@
95
TP 35 • Modèle de quadrillage (grid)
grid-template-rows/columns: taille [nom] [taille [nom] ...] | subgrid ;
taille est une longueur, un pourcentage ou une fraction de l’espace libre dans la grille (à l’aide de l’unité fr), nom le nom attribué
à la zone définie (obligatoirement placé entre crochets). Le paramètre subgrid est employé si le grid-container est lui-même un
grid-item, autrement dit s’il s’agit de quadrillages imbriqués. Il permet d’indiquer que les dimensions du quadrillage enfant doivent être
héritées de l’élément parent.
Si une définition contient des parties qui se répètent, vous pouvez utiliser la notation repeat() pour alléger le code.
3 Saisissez :
.ct2{display: grid ;
grid-template-columns: repeat(3, 30px) 5% ;}
Ce qui est strictement identique à :
L’unité fr permet de spécifier une dimension comme fraction de l’espace libre du conteneur. Par exemple, ce code donne à
4 chaque élément la dimension d’un tiers du conteneur :
Il est possible d’attribuer des noms aux lignes/colonnes, mais vous pouvez également définir des régions à l’aide de la pro-
5 priété grid-template-areas, qui définit un quadrillage de grille en référençant les noms des zones de grille (grid
areas). Un point (.) signifie que la cellule est vide. La syntaxe elle-même fournit une visualisation de la structure de la grille.
Saisissez :
.ct4{display: grid ;
grid-template-columns: 150px 150px 150px ;
grid-template-rows: auto ;
grid-template-areas: "entete entete entete"
"princ . droite"
"pied pied pied" ;}
@
96
TP 35 • Modèle de quadrillage (grid)
Les rangées de la déclaration doivent posséder le même nombre de cellules. Nous affecterons par la suite des éléments à ces régions.
Vous pouvez spécifier un écartement entre lignes et/ou colonnes à l’aide des propriétés grid-column-gap (entre co-
AVANCÉES CSS
6 lonnes), grid-row-gap (entre lignes) ou de la propriété raccourcie grid-gap. Saisissez une règle complétée pour
l’élément de classe ct1 :
.ct1{…
grid-auto-flow: column ;}
© Dunod – Toute reproduction non autorisée est un délit
.ct2{…
justify-items: start ;}
.ct3{…
align-items: center ;}
@
97
TP 35 • Modèle de quadrillage (grid)
Lorsque la dimension du conteneur excède celle du quadrillage (ce qui est possible
9 si tous les grid-items sont définis avec des tailles absolues), vous pouvez ajuster
l’alignement de la grille à l’intérieur du conteneur horizontalement à l’aide de la
propriété justify-content et verticalement à l’aide de la propriété align-
content. Elles acceptent les valeurs start (à partir de la gauche/haut du conteneur),
end (à partir de la droite/bas), center (au centre), stretch (valeur par défaut, ajuste
les grid-items pour qu’ils occupent toute la place disponible en largeur/hauteur), space-
around (un demi-espace de chaque côté de chaque élément), space-between (un
espace entre éléments, aucun aux e xtrémités) et space-evenly (des espaces égaux
entre é léments et aux extrémités). Saisissez :
Si une piste (ligne ou colonne) est générée automatiquement (suite au positionnement d’éléments à l’extérieur du quadril-
10 lage), vous pouvez en définir la dimension à l’aide des propriétés grid-auto-colums et grid-auto-rows. Vous
spécifiez une valeur (longueur, pourcentage ou fraction d’espace libre à l’aide de l’unité fr). Par exemple, ajoutez ce qui suit
prise en main
AVANCÉES CSS
.ct2 {…
grid-auto-rows: 60px ;}
La propriété raccourcie grid permet de définir en une seule déclaration les propriétés grid-template-rows,
11 grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns et
grid-auto-flow. En outre, même si elle ne peut pas les définir explicitement, elle fixe grid-column-gap et
grid-row-gap à leurs valeurs initiales. Les valeurs possibles sont les suivantes :
• none : règle toutes les sous-propriétés à leurs valeurs initiales ;
• subgrid : règle grid-template-rows et grid-template-columns sur subgrid et toutes les autres sous-
propriétés à leurs valeurs initiales ;
• grid-template-rows/grid-template-columns : fixe ces deux propriétés aux valeurs spécifiées et toutes les
autres sous-propriétés à leurs valeurs initiales ;
• grid-auto-flow [grid-auto-rows [/grid-auto-columns]] : spécifie
respectivement les valeurs de ces propriétés. Si la valeur de grid-auto-columns est omise, elle prend
la valeur de grid-auto-rows. Si les deux sont omises, les propriétés sont fixées à leurs valeurs initiales.
Saisissez :
@
98
TP 35 • Modèle de quadrillage (grid)
Il existe également pour grid une syntaxe plus complexe mais très pratique pour régler toutes les propriétés en une seule
12 fois. Vous spécifiez grid-template-areas, grid-template-rows et grid-template-columns et
toutes les autres sous-propriétés sont fixées à leurs valeurs initiales. Par exemple, saisissez :
.ct7{display: grid ;
grid: "entete entete entete" 1fr
"pied pied pied" 40px
/ auto 50px auto ;}
Cette déclaration est strictement équivalente à :
.ct7{display: grid ;
grid-template-areas: "entete entete entete"
"pied pied pied";
grid-template-rows: 1fr 40px ;
grid-template-columns: auto 50px auto ;}
Comme expliqué auparavant, tout élément enfant d’un g rid-container est un grid-item. Les grid-items peuvent être soit positionnés
AVANCÉES CSS
explicitement, soit placés automatiquement dans le quadrillage. Vous pouvez placer explicitement un grid-item dans le quadrillage de
plusieurs façons. La première méthode consiste à employer le nom des lignes du quadrillage pour définir la zone sur laquelle doit se
trouver l’élément.
Si aucune propriété grid-column-end / grid-row-end n’est déclarée, l’extension est par défaut de 1.
Les propriétés grid-column et grid-row sont des raccourcis pour grid-column-start + grid-column-end
et grid-row-start + grid-row-end. Si aucune valeur de fin n’est déclarée, l’élément s’étendra sur une seule piste.
Les lignes constituant le quadrillage étant numérotées automatiquement, vous spécifiez simplement le point de départ et le point de
fin. Par exemple, saisissez :
.d {grid-column: 1 ;
grid-row: 1 / 3 ;}
.e {grid-column: 2 / 4 ;
grid-row:2 / 4}
L’élément de classe d occupera une colonne (à partir de la ligne verticale 1) et deux lignes (de
la ligne horizontale 1 à la ligne 3). Attention à ne pas confondre les lignes du quadrillage et les
© Dunod – Toute reproduction non autorisée est un délit
lignes de cellules ! L’élément de classe e occupera deux colonnes (de la ligne verticale 2 à la
ligne 4) et deux lignes (de la ligne horizontale 2 à la ligne 4).
Remarquez que cela modifie l’ordre des éléments : c’est vous qui le déterminez totalement, en
parfaite indépendance de leur ordre d’apparition dans le flux du document.
@
99
TP 35 • Modèle de quadrillage (grid)
Éventuellement, des éléments peuvent se recouvrir.
14 Saisissez :
.f{grid-column: 1 / 3 ;
grid-row: 1 / 3 ;}
.g{grid-column: 1 / 3 ;
grid-row: 2 ;}
column-end :
AVANCÉES CSS
.pi{grid-area: 3/1/last-line/4}
.s {justify-self: right ;}
.t {align-self: center ;}
@
100
TP
36
Variables en cascade
L e module de variables en cascade Niveau 1 est au stade CR depuis décembre 2015 et devrait bientôt passer au stade
PR. Pris en charge par tous les navigateurs récents (sauf Internet Explorer, et à partir de Edge 15), il devrait lui
aussi remplacer une bibliothèque jusque-là très employée.
AVANCÉES CSS
Ouvrez dans votre éditeur de texte le fichier TP_CSS_36_début.html, puis enregistrez-le sous le nom TP_
1 CSS_36.html. Affichez ce fichier dans votre navigateur.
Une propriété personnalisée est une propriété quelconque dont le nom débute obligatoirement par deux tirets, comme dans
2 --maPropriete ou --maCouleur. Un usage fréquent est la définition de couleurs abondamment employées sur un
site, et pour lesquelles on pourrait définir deux propriétés personnalisées. Saisissez :
Chose un peu inhabituelle en CSS, les propriétés personnalisées sont sensibles à la casse :
3
© Dunod – Toute reproduction non autorisée est un délit
p {background-color: var(--couleurfond) ;
color: var(--couleurTexte) ;}
@
101
TP 36 • Variables en cascade
La couleur du texte des éléments p s’ajuste, mais pas celle du fond : la propriété correcte était --couleurFond. Corrigez et
vérifiez.
À partir du moment où elle est déclarée, une propriété personnalisée peut être employée. Cela signifie qu’une propriété personnalisée
peut dépendre d’une autre propriété personnalisée si et seulement si celle-ci est déclarée avant. Complétez avec le code en gras la
déclaration concernant l’élément racine :
Pouvoir disposer d’une valeur par défaut est précieux lorsque vous définissez un document type lié à une feuille de styles dans
laquelles des propriétés personnalisées peuvent être ou non personnalisées par les destinataires. Par exemple, imaginons un modèle
dans lequel peuvent être définies plusieurs couleurs personnalisées selon différents éléments. Complétez la déclaration pour :root :
Remarquez que les couleurs ne sont pas définies : c’est un modèle. Il est plus que probable que l’utilisateur du document définisse
correctement la couleur de fond (comme nous l’avons fait), mais pas forcément les autres. Les variables personnalisées
--couleur1 et --couleur2 n’étant pas définies, elles sont ignorées.
@
102
TP 36 • Variables en cascade
La syntaxe exacte d’emploi de var() est la suivante :
4
var(--valeurPersonnalisée[, valeurParDéfaut])
Employer ici une couleur par défaut permet d’obtenir un résultat plus homogène et agréable dans tous les cas. Modifiez comme suit
les deux dernières déclarations :
AVANCÉES CSS
Bien sûr, les choses seraient encore mieux si les couleurs étaient définies. Faites-le dans la déclaration pour l’élément :root :
--maDimension: 10 ;
.a {margin-top: var(--maDimension)% ;}
@
103
Rappel sur les
documents W3C
T
out document du World Wide Web Consortium (W3C) passe par plusieurs états d’achèvement successifs correpondant à une
stabilité reconnue avant d’atteindre le statut final de recommandation :
• Brouillon de travail (Working Draft, WD) : c’est la phase initiale de conception d’une spécification W3C. Pour publier le premier
WD, le groupe de travail doit avoir obtenu un consensus de travail sur le sujet tel qu’il est exposé dans le projet du rédacteur
(Editor’s Draft).
Un projet du rédacteur (Editor’s Draft) est une copie actualisée du document de travail des rédacteurs. Il peut refléter ou non le
consensus du Groupe de travail et peut éventuellement ne pas être parfaitement cohérent. Le processus de publication du W3C
étant exigeant en temps et en moyens, le projet du rédacteur est souvent la référence la plus à jour d’une spécification.
La transition vers l’étape suivante est parfois nommée phase du « dernier appel à commentaire » (Last Call Working Draft, LCWD).
Tous les problèmes recensés ont été résolus et le projet est dans l’attente des résultats de test et de mise en œuvre.
Annexes
• Candidat à la recommandation (Candidate Recommendation, CR) : c’est la phase de test intensif d’une spécification W3C (et
non de ses mises en œuvre !). Cette phase fait souvent surgir de nouveaux problèmes amenant des modifications au fil du temps
(bien que souvent moindres que lors de l’étape Brouillon de travail). Pour sortir de la phase CR, il faut disposer d’au moins deux
mises en œuvre fonctionnelles distinctes de chaque fonctionnalité.
• Recommandation proposée (Proposed Recommendation, PR). Le W3C Advisory Committee doit approuver, après contrôle, le
passage à l’étape finale.
• Recommandation (Recommendation, REC). C’est l’étape ultime d’une spécification W3C, correspondant à une phase de
maintenance. Le W3C publie si nécessaire un ou plusieurs errata et éventuellement une version mise à jour incorporant les errata.
© Dunod – Toute reproduction non autorisée est un délit
@
105
État d’avancement actuel CSS
M
i-2017, CSS (Cascading Style Sheets) est défini par les documents suivants. Ceux figurant en gras sont explicitement abor-
dés dans ce livre.
Attributs de style REC Définit l’incorporation de déclarations CSS dans des attributs de balisage
Espaces de noms Niveau 1 REC Définit une règle @namespace pour autoriser des sélecteurs préfixés
selon un espace de noms
Annexes
Sélecteurs Niveau 3 REC Remplace CSS2§5 et CSS2§6.4.3 en définissant une plage étendue de
sélecteurs
Couleur Niveau 3 REC Remplace CSS2§4.3.6, CSS2§14.1 et CSS2§18.2 en définissant une
plage étendue de couleurs et introduisant la propriété opacity
Requêtes médias Niveau 3 REC Remplace CSS2§7.3 et développe la syntaxe de styles spécifiques aux
médias
Cascade et héritage CR->PR Remplace CSS2§1.4.3 et CSS2§6
Niveau 3
Valeurs et unités Niveau 3 CR->PR Remplace CSS2§1.4.2.1, CSS2§4.3 et CSS2§A.2.1-3 en définissant la syntaxe
de définition des propriétés CSS et développant son ensemble d’unités
Arrière-plans et bordures CR->PR Remplace CSS2§8.5 et CSS2§14.2 en offrant un contrôle accru sur
Niveau 3 les arrière-plans et les bordures, y compris les images d’arrière-plan
superposées, les images de bordures et les ombres portées de boîtes
Interface utilisateur CR->PR Remplace CSS2§18.1 et CSS2§18.4 en définissant le curseur, les encadrés
Niveau 3 et plusieurs nouvelles caractéristiques améliorant l’interface utilisateur
Règles conditionnelles CR Remplace CSS2§7.2 en mettant à jour la définition des règles @media
Niveau 3 pour autoriser l’imbrication tout en introduisant le concept de règles
@supports pour des requêtes de prise en charge de dispositif
Valeurs images et contenu CR Constitue une nouvelle base pour l’adaptation de taille des éléments
remplacé Niveau 3 remplacés (comme des images), ajoute un contrôle complémentaire sur
leur taille et leur orientation et introduit le concept de dégradés en tant
qu’images CSS
Polices Niveau 3 CR Remplace CSS2§15 en proposant un contrôle accru sur le choix de
polices et la sélection de leurs caractéristiques
Multi-colonnage Niveau 1 CR Permet le multi-colonnage en CSS
Composition et mélange CR Définit la composition et le mélange des contenus superposés et propose
Niveau 1 des dispositifs pour contrôler leurs modes
Modes d’écriture Niveau 3 CR Définit la prise en charge de différents modes d’écriture internationaux,
comme de gauche à droite (comme les langues occidentales), droite à
gauche (comme l’hébreu ou l’arabe), bidirectionnel (comme un mélange
de latin et d’arabe) et vertical (comme l’écriture asiatique)
@
106
Annexes • État d’avancement actuel CSS
Les modules suivants sont largement déployés avec une excellente interopérabilité, sans toutefois être totalement testés et débogués.
Les modules suivants sont achevés et relativement stables mais doivent encore être largement testés. Ils sont encore peu déployés et
seul l’un d’entre eux (mais quel module !) est abordé dans cet ouvrage.
Annexes
Styles de compteur Niveau 3 CR->PR Développe les valeurs possibles pour counter-style et propose une
syntaxe @counter-style pour des styles de compteur personnalisés
Will Change Niveau 1 CR->PR Propriété d’indice de performance nommée will-change
Présentation en grille CR->PR Définit un modèle de présentation en quadrillage bidimensionnel,
Niveau 1 optimisé pour la construction d’interfaces utilisateur. Dans ce modèle,
les enfants d’un conteneur quadrillage peuvent être placés à des
emplacements arbitraires d’un quadrillage fixe ou flexible.
Fragmentation Niveau 3 CR->PR Décrit le modèle de fragmentation qui découpe un flux en pages,
colonnes ou régions
Masques Niveau 1 CR Remplace CSS2§11.1.2 en ajoutant des méthodes plus puissantes pour
découper et masquer du contenu
Formes Niveau 1 CR Permet d’appliquer float à des formes non rectangulaires
Décoration de texte Niveau 3 CR Remplace CSS2§16.3 en proposant un contrôle accru sur les lignes
de décoration de texte et en permettant de spécifier des marques
d’emphase et texte et des ombres de texte
Parole Niveau 1 CR Remplace CSS2§A
Alignement de boîte Niveau 3 WD Contient les dispositifs CSS relatifs aux alignements de boîtes au sein
de leur conteneur dans les différents modèles de boîte CSS : blocs,
tableaux, boîtes flexibles et quadrillage
© Dunod – Toute reproduction non autorisée est un délit
Effets de filtres Niveau 1 WD Les effets de filtre sont un moyen de traiter le rendu d’un élément avant
son affichage dans le document.
La liste de tous les modules CSS, stables ou en cours d’élaboration, avec leur état, peut être trouvée sur la page CSS Current Work
(https://www.w3.org/Style/CSS/current-work).
@
107
Tableaux résumés
Nous suivons dans ces tableaux les conventions énoncées au début de ce livre : tout paramètre figurant en italique doit être remplacé
par une valeur, parfois correspondant à une autre propriété. Toutefois, les diverses valeurs possibles sont séparées dans les tableaux
par des virgules et non des symboles pipeline, tandis que la présence d’une valeur soulignée signale qu’il s’agit de la valeur par défaut
(celle active si vous ne modifiez ou ne spécifiez pas la propriété).
@
108
Annexes • Tableaux résumés
Sélecteur Type de sélecteur Signification CCS
E > F Sélecteur d’enfant Un élément F enfant d’un élément E 2
E + F Sélecteur de parent adjacent Un élément F immédiatement précédé par 2
un élément E
E[attribut^="valeur"] Sélecteur d’attribut Un élément E avec un attribut attribut 3
dont la valeur commence exactement par la
chaîne valeur
E[attribut$="valeur"] Sélecteur d’attribut Un élément E dont la valeur de l’attribut 3
attribut se termine exactement par la
chaîne valeur
E[attribut*="valeur"] Sélecteur d’attribut Un élément E dont la valeur de l’attribut 3
attribut contient la sous-chaîne
valeur
E[hreflang|="en"] Sélecteur d’attribut Un élément E dont l’attribut href lang 3
contient une liste séparée par des tirets qui
commence (à gauche) par en
E:root Pseudo-classe structurelle Un élément E racine du document 3
Annexes
E:nth-child(n) Pseudo-classe structurelle Un élément E, ne enfant de son parent 3
E:nth-last-child(n) Pseudo-classe structurelle Un élément E, ne enfant de son parent en 3
partant du dernier
E:nth-of-type(n) Pseudo-classe structurelle Un élément E, ne descendant de ce type 3
E:nth-last-of-type(n) Pseudo-classe structurelle Un élément E, n descendant de ce type à
e 3
partir du dernier
E:last-child Pseudo-classe structurelle Un élément E, ne dernier enfant de son 3
parent
E:first-of-type Pseudo-classe structurelle Un élément E, premier descendant de ce 3
type
E:last-of-type Pseudo-classe structurelle Un élément E, dernier descendant de ce 3
type
E:only-child Pseudo-classe structurelle Un élément E, seul enfant de son parent 3
E:only-of-type Pseudo-classe structurelle Un élément E, seul descendant de ce type 3
E:empty Pseudo-classe structurelle Un élément E dépourvu d’enfant (y compris 3
tout nœud texte)
E:target Pseudo-classe Un élément E cible de l’URI 3
© Dunod – Toute reproduction non autorisée est un délit
@
109
Annexes • Tableaux résumés
A.2 Valeurs de la propriété content
(uniquement avec les pseudo-éléments ::before et ::after)
Valeur Signification
attr(X) Renvoie sous forme de chaîne la valeur de l’attribut X pour le sujet du sélecteur, ou une chaîne
vide si le sujet du sélecteur ne possède pas cet attribut. Cette chaîne n’est pas analysée par le
processeur CSS. La sensibilité à la casse des noms d’attribut dépend du langage du document.
chaîne Contenu texte
compteur Un compteur peut être spécifié avec les fonctions counter() ou counters(). La première
accepte les formes counter(nom) ou counter(nom, style). Le texte généré est la
valeur du compteur le plus interne de nom spécifié à portée du pseudo-élément, mis en forme
dans le style indiqué (decimal par défaut). L’autre fonction possède également deux formes
counters(nom, chaîne) et counters(nom, chaîne, style). Le texte généré
est la valeur de tous les compteurs de nom spécifié à portée du pseudo-élément, du plus
prise en main
externe au plus interne en les séparant par la chaîne spécifiée, dans le style indiqué (decimal
par défaut). Le nom ne doit pas être none, inherit ou initial, faute de quoi la déclaration serait
ignorée.
no-open-quote et
Annexes
@
110
Annexes • Tableaux résumés
Propriété Valeur Exemple Effet
box-shadow ombre-h ombre-v box-shadow:10px Crée une ombre portée de 20 pixels
[ blur] [ spread] 10px 50px 20px blue bleue vers l’intérieur, décalée de
[couleur] [inset] inset 10 pixels et avec une zone de flou de
50 pixels
height longueur ou auto height: 20pt Impose à l’élément une hauteur de
20 points
margin longueur, margin: 10pt Crée une marge de 10 points autour de
pourcentage, auto l’élément
ou inherit
margin-bottom longueur, margin-bottom: 10pt Crée une marge de 10 points en bas de
pourcentage, auto l’élément
ou inherit
margin-left longueur, margin-left: 10pt Crée une marge de 10 points à gauche
pourcentage, auto de l’élément
ou inherit
margin-right longueur, margin-right: 10pt Crée une marge de 10 points à droite
Annexes
pourcentage, auto de l’élément
ou inherit
margin-top longueur, margin-top: 10pt Crée une marge de 10 points en haut
pourcentage, auto de l’élément
ou inherit
padding longueur, pourcentage padding: 10px Ajoute un espacement de 10 pixels entre
ou auto le contenu et la bordure
width longueur, width: 100pt Impose à l’élément une largeur de
pourcentage, auto 100 points
ou inherit
@
111
Annexes • Tableaux résumés
Valeur Type de boîte Effet
table-column Boîte de niveau bloc Élément décrivant une colonne de cellules
table-column-group Boîte de niveau bloc Élément regroupant une ou plusieurs colonnes
table-footer-group Boîte de niveau bloc Analogue à table-row-group, pour une ligne de pied
table-header-group Boîte de niveau bloc Analogue à table-row-group, pour une ligne d’en-tête
table-row Boîte de niveau bloc L’élément est une rangée de cellules.
table-row-group Boîte de niveau bloc L’élément regroupe une ou plusieurs lignes.
clear none, left, clear: left La boîte est décalée de l’espace nécessaire
right, both ou pour placer le bord de la bordure supérieure
inherit en dessous du bord inférieur de toute boîte
flottante due à un élément antérieur dans le
Annexes
document source.
clip rect (haut, droite, clip: rect (5 10 5 10) Rogne 5 pixels du haut et du bas, et 10 pixels
bas, gauche) sur les côtés
float left, right, float: left Place l’élément dans un rectangle flottant sur la
none ou gauche
inherit
left longueur ou left: 15pt Place l’élément à 15 points de la gauche du
pourcentage document ou de l’élément parent
overflow visible, overflow: scroll Attribue à l’élément une barre de défilement,
hidden, auto, qu’il en ait besoin ou non
scroll
position absolute, position: absolute Place l’élément à l’écran sans tenir compte des
relative, autres éléments de la page
static, fixed
top longueur ou top: 10pt Place l’élément à 10 points du haut du
pourcentage document ou de l’élément parent
z-index entier z-index: 1 Place d’abord le premier élément et empile
dessus les suivants
@
112
Annexes • Tableaux résumés
Propriété Valeur(s) But
font-style normal, italic, oblique Style de la police
font-weight incréments de 100, normal, bold, bolder, lighter Graisse de la police
line-height nombre, longueur, pourcentage Hauteur de ligne
Annexes
background-position pourcentage, longueur, top, center, bottom, Position de l’image d’arrière-plan
left, center, right
background-repeat repeat, repeat-x, repeat-y, no-repeat Définit une répétition de l’image
de fond
background-size largeur hauteur Définit la taille de l’image de fond
background-origin content-box |padding-box |border-box Définit la position de départ d’une
image
background-clip content-box |padding-box |border-box Définit la zone couverte par l’image
@
113
Annexes • Tableaux résumés
Propriété Valeur(s) But
word-wrap normal, break-word Permet de forcer la césure de mots longs.
color nom de couleur ou valeur Couleur du texte
@
114
Annexes • Tableaux résumés
A.11 Propriétés flexbox
Annexes
flex flex-growth flex-shrink Propriété raccourcie pour les trois propriétés de flexibilité.
flex-basis, initial, auto, Préférer son emploi à celui de ses sous-propriétés (flex-item)
none, nombre positif
flex-growth nombre entier positif ou nul Facteur de grossissement si espace disponible (flex-item)
flex-shrink nombre entier positif ou nul Facteur de rétrécissement si espace manquant (flex-item)
flex-basis auto, content, largeur Taille de base de l’élément (flex-item)
@
115
Annexes • Tableaux résumés
Propriété Valeur(s) But
align-content start, end, center, stretch, Alignement vertical du quadrillage dans le
space-around, space-between, conteneur
space-evenly
grid-auto-columns, dimension Taille par défaut d’une colonne ou ligne
grid-auto-rows automatiquement créée
grid column-start, ligne, span nombre, span nom, Fixent les points de départ et de fin d’un
grid-column-end, auto élément
grid-row-start,
grid-row-end
grid-area nom Affecte une région à un élément
grid-column grid-column-start / Raccourci
grid-column-end
grid-row grid-row-start / Raccourci
prise en main
grid-row-end
justify-self start, end, center, stretch Alignement horizontal d’un grid-item
align-self start, end, center, stretch Alignement vertical d’un grid-item
Annexes
@
116
Annexes • Tableaux résumés
Famille/ Valeur Description
Curseurs de glisser-déposer
move Indique un déplacement en cours
no-drop Indique que l’élément déplacé ne peut être déposé à cet emplacement. Souvent une main avec un
cercle barré
not-allowed L’action demandée ne sera pas effectuée. Souvent un cercle barré
grab Quelque chose peut être glissé-déposé. Souvent le dos d’une main ouverte
grabbing Quelque chose est en cours de déplacement. Souvent un dos de main fermée
Curseurs de taille et de défilement
e-resize, Indique qu’un côté va être déplacé. Par exemple, le curseur se-resize est employé lorsque le
n-resize, mouvement débute au coin sud-est de la boîte.
ne-resize,
nw-resize,
s-resize,
se-resize,
sw-resize,
Annexes
w-resize
ew-resize, Signale un curseur de redimensionnement bidirectionnel
ns-resize,
nesw-resize,
nwse-resize
col-resize Indique que l’élément ou la colonne peut être modifié horizontalement. Souvent une flèche
bicéphale horizontale avec une barre verticale
row-resize Indique que l’élément ou la colonne peut être modifié verticalement. Souvent une flèche bicéphale
verticale avec une barre horizontale
all-scroll Vous pouvez faire défiler quelque chose dans toutes les directions. Souvent quatre flèches avec un
point au milieu
Curseurs de zoom
zoom-in, Quelque chose peut être agrandi ou diminué. Souvent une loupe avec au centre un + ou un − pour
zoom-out indiquer le sens de l’action
@
117
Annexes • Tableaux résumés
Élément(s) HTML Style CSS
center {display: block ; unicode-bidi: embed ; text-align: center}
cite {font-style: italic}
code {font-family: monospace ;}
col {display: table-column}
colgroup {display: table-column-group}
dd {display: block ; unicode-bidi: embed ; margin-left: 40px}
del {text-decoration: line-through}
dir {display: block ; unicode-bidi: embed ; margin : 1.12em 0 ;
margin-left: 40px}
div {display: block ; unicode-bidi : embed}
dl {display: block ; unicode-bidi : embed ; margin : 1.12em 0}
dt {display: block ; unicode-bidi: embed}
em {font-style: italic}
prise en main
@
118
Annexes • Tableaux résumés
Élément(s) HTML Style CSS
select {display: inline-block}
small {font-size: .83em}
sub {font-size: .83em ; vertical-align: sub}
sup {font-size: .83em ; vertical-align: super}
strike {text-decoration: line-through}
strong {font-weight: bolder}
table {display: table ; border-spacing: 2px ;}
tbody {display: table-row-group ; vertical-align: middle}
td {display: table-cell ; vertical-align: inherit}
textarea {display: inline-block}
tfoot {display: table-footer-group ; vertical-align: middle}
th {display: table-cell ; vertical-align: inherit ;
font-weight: bolder ; text-align: center}
thead {display: table-header-group ; vertical-align: middle}
tr {display: table-row ; vertical-align: inherit}
tt {font-family: monospace ;}
u {text-decoration: underline}
Annexes
ul {display: block ; unicode-bidi: embed ; margin: 1.12em 0 ;
margin-left: 40px}
var {font-style: italic}
*[DIR="ltr"] {direction: ltr ; unicode-bidi: embed}
*[DIR="rtl"] {direction: rtl ; unicode-bidi: embed}
© Dunod – Toute reproduction non autorisée est un délit
@
119
Index
Symbols background-origin, propriété 52
background-position, propriété 51, 58
:active, pseudo-classe 20 background-repeat, propriété 51, 58
:checked, pseudo-classe 20, 93 background-size, propriété 52
:empty, pseudo-classe 23 before, pseudo-élément 71
:first-child, pseudo-classe 22 bloc de déclaration 10
:first-of-type, pseudo-classe 23 boîte
:focus, pseudo-classe 20 flexible, modèle de 78
:hover, pseudo-classe 20, 90 flottante 41
:last-child, pseudo-classe 22 boîtes, modèle de 29
:last-of-type, pseudo-classe 23 border, propriété 35
:link, pseudo-classe 19 border-color 32
:not(), pseudo-classe 23 border-style 32
:nth-child(), pseudo-classe 21 border-width 32
:nth-last-child(), pseudo-classe 22 border-image, propriété 35
:nth-last-of-type(), pseudo-classe 23 border-radius, propriété 34
:nth-of-type(), pseudo-classe 22 bordure, propriétés de 34
:only-child, pseudo-classe 23 box-shadow, propriété 35
:only-of-type, pseudo-classe 23 box-sizing, propriété 64
::after, pseudo-élément 26
::before, pseudo-élément 26 C
::first-letter, pseudo-élément 25 caractéristiques médias 74
::first-line, pseudo-élément 24 cascade 9
@font-face, règle 48 classe, sélecteur de 17
@keyframe, règle 92 clear, propriété 41
@media, règle 75, 76 clip, propriété 43
[], sélecteur d’attribut 17 color, propriété 49
., sélecteur de classe 17 column-count, propriété 62
~, sélecteur de frère 16 column-gap, propriété 62
+, sélecteur de parent adjacent 16 column-rule, propriété 63
#, sélecteur d’identifiant 18 column-width, propriété 62
A columns, propriété raccourcie 63
commentaire 10
align-content, propriété 98 compteur, propriétés de 71
align-items, propriété 80, 97 conception adaptative 73
align-self, propriété 80, 100 contenu, propriétés de 38
© Dunod – Toute reproduction non autorisée est un délit
@
121
E I
@
122
propriété rotateX(), méthode 86
d’animation 92 rotateY(), méthode 86
de bordure 34 rotateZ(), méthode 86
de compteur 71
de contenu 38 S
de couche 42 scale(), méthode 83
de couleur et de fond 49 scale3d(), méthode 86
d’effet visuel 43 sélecteur 10
de liste 68 d’attribut 17
de marge 30 de classe 17
de positionnement 40 de frère 16
d’espacement 37 de parent adjacent 16
de texte 59 de pseudo-classe dynamique 19
de texte et de police 46 d’identifiant 18
d’interface utilisateur 64 spécificité 27
pseudo-classe skew(), méthode 83
:checked 20 style
:empty 23 attribut 8
:first-child 22 élément 8
:first-of-type 23
:focus 20 T
:hover 20
:last-child 22 text-decoration, propriété 59
:last-of-type 23 text-indent, propriété 60
:not() 23 text-overflow, propriété 65
:nth-child() 21 text-shadow, propriété 61
:nth-last-child() 22 text-transform, propriété 60
:nth-last-of-type() 23 texte, propriétés de 59
:nth-of-type() 22 transformation 2D
:only-child 23 matrix(), fonction 85
:only-of-type 23 rotate(), méthode 82
:target 19 scale(), méthode 83
pseudo-élément 24 skew(), méthode 83
::after 26 translate(), méthode 82
::before 26 transformation 3D
::first-letter 25 backface-visibility, propriété 86
::first-line 24 matrix3d(), fonction 86, 88
perspective-origin, propriété 87
Q perspective, propriété 87
rotate3d(), méthode 86
quadrillage, modèle de boîte 95 rotateX(), méthode 86
R rotateY(), méthode 86
rotateZ(), méthode 86
© Dunod – Toute reproduction non autorisée est un délit
@
123
U W