Cours HTML Css
Cours HTML Css
XHTML
XHTML
et
et
CSS
CSS Cours et exercices
Cours et exercices
XHTML
et
CSS
Cours et exercices
CHEZ LE MÊME ÉDITEUR
Du même auteur
J. ENGELS. – PHP 5. Cours et exercices (collection Noire).
N°11407, 2005, 518 pages.
CSS 2 et design web
D. SHEA, M. HOLZSCHLAG. – Le Zen des CSS.
N°11699, 2005, 296 pages.
R. GOETTER. – CSS 2 : pratique du design web (collection Blanche).
N°11570, 2005, 324 pages.
R. GOETTER. – Mémento CSS.
N°11726, 2005, 14 pages.
J. ZELDMAN. – Design web : utiliser les standards.
N°11548, 2005, 440 pages.
K. GOTO, E. KOTLER. – [Re]design web 2.0. Conduite de projet.
N°11579, 2005, 294 pages.
S. BORDAGE. – Conduite de projets web.
N°11599, 2e édition 2005, 384 pages.
Autres ouvrages
E. DASPET et C. PIERRE de GEYER. – PHP 5 avancé (collection Blanche).
N°11669, 2e édition 2005, 804 pages.
G. PONÇON. – Best practices PHP (Architecte logiciel).
N°11676, 2005, 490 pages.
S. MARIEL. – PHP 5 (Les Cahiers du programmeur).
N°11234, 2004, 290 pages.
V. CARON, Y. FORGERIT et al. – SPIP 1.8 (Les Cahiers du programmeur).
N°11428, 2005, 450 pages.
A. CAOUISSIN. – Dreamweaver MX 2004.
N°25501, 2004, 1032 pages.
J.-M. DEFRANCE. – PHP/MySQL avec Dreamweaver MX 2004 (Best of Eyrolles).
N°11709, 2004, 550 pages (semi-poche).
C. DELANNOY. – Programmer en Java (collection Noire).
N°11748, 4e édition, 2006, 740 pages + CD-Rom.
A. TASSO, S. ERMACORE. – Initiation à JSP (collection Noire).
N°11532, 2004, 354 pages + CD-Rom.
J. WEAVER, K. MUKHAR, J. CRUME. – J2EE 1.4 (collection Blanche).
N°11484, 2004, 662 pages.
J. MOLIÈRE. – J2EE (Les Cahiers du programmeur).
N°11574, 2005, 234 pages.
A. PATRICIO. – Hibernate 3.0 (collection Blanche).
N°11644, 2005, 336 pages.
K. DJAFAAR. – Eclipse et JBoss.
N°11406, 2005, 656 pages + CD-Rom.
Jean Engels
XHTML
et
CSS
Cours et exercices
ÉDITIONS EYROLLES
61, bd Saint-Germain
75240 Paris CEDEX 05
[Link]
Le code de la propriété intellectuelle du 1er juillet 1992 interdit en effet expressément la photocopie à usage collectif sans
autorisation des ayants droit. Or, cette pratique s’est généralisée notamment dans les établissements d’enseignement,
provoquant une baisse brutale des achats de livres, au point que la possibilité même pour les auteurs de créer des œuvres
nouvelles et de les faire éditer correctement est aujourd’hui menacée.
En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent ouvrage, sur
quelque support que ce soit, sans l’autorisation de l’Éditeur ou du Centre Français d’exploitation du droit de copie, 20, rue des Grands
Augustins, 75006 Paris.
© Groupe Eyrolles, 2006, pour la présente édition, ISBN : 2-212-11637-3.
Table des matières
Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
PARTIE I
Le langage XHTML
CHAPITRE 1
Introduction à XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Généalogie du XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Les éléments, balises et attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Les attributs de base de XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Intérêt des spécifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Règles de base XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Un document bien formé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Un document conforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Validation d’un document : le label du W3C . . . . . . . . . . . . . . . . . . . . . . . 14
L’environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Les éditeurs visuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Les éditeurs classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Tests et mise en place du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Référencement du site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
XHTML et CSS2
VI
CHAPITRE 2
Structure d’un document XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Les éléments de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
La déclaration DOCTYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
L’élément racine <html>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
L’en-tête d’un document : l’élément <head> . . . . . . . . . . . . . . . . . . . . . . . 28
Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Les méta-informations : l’élément <meta /> . . . . . . . . . . . . . . . . . . . . . . . 31
Le corps du document : l’élément <body>. . . . . . . . . . . . . . . . . . . . . . . . . 39
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
CHAPITRE 3
Créer du texte et des listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Les titres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Les divisions de la page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Les paragraphes : l’élément <p> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Les divisions de la page : l’élément <div> . . . . . . . . . . . . . . . . . . . . . . . . . 51
Les divisions de bloc locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Les éléments des divisions sémantiques en ligne . . . . . . . . . . . . . . . . . . . . 60
Les styles physiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Mettre un texte en gras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Mettre du texte en italique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Modifier la taille du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Créer des exposants et des indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Afficher du texte dans une police à espacement fixe . . . . . . . . . . . . . . . . . 69
Créer un retour à la ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Les listes ordonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Les listes non ordonnées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Les listes imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Les listes de définitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
CHAPITRE 4
Insérer des images et du multimédia . . . . . . . . . . . . . . . . . . . . . . . 83
Les types d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Table des matières
VII
L’insertion d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
L’élément <img /> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Les images réactives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
L’insertion d’image en tant qu’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Image et bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
L’insertion du multimédia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
L’insertion d’une animation Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
L’insertion d’une vidéo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
L’insertion d’éléments audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
L’insertion d’une applet Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
CHAPITRE 5
CHAPITRE 6
CHAPITRE 7
Créer des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Structure d’un formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Les attributs de l’élément <form> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Les composants communs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Bouton d’envoi et de réinitialisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Les composants de saisie de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
La saisie de texte uniligne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
La saisie de mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
La saisie de texte long. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Les boutons radio et les cases à cocher . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Les listes de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Les champs cachés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Le transfert de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Un formulaire complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Organisation des formulaires à l’aide de tableaux . . . . . . . . . . . . . . . . 199
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
CHAPITRE 8
Créer des cadres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Structure des pages avec cadres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Les éléments <frameset> et <frame> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Les cadres horizontaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Les cadres verticaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Les cadres imbriqués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Table des matières
IX
PARTIE II
Les styles CSS
CHAPITRE 9
Introduction à CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Créer des styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Les règles générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Les sélecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Les sélecteurs d’attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Pseudo-classes et pseudo-éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
La déclaration !important . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Écrire des feuilles de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Dans l’élément <style>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Dans un fichier externe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Dans l’attribut style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Cascade et héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Sélection selon le média . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Sélection selon le créateur du style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Sélection par spécificité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Sélection selon l’ordre d’apparition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
L’héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Les unités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Les unités de longueur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
CHAPITRE 10
Couleurs et image de fond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
La couleur d’avant-plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
XHTML et CSS2
X
CHAPITRE 11
Créer des bordures, marges, espacements et contours . . . . 275
Le modèle CSS des boîtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Les bordures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Le style de la bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
La largeur de la bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
La couleur de la bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Définition globale d’une bordure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Les marges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Les espacements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Les contours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Le style du contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
La couleur du contour. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
La largeur du contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
CHAPITRE 12
Le style du texte et des liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Les polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
La taille des polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Les tailles absolues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Les tailles relatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Les tailles dimensionnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Les tailles en pourcentage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
La graisse du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Le style des polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Régler l’interligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Table des matières
XI
CHAPITRE 13
Créer une mise en page : le dimensionnement
et le positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Le dimensionnement des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Le rendu des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Le positionnement des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Le flottement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Empêcher le flottement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Le positionnement relatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Le positionnement absolu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Le positionnement fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Visibilité et ordre d’empilement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
CHAPITRE 14
Le style des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Le modèle de gestion des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Les couleurs des cellules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Les titres des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
La gestion des bordures des cellules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Les bordures séparées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Les bordures fusionnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Déterminer la largeur d’un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Présentation d’un formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
XHTML et CSS2
XII
CHAPITRE 15
Le style des listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
La numérotation des listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
La création de compteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Les listes à puces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Les puces prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Les puces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Les listes mixtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Affichage des listes en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Affichage d’éléments divers sous forme de liste . . . . . . . . . . . . . . . . . . 411
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
CHAPITRE 16
Les médias écrits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Adapter les styles à l’impression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Cibler un média précis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Adaptation des styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Créer un en-tête commun aux pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Gestion des sauts de page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Les pseudo-classes d’impression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
PARTIE III
Annexes
Annexe A
Référence des éléments XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Annexe B
Référence CSS 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Feuille de style par défaut recommandée par le W3C . . . . . . . . . . . . . 463
Référence des propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Table des matières
XIII
Annexe C
Codes des couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Annexe D
Les entités de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Annexe E
Bibliographie et adresses utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Adresses utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Avant-propos
HTML est un langage aujourd’hui dépassé ! Il est désormais remplacé par l’association
du langage XHTML (eXtensible HyperText Markup Language) qui permet de structurer
précisément les contenus des sites Internet et de CSS (Cascading Style Sheets) pour créer
la mise en page et les différentes présentations de ces contenus pour les terminaux les
plus divers, allant du navigateur classique au téléphone portable. La conception des sites
devant se faire en deux phases (contenu et présentation), cet ouvrage est lui-même divisé
en deux grandes parties.
La première traite du langage XHTML en tant qu’outil de structuration des documents.
Elle vous permettra d’acquérir une bonne connaissance de tous les éléments disponibles
dans ce but. À ce stade, et même si nous indiquons la présentation par défaut liée à cha-
cun d’eux, vous ne devriez pas vous préoccuper outre mesure de cet aspect et ne jamais
choisir tel élément en fonction de son aspect prédéterminé, mais en fonction de son rôle
logique dans la structuration du contenu. C’est cette différence fondamentale de conception
qui crée la véritable révolution de XHTML par rapport à HTML.
Cette première partie comprend les chapitres suivants :
• Le chapitre 1 est une introduction générale destinée à mettre en évidence les différen-
ces entre XHTML et HTML. Il définit les règles qui vous permettront de créer un
document XHTML bien formé et conforme aux standards du W3C. Il indique égale-
ment les outils logiciels nécessaires à la création puis à la mise en place sur un serveur
distant des pages Web que vous allez créer.
• Le chapitre 2 vous permet de créer la structure générale d’une page conforme à
XHTML selon la version que vous choisirez d’utiliser, sachant que nous recomman-
dons d’utiliser la dernière version disponible, en l’occurrence XHTML 1.1. Cette
structure fait apparaître les éléments essentiels qui sont communs à toutes les pages,
comme la déclaration DOCTYPE. Vous y trouverez tous ceux qui constituent l’en-tête
d’une page et qui, s’ils ne créent généralement pas de parties visibles dans un naviga-
teur, ont un rôle important souvent négligé. En particulier, ils permettent par exemple
de lier la page à des ressources externes comme une feuille de style ou des scripts
JavaScript. Certains autres éléments jouent aussi un rôle essentiel dans le référence-
ment de votre site, en permettant d’inclure des informations sur le document, dites
XHTML et CSS2
2
La seconde partie de cet ouvrage traite de la création des feuilles de style au moyen de
CSS. Elle est le complément indispensable de XHTML puisque la première partie a bien
mis l’accent sur le fait de la séparation indispensable du contenu et de la présentation.
• Le chapitre 9 vous permet d’apprendre le fonctionnement des CSS et la syntaxe utili-
sée dans la création des styles applicables à un document XHTML. Ce chapitre constitue
une étape essentielle dans l’apprentissage des CSS car il aborde les nombreux sélec-
teurs qui permettent, par exemple, d’appliquer un même style à toutes les occurrences
d’un élément ou d’appliquer des styles différents à un même élément en fonction de
son contexte. C’est du bon usage de ces sélecteurs que dépendra toute la puissance et
la diversité d’utilisation des styles que vous allez créer par la suite. Nous y étudions
enfin les règles d’héritage et de cascade des propriétés CSS.
• Le chapitre 10 permet de découvrir les propriétés de gestion des couleurs aussi bien
pour le texte que pour le fond d’un élément, puis celles qui permettent de créer des
images de fond et leurs différents types de positionnement dans tous les éléments
XHTML.
• Le chapitre 11 présente tout d’abord le modèle de « boîte » applicable à tous les élé-
ments CSS, puis traite de la création des bordures (style, épaisseur, couleur) applica-
bles à chaque élément individuellement. Nous y abordons également la création des
marges entre la boîte d’un élément et son environnement, ainsi que l’espacement entre
son contenu et ses bordures. Toutes les propriétés abordées ici sont de nature à affiner
la présentation à l’intérieur d’un document. La notion récente de contour y est également
étudiée.
• Le chapitre 12 fait un tour d’horizon des propriétés applicables aux textes, qu’il s’agisse
du choix d’une police de caractères, des différentes façons de définir sa taille de manière
absolue ou relative par rapport au contexte, du choix de sa couleur, de son style, de sa
casse, de sa graisse, sans oublier les nombreuses autres possibilités décoratives. Nous
décrivons aussi la gestion des interlignes, de l’alignement et de l’espacement du texte.
Ce chapitre présente enfin les propriétés spécifiques aux liens hypertextes et les sélecteurs
particuliers qui permettent de réaliser des effets dynamiques.
• Le chapitre 13 apporte les éléments essentiels qui permettent de gérer la présentation
et la mise en page globale d’un document. Nous y étudions les méthodes de dimen-
sionnement des éléments ainsi que les méthodes de positionnement qui sont des avan-
cées essentielles de l’association CSS/XHTML par rapport à HTML. Elles permettent
de remplacer les méthodes de mise en page habituelles comme celles qui usent et abu-
sent des tableaux ou encore celles qui utilisent des cadres. La richesse de ces proprié-
tés permet également d’agir sur la visibilité et l’ordre d’empilement des éléments.
Toutes ces propriétés permettent de créer les mises en page les plus diverses.
• Le chapitre 14 est spécialement dédié aux tableaux qui possèdent un modèle de ges-
tion particulier. Nous montrons comment gérer la couleur des cellules en fonction, par
exemple, de leur appartenance à un groupe de lignes ou de colonnes. Nous étudions
également la gestion des bordures des cellules, de la détermination de la largeur des
XHTML et CSS2
4
Le langage XHTML
1
Introduction à XHTML
Il n’y aura pas de HTML 5. C’est ce qu’a confirmé le W3C (World Wide Web Consor-
tium), l’organisme qui édite les recommandations des langages du Web : le HTML est
mort en tant que tel. Certes, pendant des années, il a permis à tous de « bricoler » des
pages web plus ou moins bien ficelées, mais il était devenu trop permissif, et surtout se
caractérisait par un manque de rigueur assez flagrant. La rivalité entre Netscape et
Microsoft a entraîné la création de balises propriétaires utilisables uniquement dans l’un
des navigateurs, chacun s’ingéniant à créer le gadget qui lui attirerait le plus d’utilisa-
teurs. Cette situation ne faisait que gêner les créateurs de pages web qui étaient obligés
de prévoir des solutions alternatives aux balises manquantes en fonction du navigateur
client. Il est évident que c’est la pression du e-commerce qui a provoqué la disparition
de HTML, et que la naissance de XML (eXtensible Markup Language) l’a précipitée.
Le XML aurait pu l’emporter tout de suite (car à terme c’est lui qui restera), mais c’était
sans compter avec sa complexité et les problèmes de lecture qu’il pose aux utilisateurs
avec des navigateurs d’anciennes générations. Il a donc fallu définir une alternative au
tout XML.
Généalogie du XHTML
XHTML (eXtensible HyperText Markup Language) est un langage de balisage (dit aussi
langage de marquage) qui permet de structurer le contenu des pages web dans différents
éléments. Voilà une définition bien abstraite, reconnaissons-le, mais nous y reviendrons
en détail dans la section suivante en présentant la notion de balisage.
Historiquement, les langages de balisage sont issus du langage SGML (Standard
Generalized Markup Language) créé en 1986 pour structurer des contenus très divers.
Le langage XHTML
8 PARTIE I
Ce langage s’est révélé trop complexe pour être appliqué tel quel au Web, d’où la nécessité
d’en créer une version allégée respectant les mêmes principes essentiels.
L’inventeur du HTML (1992), Tim Berners-Lee, l’avait conçu à l’origine comme un
outil de structuration des contenus, principalement textuels, et non pas pour créer des
présentations diversifiées. Ce sont les développements successifs, l’essor populaire du
Web et la concurrence acharnée entre Netscape et Microsoft pour s’emparer du marché
des navigateurs, qui ont détourné HTML de sa vocation première avec l’ajout d’élé-
ments de design qui n’avaient rien à y faire. Voulant faire mieux que l’autre, chacun
des deux grands a empilé des couches superflues sur HTML. Il est vrai que l’entrée du
Web dans le grand public nécessitait de répondre à une demande d’interfaces graphiques
plus esthétiques.
L’absence d’un langage particulier dédié uniquement à la présentation poussait effecti-
vement les webmestres à utiliser tous les moyens pour créer des présentations visuelles
agréables. L’apparition de CSS (Cascading Styles Sheets) en 1996 aurait dû résoudre le
problème du détournement de HTML de sa destination première. Les mauvaises habitudes
étaient prises et la facilité faisait le reste.
L’apparition de HTML 4, et particulièrement de sa version « strict » associée à l’emploi
systématique de CSS 2 (publié en 1998), pouvait apporter une solution efficace à ce pro-
blème. La création de XML (eXtensible Markup Language) en 1998 et son succès dans
de multiples domaines d’application ont conduit le W3C (World Wide Web Consortium)
à créer le langage XHTML, non plus comme une nouvelle version de HTML, mais
comme une reformulation de HTML en tant qu’application XML. Au niveau des éléments
et des attributs disponibles, il existe à vrai dire très peu de différences entre HTML 4
strict et XHTML 1.1.
lequel c’est le programmeur qui crée ses propres éléments selon ses besoins. À quelques
exceptions près, un élément a la structure suivante :
<nom_element> Contenu </nom_element>
Son contenu est précédé par une balise d’ouverture <nom_element> et suivi par une balise
de fermeture </nom_element>. Toutes les balises d’ouverture (ou marqueur) commence par
le signe < et se terminent par le signe >. La balise de fermeture fait de même mais le nom
de l’élément est précédé d’un slash (/). Les navigateurs interprètent donc les contenus en
fonction du nom de l’élément et attribuent un style par défaut à chacun de ses contenus.
Les caractéristiques de chaque élément peuvent être précisées par des informations com-
plémentaires que l’on désigne en tant qu’attributs de l’élément. Il peut s’agir par exemple
de la définition de la largeur, de la hauteur ou de l’alignement du contenu. Comme nous
le verrons, un certain nombre d’attributs sont communs à quasiment tous les éléments de
base dans les sections suivantes.
Les attributs d’un élément sont toujours définis dans la balise d’ouverture et doivent être
séparés les uns des autres par au moins une espace typographique. Chaque attribut doit
avoir une valeur, contrairement à ce qui se pratiquait dans HTML 4, même s’il ne peut
prendre qu’une valeur unique. Aucune valeur n’est donc implicite du moment que l’attri-
but figure dans la balise d’ouverture. La présence de certains attributs est obligatoire dans
quelques éléments particuliers, ce que nous préciserons systématiquement quand ce sera
le cas. La plupart du temps, les attributs d’un élément sont facultatifs et c’est au program-
meur de déterminer leur définition par rapport au cas qu’il doit traiter. Nombre d’attributs
ont une valeur par défaut. Cela signifie que même si on ne les définit pas dans l’élément,
celui-ci se comporte comme si nous avions défini explicitement cette valeur. Il est donc
important de connaître ce type d’attribut et de ne pas négliger de les définir avec une
autre valeur si ce comportement par défaut n’est pas désiré. La valeur de tous les attributs
doit être définie entre des guillemets doubles. La syntaxe conforme d’un élément ayant
des attributs est donc la suivante :
<nom_element attribut1="valeur1" attribut2="valeur2" > Contenu de l’élément
➥ </nom_element>
Le contenu d’un élément peut être constitué de texte ou d’autres éléments qui, eux-
mêmes, peuvent en contenir d’autres, et ainsi de suite. Cet ensemble d’inclusion constitue
la hiérarchie du document XHTML.
précédents, il est très facile de modifier rapidement toute la présentation d’une page
sans toucher au code XHTML.
Les standards XHTML et CSS sont aujourd’hui incontournables pour tous ceux qui veulent
concevoir un site web de manière professionnelle, et tous les étudiants en informatique et
les professionnels du Web se doivent d’acquérir ou de mettre à jour leurs connaissances
sur ces techniques.
• Les éléments vides ne comportent qu’une seule balise et doivent se terminer par les
caractères /> précédés d’une espace pour marquer la fin de l’élément. Par exemple, il
ne faut plus écrire :
<img src= "[Link]"> <hr> <br>
mais le code suivant :
<img src= "[Link]" /> <hr /> <br />
• Les éléments ne doivent pas se chevaucher. Ils doivent donc obéir au principe premier-
ouvert-dernier-fermé. Dans ce cas, le premier élément est le parent du second et celui-ci
est enfant du premier. Par exemple, le code suivant est incorrect :
<div> Cette division contient un titre <h1> Important ! </div> </h1>
• Tous les attributs doivent avoir une valeur incluse entre des guillemets doubles (").
Les différents attributs du même élément doivent être séparés par au moins une espace.
Par exemple, il ne faut plus écrire :
<p class=styleperso title=attention> Texte important</p>
mais le code suivant :
<p class="styleperso" title="attention" > Texte important</p>
• À tous les attributs utilisés doit être donnée une valeur, y compris ceux dont la valeur
est unique. Par exemple, il ne faut plus écrire :
<input type= "checkbox" checked disabled />
mais le code suivant :
<input type= "checkbox" checked="checked" disabled="disabled" />
• L’attribut name qui servaient à identifier certains éléments (<a>, <form>, par exemple) est
supprimé et doit être remplacé par l’attribut id.
• Les scripts et les feuilles de style qui contiennent les caractères < et & peuvent figurer
dans des sections CDATA de la façon suivante :
<script type="text/javascript">
< ![CDATA[
Code du script…
]]>
</script>
Ces sections n’étant pas actuellement reconnues par les navigateurs, nous ne les utili-
serons pas dans cet ouvrage, mais il faudra en tenir compte dans un avenir proche. Une
autre solution efficace consiste à inclure les scripts ou les feuilles de style contenant
ces caractères dans des fichiers séparés et à les inclure à l’aide de l’élément <link> sur
lequel nous reviendrons en détail par la suite.
Un document conforme
Un document XHTML se doit également de respecter les règles d’inclusion des éléments
les uns dans les autres, telles qu’elles sont définies dans la DTD choisie. En effet, une
DTD définit la liste limitative de tous les éléments XHTML utilisables et énumère ceux
qui peuvent y être inclus. Le respect de ces contraintes est impératif pour que le docu-
ment soit déclaré conforme à la DTD. Vous trouverez à cet effet tout au long de cet
ouvrage lors de la description des éléments, et dans l’annexe A, non pas le texte des DTD
XHTML 1 qui est particulièrement difficile à lire, mais son interprétation, pour chaque
élément, sous la forme de la liste de ses éléments enfants (ceux qu’il peut inclure) et de
ses éléments parents (ceux dans lesquels il peut être inclus).
Le langage XHTML
14 PARTIE I
Figure 1-1
La page de validation du W3C
Le résultat de la validation est affiché dans une nouvelle page ; si le code est conforme,
vous obtenez une page semblable à celle de la figure 1-2, sinon la liste des erreurs ainsi
qu’un commentaire sont fournis.
Introduction à XHTML
CHAPITRE 1
15
Figure 1-2
La page de résultat de validation du W3C
L’environnement de travail
Pour créer des pages web avec XHTML et CSS, il faut être doté d’un environnement de
travail adapté. En théorie, un simple éditeur de texte tel que le Bloc Notes de Windows ou
Emacs sous Linux par exemple peut suffire. Cependant, comme la saisie des noms de dif-
férents éléments XHTML dans ce type d’éditeur peut devenir à la longue plutôt rébar-
bative, nous mentionnons quelques outils susceptibles de faire gagner du temps.
Signalons également dans cette catégorie, l’existence d’un nouvel éditeur qui se veut le
concurrent libre et gratuit de Dreamweaver pour la création de pages web. Il s’agit de Nvu,
téléchargeable sur le site [Link] Dans sa version actuelle, version 1.0, il est
encore assez loin de son modèle mais ses débuts sont prometteurs car il offre des fonction-
nalités avancées, comme un éditeur de styles CSS. C’est d’ores et déjà un bon produit dont
il faudra suivre les évolutions futures. La figure 1-3 présente l’espace de travail de Nvu.
Figure 1-3
L’éditeur Nvu 1.0
l’éditeur est divisée en plusieurs zones. La zone contient le code de la page. Compor-
tant plusieurs onglets, la zone permet de visualiser selon vos besoins du moment la
liste des éléments XHTML 1.1, celle des propriétés CSS 2 ou un explorateur de fichiers.
La zone contient en plus des menus habituels un ensemble de boutons permettant
l’inclusion instantanée du code correspondant à une icône (lien, titres, tableaux, etc.).
Pour incorporer un élément XHTML complet, muni donc d’une balise d’ouverture, une
balise de fermeture éventuelle ainsi que certains attributs importants, il vous suffit de pla-
cer le curseur à l’endroit désiré dans le code, puis d’effectuer un double-clic sur l’élé-
ment dans la zone de gauche (repère ). Il en est de même pour créer une feuille de
style : suffit d’un clic sur la propriété CSS voulue. La liste des éléments XHTML et CSS
fournie par défaut avec EditPlus est actuellement plus large que celle des éléments
conformes de XHTML 1.1, mais vous pouvez la personnaliser en enlevant des éléments ou
en en ajoutant. Si vous utilisez par exemple très souvent tel attribut d’un élément, vous
pouvez le rajouter, et il apparaîtra ensuite systématiquement quand vous choisirez cet
élément, car la liste des éléments et de leurs attributs est enregistrée dans un fichier. Pour
effectuer cette opération, effectuez un clic droit sur le nom d’un élément et choisissez
Edit. Vous pouvez ensuite procéder à toutes les modifications désirées. Vous pourrez télé-
charger sur le site [Link]/edit les fichiers [Link] et [Link] et suivre la pro-
cédure indiquée sur le site pour obtenir dans EditPlus tous les éléments XHTML 1.1 et
les propriétés CSS 2.1 qui sont actuellement conformes aux recommandations du W3C.
Figure 1-4
L’éditeur EditPlus
Le langage XHTML
18 PARTIE I
쐋
Figure 1-5
L’interface de FileZilla
Le langage XHTML
20 PARTIE I
Référencement du site
Une fois que vous avez créé votre superbe site conforme à XHTML et CSS, il reste
encore une phase des plus importantes à accomplir, à savoir le faire connaître. À moins
de disposer de moyens publicitaires conséquents, la fréquentation souhaitée ne se pro-
duira pas du jour au lendemain. Même si c’est l’adaptation du contenu à un besoin qui
fait venir et revenir les internautes, il vous faut d’abord faire connaître l’existence de
votre site.
Le moyen le plus simple, et généralement gratuit, est de le référencer dans les annuaires
et moteurs de recherche les plus connus comme Google ou Yahoo afin qu’il soit bien
placé en réponse à la recherche d’un internaute.
Des ouvrages entiers sont consacrés au référencement, apportant des conseils avisés pour
augmenter la fréquentation d’un site. Je recommande le site [Link] ou
de se procurer l’ouvrage de son webmestre portant sur le référencement. Nous retiendrons
cependant les quelques points suivants :
• Si vous achetez un nom de domaine – ce qui, lié à un hébergement mutualisé, est
aujourd’hui possible à bon marché et « présente mieux » que l’hébergement gratuit
offert par votre fournisseur d’accès dont les adresses sont très longues –, choisissez de
préférence un nom court et facile à mémoriser. Les noms longs, et particulièrement
s’ils sont composés de plusieurs mots, posent soucis à l’utilisateur qui se demande
alors si les mots se suivent ou sont séparés par des tirets, d’où des interprétations
divergentes et des erreurs. Certains moteurs de recherche affichent les sites répondant
aux mêmes critères par ordre alphabétique et il vaut mieux que votre nom de domaine
commence par « a » plutôt que par « z ».
• Les extensions .com (ou .fr en France) sont préférables à .org ou .net car ce sont les
premières qui viennent à l’esprit des internautes s’ils ont oublié l’extension réelle. La
notion de site commercial qui était liée à l’extension .com a désormais disparue et votre
site ne peut avoir aucun aspect commercial et posséder cette extension.
• La définition d’un maximum de mots-clés rapportant objectivement le contenu de
votre site est essentielle. Elle doit être réalisée à l’aide de l’élément :
<meta name="keywords" content="liste des mots clés" />
(voir le chapitre 2), qui est situé dans l’en-tête du document. Cette liste mérite toute
votre attention car elle est utilisée par les moteurs de recherche pour indexer vos pages
et mettre en adéquation la demande d’un internaute avec les sites qui lui correspon-
dent. Les mots-clés se doivent de refléter fidèlement le contenu du site et les idées qui
lui sont associées, et rien d’autre. Inutile par exemple de rechercher les mots les plus
recherchés et de les inclure dans votre liste pour attirer du monde. Outre que vous ris-
quez de tromper les internautes, vous pouvez surtout les décevoir si votre contenu ne
correspond pas à leur attente. En revanche, n’hésitez pas à fournir une longue liste de
mots-clés avec leurs variantes masculin/féminin et singulier/pluriel, ainsi que les mots
dérivés qui peuvent correspondre à votre contenu. Vous augmenterez ainsi vos chances
de figurer en bonne place dans les résultats des recherches effectuées par les internautes.
Introduction à XHTML
CHAPITRE 1
21
Les moteurs de recherche se basant aussi sur le contenu des pages, rien ne vous empê-
che de faire apparaître plusieurs fois dans le contenu les mots importants. Une astuce
consistait à répéter ces mots dans la page et de les écrire de la même couleur que le
fond de la page en créant des styles CSS appropriés et non plus les balises et les attri-
buts utilisés pour définir les couleurs. Leur répétition est ainsi invisible dans la page,
mais perçue par les robots qui analysent le texte.
• Créez la structure de vos pages en évitant l’emploi des cadres, autrefois très en vogue,
mais dont les contenus sont mal indexés par les moteurs de recherche. L’emploi de
XHTML et du positionnement CSS rend ces techniques caduques et des solutions de
remplacement peuvent être mises à profit (voir le chapitre 13).
• Référencez votre site dans tous les principaux moteurs de recherche. La figure 1-6
montre par exemple la page de référencement de Yahoo qui permet de soumettre un
site gratuitement.
Figure 1-6
La page de référencement de Yahoo
2
Structure d’un document
XHTML
Avant de créer des pages web et de leur donner un contenu, nous allons déterminer une
structure générale commune à toute page XHTML et qui soit en conformité avec les
spécifications du W3C. En fonction des besoins, les codes des exemples 2-1, 2-2 et 2-3
serviront de base à la constitution de toutes nos pages. Il suffira donc de les copier dans
votre éditeur préféré, puis de les compléter avec un contenu particulier pour chaque
page.
donc semblable à celle de l’exemple 2.1. Le fichier contenant ce code doit avoir une
extension .html ou .htm.
L’extension .xml
Il est possible d’enregistrer un document XHTML sous l’extension .xml, tout comme pour un document
purement XML. La page ainsi créée est affichée normalement dans les navigateurs modernes (Mozilla,
FireFox, Netscape 7.2, Opera), mais pas dans Internet Explorer. Nous utiliserons par la suite l’extension
.html.
</body>
</html>
Nous retrouvons bien dans cet exemple la structure arborescente décrite au chapitre 1.
L’élément racine, au sens XML du terme, est <html>, et il inclut les éléments <head> et
<body>. L’élément <head> contient l’élément <title>, qui est obligatoire, et l’élément
<body>, qui ne doit pas être vide (ce qui est évident), contient un titre de niveau 1 <h1> sur
lequel nous reviendrons plus loin. Du point de vue hiérarchique, <html> est bien le parent
ou l’ancêtre de tous les autres.
Les commentaires
Tout ce qui est contenu entre les symboles <!-- et --> est considéré par le navigateur comme des
commentaires et n’est pas affiché dans la page, même s’ils se trouvent dans l’élément <body>. Comme
pour tout langage de programmation, nous avons tout intérêt à commenter le code XHTML afin d’en
faciliter la relecture a posteriori. Notez toutefois que les commentaires seront visibles par l’internaute si
celui-ci choisit d’afficher le code source de la page dans son navigateur. Évitez donc d’y inclure des
informations confidentielles et d’y faire figurer des informations privées.
La déclaration XML doit contenir le numéro de version XML dans l’attribut version. Sa
valeur est actuellement 1.0 mais une version 1.1 de XML est en cours d’élaboration.
Cette dernière version n’est actuellement pas reconnue par les navigateurs, mais devrait
Structure d’un document XHTML
CHAPITRE 2
25
l’être dans un avenir proche. L’attribut encoding de la déclaration XML contient le nom
du jeu de caractères utilisé dans le document. Pour des pages rédigées en Europe occi-
dentale, il a pour valeur iso-8859-1. La déclaration XML n’est pas obligatoire dans un
document XHTML, mais son utilisation est conseillée, en particulier dans une page ne
contenant que du code XHTML sans ajout de script de création de pages dynamiques.
Dans le cas d’intégration de script PHP (comme c’est couramment le cas dans une page),
nous ne pouvons plus utiliser cette déclaration car l’interpréteur PHP renvoie une erreur
– cela peut varier selon sa configuration, mais si vous n’avez pas la haute main sur le ser-
veur vous ne pouvez pas la modifier ; il faudra procéder à un test. En effet, ce type de
script est inclus généralement entre les balises <?php et ?>, donc selon une syntaxe simi-
laire à celle de la déclaration XML, d’où la confusion du serveur PHP. Dans ce cas, nous
n’utiliserons pas la déclaration XML et l’indication du jeu de caractères obligatoire est
faite dans un élément <meta /> inclus dans <head> sur lequel nous reviendrons. Pour éviter
les problèmes d’interprétation divergente entre les différents navigateurs, nous utili-
serons systématiquement la déclaration du jeu de caractères avec l’élément <meta /> dans
chaque document, que la déclaration XML y soit présente ou non. La structure minimale
de ce type de page est donc celle de l’exemple 2-2. Notez que le fichier PHP a une exten-
sion propre, du type .php ou .php5 par exemple, toujours en fonction de la configuration
du serveur. Pour que le document XHTML, que le serveur va finalement envoyer au navi-
gateur, soit conforme au standard, il faut que le premier script placé au début du document
(repère ) ne crée aucun code XHTML (il peut par exemple ne contenir que des fonc-
tions) et que le second (repère ) ne crée que du code XHTML conforme. En respectant
ces conditions, il n’y a aucune limite à l’utilisation de scripts PHP à l’intérieur d’un
document XHTML.
Exemple 2-2. Structure d’une page XHTML 1.1 contenant un script PHP
<?php
//Ici du code PHP;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title> XHTML et CSS </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<!-- Tout le contenu de la page -->
<h1>Le corps de la page</h1>
<?php
echo "<h2>Ici du code PHP </h2>";
?>
</body>
</html>
Le langage XHTML
26 PARTIE I
Comme indiqué au chapitre 1, nous avons choisi par principe d’utiliser systématiquement la
DTD XHTML 1.1 qui représente la version la plus évoluée et la plus porteuse d’avenir.
Cependant, ponctuellement, les navigateurs rencontrent encore quelques problèmes prati-
ques, par exemple pour afficher correctement le code créé avec cette DTD. Nous serons
contraints en de rares occasions d’utiliser la DTD propre à la version XHTML 1.0 strict
(exemple 2-3, repère ) qui comporte peu de différences avec XHTML 1.1 et qui est
conforme à l’esprit XHTML de séparation du contenu et de la présentation. La suite du
document restera la même et obéira aux mêmes règles à de rares exceptions près. La
structure de base d’un tel document sera alors construite sur le modèle de l’exemple 2-3.
La déclaration DOCTYPE
Nous avons déjà indiqué que le code d’une page XHTML devait se conformer à des
règles précises, définies dans une DTD spécifique. La déclaration DOCTYPE, obligatoire
dans tout document, précise le type de document qui va être créé et la DTD à laquelle il
va se conformer. La première partie de la déclaration :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
indique le nom générique de la DTD. La partie html donne le nom de l’élément racine du
document.
Structure d’un document XHTML
CHAPITRE 2
27
La seconde partie :
"[Link]
précise l’adresse du fichier [Link] qui contient la DTD par elle-même.
Pour utiliser les variantes de XHTML 1.0, nous avons le choix entre les déclarations DOC-
TYPE suivantes :
Elles n’apparaîtront dans Google par exemple que si l’utilisateur a choisi le bouton
« France ».
• L’attribut dir qui indique le sens de lecture du texte de la page. Il peut prendre les
valeurs ltr pour le texte qui se lit de gauche à droite (langues européennes) ou rtl
pour le texte qui se lit de droite à gauche (langues orientales : hébreu, arabe).
• L’attribut xmlns qui précise l’adresse URL de l’espace de nom utilisé dans la page.
Il prend la valeur fixe [Link] Un élément <html> complet tel
que nous pouvons l’utiliser s’écrira donc :
<html xml:lang="fr" dir="ltr" xmlns="[Link]
<!--suite des éléments inclus --
</html>
En pratique pour des sites ayant un contenu dans une langue européenne, nous omettrons
l’attribut dir.
• profile dont la valeur est une URL qui pointe vers un fichier de définitions de méta-
données telles que celles définies dans les éléments <meta />. À ce jour, aucun navigateur
ne prend cet attribut en compte.
Nous allons maintenant détailler le rôle de chacun des éléments inclus dans <head>.
– rel="shortcut icon" pour faire référence à l’icône identifiant le site et qui s’affiche
devant l’adresse dans les navigateurs les plus conformes (mais pas Explorer 6 !) ;
– rel="start" si le fichier cible est la page d’accueil ;
– rel="previous" ou rel="prev" si le fichier désigné est la page précédente dans
l’ordre normal de consultation du site ;
– rel="next" si le fichier est la page suivante dans l’ordre normal de consultation du
site ;
– rel="index" si le fichier est la page contenant l’index du contenu du site (et non pas
la page [Link]) ;
– rel="end" si le fichier est la page finale dans l’ordre normal de consultation du site ;
– rel="help" si le fichier est la page d’aide ;
– rel="glossary" si le fichier cible contient un glossaire des termes utilisés dans le
site ;
– rel="chapter" si le fichier contient un chapitre ;
– rel="section" si le fichier fait référence à une section d’un chapitre ;
– rel="appendix" si le fichier fait référence à l’appendice d’une page ;
– rel="contents" si le fichier contient la table des matières du site.
• L’attribut type précise le type du contenu du fichier externe. Il peut par exemple prendre
les valeurs suivantes :
type = "text/css" pour une feuille de style CSS
type = "text/javascript" pour un script JavaScript
type = "text/html" ou "text/xml"
type = "images/x-icon" pour créer une icône
• L’attribut href contient l’adresse relative ou absolue de la ressource externe associée.
• L’attribut hreflang qui, comme xml:lang, prend pour valeur un code de langue, précise
la langue utilisée dans le document cible.
L’attribut media précise le type de média concerné par le document externe. Nous l’utili-
serons en particulier pour lier une feuille de style en précisant le type de média visé par
les styles du document CSS. Les valeurs de l’attribut media sont : screen (écran d’ordi-
nateur), print (imprimante), tty (télétype), tv (téléviseur), projections (rétro ou vidéo
projecteur), handheld (PDA, téléphone), braille (terminal braille), aural (navigateurs
oraux) et all (tous les médias). À titre d’exemple, nous pouvons écrire les codes suivants :
• Pour lier une feuille de style :
<link rel="stylesheet" type="text/css" href="[Link]"/>
• Pour lier plusieurs feuilles de style en précisant le média concerné :
Structure d’un document XHTML
CHAPITRE 2
31
Les commentaires
Il est toujours utile de commenter votre code XHTML, comme tout code informatique
d’ailleurs, pour en permettre une meilleure compréhension, en particulier quand on sou-
haite le relire un certain temps après l’avoir écrit. Tout ce que vous écrirez comme com-
mentaires sera ignoré par le navigateur, et vous pouvez donc vous exprimer librement.
Pour écrire un commentaire, vous devez l’ouvrir avec les symboles : "<!--", et le fermer
avec les symboles "-->". N’oubliez pas de fermer vos commentaires, sinon tout ce qui
suit sera encore interprété en tant que tel, provoquant une erreur. Par exemple, on aura :
<!-- Voici un commentaire HTML
qui peut comporter plusieurs lignes
Si nous utilisons l’attribut http-equiv, l’information indiquée dans l’attribut content sera
présente dans les en-têtes HTTP envoyés par le serveur au navigateur sous la forme de
couple nom/valeur.
La plupart des valeurs des attributs name et http-equiv sont des mots-clés. Nous allons
nous arrêter sur la signification et l’utilité des plus courants d’entre eux.
• name="author" : désigne le nom de l’auteur de la page sans pour autant créer un copy-
right.
<meta name= "author" content="Jean Engels" />
• name="keywords". Cette valeur est très importante pour le créateur de site car son incor-
poration dans un document sert à l’indexation des pages web par les moteurs de
recherche et les annuaires. L’attribut content associé à name contient la liste des mots-
clés que vous allez choisir comme les plus représentatifs du contenu du site. Chaque
mot ou expression est séparé des autres par une virgule. Il n’est pas rare d’utiliser plu-
sieurs lignes de mots-clés dans l’attribut content. L’utilisation de l’élément <meta /> à
cette fin est donc des plus utile car elle va permettre une mise en valeur de votre site
qui apparaîtra dans les réponses fournies par les moteurs de recherche si vos mots-clés
correspondent à la demande faite par un internaute. Il est important de bien choisir ses
mots-clés pour qu’ils correspondent vraiment au contenu du site et d’en multiplier les
variantes dans la liste de l’attribut content. On pourra retrouver le même mot au singu-
lier et au pluriel, au masculin et au féminin. En revanche, il serait contre-productif
d’utiliser les mots les plus demandés dans les moteurs de recherche sous prétexte
d’attirer du public, alors qu’ils ne correspondent pas au contenu réel de votre site.
Exemple de code :
<meta name="keywords" content="XHTML, HTML, XHTML 1.1, CSS 2, design web,
➥ création de sites />
• name="description". Dans le même ordre d’idée que la valeur précédente, il indique
une brève description de l’information contenue dans le site. C’est cette description
qui apparaît dans le moteur de recherche et il est donc essentiel qu’elle soit courte et
correcte. Inutile de faire une description de 10 lignes alors que Google par exemple
n’en affiche que deux. Il est également fortement recommandé d’utiliser cet élément
<meta /> car si vous ne donnez pas vous-même une description de la page, Google et
les autres moteurs de recherche utilisent les premières lignes de votre page qui ne sont
pas nécessairement les plus explicites. Exemple de code :
<meta name="Description" content="Le site du livre » XHTML et CSS »
➥ de Jean Engels Editions Eyrolles" />
• name="robots". Cette valeur permet de donner des directives aux robots des moteurs de
recherche qui parcourent le Web automatiquement pour en indexer les pages. En fonc-
tion de la valeur de l’attribut content, vous pouvez choisir la manière dont vos pages
seront indexées. Les valeurs possibles sont les suivantes :
– content="none" ou "noindex", si vous voulez empêcher l’indexation d’une page par-
ticulière.
Structure d’un document XHTML
CHAPITRE 2
33
– content="index", pour autoriser l’indexation de la page, ce qui est plus que recom-
mandé.
– content="follow", pour autoriser l’indexation simultanée de la page concernée et
des pages qui sont les cibles des liens contenus dans cette page. Le choix de cette
valeur peut être risqué car il peut conduire à des indexations en chaîne si les pages
cibles font de même. Si vos liens sont tous internes, n’hésitez pas à l’utiliser.
– content="nofollow", pour empêcher cette indexation des pages liées.
Exemple de code :
<meta name="robots" content="index" />
• name="revisit-after". Cette valeur précise aux robots des moteurs de recherche la
périodicité des passages du robot sur le site. Nous l’utiliserons pour des sites dont le
contenu évolue régulièrement. L’attribut content définit cet intervalle en nombres de
jours. On écrira par exemple le code :
<meta name="revisit-after" content="15 days"/>
• http-equiv="refresh". Quand il est associé à l’attribut content qui a pour valeur un
nombre de N secondes, son utilisation permet de forcer le navigateur à recharger la
page toutes les N secondes. On procédera ainsi pour un site aux informations renouve-
lées très fréquemment, par exemple un site de cotation boursière, ou comme procédé
pour afficher l’heure régulièrement par exemple à l’aide d’un script JavaScript ou
PHP. Nous pouvons également utiliser cet élément pour rediriger automatiquement le
visiteur vers une autre page du même site ou encore d’un autre site. On appliquera
cette technique si le contenu du site a changé de nom de domaine. Pour cela, l’attribut
content doit contenir le nombre N de secondes avant lequel la redirection sera effec-
tuée, suivi d’un point-virgule (;) et de l’URL absolue de la nouvelle page. Par exem-
ple, pour rediriger vers une autre page au bout de dix secondes nous écrivons le code
suivant :
<meta http-equiv="refresh" content="10; http:/[Link]/index/>
• http-equiv="Content-type". Cette valeur de l’attribut permet de définir simultanément
le type du document et le jeu de caractères utilisés dans la page. Comme nous l’avons
déjà signalé, il faut l’utiliser impérativement si le jeu de caractères n’a pas été précisé
dans la déclaration XML ou si celle-ci est absente, comme dans le cas des pages PHP.
Si cette déclaration n’est pas faite, l’utilisation de cet élément <meta /> est indispensa-
ble sinon le document n’est pas validé par le W3C. L’attribut content contient alors le
type du document suivi d’un point-virgule puis du code du jeu de caractères. Nous
avons par exemple le code suivant :
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
• http-equiv="expires". Sauf spécification contraire effectuée dans le réglage des préfé-
rences de son navigateur, quand un utilisateur visite votre site, la page vue est mise en
mémoire cache de son ordinateur. Elle s’affiche alors plus rapidement s’il y revient,
même si le contenu du site a changé. Le visiteur peut bien sûr forcer le navigateur à
Le langage XHTML
34 PARTIE I
actualiser la page comme vous devez le faire pour tester les modifications apportées à
une page lors des phases de tests. Pour forcer cette mise à jour, il faut définir une date
dans l’attribut content associé à http-equiv. Quand la date du jour est postérieure à la
date définie dans content, le navigateur recharge la page. Les dates sont données en
anglais au format "Mon, 11 Jul 2005 [Link] GMT" pour le 11 juillet 2005 à 18 h 34 min
45 en temps GMT. Nous écrirons par exemple :
<meta http-equiv="expires" content="Mon, 11 Jul 2005 [Link] GMT" />
a, abbr, acronym, address, area, b, bdo, big, blockquote, body, button, cite, code, dd, del, dfn, div, dt, em,
fieldset, form, h1, h2, h3, h4, h5, h6, head, i, ins, kbd, label, legend, li, noscript, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var
• L’attribut xml:preserve, déjà rencontré, prend la valeur unique preserve si l’on désire
que les espaces écrits dans le code CSS soient conservés ;
• Le code suivant définit une couleur de fond jaune pour la page et une couleur bleue
pour le texte ;
<style type="text/css" media="screen"
body{background-color:yellow;color:blue;}
</style
Nous reviendrons en détail sur l’écriture des styles dans la deuxième partie de cet
ouvrage. Il nous faut simplement retenir ici la localisation des styles.
<script type="text/javascript">
function debut()
{alert(‘Bonjour XHTML’);}
</script>
<script type="text/javascript" src="[Link]
➥ </script>
</head>
<body onload="debut()">
Figure 2-1
L’utilisation des éléments <link /> de l’en-tête
Structure d’un document XHTML
CHAPITRE 2
39
address, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, ol, noscript, p, pre, script,
table, ul
Les éléments ne figurant pas dans cette liste doivent d’abord être inclus dans des élé-
ments de cette liste (c’est le cas par exemple de l’élément <img />). Chacun de ces
éléments de premier niveau dans la hiérarchie des éléments au sens XML du terme peut
à son tour contenir un certain nombre d’autres éléments, et ainsi de suite. À chacun de
ces éléments correspond donc un certain nombre d’éléments enfants autorisés qu’il nous
faut respecter. Au fur et à mesure que nous aborderons les différents éléments XHTML,
nous donnerons systématiquement le contenu qu’il est possible de leur donner. Vous trou-
verez en annexe A la liste de tous les éléments de la DTD XHTML 1.1, leurs éléments
enfants et parents autorisés et leurs attributs. À titre indicatif, le code de l’exemple 2-5
crée un document XHTML de base contenant tous les éléments admis dans le corps d’un
document par ordre alphabétique.
Exemple 2-5. Les éléments admis dans le corps d’une page XHTML 1.1
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>Les éléments du corps de la page</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<meta name="Author" content="Jean ENGELS" />
<meta name="Keywords" content="XHTML, CSS , Web" />
<meta name="Description" content="Le site de XHTML 1.1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
<style type="text/css" title="">
Le langage XHTML
40 PARTIE I
</style>
</head>
<body>
<address>Contact : xhtml@[Link]</address>
<blockquote>
<h4>titre h4</h4>
</blockquote>
<del>L’ancienne version HTML 3.2</del>
<div>bloc div</div>
<dl>
<dt>Liste de définition</dt>
</dl>
<fieldset>
<legend>legende</legend>texte<button>bouton</button>
</fieldset>
<form action="[Link]">
<fieldset><legend>commentaires</legend><br />
<textarea cols="30" rows="5">texte</textarea>
</fieldset>
</form>
<h1>titre de niveau 1</h1>
<h2>titre de niveau 2</h2>
<h3>titre de niveau 3</h3>
<h4>titre de niveau 4</h4>
<h5>titre de niveau 5</h5>
<h6>titre de niveau 6</h6>
<ins>nouvelle version html 4.01</ins>
<ol>
<li>Item 1</li>
<li>Item 2</li>
</ol>
<p>paragraphe 1: de l’action de la pluie sur la vie des grenouilles....</p>
<pre>
code javascript:
[Link]("boucle");
for(i=0;i<5;i++)
{
[Link]( i);
}
</pre>
<noscript><p>votre navigateur ne reconnait pas javascript</p></noscript>
<script type="text/javascript">
<!--
[Link]("boucle javascript <br />");
for(i=0;i<5;i++){
[Link]( i,’ ‘)}
// -->
</script>
Structure d’un document XHTML
CHAPITRE 2
41
<table border="1">
<tbody>
<tr><td>Cellule de tableau</td></tr>
</tbody>
</table>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</body>
</html>
Les figures 2-2 et 2-3 présentent les affichages obtenus dans un navigateur après l’exécution
du code de l’exemple 2-5.
Figure 2-2
L’ensemble des éléments enfants de <body> (première partie)
Le langage XHTML
42 PARTIE I
Figure 2-3
L’ensemble des éléments enfants de <body> (deuxième partie)
Dans tous les chapitres de la première partie de cet ouvrage, nous allons aborder l’ensem-
ble des éléments incorporables dans l’élément <body>, et nous y procéderons successivement,
en fonction de leur rôle, pour créer toutes les fonctionnalités utiles dans un site.
Exercices
Exercice 1 : La déclaration XML est-elle obligatoire ? Où doit-elle être placée ? Quelles
informations contient-elle ? Dans quel cas pose-t-elle des problèmes ?
Exercice 2 : Que faut-il faire pour que le code soit validé si la déclaration XML est
omise ?
Exercice 3 : À quel emplacement est définie la DTD utilisée dans le document ? Quelles
sont les différentes DTD utilisées dans un document XHTML 1 ?
Exercice 4 : Où est déclaré le nom de l’élément racine du document ? Quel est son rôle
et son nom ?
Exercice 5 : Quels sont les éléments enfants de l’élément <html> ?
Structure d’un document XHTML
CHAPITRE 2
43
Exercice 6 : À quoi sert l’élément <head> ? Quels sont ses éléments enfants ? Peuvent-ils
être employés plusieurs fois dans le même document ?
Exercice 7 : Quel élément est obligatoire dans l’élément <head> ? À quoi sert-il ?
Exercice 8 : Écrivez le code nécessaire à la liaison d’une feuille de style avec un document.
Exercice 9 : Écrivez le code nécessaire à la liaison d’un document externe contenant des
scripts JavaScript avec un document.
Exercice 10 : Comment déclarer les mots-clés associés au site ? Quelle est l’utilité de
cette déclaration ? Écrivez en un exemple.
Exercice 11 : Quel est le rôle de l’élément <base /> ? Écrivez-en un exemple.
Exercice 12 : Peut-on écrire le code suivant dans une page ?
<body>
Bienvenue dans notre site
<h1>Le site du XHTML et de CSS2</h1>
</body>
Exercice 13 : Peut-on inclure les éléments <img />, <form> et <li> dans l’élément <body> ?
Exercice 14 : Écrivez un script qui affiche un message d’alerte quand l’utilisateur arrive
sur le site.
Exercice 15 : Écrivez le code CSS suivant à l’endroit adéquat :
body {background-color:white;color:green;font-size :20px}
Incluez ensuite un texte dans la page et testez le résultat. Vous devez obtenir un fond
rouge, un texte bleu avec des caractères de 20 pixels.
3
Créer du texte et des listes
Créer une page web, c’est d’abord y incorporer du texte, et ce depuis les origines du Web
qui ne contenait rien d’autre. Nous avons à notre disposition nombre d’éléments
XHTML grâce auxquels on peut incorporer un contenu textuel dans une page. La diver-
sité des éléments qui datent des versions HTML permet une structuration du texte qui
pourrait être réalisée avec beaucoup moins d’éléments et l’utilisation conjointe de styles
CSS. Cette structuration vise à organiser les différentes parties du texte et à attirer l’atten-
tion des visiteurs sur les points importants. Il est donc nécessaire que le contenu textuel
soit structuré en titres de différents niveaux, en grandes divisions puis en paragraphes.
Les listes constituent également un moyen de structurer l’information dans certains cas
particuliers.
Les titres
Dans une page web, c’est en priorité les titres qui identifient les grandes sections de texte,
comme nous le faisons dans ce livre. Les titres sont contenus dans les éléments <h1> …
</h1>, pour les titres de premier niveau, à <h6> … </h6>, pour les titres de plus bas niveau.
Entre ces extrêmes nous pouvons utiliser les titres <h2>, <h3>, <h4> et <h5>, et nous note-
rons <hN> pour désigner l’ensemble de ces éléments. Si aucun style personnalisé ne leur
est donné, les navigateurs affichent les titres dans des polices de tailles dégressives pour
les éléments <h1> (le plus grand) à <h6> (le plus petit). Les éléments de titre faisant partie
des éléments de bloc, ils sont automatiquement suivis d’un saut de ligne, après la balise
de fin </h1> par exemple. On peut cependant adapter cette particularité en définissant un
style personnalisé pour ces éléments. En tant que bloc, un élément <hN> peut contenir
bien sûr du texte, ce qui en constitue l’utilisation la plus fréquente, mais il est utile de
Le langage XHTML
46 PARTIE I
savoir qu’il peut aussi inclure tous les éléments « en ligne ». Il peut par ailleurs être inclut
dans les blocs et les cellules des tableaux. Les tableaux 3-1 et 3-2 donnent la liste exhaus-
tive des éléments enfants et parents des éléments de titre <hN>.
Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
Les éléments <h1> … <h6> possèdent l’ensemble des éléments communs vus au chapitre
2. Nous utilisons le plus souvent id, class, title, et par exemple les gestionnaires d’évé-
nements onmouseover et onmouseout pour changer leur style, par exemple la couleur du titre
quand le curseur le survole et la rétablir quand il quitte la zone du titre. Sans utiliser
aucun style, les titres de niveaux 1 à 6 sont donc affichés avec des polices de tailles
décroissantes comme le montre la figure 3.1, obtenue par l’affichage de la page de
l’exemple 3-1 qui crée six titres de niveaux décroissants (repère à ) et utilise les
deux gestionnaires d’événements onmouseover pour écrire le titre de niveau 1 en rouge et
onmouseout pour le remettre en noir, sa couleur par défaut (repère ).
Exemple 3-1. Les différents niveaux de titre et leur style par défaut
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>Les différents niveaux de titre</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
</head>
<body>
<h1 onmouseover="[Link]=‘red’;"
➥ onmouseout="[Link]=‘black’">Titre de niveau 1</h1>
<h2>Titre de niveau 2</h2>
<h3>Titre de niveau 3</h3>
<h4>Titre de niveau 4</h4>
<h5>Titre de niveau 5</h5>
<h6>Titre de niveau 6</h6>
</body>
</html>
Créer du texte et des listes
CHAPITRE 3
47
Figure 3-1
Les différents
niveaux de titre
Signalons encore une fois qu’il ne faut pas choisir un niveau de titre en fonction de sa
taille physique par défaut telle qu’elle est représentée à la figure 3-1, mais en fonction de
la sémantique sous-jacente qui lui est attachée. Si une page ne comporte que des titres
d’un seul niveau, il est conseillé de n’utiliser que des titres <h1> sans tenir compte de la
taille par défaut et non pas des titres <h2> par exemple, au motif que la taille convient
mieux. La taille à laquelle on veut afficher réellement ces titres dans la page sera détermi-
née en écrivant un style CSS. Dans le code suivant, nous organisons le contenu d’une
page en utilisant quatre niveaux de titres selon une structure similaire à celle d’un livre.
Le niveau <h1> est celui des parties du livre (repères et ), le niveau <h2> est celui des
chapitres (repères et ), le niveau <h3> est celui des différentes sections (repères ,
,
et ) et enfin le niveau <h4> est celui des titres des différents paragraphes (repères ,
,
, , , , et ). Les niveaux suivants peuvent par exemple être utilisés pour
les titres des exemples et des figures. Chacun peut ensuite être doté d’un style CSS
approprié aux goûts du concepteur de la page mais la structure reste identique quelle que
soit la présentation adoptée.
<body>
<h1>PARTIE I : XHTML</h1>
<h2>Chapitre 1 : Introduction</h2>
<h3>Section 1</h3>
<h4>Paragraphe 1</h4>
<h4>Paragraphe 2</h4>
<h3>Section 2</h3>
<h4>Paragraphe 1</h4>
<h4>Paragraphe 2</h4>
Le langage XHTML
48 PARTIE I
Figure 3-2
Structuration d’une
page avec des titres
Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
L’élément <p> possède l’ensemble des attributs communs et aucun autre attribut particu-
lier. L’exemple 3-2 montre une utilisation de titres et de paragraphes pour structurer une
page. La figure 3-3 montre le résultat obtenu pour cette page.
Figure 3-3
Les paragraphes
Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, object, ol, p, pre, q, table, samp, script,
select, small, span, strong, sub, sup, textarea, tt, ul, var
blockquote, body, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
L’élément <div> admet l’ensemble des attributs communs dont id, class, title, dir,
xml:lang, qui sont les plus utilisés. Une des applications les plus courantes des divisions
<div> consiste à créer des calques auxquels on applique des styles de positionnement per-
mettant de remplacer avantageusement les cadres. Il nous sera, par exemple, possible de
diviser la page web en zones bien définies ayant chacune un rôle précis. Comme nous le
verrons dans la deuxième partie de cet ouvrage, l’application de styles à des divisions
permettra de créer facilement un en-tête, une zone de menu, une zone de contenu et un
pied de page distincts qu’il sera possible de répéter dans chaque page (voir le chapitre 13).
Il nous sera également possible à l’aide de scripts simples de créer des effets graphiques
sur des divisions en les faisant apparaître ou disparaître en fonction des actions du visi-
teur. Notons aussi que, contrairement aux paragraphes <p>, la fin d’une division
n’entraîne pas un saut de ligne par défaut, mais seulement un retour à la ligne. Les conte-
nus des différentes divisions peuvent donc se succéder sans rupture. L’exemple 3-3
reprend le même contenu que l’exemple 3-2 en remplaçant les éléments <p> par des divi-
sions <div> (repères , et ). On notera la différence d’affichage obtenue entre la
figure 3-3 (paragraphes <p>) et la figure 3-4 (blocs <div>). Nous ne retrouvons plus entre
deux blocs <div> le saut de ligne qui existe entre deux paragraphes. Dans cet exemple, la
réalisation d’une séparation du texte entre les deux premiers blocs <div> ne se justifie que
si l’on veut leur appliquer des styles différents par la suite.
Le langage XHTML
52 PARTIE I
Figure 3-4
Les divisions en blocs <div>
address, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, noscript, ol, p, pre, script,
table, ul
blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
Le langage XHTML
54 PARTIE I
L’exemple 3-4 reprend encore le contenu des exemples précédents, inclus cette fois dans
des éléments <blockquote>. Le premier (repère ) contient à la fois un titre de niveau 2
(repère ) et un bloc <div> (repère ). Le deuxième (repère ) ne contient qu’un bloc
<div> (repère ) et le dernier (repère ) contient un titre (repère
) et un paragraphe <p>
(repère ). La figure 3-5 montre le type de présentation que fournissent par défaut les
navigateurs pour l’élément <blockquote>.
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super CSS aquas
➥ dixitque Deus fiat lux et facta est XHTML ... </p>
</blockquote>
</body>
</html>
Les différences avec les exemples précédents ne se situent qu’au niveau de la présenta-
tion et celle-ci aurait pu être obtenue en appliquant des styles aux éléments <p> ou <div>
employés précédemment. Cela confirme bien qu’il faut s’attacher dans un premier temps
à la structure et non à l’aspect.
Créer du texte et des listes
CHAPITRE 3
55
Figure 3-5
Les divisions
<blockquote>
dans une page
Texte, a, abbr, acronym, b, bdo, br, button, cite, code, del, dfn, em, i, input, ins, kbd, label, map, q, samp,
script, select, span, strong, sub, sup, textarea, tt, var
blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
Le langage XHTML
56 PARTIE I
L’exemple 3-5 illustre l’utilisation de cet élément pour l’affichage du code d’un script
JavaScript et du code d’une page XHTML en leur conservant leurs indentations.
Figure 3-6
L’aspect par défaut
des éléments <pre>
</p>
<fieldset>
<legend>Note : </legend>
<h2>La création de XHTML</h2>
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas
➥ dixitque Deus fiat lux et facta est lux et vidit Deus lucem quod esset bona
➥ et divisit lucem ac tenebras appellavitque lucem diem et tenebras noctem
➥ </p>
</fieldset><br />
<address>Contact avec l’auteur : <a id="auteur"
➥ href="[Link]
</address>
</body>
</html>
Figure 3-7
Les éléments de bloc annexes
Le langage XHTML
60 PARTIE I
Texte , a, abbr, acronym, b, big, bdo, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
Les abréviations
L’élément <abbr> contient une abréviation, par exemple « kg » pour kilogramme ou
« ciné » pour cinématographe. Cet élément possède la totalité des attributs communs, les
plus adaptés étant id, class et title. Il peut contenir tous les éléments en ligne. Nous uti-
lisons généralement l’attribut commun title pour afficher la signification exacte de
l’abréviation quand l’utilisateur place le curseur sur son contenu signalé dans les naviga-
teurs par un soulignement en pointillés. Les attributs gestionnaires d’événements onclick
et onmouseover peuvent permettre d’afficher une boîte d’alerte contenant la définition
détaillée.
Le code suivant :
<abbr title="kilogramme" onmouseover="alert(‘Unité de masse: kilogramme’)">kg</abbr>
définit l’abréviation d’une unité physique. Sa signification est donnée dans l’attribut
title, et elle s’affiche de manière détaillée dans une boîte d’alerte quand le curseur
survole le texte en utilisant l’attribut gestionnaire d’événements onmousever (voir
l’exemple 3-7 (repères et ) et la figure 3-8). Notez que cet élément est ignoré par
Internet Explorer 6 qui affiche son contenu comme du texte ordinaire et ne reconnaît
pas l’attribut title pour afficher la signification, et encore moins les gestionnaires
d’événements.
Créer du texte et des listes
CHAPITRE 3
61
Les acronymes
L’élément <acronym> est le conteneur d’un acronyme, « XHTML », « PHP » ou
« UNICEF » par exemple. Comme <abbr>, il possède la totalité des attributs communs et
est encore affiché par défaut avec un soulignement en pointillés. C’est encore l’attribut
title qui est utilisé pour afficher une bulle contenant la définition in extenso de l’acro-
nyme. Il peut aussi contenir l’ensemble des éléments en ligne.
Le code suivant :
<p>
Utilisez vite <acronym title="eXtensible HypertText Markup Language">XHTML 1.1
➥ </acronym> promis à un grand avenir!
</p>
donne la définition de l’acronyme « XHTML » dans l’attribut title. Voir l’exemple 3-7
(repère ) et la figure 3-8.
Les citations
Nous avons déjà vu que l’élément <blockquote> permet de contenir des citations et de les
mettre en évidence. L’élément <cite> a une destination similaire mais est utilisé en ligne
pour des citations courtes. Il peut contenir directement du texte brut, tous les éléments en
ligne ainsi que <ins>, <del> et <script>, et possède tous les attributs communs.
Le langage XHTML
62 PARTIE I
Le code suivant :
<p>Comme le disait Boris Vian
<cite title="Vian 1920-1959"> La vérité n’est pas du coté du plus grand nombre
➥ car on ne veut pas qu’elle y soit. Le jour où il sera à même, par sa culture
➥ et ses connaissances, de choisir lui même sa vérité, il y a peu de chance
➥ pour qu’il se trompe.</cite>
</p>
affiche une citation dans une police en italique par défaut (voir l’exemple 3-7 (repère )
et la figure 3-8).
aussi rare que le précédent. Par défaut, son contenu textuel est affiché comme celui de
l’élément <code> dans une police à espacement fixe.
Nous écrirons par exemple :
<p>Si vous en avez assez, tapez : <kbd>Ctrl+Alt+Suppr</kbd>, et au revoir!</p>
(voir l’exemple 3-7 (repère ) et la figure 3-8).
section à condition de lui attribuer un style particulier adapté à chaque besoin de présen-
tation. Il possède l’ensemble des attributs communs et c’est son attribut class qui sera
systématiquement utilisé pour lui attribuer un style.
Le code suivant :
<p>Le langage <span class="gras">XHTML</span> a pour complément indispensable
➥ les styles <span class="gras">CSS 2</span></p>
crée deux divisions en ligne qui utilise un style CSS particulier, défini par ailleurs dans
l’élément <style> de l’en-tête (repère ). Leurs contenus sont donc affichés dans une
police plus grande que celle du paragraphe parent et en gras (voir l’exemple 3-7 (repère )
et la figure 3-8).
C’est donc un élément passe-partout à usage très divers que nous retrouverons à chaque
fois qu’il s’agira d’appliquer un style de façon ponctuelle à un contenu réduit en ligne.
</p>
<!-- L’élément dfn -->
<h1>Définition en ligne</h1>
<p>Ce bâtiment a la forme d’un pentagone
<dfn>(polygone à cinq cotés)</dfn> et abrite des gens peu recommandables.
</p>
<!-- L’élément kbd -->
<h1>Saisies clavier</h1>
<p>Si vous en avez assez, tapez : <kbd>Ctrl+Alt+Suppr</kbd>, et au revoir!</p>
<!-- L’élément q -->
<h1>Citations courtes</h1>
<p>Comme Hamlet posons nous la question : <q cite="[Link]
➥ [Link]" title="Hamlet : William Shakespeare" onclick="alert
➥ (‘Voir ‘+[Link])">Être ou ne pas être </q></p>
<!-- L’élément samp -->
<h1>Exemples en ligne</h1>
<p>Le type de l’équation du premier degré à deux inconnues est :
➥ <samp> ax+by = c</samp>. Elle n’a pas de solution unique</p>
Le langage XHTML
66 PARTIE I
La figure 3-8 montre tous les affichages obtenus en utilisant ces éléments sémantiques en
ligne.
Figure 3-8
Le rendu
des éléments
sémantiques
en ligne
Créer du texte et des listes
CHAPITRE 3
67
Figure 3-8b
Le rendu
des éléments
sémantiques
en ligne (suite)
permettra d’obtenir des mots de plus en plus grands en imbriquant les éléments <big>, puis de
plus en plus petits en imbriquant les éléments <small> sur quatre niveaux (voir l’exemple 3-8
(repères et ) et la figure 3-9). Dans l’exemple 3-8, la taille de la police de l’élément
<body> a été définie à 16 pixels à l’aide d’un style (repère ) pour que l’effet des imbri-
cations soit visible sur un plus grand nombre de niveaux qu’avec la taille par défaut.
<head>
<title>Les éléments de style physique</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
<style type="text/css" >
body{font-size:16px;}
</style>
</head>
<body>
<p>Éléments b et strong : Le contenu suivant est <b> important </b>. La suite
➥ l’est moins. Mais ceci est <strong>également remarquable.</strong> </p>
<p>Éléments i et em : Celui est en <i>caractères italiques </i> et le suivant
➥ en<i><b> caractères italiques gras</b></i>
Celui est en <em>caractères italiques </em> et le suivant en<em><b> caractères
➥ italiques gras</b></em></p>
<p> Ce texte là est <big>grand, <big>encore plus grand, <big>et plus grand encore,
➥ <big>toujours plus grand </big></big></big></big></p>
<p>Ce texte ci est <small>petit, <small>encore plus petit, <small>et plus petit
➥ encore, <small>toujours plus petit </small></small></small></small></p>
<p>Le n<sup>ième</sup> terme de la suite numérique est noté u<sub>n</sub>.
➥ La fonction cube est notée : x<sup>3</sup></p>
<p> La fonction Java Script <tt> alert() </tt> permet d’afficher une boîte
➥ d’alerte. On peut écrire, par exemple: <tt> alert(" Vérifier votre code ")
➥ </tt> pour prévenir le visiteur. </p>
</body>
</html>
La figure 3-9 présente l’ensemble des résultats obtenus en utilisant ces éléments.
Figure 3-9
Les éléments de style physique
Créer du texte et des listes
CHAPITRE 3
71
Les listes
La présentation sous forme de liste permet une structuration de l’information telle qu’elle
peut apparaître dans une table des matières. On peut également mettre en évidence les
points importants. Les utilisateurs de traitement de texte sont familiarisés avec cette
façon de procéder. Elle implique qu’une série d’informations aient un rapport entre elles,
par exemple sous forme d’énumération d’une liste de tâches à réaliser. Ces listes d’infor-
mations peuvent être numérotées ou marquées par une puce graphique. De la même
façon, avec XHTML on peut créer des listes d’items numérotées, nommées listes ordon-
nées, ou de listes à puces, nommées listes non ordonnées. Un troisième type de listes
permet également d’énumérer des termes et d’en donner les définitions. Les éléments
permettant la création de listes ne sont pas des éléments de bloc à proprement parler,
mais ils ont un comportement similaire et peuvent être inclus directement dans l’élément
<body>.
Les éléments <li> peuvent avoir un contenu très varié, qu’il s’agisse de texte, de titres, de
tous les éléments de niveau bloc, des éléments en ligne et d’autres éléments de liste.
Le tableau 3-12 donne la liste des éléments enfants de l’élément <li>.
Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript, object, ol, p, pre, q, samp, script,
select, small, span, strong, sub, sup, table, textarea, tt, ul, var
Le langage XHTML
72 PARTIE I
L’exemple 3-9 montre une utilisation des éléments <ol> et <li> pour créer des listes
ordonnées. L’élément <ol> contient trois éléments <li> créant ainsi trois items (repères
, et
). Tous ces éléments <li> renferment chacun un titre <h3> (repères , et )
et un paragraphe (repères , et ).
Figure 3-10
Une liste ordonnée et son style par défaut
L’exemple 3-10 montre une utilisation complète d’une liste à puces. L’élément <ul>
contient trois éléments <li> créant ainsi trois items (repères , et
). Tous ces
éléments <li> contiennent chacun un titre <h3> (repères , et ) et un paragraphe
(repères , et ). Nous pouvons noter que le code est pratiquement identique à celui
de l’exemple 3-9, la seule différence résidant dans le remplacement de l’élément <ol> par
<ul>.
Figure 3-11
Une liste à puces et son style par défaut
<li>Item 1 B</li>
</ol>
</li>
<li>Item 2
<ol>
<li>Item 2 A</li>
<li>Item 2 B</li>
</ol>
</li>
</ol>
La numérotation des listes ordonnées de deuxième niveau figure par défaut en chiffres
arabes et reprend à 1 pour chaque liste de deuxième niveau. De plus, les contenus des
items de deuxième niveau sont indentés par défaut par rapport à ceux du niveau supé-
rieur. Pour créer des listes imbriquées à puces, il suffit de remplacer les éléments <ol> par
<ul>. Notons que, dans ce cas, les puces de deuxième niveau sont par défaut des cercles
au lieu de disques, ce qui permet de distinguer chaque niveau.
Il est aussi envisageable de créer des listes à puces imbriquées mixtes, c’est-à-dire dans
lesquelles un élément <ul> est utilisé comme descendant de l’élément <ol>, et réciproque-
ment. L’exemple 3-11 montre une possibilité de mise en œuvre de listes imbriquées. Le
premier niveau est constitué d’une liste numérotée (repère ) qui contient deux éléments
<li> de premier niveau (repères et ). Chacun d’eux contient alors une liste à puces
(repères et
) qui inclut à son tour deux éléments <li> de second niveau (repères et
puis et ).
</li>
</ul>
</li>
<li><h2>Le deuxième jour</h2>
<ul>
<li><p>In principio creavit Deus caelum et terram terra autem erat inanis et
➥ vacua et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas
➥ dixitque Deus fiat lux ..</p></li>
<li><p>Benedixitque illis Deus et ait crescite et multiplicamini et replete
➥ terram et subicite eam et dominamini piscibus maris et volatilibus caeli
➥ et ..</p></li>
</ul>
</li>
</ol>
</body>
</html>
Figure 3-12
Des listes imbriquées
Le langage XHTML
78 PARTIE I
blockquote, body, button, dd, del, div, fieldset, form, ins, li , map, noscript, object, td, th
L’élément <dt> peut contenir tous les éléments en ligne dont la liste figure dans le
tableau 3-14.
Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
L’élément <dd> a un contenu plus étendu car il peut contenir tous les éléments en ligne
mais également des éléments de bloc, dont la liste figure dans le tableau 3-15.
PCDATA, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, dl, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript, object, ol, p, pre, q, samp, script,
select, small, span, strong, sub, sup, table, textarea, tt, ul, var
La diversité de ces éléments enfants permet de structurer des informations beaucoup plus
variées que de simples définitions de termes. Nous pouvons par exemple envisager de
créer des listes d’images ou de paragraphes.
La structure de base d’une liste de définitions est donc la suivante :
<dl>
<dt>Terme 1</dt>
<dd>Définition 1</dd>
Créer du texte et des listes
CHAPITRE 3
79
<dt>Terme 2</dt>
<dd>Définition 2</dd>
</dl>
Les navigateurs affichent les définitions indentées de plusieurs caractères par rapport
aux termes. L’exemple 3-12 crée une liste de définitions (repère ) contenant quatre
éléments <dt>, lesquels renferment des sigles informatiques (repères , , , ).
Les éléments <dd> qui suivent chacun d’entre eux donnent les définitions contenues
dans des éléments <fieldset> qui pourraient s’étendre sur plusieurs lignes (repères ,
,
et ).
<dt>SQL</dt>
<dd><fieldset>Structured Query Language : le langage d’interrogation des bases
➥ de données...</fieldset></dd>
</dl>
</body>
</html>
Figure 3-13
Une liste de
définitions
Comme les listes numérotées ou à puces, il est possible de créer des listes imbriquées en
incluant des éléments <dl> dans l’élément <dd>.
Exercices
Exercice 1 : Écrivez une page contenant des titres de chapitre suivis d’une introduction
puis de paragraphes ayant chacun un titre. Choisissez les éléments appropriés à une
bonne structuration.
Exercice 2 : Créez deux divisions contenant chacune un titre général et deux paragra-
phes ayant chacun un titre. Quel intérêt peut avoir cette disposition par rapport à celle de
l’exercice 1 ?
Exercice 3 : Écrivez des titres de chansons puis le texte de la chanson dans un bloc de
citation. Tracez une ligne de séparation entre chaque bloc.
Exercice 4 : Écrivez un bloc qui contient du code XHTML en préservant les espaces du
code.
Exercice 5 : Écrivez une liste d’adresses e-mail indiquant les différents contacts possibles
sur le site.
Exercice 6 : Écrivez plusieurs abréviations et leur définition respective dans leur attribut
title. L’ensemble doit être inclut dans un élément adéquat. Une boîte d’alerte doit afficher
cette même définition quand le curseur survole le texte de l’abréviation.
Exercice 7 : Incluez des citations courtes dans le texte d’un paragraphe.
Créer du texte et des listes
CHAPITRE 3
81
On n’envisage plus aujourd’hui un site sans images, comme paradoxalement peut l’être
celui de W3C, qui a l’excuse de ne pas être grand public, mais uniquement très technique
et destiné aux spécialistes. Les sites grand public se doivent donc d’égayer leurs pages
avec des illustrations photographiques ou simplement graphiques. L’abus d’images
pouvant se révéler aussi nocif que leur absence en termes d’attractivité du site pour le
visiteur, il appartient au concepteur d’effectuer un choix judicieux de ses illustrations. De
plus, il faut encore tenir compte du poids des images en kilo-octets, car les connexions
ADSL ne sont pas encore majoritaires. Le poids des images est sans commune mesure
avec celui du code d’une page XHTML et vient rapidement allonger le temps d’affichage
complet d’une page si elle en contient beaucoup.
L’insertion d’images
L’élément <img />
L’élément <img /> permet d’inclure des images dans une page web. Il s’agit d’un élément de
type en ligne et généralement il doit être inclus directement dans un élément de type bloc,
dans une liste, ou encore un grand nombre d’autres éléments en ligne. C’est un élément vide,
d’où l’utilisation du symbole de fermeture incorporé à la fin de la balise d’ouverture.
Le tableau 4-1 donne la liste de tous les éléments parents de l’élément <img />.
a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em, fieldset, h1, h2,
h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, q, samp, small, span, strong, sub, sup, td, th, tt, var
Insérer des images et du multimédia
CHAPITRE 4
85
L’élément <img /> est qualifié d’élément remplacé car l’affichage obtenu n’est pas le
contenu de l’élément qui est vide. C’est en agissant sur ses attributs que l’on peut définir
l’image et ses caractéristiques. L’image obtenue à l’écran provient d’un fichier externe
simplement référencé par l’attribut src. En outre, les dimensions de l’image ne sont pas
nécessairement égales à celles de l’image originale car elles sont fixées par les attributs
height et width. L’élément <img /> possède tous les attributs communs, tels id et title, et
les gestionnaires d’événements communs. Nous allons voir maintenant les différents
attributs de cet élément qui permettent de bien gérer les images.
• L’attribut src : précise l’adresse relative ou absolue du fichier image que l’on désire affi-
cher dans la page. Son utilisation est donc obligatoire. Nous écrivons par exemple :
<img src="[Link]" />
pour une adresse relative, ce qui suppose que le fichier PNG est situé dans le même
répertoire que le fichier XHTML qui l’incorpore. En écrivant :
<img src="[Link] />,
nous définissons une adresse absolue, l’image pouvant donc figurer sur un autre ser-
veur que le nôtre. L’utilisation des adresses relatives est préférable en vue de faciliter
la maintenance du site. Si le fichier n’est pas disponible, les navigateurs affichent une
icône à la place.
• L’attribut alt : sa présence est également nécessaire et il doit contenir un texte four-
nissant une brève description de l’image. Ce texte apparaîtra à la place de l’image si
celle-ci n’est pas disponible (absente du répertoire cible ou illisible). Il est également
utilisé par les navigateurs n’affichant pas les images et il sera lu par les navigateurs
spécialisés pour non-voyants. L’attribut title peut contenir un texte similaire.
• Les attributs height et width : permettent de définir respectivement la hauteur (height)
et la largeur (width) qu’aura l’image sur le média d’affichage. Ces dimensions peuvent
être définies à l’aide d’un pourcentage. Dans ce dernier cas, les pourcentages font réfé-
rence aux dimensions de l’élément parent de l’image. Si la fenêtre du navigateur est
redimensionnée, les dimensions de l’image seront alors recalculées, laissant l’image
entièrement visible. La définition de ces attributs accélère l’affichage dans les naviga-
teurs car elle leur permet de déterminer la zone d’affichage avant même d’avoir télé-
chargé l’image. Le poids de l’image en kilo-octets ayant une influence évidente sur le
temps de chargement de la page, il est déconseillé de définir des dimensions nettement
inférieures à celles de l’image originale. Il vaut mieux dans ce cas créer un autre
fichier image de dimensions réduites dont le poids sera plus petit. Si le rapport entre
les valeurs des attributs height et width n’est pas le même que celui de l’image réelle,
il en résulte une déformation de cette dernière, sans doute peu esthétique (à moins que
cela ne soit volontaire). Il faut donc vérifier les dimensions réelles de l’image avant
d’utiliser ces attributs.
• L’attribut longdesc : contient l’URL d’un document écrit qui peut fournir des expli-
cations beaucoup plus détaillées que celles des attributs alt ou title. Les naviga-
teurs n’affichent pas directement ce contenu ni l’URL indiqué. Pour exploiter cette
Le langage XHTML
86 PARTIE I
Les figures 4-1 et 4-2 montrent les résultats obtenus quand le navigateur occupe toute la
fenêtre (figure 4-1) et quand celle-ci est réduite (figure 4-2). Nous pouvons y remarquer
que, si la première image a toujours la même taille, la deuxième a été réduite pour avoir
toujours une largeur de 20 % du paragraphe qui la contient. Cette dernière montre l’avan-
tage de l’utilisation d’un dimensionnement en pourcentage qui laisse l’image entière-
ment visible quelle que soit la taille de l’écran du visiteur. En effet, une forte réduction de
la taille de la fenêtre du navigateur ne permettrait pas de voir la première image dans son
intégralité.
Figure 4-1
L’insertion d’images dans une fenêtre entière
Le langage XHTML
88 PARTIE I
Figure 4-2
L’insertion d’images
dans une fenêtre
réduite
On constate que l’élément <area /> est un élément vide. La définition des zones se fait
par l’intermédiaire de certains de ses attributs dont voici la liste.
• L’attribut accesskey : sa valeur est un caractère qui permet de créer un raccourci clavier
(Alt + caractère sous Windows) simulant un clic sur la zone définie.
• L’attribut alt : contient un texte qui joue le même rôle que dans l’élément <img /> et
il est également obligatoire.
• L’attribut href : contient l’URL du document cible qui sera affiché après un clic sur la
zone. Il est facultatif car le concepteur peut vouloir qu’un clic sur la zone entraîne une
autre action, le déclenchement d’un script par exemple.
• L’attribut nohref : prend la valeur booléenne unique nohref pour définir explicitement
que la zone sensible ne dirige pas vers un autre document.
• L’attribut tabindex : sa valeur est un nombre entier qui donne une position à la zone
sensible dans l’ordre de tabulation. Si par exemple nous écrivons tabindex="2", il suffit
à l’utilisateur de taper deux fois sur la touche Tab pour rendre la zone active. La frappe
de la touche Entrée équivaut alors à un clic sur la zone.
• L’attribut shape : permet de définir la forme de la zone sensible. Il peut prendre quatre
valeurs :
– rect pour un rectangle, qui est la valeur par défaut ;
– circle pour un disque ;
– poly pour un polygone quelconque ;
– default pour gérer les clics qui sont effectués en dehors d’une des zones sensibles
définies sur l’image.
• L’attribut coords : vient en complément du précédent pour indiquer les dimensions de
la forme choisie. L’origine des coordonnées est le sommet supérieur gauche de l’image,
et celles-ci sont exprimées en pixel sans avoir à préciser l’unité px.
– Si shape="rect", il faut indiquer dans cet ordre les coordonnées des sommets supérieur
gauche et inférieur droit du rectangle sous la forme :
shape="rect" coords="XH,YH, XB, YB"
– Si shape="circle", il faut indiquer les coordonnées du centre suivies du rayon sous
la forme :
shape="circle" coords="XC, YC, R"
Le langage XHTML
90 PARTIE I
– Si shape="poly", il faut donner les coordonnées de tous les sommets dans l’ordre et
terminer cette liste en répétant celles du point de départ. Pour un triangle, nous
pouvons écrire :
shape="poly" coords="X1, Y1, X2, Y2, X3, Y3, X1, Y1"
L’élément <area /> possède également deux attributs gestionnaires d’événements par-
ticuliers à partir desquels on peut gérer les actions du visiteur :
• L’attribut onfocus : permet de gérer l’événement qui se produit quand la zone
sensible reçoit le focus, ce qui peut se reproduire à l’aide de la souris ou en utilisant
la touche Tab ou un raccourci clavier si les attributs tabindex ou accesskey ont été
définis.
• L’attribut onblur : permet de gérer l’événement qui se produit quand la zone perd le
focus par les mêmes moyens.
L’exemple 4-2 permet la réalisation d’une image réactive. La création de la carte à
l’aide des éléments <map> et <area /> amène à définir trois zones. La première est un
rectangle (repère ), la deuxième un disque (repère ) et la troisième un polygone
(repère ).
La définition de l’attribut href déclenche l’affichage d’une nouvelle page après un clic
sur la première zone. Pour la deuxième zone, l’attribut nohref précise que le clic ne redi-
rige pas vers une autre page. Il provoque en revanche l’exécution d’un script JavaScript
(repère , ici une simple boîte d’alerte). La définition de l’attribut onfocus pour la troi-
sième zone entraîne l’affichage d’une boîte d’alerte JavaScript quand elle reçoit le focus
(repère ). La carte ainsi définie est utilisée par une image (repère
) dont l’attribut
usemap permet d’identifier l’élément <map> concerné (repère ).
</div>
</body>
</html>
La figure 4-3 montre le résultat obtenu et la forme du curseur au survol des liens pour la
troisième zone.
Figure 4-3
Une image réactive
multimédias, le W3C a introduit depuis HTML 4 le nouvel élément <object> qui peut être
inclus dans de nombreux autres éléments de bloc ou en ligne. Le tableau 4-2 rappelle la
liste des différentes valeurs possibles pour l’élément <object>.
a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em, fieldset, h1, h2,
h3, h4, h5, h6, head, i, ins, kbd, label, legend, li, object, p, q, samp, small, span, strong, sub, sup, td, th, tt, var
Il peut contenir à son tour de nombreux éléments dont la liste figure dans le tableau 4-3.
Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript, object, ol, p, param, pre, q, samp,
script, select, small, span, strong, sub, sup, table, textarea, tt, ul, var
L’élément le plus couramment employé dans <object> est l’élément <param />, qui est un
élément vide et qui permet de passer à l’application qui lit le fichier multimédia, et dont
un certain nombre de paramètres influencent la lecture. Ses paramètres sont donnés sous
la forme de paire nom/valeur dans les attributs name et value de l’élément. En voici la
forme générale :
<param name="nom_param" value="valeur_param"/>
Les valeurs de ces paramètres varient selon le type du fichier à lire. Pour une animation
ou un fichier son que l’on veut lire en boucle, nous pouvons écrire par exemple :
<param name="loop" value="true"/>
Avant d’utiliser un tel paramètre, il est bon de vérifier s’il correspond bien à l’application
et s’il est bien accepté par les différents navigateurs. L’ajout d’un élément <param /> inap-
proprié bloque parfois la lecture du fichier dans certains navigateurs, tels qu’Internet
Explorer ou même Mozilla, alors même que son absence permet la lecture correcte du
fichier.
Le contenu de l’élément <object> quand il est différente de l’élément <param /> ne sert
que d’alternative en cas de non-affichage de l’objet multimédia et, normalement, n’est
donc pas visible.
L’élément <object> permet entre autres d’afficher des images et possède un grand nombre
d’attributs. Nous n’allons utiliser ici que les attributs utiles à l’insertion d’image et nous
recourons aux autres dans les sections suivantes consacrées à l’insertion de contenus
multimédias.
• L’attribut data : contient l’URL relatif ou absolu de l’image à afficher. C’est l’équivalent
de l’attribut src de l’élément <img />.
Insérer des images et du multimédia
CHAPITRE 4
93
• L’attribut type : précise le type MIME du fichier indiqué dans l’attribut data.
• L’attribut standby : contient le texte qui est affiché pendant le temps de chargement de
l’image. Il équivaut à l’attribut alt de l’élément <img />.
• Les attributs width et height : permettent de définir les dimensions de l’objet dans la
page, et en particulier celle d’une image.
On retrouve également les attributs usemap et tabindex qui jouent le même rôle que dans
l’élément <img />. En particulier l’attribut usemap permet de créer des zones réactives dans
l’image. Dans l’exemple 4-3 nous incluons d’abord une image de type JPEG au moyen
de l’élément <object> aussi facilement qu’avec l’élément <img /> (repère ). Le contenu
de l’élément <object> n’est pas visible et ne sert que de solution de substitution dans le
cas où l’image ne serait pas affichée. L’insertion d’une image de type TIFF, qui était
impossible avec <img />, devient alors possible avec <object> en précisant le type et les
dimensions voulues pour l’image (repère ). De même, l’insertion d’une image dans un
format exotique pour le Web, puisqu’il s’agit de la même image mais au format BMP, est
aussi réalisable en utilisant l’élément <object> et en précisant encore le type et les dimen-
sions du rendu désiré (repère ). La largeur de l’image est ici donnée en pourcentage.
</object>
</div>
</body>
</html>
La figure 4-4 montre les images affichées dans le navigateur Mozilla. Pour réaliser cet
affichage, certains navigateurs peuvent nécessiter l’emploi d’un plug-in comme Quick-
Time ou Windows Media Player installés par défaut ou que l’utilisateur doit télécharger.
Il est toujours utile de créer un lien dans le site vers les sites des fabricants de ces plug-
ins.
Figure 4-4
Affichage d’images en tant qu’objets
Image et bouton
Il est courant de rencontrer dans des pages web des images ayant l’apparence de bou-
tons sur lesquels l’utilisateur peut cliquer pour déclencher une action gérée par un
script (écrit par exemple en JavaScript) exécuté côté client, ou par un script (écrit par
exemple en PHP) côté serveur. Ce type d’images implique la création de deux images,
l’une correspondant à l’état initial du bouton et la seconde à l’état du bouton quand
l’utilisateur clique dessus. L’affichage successif de ces images en cas de clic crée un
effet d’enfoncement du bouton. Pour créer le même effet sans avoir recours à la créa-
tion de plusieurs images, il existe l’élément <button>, apparu en HTML 4. Créé pour
être utilisé plus particulièrement dans les formulaires (voir le chapitre 7), il peut être
incorporé en dehors de ce contexte pour déclencher des scripts côté client. Comme il
s’agit d’un élément en ligne, il devra être inclus dans un bloc <p> ou <div> par exemple.
Insérer des images et du multimédia
CHAPITRE 4
95
Pour que la face du bouton affiche une image, il suffit d’inclure un élément <img />
dans l’élément <button>.
Le code de création d’un bouton avec image a donc la structure suivante :
<button>
<img alt="Texte" src="[Link]"/>
</button>
L’élément <button> possède l’ensemble des attributs communs et par exemple le ges-
tionnaire d’événements onclick qui va nous permettre de déclencher l’exécution d’un
script à la suite d’un clic. Comme pour les éléments <area>, nous retrouverons ici les
attributs accesskey, tabindex, onblur et onfocus. L’attribut disabled qui prend la valeur
booléenne unique disabled rend le bouton inactif. Il ne sera utilisé que pour rendre le
bouton inactif à l’aide de code JavaScript après une action particulière d’un utilisateur.
L’attribut type permet de déterminer le rôle assigné au bouton. Il peut prendre les
valeurs button, submit ou reset, ces deux dernières n’étant utiles que dans le cadre des
formulaires. Quand il prend la valeur button, il n’a pas de rôle prédéterminé et c’est au
concepteur de lui en donner un, en gérant les attributs gestionnaires d’événements
comme onclick par exemple.
L’exemple 4-4 crée une page comportant deux boutons qui contiennent chacun une
image (repères et
), et dont l’attribut type a la valeur button. Le premier bouton
(repère ) est réactif au clic par l’utilisation de l’attribut onclick (repère ) et affiche le
nom du modèle de la moto représentée par l’image. Le second (repère ) affiche une
boîte d’alerte JavaScript contenant la date et l’heure actuelle en réagissant à l’événement
onmouseover (repère ) quand le curseur survole le bouton. Le style créé (repère ) permet
de créer une couleur de fond pour le bouton.
La figure 4-5 représente les boutons obtenus ainsi que la boîte d’alerte créée par le survol
du second bouton.
Figure 4-5
Création de boutons
avec une image
L’insertion du multimédia
Les images ne sont pas les seuls éléments décoratifs d’une page web. À cet effet, nous
disposons désormais de multiples éléments multimédias qui vont des animations Flash à
la vidéo, en passant par les fichiers sons MP3 et les applets Java. Avec le langage
XHTML, on peut incorporer ces fichiers multimédias de manière conforme en oubliant
les balises <embed> et <applet> désormais obsolètes. C’est l’élément <object> qui se prête
aujourd’hui le mieux à l’inclusion de ces différents composants.
Insérer des images et du multimédia
CHAPITRE 4
97
Notez bien cependant que la lecture des contenus multimédias par les navigateurs n’est
pas une évidence comme celle du texte d’une page. Il est souvent nécessaire que ceux-ci
soient munis de plug-ins spécialisés que le visiteur du site doit avoir installés au préala-
ble, faute de quoi ils ne seront pas visibles ou audibles. Pour cette raison, il est bon de
préciser dans la page les adresses de téléchargement de ces plug-ins, tel que le site de
Macromedia pour Macromedia Flash Player ([Link]
[Link]?P1_Prod_Version=ShockwaveFlash&promoid=BIOX) ou QuickTime
([Link]
La figure 4-6 montre le résultat obtenu par l’incorporation d’une superbe animation Flash
du site [Link] qui sert de menu commun à ses pages.
Figure 4-6
Incorporation d’une animation Flash
réserve près que, pour fonctionner dans Explorer, il ne faut pas définir de paramètres du
type :
<param name="autoplay" value="true" />
<param name="loop" value="false" />
afin que, d’une part, la lecture de la vidéo démarre tout de suite sans intervention du visiteur,
et d’autre part qu’elle ne soit pas lue en boucle.
La seconde méthode utilise encore un élément <object> (repère
). Elle consiste à
employer un contrôle ActiveX dont le code est indiqué dans l’attribut classid (repère ),
l’attribut codebase, indiquant au navigateur l’adresse du code qui est censé lui permettre
de visualiser le fichier, n’étant pas obligatoire. Les attributs width (repère ) et height
(repère
) ont pour rôle de dimensionner la zone occupée par l’objet. Contrairement à la
première méthode, nous pouvons ici employer autant d’éléments <param /> que souhaité
pour agir sur la vidéo. Le paramètre nommé src donne l’adresse du fichier placé ici dans
le même répertoire que le document XHTML (repère ). Avec la valeur false (faux) le
paramètre autoplay (repère ) oblige le visiteur à commander lui-même le démarrage de
la vidéo. Le paramètre controller (repère ) avec la valeur true (vrai) permet d’afficher
les boutons de commande de lecture, de pause et de rembobinage. Quant à celui nommé
loop déjà cité (repère ), ayant la valeur false, il empêche la lecture en boucle. La
seconde méthode est acceptée par Explorer, Opera, mais pas par Mozilla ni FireFox.
Les paragraphes (repères et ) inclus dans chacun de ces objets permettent un affi-
chage alternatif en cas d’absence d’un plug-in adapté à la lecture de la vidéo. Ils contien-
nent un conseil de téléchargement (repères et ) et un lien direct vers le fichier vidéo
que l’utilisateur peut alors visualiser plus facilement dans un lecteur multimédia externe.
<!—Seconde méthode-->
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase=
➥ "[Link] width="320"
height="255">
<param name="src" value="[Link]"/>
<param name="autoplay" value="false"/>
<param name="controller" value="true"/>
<param name="loop" value="false"/>
<p>OBJET VIDEO NON AFFICHE.<br /> Vous ne pouvez pas voir cette vidéo :
➥ téléchargez <a href="[Link] <a href="[Link]">
➥ <br />Voir la vidéo dans votre lecteur habituel</a></p>
</object>
</div>
</body>
</html>
La figure 4-7 montre le résultat obtenu dans Opera, dans lequel les deux objets vidéo sont
visibles simultanément.
Figure 4-7
Lecture d’une vidéo
Dans la seconde méthode (repère ), il suffit de modifier la valeur du paramètre dont
l’attribut name a pour valeur src (repère ). Les attributs width (repère ) et height
(repère ) de l’élément <object> peuvent être adaptés pour ne laisser visibles que les
boutons de contrôle du lecteur dans la page. Pour diffuser ce type de fichier en musique
de fond sans intervention possible du visiteur, il suffit de supprimer ces attributs dans la
première méthode ou de mettre le paramètre nommé controller (repère
) à la valeur
false dans la seconde.
La figure 4-8 montre l’affichage obtenu dans Mozilla, navigateur qui ne reconnaît pas la
seconde méthode. Dans ce cas, le contenu du paragraphe est affiché, et ainsi on peut cliquer
sur le lien qui permet une lecture directe dans un logiciel comme Windows Media Player
ou QuickTime.
Figure 4-8
Lecture d’un fichier
MP3
Pour lire des fichiers sons de types différents, il faut simplement modifier les attributs
type et data, en écrivant par exemple :
<object data="[Link]" type="audio/mid">
pour un fichier MIDI, ou encore :
<object data="[Link]" type="audio/wav">
pour un fichier WAV.
Comme Explorer d’un côté et les autres navigateurs (Mozilla, FireFox, Opera et Net-
scape) de l’autre ne traitent pas ces objets de la même manière, et surtout que ces métho-
des sont incompatibles, nous avons recours dans l’exemple 4-8 à une astuce consistant à
inclure deux éléments <object> l’un dans l’autre, chacun utilisant une méthode différente.
De cette manière, l’applet est visible une seule fois dans tous les navigateurs. Pour les
navigateurs autres que Explorer, dans le premier élément <object> (repère ), nous
précisons le type de code dans l’attribut codetype (repère ) et le nom du fichier Java
dans l’attribut classid (repère ). Les attributs width (repère ) et height (repère )
précisent les dimensions de la zone de rendu de l’applet dans la page web. Générale-
ment, chaque applet peut être personnalisée selon les intentions de son créateur en
modifiant la valeur de certaines variables. Nous pouvons intervenir sur celles-ci par
l’intermédiaire de l’élément <param /> dont les attributs name et value correspondent
respectivement aux noms des variables Java et à leur valeur. Les noms utilisés figurent
soit dans le code source Java s’il est livré avec l’applet, soit dans un fichier texte qui
explique sa mise en œuvre.
Dans l’exemple 4-8 nous intervenons sur la couleur de fond (paramètre bgcolor repères
et ), sur le texte qui s’affiche sur le cadran de la pendule (paramètre logoString, repères
<param name="logoString" value="XHTML"/>
<param name="timezone" value="-2"/>
<!-- suite des paramètres -->
<!-- ********************* -->
<!--Applet dans Explorer-->
<object classid="CLSID:8AD9C840-044E-11D1-B3E9-00805F499D93" width="400"
➥ height="400">
<param name="code" value="[Link]">
<param name="bgcolor" value="FF0000">
<param name="logoString" value="XHTML"/>
<param name="timezone" value="-2"/>
<!--suite des paramètres -->
</object>
</object>
</div>
</body>
</html>
La figure 4-9 montre le résultat obtenu dans Explorer, mais il est identique dans les autres
navigateurs, exception faite de la couleur de fond.
Figure 4-9
Insertion
d’une applet
dans une page
Insérer des images et du multimédia
CHAPITRE 4
105
Exercices
Exercice 1 : Quel type d’images peut-on inclure avec l’élément <img /> ?
Exercice 2 : Dans quels cas et pourquoi a-t-on intérêt à choisir une image au format GIF
plutôt qu’au format JPEG ou PNG ?
Exercice 3 : Quels sont les attributs indispensables dans l’élément <img /> ?
Exercice 4 : Incluez une image JPEG dans un paragraphe tout en faisant en sorte qu’elle
conserve ses dimensions initiales.
Exercice 5 : Incluez une image GIF dans un titre en la dimensionnant à 50 % de sa taille
normale.
Exercice 6 : Créez une image réactive comprenant deux zones sensibles. La première, de
forme circulaire, dirige vers un autre site, quelconque, et la seconde, qui est un penta-
gone, permet l’affichage d’un message de bienvenue. Gérez les clics effectués en dehors
de ces deux zones en affichant le message « Hors zone ».
Exercice 7 : Affichez dans une division <div> une image de type TIFF, BMP ou autre
format non courant sur le Web. Dimensionnez l’image à 80 %.
Exercice 8 : Créez un bouton dont la face est une image de votre choix. Le clic sur le
bouton doit rediriger le visiteur vers le site [Link]
Exercice 9 : Récupérez ou fabriquez une animation Flash et incorporez-la dans un para-
graphe. Créez un lien vers le site [Link] pour ceux qui ne peuvent pas la
visualiser.
Exercice 10 : Insérez une vidéo dans un élément <button> sans utiliser d’éléments <param />.
Exercice 11 : Insérez une vidéo dans un élément <button> en utilisant un contrôle ActiveX.
Exercice 12 : Créez une musique de fond à l’aide d’un fichier WAV.
Exercice 13 : Téléchargez une applet Java et installez ses fichiers sur le serveur. Incluez
ensuite cette applet dans une page en définissant ses paramètres s’ils existent.
5
Créer des liens
Dans l’acronyme XHTML, on peut considérer que l’élément le plus important est le mot
« Hypertext ». En effet, la création de documents contenant des liens hypertextes est la
particularité qui a rendu le Web si populaire. Les liens hypertextes permettent de passer,
d’un simple clic, sur un mot ou sur une image, d’une page à l’autre, qu’elle soit située sur
le même serveur ou en n’importe quel point du réseau. Nous parlerons dans ce cas de lien
externe (sous-entendu au document initial). Il est également possible de passer instanta-
nément d’un point de la page à un autre situé dans la même page et identifié par un nom
particulier. Nous parlerons alors de lien interne (encore sous-entendu au document
initial). Tout contenu essentiel d’une page XHTML peut faire l’objet d’un lien hypertexte
externe ou interne. Si l’origine d’un lien est très souvent un clic sur une partie d’un texte,
nous pourrons tout aussi bien définir celle-ci sur une image, une partie donnée d’une
image, un bouton ou encore créer cette redirection en utilisant un script JavaScript en
réaction à d’autres événements que le traditionnel clic. Enfin, nous allons voir qu’un lien
peut même permettre de déclencher l’exécution d’un script ou l’ouverture automatique
de la messagerie électronique du visiteur pour envoyer un e-mail vers le site ou à
l’attention de tout autre destinataire.
Les tableaux 5-1 et 5-2 donnent respectivement la liste des éléments parents et enfants
de l’élément <a>, auxquels il faut se conformer pour créer un document conforme
XHTML 1.1.
abbr | acronym | address | b | bdo | big | caption | cite | code | dd | del | dfn| div | dt | em | fieldset | h1 | h2 |
h3 | h4 | h5 | h6 | i | ins | kbd | label | legend | li | object | p | pre | q | samp | small | span | strong | sub | sup
| td | th | tt | var
Texte | abbr | acronym | b | bdo | big | br | button | cite | code | del | dfn |em | i | img | input | ins | kbd | label |
map | object | q | samp | script | select | small | span | strong | sub | sup | textarea | tt | var
Quand nous définissons un lien dont l’origine est par exemple un texte, celui-ci apparaît
souligné, dans une couleur particulière définie par défaut dans le navigateur (générale-
ment en bleu), et le curseur prend l’aspect d’une main pour signaler l’existence de ce
lien. Ces conventions visuelles sont communes à tous les navigateurs et, même s’il est
possible de les modifier à loisir avec des styles CSS comme nous le verrons au chapitre 12,
il faut en user modérément, plus particulièrement pour le soulignement et l’aspect du
curseur, car les internautes sont habitués à ces conventions bien établies.
L’adresse de la page cible peut aussi être absolue comme dans le code suivant :
<div>Visitez le site du <a href= "[Link] >W3C </a></div>
L’élément <a> possède l’ensemble des attributs communs parmi lesquels nous noterons
particulièrement id qui nous permet d’identifier le lien pour agir sur son contenu à l’aide
d’un script JavaScript (voir l’exemple 5-1). L’attribut title doit être défini systématique-
ment car il est utile pour afficher un bref message permettant d’expliquer le contenu de la
page cible du lien. De plus, il sera lu par les navigateurs oraux destinés aux non-voyants,
ce qui améliore l’accessibilité du site. N’oublions pas non plus l’attribut class qui permet
d’appliquer des styles spécifiques aux liens (voir le chapitre 12, Le style du texte et des
liens). En plus de ces attributs communs, l’élément <a> possède un grand nombre d’attri-
buts particuliers dont les définitions sont les suivantes :
• accesskey : il permet de créer un raccourci clavier pour ouvrir le document cible sans
effectuer de clic sur le contenu de l’élément <a>. Sa valeur doit être un caractère spé-
cifique, de préférence une lettre. L’utilisateur accède alors à la cible en tapant le rac-
courci Alt+caractère. Cette possibilité doit être signalée au visiteur, soit en clair par
un texte explicatif, soit en soulignant le caractère choisi, généralement dans un des
mots du lien, comme le font les menus de nombreux logiciels. Il faut veiller à ne pas
utiliser les mêmes raccourcis que ceux qui existent dans les navigateurs (comme
Alt+F par exemple qui ouvre le menu Fichier) car ils agiraient sur le navigateur et
non sur le lien.
Exemple de code :
<div>Visitez le site du <a href= "[Link] accesskey="W"
➥ title="W3C:raccourci Alt+W">W3C </a></div>
• tabindex : il définit un ordre d’accès au lien avec une tabulation, ce qui rend le lien
actif si la page en comporte plusieurs. En écrivant le code suivant, il faudra que l’utili-
sateur tape deux fois sur la touche Tab pour rendre le lien actif, la redirection vers la
page cible se faisant ensuite avec la touche Entrée :
<p>Les standards<a href="[Link]" tabindex="2">W3C</a></p>
• charset : il contient le code d’un jeu de caractères du type ISO-8859-1 (Latin 1) pour
indiquer celui qui est utilisé dans le document cible. Nous ne l’utiliserons que si la
cible est écrite par exemple dans un alphabet différent de celui de la page d’origine du
lien.
• type : il indique si besoin est le type MIME du document cible. Nous l’utilisons uni-
quement si la cible n’est pas un document XHTML comme une image, un fichier son,
vidéo ou un document PDF ou ZIP. Son utilisation permet de fournir au navigateur une
information sur la manière d’afficher la cible, ce qui accélère son apparition. Nous
pouvons écrire par exemple :
<li><a href="[Link]" type="image/tiff">Ma photo</a></li>
Le langage XHTML
110 PARTIE I
• hreflang : il précise le code de langue du document cible s’il est différent de celui du
document initial tel qu’il est indiqué par l’attribut xml:lang précisé par exemple dans
l’élément <body>.
• rel : il donne la relation de dépendance existant entre le document d’origine et le
document cible. Cet attribut a déjà été utilisé dans l’élément <link>, et il peut prendre
par exemple les valeurs index, next ou prev.
• rev : cet attribut indique la relation inverse du précédent, et donc le rapport existant
entre le document cible et celui qui l’a appelé. Il prend le même type de valeurs que
rel.
• shape : par défaut, toute la zone occupée à l’écran par le contenu de l’élément <a> est
sensible au clic de l’utilisateur pour provoquer l’affichage de la cible. Cette situation
peut être modifiée pour qu’une partie seulement du contenu soit sensible au clic. Cette
possibilité est principalement utilisée quand le contenu est une image. L’attribut shape
permet de définir la forme de cette zone. Il peut prendre l’une des valeurs suivantes :
– rect pour un rectangle, c’est la valeur par défaut.
– circle pour un disque.
– poly pour un polygone.
– default pour définir une adresse cible en cas de clic sur un emplacement situé en
dehors des zones définies par les formes précédentes.
Il faut ensuite définir les coordonnées des points clés permettant de dessiner la forme
choisie, à l’aide de l’attribut coords.
• coords : il contient une suite de nombres qui sont les coordonnées de ces points clés.
L’origine des coordonnées est l’angle supérieur gauche de la zone de contenu de l’élément
<a>. Pour chaque forme, il faut définir les coordonnées suivantes :
– si shape="rect", nous devons donner dans cet ordre les coordonnées des sommets
supérieur gauche et inférieur droit du rectangle. Par exemple :
<p><a href="[Link]" shape="rect" coords="50,20,100,60"> <img src="[Link]"
➥ alt="rectangle à cliquer" />Choix de la région</a></p>
– si shape="circle", nous devons donner dans cet ordre les coordonnées du centre suivies
du rayon. Par exemple :
<p><a href="[Link]" shape="circle" coords="100,150,50"> <img src="[Link]"
➥ alt="cercle à cliquer" />Choix de la région</a></p>
– si shape="poly", nous devons donner les coordonnées de tous les sommets du poly-
gone suivies des coordonnées du point de départ pour refermer la figure.
<p><a href="[Link]" shape="poly" coords="50,100,150,100,80,200,50,100">
➥ <img src="[Link]" alt="Triangle à cliquer" />Choix de la région</a></p>
Créer des liens
CHAPITRE 5
111
Enfin, comme les autres éléments visuels pouvant recevoir le focus, l’élément <a>
possède les attributs de gestion d’événements onfocus quand son contenu reçoit le
focus (donc par défaut encadré par une bordure en pointillés), et onblur quand il perd
le focus. Nous pouvons gérer ces événements en écrivant par exemple le code
suivant :
<p>Le site du <a href="[Link]" onfocus="alert(‘Ne manquez pas le site du W3C’)">
➥ W3C</a></p>
le texte du lien devient rouge quand le curseur le survole, et noir quand il le quitte.
L’exemple 5-1 réalise la mise en œuvre des différents types de liens que nous venons
d’envisager. Le premier crée un lien vers le site du W3C et utilise l’attribut onfocus
pour afficher une boîte de dialogue (repère ). Le deuxième lien définit les attributs
accesskey, tabindex et title pour augmenter l’accessibilité (repère ). Le troisième
lien utilise les attributs onmouseover et onmouseout pour modifier le style du lien (repère ).
Le suivant est effectué vers une image de type JPG qui s’affichera dans une nouvelle
page (repère ). Le dernier est effectué vers un document au format texte brut qui
s’affiche tel quel dans une nouvelle page (repère ). Notons que, dans ces deux der-
niers cas, le contenu cible est affiché dans le navigateur mais il ne s’agit pas d’un
document XHTML. Cela peut être vérifié en tentant d’afficher le code source de la
page cible.
Figure 5-1
Différents types
de liens
Le premier lien est effectué vers un document PDF qui entraîne le démarrage du module
spécialisé Acrobat Reader (repère ). Le chargement de ce module (qui prend un temps
assez long dans sa version 6, auquel il faut ajouter ensuite le temps de téléchargement du
Le langage XHTML
114 PARTIE I
fichier PDF lui-même) permet au navigateur de lire et d’afficher le document. Une nou-
velle barre d’outils apparaît alors dans le navigateur. Elle permet de naviguer aisément
dans le document. La figure 5-2 montre l’aspect de la fenêtre obtenue.
Figure 5-2
Visualisation d’un document PDF
Le deuxième lien est effectué vers un document Word (repère ). L’activation de ce lien
provoque l’apparition d’une fenêtre semblable à celle de la figure 5-3, qui demande au
visiteur de choisir le programme à utiliser pour ouvrir le document, en suggérant une
application. Si le visiteur clique sur la case à cocher de la dernière ligne, lors de son
ouverture, le navigateur ouvre toujours la même application pour les fichiers Word sans
afficher cette fenêtre de choix.
Le troisième lien dirige vers une animation Flash (repère ) qui est affichée dans une
nouvelle page vide. Il faut cependant que le navigateur client soit muni du module de
Créer des liens
CHAPITRE 5
115
Figure 5-3
Visualisation d’un
document Word
lecture adéquat. Il est conseillé en règle générale de proposer un lien vers le site de télé-
chargement des plug-ins Flash ([Link] pour
ceux qui n’en disposeraient pas encore.
Les cinq liens suivants pointent vers des documents multimédias vidéo et sonores (repè-
res , , ,
et ). Leur activation va déclencher le démarrage d’une application
externe comme le lecteur Windows Media ou Quick Time selon la configuration du poste
client. La figure 5-4 montre la fenêtre de l’application Windows Media ouverte d’un clic
sur le lien MP3.
Figure 5-4
Le lecteur Windows
Media
Le langage XHTML
116 PARTIE I
Quand le contenu d’une page est assez long, l’utilisateur ne peut pas en avoir une
➥ vision globale. Il est alors possible de lui proposer une table des matières ou
➥ un menu composé de liens vers les différentes sections de la page. Il pourra
➥ alors accéder directement au point qui lui convient sans avoir à faire défiler
➥ la page…</div><br /><hr />
<!-- Troisième section -->
<div>
<h1>JavaScript</h1><a id="sujet3" href="#menu3">Retour au vers le menu</a><br />
Quand le contenu d’une page est assez long, l’utilisateur ne peut pas en avoir une
➥ vision globale. Il est alors possible de lui proposer une table des matières ou
➥ un menu composé de liens vers les différentes sections de la page. Il pourra
➥ alors accéder directement au point qui lui convient sans avoir à faire défiler
➥ la page… </div><br /><hr />
</body>
</html>
Le langage XHTML
118 PARTIE I
La figure 5-5 donne l’aspect de la page obtenue avec des paragraphes courts pour alléger
le code, mais ce système convient bien évidemment à des textes longs.
Figure 5-5
Navigation dans une page unique
Chacun des liens de cette page est donc l’origine d’un lien interne vers une ancre nom-
mée – par exemple le lien nommé « XHTML » (repère ) conduit au premier paragraphe
identifié par l’attribut id de valeur sujet1 (repère ) – mais, réciproquement, le lien
nommé « sujet1 » (repère ) permet de remonter au menu « XHTML » identifié par
l’attribut id de valeur menu1 (repère ), et donc de le réafficher si la page est trop longue.
De même, le lien nommé « CSS » du menu (repère ) conduit au deuxième paragraphe
(repère
) et le lien nommé « JavaScript » (repère ) mène au troisième paragraphe
(repère ). Réciproquement, les liens incorporés dans chaque division permettent de
remonter au menu en tête de page.
L’exemple 5-4 permet d’illustrer les possibilités offertes en créant un système de naviga-
tion complet entre trois pages du même site. La page d’accueil nommée [Link]
affiche un menu permettant d’accéder directement aux différents chapitres des pages
nommées [Link] et [Link]. Chacune de ces pages comporte également le même
menu, ce qui permet une navigation croisée entre toutes les pages sans utiliser le bouton
Précédent du navigateur pour revenir à la page d’accueil, et également d’atteindre
n’importe quel chapitre de n’importe quelle page.
Le fichier [Link]
La page d’accueil contient deux titres de niveau 1 (repères et ) qui contiennent cha-
cun trois liens (repères , et ) vers les chapitres 1, 2 et 3 situés dans les pages
[Link] et [Link] (repères ,
et ). Chacun de ces chapitres est contenu dans un
paragraphe des pages cibles.
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>Navigation entre plusieurs pages</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
</head>
<body>
<h1 id="menuxhtml">XHTML
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
<a href="[Link]#chap3"> Chapitre 3 </a>
</h1><hr />
<h1 id="menucss">CSS 2
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
Le fichier [Link]
Les pages [Link] et [Link] ont une structure identique. On y retrouve le même
menu que dans la page d’accueil (repères et ), auquel s’ajoute un lien vers le
menu général de la page d’accueil (repère ). Chaque page contient ensuite trois
paragraphes correspondant aux trois chapitres de chaque sujet (repères , et ).
Le langage XHTML
120 PARTIE I
Pour faciliter la navigation, chaque chapitre renferme par ailleurs un lien vers le menu de
sa propre page (repères
, et ).
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>La page de XHTML 1.1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
</head>
<body>
<h1 id="menuxhtml">XHTML
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
<a href="[Link]#chap3"> Chapitre 3 </a>
</h1><hr />
<h1 id="menucss">CSS 2
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
<a href="[Link]#chap3"> Chapitre 3 </a>
</h1><hr />
<h1>
<a href="[Link]#menuxhtml"> Accueil </a>
</h1><hr />
<!-- Contenu de la page -->
<h2>Chapitre 1: Introduction</h2>
<p><a id="chap1" href="#menuxhtml">Menu</a>
<br />
Pourquoi utiliser XHTML...In principio creavit Deus caelum et terram terra autem
➥ erat inanis et vacua et tenebrae super faciem abyssi et spiritus Dei
➥ ferebatur super aquas dixitque Deus fiat lux et facta est lux </p>
<h2>Chapitre 2: La structure</h2>
<p><a id="chap2" href="#menuxhtml">Menu</a> <br />
La structure d’un document XHTML...In principio creavit Deus caelum et terram
➥ terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus
➥ Dei ferebatur super aquas dixitque Deus fiat lux et facta est lux
</p>
<h2>Chapitre 3: Le texte</h2>
<p><a id="chap3" href="#menuxhtml">Menu</a> <br />
Pour structurer le texte...In principio creavit Deus caelum et terram terra
➥ autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus Dei
➥ ferebatur super aquas dixitque Deus fiat lux et facta est lux
</p>
</body>
</html>
Créer des liens
CHAPITRE 5
121
Le fichier [Link]
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>La page de XHTML 1.1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
</head>
<body>
<h1 id="menuxhtml">XHTML
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
<a href="[Link]#chap3"> Chapitre 3 </a>
</h1><hr />
<h1 id="menucss">CSS 2
<a href="[Link]#chap1"> Chapitre 1 </a> **
<a href="[Link]#chap2"> Chapitre 2 </a> **
<a href="[Link]#chap3"> Chapitre 3 </a>
</h1><hr />
<h1>
<a href="[Link]#menuxhtml"> Accueil </a>
</h1><hr />
<!-- Contenu de la page -->
<h2>Chapitre 1: Introduction à CSS</h2>
<p><a id="chap1" href="#menuxhtml">Menu</a>
<br />Pourquoi utiliser CSS 2...
➥ In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas
➥ dixitque Deus fiat lux et facta est lux
</p>
<h2>Chapitre 2: Les sélecteurs CSS</h2>
<p><a id="chap2" href="#menuxhtml">Menu</a> <br />Les sélecteurs CSS...
➥ In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas
➥ dixitque Deus fiat lux et facta est lux
</p>
<h2>Chapitre 3: Créer des styles</h2>
<p><a id="chap3" href="#menuxhtml">Menu</a> <br />Créer des styles...
➥ In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas
➥ dixitque Deus fiat lux et facta est lux
</p>
</body>
</html>
Le langage XHTML
122 PARTIE I
Ce système complet permet donc en chaque point de n’importe quelle page d’accéder
rapidement aux autres points des différentes pages du site. Les figures 5-6 et 5-7 mon-
trent respectivement le menu de la page d’accueil et la page [Link] (la page [Link]
a le même aspect).
Figure 5-6
La page d’accueil
du système
de navigation
Figure 5-7
La page du XHTML
Créer des liens
CHAPITRE 5
123
</a>
<a id="lien2" href="[Link]
<button type="button"> CSS 2.1 </button>
</a>
<a id="lien3" href="[Link]
<button type="button" value="W3C"> Le site W3C </button>
</a>
<button type="button" onclick = "[Link]= ‘
➥ [Link] Éditions Eyrolles </button>
</div>
</body>
</html>
Figure 5-8
Création de liens à
partir de boutons
Dans son état courant, une image n’est pas sensible au clic pour provoquer un lien hyper-
texte, à moins de gérer l’attribut onclick comme nous venons de le faire pour l’élément
<button>. Pour qu’elle devienne l’origine d’un lien, il suffit de l’inclure dans un élément
<a> et de définir l’attribut href de cet élément de la même manière que pour un lien ordi-
naire. L’image sera alors entourée d’une bordure, généralement en bleu, pour signaler
qu’il s’agit d’un lien. L’exemple 5-6 crée un système de navigation dont les origines des
liens sont des images représentant des couvertures de livre de votre éditeur préféré. Cha-
que clic sur une image dirige le visiteur vers la page dans laquelle se trouve une image
grand format de la même couverture et une description détaillée du livre. Chaque élé-
ment <a> (repères , , et
) contient une image (repères , , et ). L’attribut
href de chaque élément <a> renferme l’adresse de la page cible du lien. L’élément <a> ne
contenant aucun texte, c’est l’attribut title de chaque élément <img /> qui peut donner
une information sur la cible du lien quand le curseur survole l’image (ici, l’information
est écourtée afin d’alléger le code).
Figure 5-9
Création de liens à
partir d’images
Le langage XHTML
126 PARTIE I
Comme nous l’avons fait pour un texte, il est possible de définir une ancre sur une image
en définissant l’attribut id de l’élément <a>. Cette technique peut être utilisée par exemple
pour diriger le visiteur vers une image particulière en grand format (soit l’ancre), située
dans la même page ou dans une autre à partir d’une série d’images miniatures (les origines
des liens).
L’utilisation de l’attribut title pour chaque élément <area /> permet de définir un texte
explicatif différent qui s’affiche quelques instants si le curseur reste sur la zone sensible.
Pour chaque élément <area />, il est utile de définir les attributs accesskey et tabindex, que
nous avons déjà rencontrés, pour créer un raccourci clavier et un ordre de tabulation pour
rendre chaque zone active. Comme un lien <a>, chaque zone sensible peut être définie
comme une ancre. Dans ce cas, il faut lui donner un attribut id, omettre l’attribut href et
facultativement préciser cette omission en définissant l’attribut nohref avec la valeur boo-
léenne unique nohref. Comme tous les éléments pouvant recevoir le focus, l’élément
<area /> possède les attributs gestionnaires d’événements onfocus quand la zone reçoit le
focus au moyen de la souris, d’un raccourci clavier ou d’une tabulation, et onblur quand
elle le perd par les mêmes moyens. Il est alors possible de déclencher l’exécution d’un
script JavaScript lorsque ces événements surviennent. Nous pouvons également déclen-
cher des scripts pour créer des effets visuels avec les gestionnaires d’événements onmou-
seover et onmouseout quand le curseur survole ou quitte une zone sensible.
Dans l’exemple 5-7, nous créons une navigation à partir de l’image d’une carte de France
pour laquelle nous définissons un ensemble de zones sensibles à l’aide des éléments
<map> et <area />. La carte des zones est identifiée par l’attribut id de l’élément <map> sous
le nom regions (repère ). La première zone correspondant à la région parisienne est cir-
culaire (repère ), la deuxième pour la région Pays de la Loire est un polygone à quatre
côtés (repère ) et la dernière pour la région Centre est un rectangle (repère ). Le der-
nier élément <area> ayant l’attribut shape avec la valeur default permet de diriger les visi-
teurs vers la page d’accueil en cas de clic sur les autres parties de la carte (repère ). La
carte des zones sensibles est utilisée par l’image de la carte de France (repère
). À cet
effet, l’identifiant de la carte est donc donné comme valeur de l’attribut usemap de l’élé-
ment <img />.
</div>
</body>
</html>
Vous n’avez pas manqué de remarquer que cet exemple n’utilise pas la DTD XHTML 1.1
mais la DTD XHTML 1.0 strict (repère ). Nous y sommes contraint pour que la page
soit validée par le W3C. En effet, son service de validation signale une erreur de confor-
mité quand on utilise le caractère dièse (#) dans l’attribut usemap alors que le code de
l’exemple est validé avec la DTD 1.0 strict, qui est théoriquement quasi similaire. Il
s’agit probablement d’un bogue non éclairci à ce jour malgré de nombreux tests.
La figure 5-10 illustre le résultat obtenu, dans lequel on peut remarquer que l’utilisation
de l’attribut title permet l’affichage d’un message pour chaque région.
Figure 5-10
Création de zones
sensibles dans
une image
Créer des liens
CHAPITRE 5
129
L’attribut target
Dans les DTD HTML 4 et en XHTML 1.0 Transitional, l’élément <a> possède un attribut target qui
permet de désigner la page cible d’un lien. Il peut prendre les valeurs prédéfinies _blank, _parent,
_self et _top pour afficher la cible, respectivement, dans une nouvelle fenêtre, la fenêtre parent de la
fenêtre en cours, la fenêtre elle-même et la fenêtre de plus haut niveau. Les trois dernières valeurs sont
surtout utilisées dans le cas de création de cadres (voir le chapitre 8, Créer des cadres).
L’élément <address> peut bien sûr être remplacé par un autre élément de type bloc,
comme <p> ou <div>. Il est de plus possible de faciliter la tâche du visiteur en remplissant
à sa place des champs dans son logiciel de courrier. Pour définir le sujet du courrier, dans
l’attribut href, il faut faire suivre l’adresse e-mail par un point d’interrogation (?) puis du
mot-clé subject= et du texte choisi pour l’objet du message sans guillemets. Nous pou-
vons définir par exemple l’objet de l’e-mail de la manière suivante :
<p>
Demande de <a href="[Link] de renseignements">
➥ documentation</a>
</p>
Nous pouvons encore ajouter un ou plusieurs destinataires en copie visible. Dans ce cas,
le destinataire d’une copie de l’e-mail sera informé qu’il ne reçoit qu’une copie d’un e-
mail et aura connaissance du destinataire principal et des autres destinataires mis en
copie. Il faut pour cela faire suivre l’adresse du destinataire principal du caractère ?, puis
du code cc=, suivi de l’adresse du destinataire mis en copie. Pour ajouter plusieurs desti-
nataires en copie, il faut séparer chaque adresse de la précédente par un caractère point-
virgule (;). Pour ajouter un destinataire, nous pouvons écrire :
<p>
Réclamation de
<a href="[Link] commande non reçue</a>
</p>
Si nous voulons ajouter un destinataire sans que son adresse e-mail apparaisse, il faut
l’ajouter en copie cachée en utilisant le code bcc à la place de cc. Là aussi, nous pouvons
indiquer plusieurs adresses en les séparant par un point-virgule (;).
Toutes les options précédentes peuvent être utilisées simultanément en les séparant tou-
tes les unes des autres par l’entité de caractère correspondant au caractère esperluette (&),
soit l’entité &. Notez que le caractère & lui-même est interdit dans l’attribut href et
qu’il faut le remplacer par l’entité correspondante.
L’exemple 5-8 crée une liste de liens permettant au visiteur de demander l’envoi d’une
documentation sur différents types de services offerts par un site d’assurance. Il com-
porte trois liens contenus chacun dans un paragraphe (repères , et ). Ces liens
déclenchent l’envoi d’un e-mail à une adresse différente selon le choix effectué par le
visiteur. Pour tous ces liens, nous avons défini un objet de message personnalisé différent
(avec subject=), une adresse en copie simple et une adresse en copie cachée vers deux
services de l’entreprise.
Figure 5-11
Création de liens
vers des e-mails
Les liens utilisant le protocole mailto: peuvent, comme tous les autres, contenir une
image. Un clic sur celle-ci provoque donc l’ouverture du logiciel de courrier. Cette pos-
sibilité peut être exploitée pour une demande de renseignements dans un site de petites
annonces, par exemple après un clic sur la photographie de l’article qui intéresse un visi-
teur. La référence de l’article peut alors être insérée dans l’objet de l’e-mail, ainsi que
l’adresse du destinataire.
Le langage XHTML
132 PARTIE I
{
Créer des liens
CHAPITRE 5
133
[Link](‘divis’).[Link]=‘20px’;
}
-->
</script>
</head>
<body id="page">
<div id="divis">
<h1>Lancer des scripts JAVASCRIPT</h1>
<a href="javascript:ladate()">Afficher la date</a><br />
<a href="javascript:fondrouge() ">Créer un fond rouge pour cette division
➥ </a><br />
<a href="javascript:grandtexte() ">Afficher le texte avec des caractères
➥ de 20 Pixels</a><br />
</div>
</body>
</html>
La figure 5-12 montre l’état initial de la page et celui qu’elle a après l’activation des trois
liens.
Figure 5-12
Création de liens
JavaScript
Le langage XHTML
134 PARTIE I
Exercices
Exercice 1 : Peut-on inclure directement un élément <a> dans les éléments <body>,
<address>, <pre> ou <form> ?
Exercice 2. Écrivez la phrase : « Le langage XHTML permet la création de pages
structurées, CSS 2 des présentations variées. ». Créez des liens vers les sites
[Link] et [Link] pour les mots « XHTML » et
« CSS 2 ».
Exercice 3. Déclenchez l’ouverture d’une boîte de dialogue JavaScript en cas de clic sur
un lien textuel.
Exercice 4. Créez un lien vers un document PDF (par exemple : [Link]
CSS21/[Link]), puis vers un fichier MP3. Indiquez le type du document cible en utilisant
l’attribut correct.
Exercice 5. Créez plusieurs paragraphes dans une page. Chacun d’eux contient un titre et
un texte quelconque assez long. Chaque titre doit avoir un identifiant et contenir une
ancre. En haut de la page, ajoutez un titre <h1> contenant les noms des différents paragra-
phes, chacun étant inclus dans un lien. Gérez ensuite les attributs href pour permettre une
navigation réciproque entre ce menu et chacun des paragraphes.
Exercice 6. À partir de l’exercice précédent, remplacez le titre qui sert de menu par des
boutons. Un clic sur chaque bouton doit permettre la même navigation vers les paragraphes.
Exercice 7. Récupérez les logos des différentes chaînes de télévision sur leur site respec-
tif. Créez une page incluant ces logos, puis des liens vers le site de chaque chaîne à partir
de ces logos sans utiliser l’attribut onclick.
Exercice 8. Même question que dans l’exercice 7, mais sans utiliser l’élément <a>.
Exercice 9. À partir de l’exercice 7, modifiez le code de façon à ce que chaque cible d’un
lien s’ouvre dans une nouvelle fenêtre sans que la page d’origine ne se ferme.
Exercice 10. À partir d’une carte d’Europe (récupérable par exemple sur le site :
[Link] créez des zones sensibles pour la France (en
forme de cercle), l’Allemagne (en forme de rectangle) et la Grande-Bretagne (en forme de
polygone), et dirigez le visiteur vers un site quelconque de chaque pays (par exemple, celui de
[Link] avec les extensions .fr, .de et .[Link]). Le clic en dehors de ces zones doit être géré,
c’est-à-dire qu’il doit diriger le visiteur vers un site par défaut (par exemple [Link]).
Exercice 11. Réutilisez l’exemple précédent de façon à ce que chaque page cible s’affiche
dans une nouvelle fenêtre de dimensions 640 par 480 pixels.
Exercice 12. Créez des liens à partir de la carte d’Europe précédente afin que chaque clic sur
une zone déclenche l’envoi d’un e-mail à votre adresse. Chaque e-mail a pour objet le nom du
pays concerné. Si vous possédez plusieurs adresses, mettez la deuxième en copie.
Exercice 13. Créez deux boutons dans une page. Le premier contient le texte « Fond rouge/
Texte blanc », et le second « Fond noir/Texte jaune ». En vous inspirant de l’exemple 5-9,
provoquez le changement des couleurs de fond et de texte en cas de clic sur les boutons.
6
Créer des tableaux
Dans une page XHTML, il est possible de réaliser une présentation d’informations de
type textuelle ou graphique sous la forme de tableaux. De la même manière que dans un
tableur Excel ou OpenOffice, un tableau créé en XHTML est composé de lignes et de
colonnes. À l’intersection de ces dernières se trouve une cellule du tableau dont le
contenu peut être constitué aussi bien d’éléments de type bloc (titres, paragraphes, divi-
sions, listes), d’éléments en ligne tels que des images, ou encore d’éléments de formu-
laire. Nous verrons qu’à partir d’une grille de base, il est possible de fusionner plusieurs
cellules voisines, ce qui permet de créer des tableaux asymétriques très variés. Les
tableaux ont souvent été utilisés pour élaborer des mises en page de documents sur
plusieurs colonnes en lieu et place des cadres (voir le chapitre 8). Même si nous étudions
dans ce chapitre le procédé permettant de réaliser des présentations variées, il faut savoir
que cette tendance est actuellement abandonnée au profit de l’utilisation des propriétés
CSS de positionnement qui permettent de procéder aux mêmes types de réalisations
d’une manière plus élégante et moins rigide. Nous retrouvons ici la tendance permanente
en XHTML de séparation du contenu et de la présentation. Les tableaux n’en continuent
pas moins d'être des éléments essentiels d’une page XHTML pour la présentation des
données.
être inclut dans des éléments XHTML divers dont la liste est présentée dans le
tableau 6-1.
blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th
Nous devons créer sa structure ligne par ligne. Chaque ligne est déclarée par un élément
<tr> (pour table row). La création de chaque cellule d’une ligne est déclarée par un élé-
ment <td> (pour table data) pour les cellules standards du tableau ou <th> (pour table
head) pour les cellules qui jouent le rôle d’en-tête de colonne ou de ligne. Ces éléments
sont les seuls enfants autorisés pour l’élément <tr>. La priorité est en effet donnée aux
lignes sur les colonnes, priorité que nous retrouverons dans la définition des styles des
tableaux au chapitre 14, Le style des tableaux. Pour un tableau régulier, nous obtenons
donc une structure du code XHTML dans laquelle il y a autant d’éléments <tr> inclus
dans <table> que de lignes et d’éléments <td> ou <th> inclus dans les différents éléments
<tr> que de colonnes dans chaque ligne. La diversité du contenu d’un tableau n’apparaît
que dans le contenu des éléments <td> et <th> dont le tableau 6-2 donne la liste des élé-
ments enfants.
Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript, object, ol, p, pre, q, samp, script,
select, small, span, strong, sub, sup, table, textarea, tt, ul, var
La structure d’un tableau élémentaire régulier (contenant autant de cellules dans chaque
ligne) est donc celle présentée dans l’exemple 6-1. Faute de précision supplémentaire, la
largeur du tableau est fonction du contenu des cellules le composant. Dans ces condi-
tions, si le contenu d’une cellule est important, elle s’élargit automatiquement jusqu’à ce
que le tableau occupe toute la largeur de la page. Si toutes les cellules ont ce type de
contenu, le partage de la largeur est fait équitablement entre elles et leur contenu occupe
plusieurs lignes. Pour terminer la présentation d’un tableau, nous pouvons lui attribuer un
titre général qui doit être contenu dans l’élément <caption>, lui-même inclus dans
<table>. Cet élément doit être le premier à apparaître dans <table>. Son contenu, qui
apparaît par défaut au-dessus du tableau, peut être constitué d’éléments divers dont la
liste figure dans le tableau 6-3. Cette position peut être modifiée en recourant à un style
CSS (voir la propriété caption-side).
Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
Créer des tableaux
CHAPITRE 6
137
Figure 6-1
Un tableau
élémentaire
Le langage XHTML
138 PARTIE I
– groups : n’affiche que les bordures délimitant les groupes de lignes ou de colonnes
définis par les éléments <col /> et <colgroup>, <tbody>, <thead> et <tfoot>, dont nous
allons voir les rôles respectifs ci-après.
• summary : il contient un texte décrivant plus complètement le contenu du tableau que
l’élément title. De plus, ce texte n’est pas utilisé dans les navigateurs visuels habi-
tuels, mais uniquement dans les navigateurs oraux destinés aux non-voyants.
L’exemple 6-2 reprend le contenu de l’exemple 6-1 en ajoutant à l’élément <table> une
partie des attributs que nous venons de décrire. Nous y définissons une bordure de
8 pixels (repère ), un espacement entre les cellules de 5 pixels (repère ), un espace-
ment entre le contenu des cellules et leurs bordures de 20 pixels (repère ). La largeur
totale du tableau est égale à 70 % de celle de son conteneur (repère ). Ici, il s’agit de
l’élément parent <body>, le pourcentage est donc calculé par rapport à la largeur de la
fenêtre du navigateur, mais ce n’est pas nécessairement toujours le cas, si par exemple le
tableau est inclut dans une division dont la largeur est elle-même fixée à une valeur infé-
rieure à celle de la fenêtre. Enfin, l’attribut frame permet de n’afficher que les bordures
horizontales du tableau (repère ).
La figure 6-2 montre les notables différences d’aspect obtenues en utilisant ces attributs.
Figure 6-2
Les effets des attributs de l’élément <table>
totaux de chaque colonne dans les tableaux de données numériques. Pour créer ce pied de
tableau nous écrivons l’élément <tfoot>, contenant comme <thead> les éléments <tr> qui,
à leur tour, incluent des éléments <th>. Notons que la position de ces éléments dans le
code n’influe pas sur leur position dans le tableau, et qu’ils doivent être écrits à l’intérieur
de l’élément <table> avant la définition des lignes de données du tableau créées avec
l’élément <tbody>. De plus, ils ne doivent apparaître chacun qu’une seule fois dans le
tableau.
Entre l’en-tête et le pied de tableau se trouve le corps du tableau avec ses données. Il est
créé en utilisant l’élément <tbody> qui contient un élément <tr> par ligne, puis des élé-
ments <td> pour chaque cellule. Quand il est nécessaire de faire ressortir plusieurs grou-
pes de données dans le corps du tableau, il est envisageable d’insérer plusieurs éléments
<tbody> dans le même tableau. Cela permet d’appliquer un style différent pour chaque
groupe.
En supplément de l’ensemble des attributs communs, les éléments <thead>, <tfoot> et
<tbody> possèdent les attributs suivants qui permettent de définir la position du contenu
de leurs cellules :
• align ="left | center | right | justify | char" : il définit l’alignement horizontal du
contenu respectivement à gauche, au centre, à droite ou justifié dans la cellule. La
valeur char permet l’alignement sur un caractère donné qui doit être précisé dans
l’attribut char.
• valign ="top | middle | bottom | baseline" : il définit l’alignement vertical du contenu
respectivement sur le haut, le milieu ou le bas de la cellule. La valeur baseline crée
un alignement sur la ligne de base du texte (la ligne de support de pieds des lettres
minuscules).
• char ="un_caractère" : il indique le caractère sur lequel doit être réalisé l’alignement
des nombres décimaux si l’attribut align vaut char.
• charoff ="N px | N %" : il donne le décalage du caractère d’alignement défini dans char.
Les attributs char et charoff ne sont actuellement pas pris en compte par les navigateurs,
même les plus récents.
Nous pouvons définir l’alignement ligne par ligne ou même pour chaque cellule indivi-
duellement car les éléments <tr>, <td> et <th> possèdent les mêmes attributs align et
valign. La structure d’un tableau comprenant des en-têtes, pied de page et corps de
tableau est donc semblable à celle présentée dans l’exemple 6-3. Nous définissons dans
l’élément <table> les attributs frame et rules pour n’afficher que les bordures externes du
tableau et les lignes de séparation horizontales entre les différents groupes (repère ),
ainsi que l’espacement entre les cellules avec cellspacing et la largeur totale du tableau
avec width. Il contient un en-tête et un pied de tableau qui incluent les titres de colonnes
dans des éléments <th> (repères et ). Viennent ensuite deux éléments <tbody> (repè-
res et ) dont le rôle est de définir des groupes de lignes auxquelles il est alors possi-
ble d’appliquer des styles différents. Le premier groupe contient trois lignes (repères ,
et ) et le second deux lignes (repères
et ). Ces styles, que nous ne détaillerons
Le langage XHTML
142 PARTIE I
pas ici, sont définis dans l’élément <head> (repère ) et nous permettent de bien distinguer
les deux groupes comme nous pouvons le constater figure 6-3.
La figure 6-3 présente le résultat obtenu grâce à ce code. On notera la séparation nette des
groupes qui y est opérée à l’aide des couleurs et des bordures horizontales.
Figure 6-3
Un tableau avec en-tête, pied et deux groupes de données
L’élément <thead> permet de créer des titres de colonnes mais nous pouvons aussi envisa-
ger de structurer le tableau pour que les titres soient en tête de ligne et non plus de colonnes.
Pour cela, le premier élément inclut dans chaque ligne créée avec <tr> doit être <th> au
lieu de <td>. Les éléments <thead> et <tfoot> n’ont alors plus d’utilité. L’exemple 6-4
reprend les données de l’exemple précédent en les réorganisant en lignes. Le tableau ne
comprend plus que trois lignes (repères , et ) dont le premier élément inclut est un
titre de ligne incorporé dans <th> (repères , et ). La structuration des données est
donc maintenant verticale. Nous pourrions appliquer des styles différents pour la pre-
mière colonne, qui correspond aux éléments <th>, et les colonnes suivantes, qui corres-
pondent aux éléments <td>.
Figure 6-4
Un tableau avec des titres de lignes
Créer des tableaux
CHAPITRE 6
145
</td>
</tr>
<tr>
<td align="center" ><p><big>Texte centré</big><br />
➥ In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas </p>
</td>
<td> <p><big>Texte aligné à gauche</big><br />
➥ In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas </p>
</td>
</tr>
</tbody>
</table>
</body>
</html>
La figure 6-5 montre les alignements obtenus dans Mozilla pour le code de l’exemple 6-
5. L’alignement « justifié » n’est pas pris en compte par Explorer (pour compenser ce
manque, voir la propriété CSS text-align).
Figure 6-5
L’alignement du contenu des cellules
Créer des tableaux
CHAPITRE 6
147
Pour matérialiser les groupes, des styles différents sont définis pour chacun d’eux. La
figure 6-6 montre le résultat obtenu en tenant compte de ces styles. Les séparations entre
les différents groupes y apparaissent nettement
Figure 6-6
Les groupes de colonnes
le faire dans un tableur. On procède à cette fusion en utilisant les attributs colspan et
rowspan des éléments <td> et <th>.
Comme la création d’une mise en page de site, celle de tableaux irréguliers doit être pré-
cédée d’un travail sur le papier. Il faut tracer au préalable un quadrillage basé sur le plus
grand nombre de lignes et de colonnes virtuelles nécessaires dans le tableau final. Il faut
ensuite tracer les cellules qui vont être fusionnées pour obtenir l’aspect désiré. Il faudra
également vérifier que le comptage final des cellules des colonnes et des lignes est bien
constant, sachant que, dans ce décompte, la fusion de deux colonnes ou lignes compte
pour deux cellules, même si elles n’en forment plus qu’une visuellement.
Ce type d’organisation dans le travail préparatoire est nécessaire pour que l’écriture du
code soit facile à réaliser.
Fusion de colonnes
On procède à la fusion de cellules d’une même ligne en définissant la valeur de l’attribut
colspan d’un élément <td> ou <th> avec un entier, lequel indique le nombre de cellules à
fusionner en partant de la gauche. La syntaxe à suivre pour fusionner N cellules est la
suivante :
<td colspan="N"> Contenu de la cellule</td>
Si nous considérons le code de l’exemple 6-7 et le résultat obtenu à la figure 6-7, nous
constatons que le tableau a potentiellement cinq colonnes, comme le montre la ligne
deux créée avec cinq éléments <td> (repère ).
Dans la première ligne (repère ), les cellules des colonnes un et deux sont fusionnées
ainsi que celles des cellules quatre et cinq en écrivant colspan="2" (repères et ). Entre
les deux se trouve une cellule ordinaire (repère ). Il y a bien un total de cinq colonnes
virtuelles (2 + 1 + 2).
La deuxième ligne (repère ) qui ne réalise aucune fusion a cinq colonnes définies par
autant d’éléments <td> (repères à
), la première et la dernière s’alignant bien avec
celles de même position dans la ligne précédente.
Dans la troisième ligne (repère ), l’attribut colspan est utilisé dans le deuxième élément
<td> (repère ) et donc les cellules des colonnes 2, 3 et 4 sont fusionnées en une seule.
La première et la dernière cellules sont normales (repères et ). Il y a également un
total de cinq colonnes virtuelles dans cette ligne (1 + 3 + 1).
Figure 6-7
La fusion
des colonnes
Le langage XHTML
152 PARTIE I
Figure 6-8
Un tableau très irrégulier
Il faut que notre tableau ait virtuellement douze colonnes (soit le plus petit multiple
commun à 2, 3 et 4) pour pouvoir obtenir des divisions de ce type. L’exemple 6-8 per-
met de créer ce tableau. Dans la première ligne, nous définissons l’attribut colspan avec
la valeur 12 pour fusionner nos douze cellules virtuelles afin d’obtenir une cellule uni-
que (repère ). Dans la deuxième, cet attribut prend la valeur 6 pour obtenir deux
colonnes (repères et ). La troisième ligne opère la fusion des colonnes par quatre
en écrivant colspan="4" pour en obtenir trois visuellement (repères , et ), et la
dernière fusion est faite par groupe de trois colonnes avec le code colspan="3" pour en
obtenir quatre (repères
, , et
).
<title>Fusion de colonnes</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
<style type="text/css" title="">
td {background-color:lightblue;}
</style>
</head>
<body>
<table border="2" cellspacing="2" width="90%">
<!-- Ligne 1 -->
<tr align="center">
<td colspan="12"><big> Colonnes 1 à 12 fusionnées</td>
</tr>
<!-- Ligne 2 -->
<tr align="center">
<td colspan="6"><big> Colonnes 1 à 6 fusionnées</td>
<td colspan="6"><big> Colonnes 6 à 12 fusionnées</td>
</tr>
<!-- Ligne 3 -->
<tr align="center">
<td colspan="4"><big> Colonnes 1 à 4 fusionnées</td>
<td colspan="4"><big> Colonnes 4 à 8 fusionnées</td>
<td colspan="4"><big> Colonnes 8 à 12 fusionnées</td>
</tr>
<!-- Ligne 4 -->
<tr align="center">
<td colspan="3"><big> Colonnes 1 à 3 fusionnées </td>
Cet exemple montre l’importance de la préparation graphique qui doit être réalisée avant
le codage XHTML afin de créer des fusions opérationnelles de manière rigoureuse. En
observant bien la figure 6-8, nous pouvons remarquer que les colonnes de la même ligne
n’ont pas toujours la même largeur. Ce problème pourra être résolu en appliquant les
propriétés CSS de dimensionnement aux différentes cellules du tableau.
La fusion de lignes
La fusion de cellules situées dans les lignes adjacentes peut être définie à l’aide de l’attri-
but rowspan des éléments <td> et <th>. Il a pour valeur le nombre de cellules à fusionner.
La fusion doit être déclarée dans la cellule la plus haute. Sa syntaxe est donc la suivante :
<td rowspan="N"> Contenu de la cellule</td>
Le langage XHTML
154 PARTIE I
Ici encore, la phase de conception sur le papier doit permettre d’effectuer un décompte
des cellules virtuelles, sachant que nous devons en retrouver un nombre égal pour chaque
colonne. Comme nous l’avons déjà mentionné, la création des tableaux donne la priorité
aux lignes sur les colonnes et est faite ligne après ligne en incluant des éléments <tr>. La
fusion de lignes demande une plus grande attention que celle des colonnes. En effet, le
fait d’écrire par exemple rowspan="3" dans un élément <td>, implique que, dans les deux
éléments <tr> qui suivent, il doit y avoir une définition de cellule de moins par rapport au
nombre total de colonnes. Dans le même élément <td> ou <th>, il est possible d’inclure
simultanément les attributs colspan et rowspan pour réaliser la fusion de lignes et de
colonnes.
Pour créer par exemple le tableau représenté à la figure 6-9, il faut écrire le code de
l’exemple 6-9.
Figure 6-9
La fusion de cellules de lignes adjacentes
</head>
<body>
<table border="2" cellspacing="5" width="100%" cellpadding="10" >
<!-- Ligne 1 -->
<tr align="center">
<td rowspan="4"><big> Lignes 1 à 4 fusionnées</big></td>
<td><big>Ligne 1 Colonne 2</big></td>
<td><big>Ligne 1 Colonne 3</big></td>
<td><big>Ligne 1 Colonne 4</big></td>
</tr>
<!-- Ligne 2 -->
<tr align="center">
<td ><big>Ligne 2 Colonne 2</big></td>
Dans la première ligne du tableau (repère ), nous créons la fusion des quatre cellules de
la première colonne (repère ) puis nous créons les trois colonnes suivantes de cette
ligne (repères , et ). À ce stade, nous savons donc déjà que les éléments <tr> sui-
vants ne doivent plus contenir qu’un maximum de trois éléments <td>.
Dans la deuxième ligne (repère ), nous créons d’abord une cellule normale qui corres-
pond à la deuxième colonne (repère
), puis la suivante qui est la fusion des colonnes 3
et 4 avec le code colspan="2" et la fusion des lignes 2 et 3 avec le code rowspan="2" (repère ).
La cellule obtenue contient donc quatre cellules virtuelles. La troisième ligne (repère ) ne
contient donc plus qu’un seul élément <td> (repère
), les autres cellules de la même
ligne ayant été déclarées implicitement dans les éléments <tr> et <td> précédents. Quant
à la quatrième ligne (repère ), elle contient trois éléments <td> correspondant aux
colonnes 2, 3 et 4 (repères , et ).
Le langage XHTML
156 PARTIE I
Imbrication de tableaux
Chaque élément <td> ou <th> inclut dans une ligne peut lui-même contenir un élément
<table> comme nous l’avons mentionné au tableau 6-2. Cela permet d’inclure un nouveau
tableau dans une cellule d’un premier tableau, ce qui entraîne une imbrication de tableau.
Le tableau créé à l’exemple 6-10 illustre cette possibilité nous permettant d’afficher un
calendrier, représenté à la figure 6-10. Ce dernier comporte quatre cellules virtuelles
principales, réparties en deux groupes (repère ), celles de la première colonne étant
fusionnées pour n’en former qu’une contenant l’année dans un élément <th> (repère ).
La deuxième cellule de la première ligne contient le nom du mois dans un second élé-
ment <th> (repère ). La deuxième cellule de la deuxième ligne va contenir le calendrier
proprement dit. Celui-ci est créé dans un nouveau tableau, constitué de sept lignes et de
sept colonnes. Un second élément <table> est donc inclut dans la dernière cellule du pre-
mier tableau (repère ). La première ligne de ce tableau contient le nom des jours
(repère ), et les suivantes les dates (repères ,
, , ,
et ).
<th>Sam</th>
<th>Dim</th>
</tr>
<tr align="center">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td>1</td>
<td>2</td>
</tr>
<tr align="center">
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr align="center">
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
<td>15</td>
<td>16</td>
</tr>
<tr align="center">
<td>17</td>
<td>18</td>
<td>19</td>
<td>20</td>
<td>21</td>
<td>22</td>
<td>23</td>
</tr>
<tr align="center">
<td>24</td>
<td>25</td>
<td>26</td>
<td>27</td>
<td>28</td>
<td>29</td>
<td>30</td>
</tr>
<tr align="center">
Le langage XHTML
158 PARTIE I
<td>31</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>
Figure 6-10
Un calendrier créé
par inclusion de
tableaux
l’aide de l’attribut width peut permettre d’obtenir un tableau qui occupe par exemple
toute la largeur d’une page, quelle que soit la définition de l’écran du poste client. Afin de
rendre les pages plus attractives et que le visiteur ne perçoive pas la grille générée par
l’élément <table>, on utilise souvent comme astuce la définition de son attribut border à
la valeur 0, ce qui rend les bordures des cellules invisibles. De nombreux sites utilisent
encore ces principes. À titre d’expérience, rendez-vous sur le site [Link] et affi-
chez-en le code source (Affichage>Code source dans Mozilla par exemple), puis enregis-
trez-le et ouvrez ce fichier dans votre éditeur XHTML. Cherchez ensuite tous les élé-
ments <table> (Search>Find dans EditPlus par exemple) et remplacez la valeur 0 de
l’attribut border par la valeur 1 ou 2. Vous pourrez constater, outre la non-conformité du
code source à XHTML, l’usage abusif des tableaux dans cette page (pas moins de 43 élé-
ments <table> !) uniquement dans le but d’organiser la présentation de la page. Tentez
ensuite les mêmes opérations sur le site [Link], strictement conforme à la DTD
XHTML 1.0, et comparez le nombre d’éléments <table>. Vous n’en trouverez qu’un seul.
Il s’agit bien là de deux politiques radicalement différentes, reconnaissons-le. Chacun
choisira la sienne, mais je l’espère en connaissance de cause, après la lecture de ce livre,
où vous constaterez dans la deuxième partie qu’il est parfaitement possible de se passer
de la mise en page systématique à l’aide de tableaux. Les figures 6-11 et 6-12 montrent la
page d’accueil du site [Link], sans bordures de tableaux et avec une bordure de 1
pixel ensuite, ce qui met en évidence tous les tableaux inclus dans la page.
Figure 6-11
Le site [Link] sans bordures de tableaux
Le langage XHTML
160 PARTIE I
Figure 6-12
Le site [Link] avec des bordures de tableaux
Nous allons cependant présenter cette possibilité de travail en soulignant que l’utilisation
conjointe de divisions <div> et de propriétés CSS de positionnement et de dimensionne-
ment présente des solutions aux problèmes de mise en page.
La présentation choisie est simple et divise la page en quatre zones distinctes, à savoir
un bandeau contenant le titre général du site, une zone de menu située sur la gauche,
une zone principale affichant le contenu au centre et enfin une zone de liens utiles
située à droite. L’aspect final est présenté à la figure 6-13. Le tableau incluant tous ces
éléments est plutôt simple car il ne contient que six cellules virtuelles. Les éléments
<colgroup> et <col /> permettent de dimensionner les trois colonnes de largeurs respec-
tives de 15 % pour le menu, 70 % pour le contenu et 15 % pour les liens (repères , ,
et ). Ces largeurs sont données en pourcentage de celle du tableau qui occupe
toute la largeur de la fenêtre du navigateur car l’attribut width de l’élément <table> a la
valeur 100 %.
Les trois cellules de la première ligne (repère ) sont fusionnées pour n’en former
qu’une seule, contenant le titre du site dans un élément <h1> (repère ).
La deuxième ligne (repère
) contient les trois cellules principales (repères ,
et
). La cellule de gauche du menu (repère ) comporte une liste à puces des liens
vers les différentes pages du site (repère ), qui abordent les sujets préférés des web-
mestres.
Créer des tableaux
CHAPITRE 6
161
La cellule centrale (repère
) affiche un titre général (repère ), deux sous-titres suivis
chacun d’une division incluant le contenu rédactionnel de la page d’accueil (repères et
puis et ).
La cellule de droite (repère ) contient une liste de liens utiles.
La figure 6-13 donne le résultat obtenu pour cette mise en page. Dans un but pédago-
gique, nous n’avons envisagé qu’une mise en page simple ne comportant que quatre
zones, mais sur le même principe il est évidemment possible de créer davantage de cellules
et d’opérer des regroupements de colonnes plus complexes.
Nous pouvons dès à présent constater que l’aspect visuel de la page est des plus pauvres.
Le code de cette page est en effet purement XHTML et remplit bien la fonction qui lui est
assignée de structurer l’information. Les seules informations de redimensionnement sont
faites dans l’attribut width des éléments <table> et <col />. En respectant uniquement les
recommandations XHTML 1.1, il est impossible de faire mieux. En effet, aucun attribut
ne permet de définir une couleur pour le fond ou le texte, ni la taille des caractères, et
Créer des tableaux
CHAPITRE 6
163
Figure 6-13
Mise en page à l’aide d’un tableau
Exercices
Exercice 1 : Citez tous les éléments spécialisés utilisables pour la création des tableaux
et leur ordre d’apparition dans le code XHTML.
Exercice 2 : Peut-on inclure un tableau dans les éléments <body>, <form> ou <td> ?
Exercice 3 : Créez un tableau composé de quatre lignes et de cinq colonnes.
Exercice 4 : Créez un tableau de 600 pixels de large contenant cinq lignes et trois colonnes
avec des bordures de 4 pixels, un espacement entre cellules de 10 pixels. Seules les
bordures verticales doivent s’afficher.
Exercice 5 : Construisez un tableau statistique ayant un en-tête, un pied de page et deux
corps de données. N’affichez que les bordures horizontales des groupes de données.
Centrez le contenu des cellules de données et alignez à gauche les titres de l’en-tête et du
pied de page.
Exercice 6 : Créez un tableau composé de sept colonnes et de cinq lignes avec des
bordures verticales de groupes. Les colonnes sont organisées en groupe. Le premier
groupe a deux colonnes de 100 pixels chacune, le deuxième trois colonnes de 150 pixels
et le troisième deux colonnes de 50 pixels et une de 100 pixels.
Exercice 7 : Créez le tableau suivant en fusionnant les colonnes.
1 2 3 4
5 6 7
8 9 10
11 12 13 14
1 4 5
3
7
6 2
9 8
10
11 12
1 2 3
4 6 7 8
10 11 12
5
13
9 14
15 16
Créer des tableaux
CHAPITRE 6
165
1 2 3 4
5 7
6
8 9
10 11 12 13
1
3 4
2 6 7 5
8
1 2 3 4 5
6 7 8 9 10 11 12
13
14 15 16
17 18 19 20 21 22 23
Exercice 13 : À partir d’un tableau de deux lignes et de deux colonnes, fusionnez les
deux cellules inférieures. Insérez dans les deux cellules supérieures des tableaux de deux
lignes et cinq colonnes, puis dans la cellule inférieure un tableau de trois lignes et six
colonnes selon le modèle suivant.
1 2 3 4 5 A B C D E
6 7 8 9 10 F G H I J
a b c d e f
g h i j k l
m n o p q r
7
Créer des formulaires
S’inscrire dans une mailing-list, laisser son avis dans un livre d’or, saisir un mot-clé dans
un moteur de recherche ou passer une commande en ligne, toutes ces actions aujourd’hui
devenues très courantes pour nombre d’entre nous mais ne sont possibles que grâce à
l’existence des formulaires insérés dans une page web. Tout échange de données entre un
visiteur (le poste client) et l’ordinateur hébergeant le site (le serveur), opéré via le proto-
cole HTTP, se fait donc via les saisies effectuées dans un formulaire. L’utilisateur peut
entrer des textes ou des mots de passe, opérer des choix grâce à des boutons radio, de
cases à cocher ou des listes de sélection. Il peut également effectuer le transfert de ses
propres fichiers vers le serveur, par exemple sur les sites proposant le tirage de photogra-
phies numériques par correspondance. Les formulaires sont donc présents dans un très
grand nombre de sites. Nous allons aborder dans ce chapitre les éléments XHTML qui
permettent de créer la structure et les différents composants des formulaires. Nous
étudierons également quelques notions relatives à la récupération des données côté
serveur à l’aide de scripts PHP.
blockquote, body, dd, del, div, fieldset, ins, li, map, noscript, object, td, th
address, blockquote, del, div, dl, fieldset, h1, h2, h3, h4, h5, h6, hr, ins, noscript, ol, p, pre, script, table, ul
L’élément <fieldset> est très souvent inclus dans un formulaire. Il a pour vocation de
délimiter les groupes de composants actifs du formulaire. D’un point de vue graphique,
chaque groupe de composants est délimité par défaut, dans les navigateurs, par une bor-
dure mince dans laquelle il est possible d’intégrer un titre pour chaque groupe. Chaque
titre est le contenu d’un élément <legend> inclus dans <fieldset>. L’effet obtenu pour un
formulaire à deux groupes est présenté à la figure 7-1. Chaque groupe peut contenir des
titres, des blocs, des listes et des éléments de type en ligne parmi lesquels figurent ceux
qui créent les composants actifs propres aux formulaires. L’élément <fieldset> peut avoir
comme contenu une grande variété d’éléments dont la liste est donnée au tableau 7-3.
Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl, em, fieldset,
form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, legend, map, noscript, object, ol, p, pre, q, samp,
script, select, small, span, strong, sub, sup, table, textarea, tt, ul, var
Le code XHTML de la structure d’un formulaire est donc de la forme présentée dans
l’exemple 7-1.
<legend>Formulaire type</legend>
<!-- Composants du formulaire -->
</fieldset>
</form>
</body>
</html>
L’attribut action peut aussi avoir la valeur mailto: qui provoque l’envoi des données
(leur nom et leur valeur) à une adresse e-mail qu’il faut préciser à la suite du mot-clé
[Link] par exemple :
<form method="post" action="[Link]
Pour que la transmission vers une adresse e-mail ait lieu, il faut que l’attribut method
soit utilisé et qu’il ait la valeur post. La soumission du formulaire provoque le démar-
rage du logiciel de courrier sur le poste du visiteur, et celui-ci doit approuver l’envoi
comme celui d’un e-mail habituel. Cette méthode interdit tout traitement informatique
des données sur le serveur et nous ne l’utiliserons pas systématiquement ici. Elle peut
cependant avoir l’avantage de rendre possible la transmission instantanée d’informa-
tions à une personne et ce, quel que soit l’endroit où elle se trouve. Cela n’est pas à
négliger pour créer un contact rapide entre un client et un commercial itinérant par
exemple, s’il est doté d’un terminal portable pouvant recevoir des e-mails.
• method : il détermine la méthode d’envoi des données vers le serveur. Il peut prendre
les deux valeurs get ou post. La méthode get est celle qui est utilisée par défaut (si
nous ne définissons pas explicitement l’attribut method). Elle présente l’inconvénient
d’ajouter les données du formulaire sous la forme nom=valeur à la suite de l’URL défi-
nie dans l’attribut action. Si, par exemple, le formulaire contient deux champs de saisie,
le premier nommé prenom dans lequel est saisie la valeur jean et un second nommé nom
avec la saisie engels, l’URL affichée dans la barre d’adresse du navigateur sera la
suivante :
[Link]
Remarquons que les données sont précédées du point d’interrogation (?) et séparées
l’une de l’autre par le caractère esperluette (&). Les données transmises sont donc visi-
bles par l’utilisateur, mais peuvent aussi être plus facilement interceptées par des per-
sonnes mal intentionnées. De plus, la quantité de caractères de l’URL est limitée, ce
qui pose un problème pour l’envoi de commentaires longs par exemple. En revanche,
il est possible de contourner cet inconvénient en passant directement des données à un
script, en les ajoutant à une URL. Elles sont alors traitées par le fichier désigné dans
l’URL et peuvent déclencher l’affichage d’une page particulière créée dynamiquement
à partir de ces informations. En tapant par exemple l’adresse suivante :
[Link]
l’utilisateur se trouve sur une page, comme s’il avait effectué une recherche avec
le mot-clé php 5 et la rubrique INF dans la page d’accueil du site [Link].
La seconde valeur de l’attribut method est post. Elle ne présente pas l’inconvénient de
la méthode get car les données transmises sont invisibles dans l’URL, et leur longueur
n’est plus limitée. C’est donc celle que nous recommandons dans la plupart des cas.
• id : nous y revenons ici car il permet d’identifier le formulaire pour pouvoir accéder
à ses composants à partir d’un script JavaScript avec par exemple la méthode get-
ElementById(id) que nous avons déjà utilisée.
Créer des formulaires
CHAPITRE 7
171
Le fichier image, de type GIF, JPEG ou PNG, doit être référencé avec l’attribut src
comme il en va pour une image créée avec l’élément <img />. Le bouton a les dimensions
de l’image et celles-ci ne peuvent pas être modifiées avec les attributs de l’élément <input />.
Comme il s’agit avant tout d’une image, nous disposons de l’élément alt qui contient un
texte de substitution qui s’affiche à la place de l’image si elle n’est pas trouvée dans les
navigateurs uniquement textuels. Comme pour les images sensibles au clic et divisées en
zones, il est possible d’utiliser une carte définissant ces zones avec des éléments <map> et
<area />. Nous devons alors référencer cette carte à l’aide de l’attribut usemap qui contient la
valeur de l’attribut id de l’élément <map> précédé du caractère dièse (#). Les attributs id,
title, accesskey et tabindex sont également utilisés de la même façon que pour un bouton
de type submit. S’il est employé, l’attribut value ne fournit plus le texte visible, mais une
valeur récupérable par les scripts. Pour créer un bouton à partir d’une image, nous pouvons
écrire le code suivant :
<form>
<fieldset>
<input type="image" src="../images/[Link]" value="Envoi3" name="soumission3"
➥ id="soumission3" tabindex="6" accesskey="A" title="Bouton d’envoi image"
➥ onclick="submit()"/>
</fieldset>
</form>
L’utilisation de l’élément <button> est possible pour créer des boutons de réinitialisation
en définissant son attribut type grâce à la valeur reset. En incluant une image comme
pour les boutons d’envoi précédents, nous pouvons aussi créer des boutons graphiques.
Cependant, l’élément <input /> avec un attribut type ayant la valeur image ne peut pas être
utilisé pour créer un bouton de réinitialisation.
L’exemple 7-2 résume la création de ces différents types de boutons.
<img src= "../images/[Link] " height= "50" width= "50" alt= "France"/>
</button>
</h2>
</fieldset>
</form>
</body>
</html>
La figure 7-1 représente tous les types de boutons d’envoi, les boutons de réinitialisation
ayant le même aspect.
Figure 7-1
Les boutons textuels
et graphiques
l’ancestral langage Basic, dans lequel une entrée de l’utilisateur se fait par l’instruction
input, en XHTML un grand nombre de champs de saisie sont créés avec l’élément <input />.
C’est son attribut type qui détermine la catégorie de champ qui est obtenue. Pour un
champ de saisie de texte ne comprenant qu’une ligne, l’attribut type prend la valeur text.
Comme il est nécessaire de préciser à l’utilisateur le type d’information attendue, il faut
introduire le libellé de l’information dans un élément <label>. Ce dernier peut contenir à
son tour d’autres éléments qui peuvent permettre de structurer son contenu. Le tableau 7-4
présente la liste de ces éléments enfants.
Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd, label, map,
object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var
Pour avertir l’internaute qu’il doit saisir son nom, nous écrivons par exemple :
<form>
<label>Votre nom :</label><input type= "text" />
<form>
L’élément <input /> possède l’ensemble des attributs communs. Nous pouvons en amé-
liorer la gestion en utilisant ses attributs particuliers.
• name="texte" : il attribue un nom à la zone de saisie, ce qui permet de récupérer dans
une variable la valeur saisie sur le serveur. En utilisant PHP pour récupérer les données
saisies dans le formulaire, si l’attribut name à la valeur nom, le nom indiqué par l’inter-
naute est contenu dans la variable $_POST["nom"] si l’attribut method de l’élément <form>
a la valeur post ou dans la variable $_GET["nom"] s’il a la valeur get. En JavaScript, la
valeur saisie est accessible dans la variable [Link][1].[Link] si la page ne
contient qu’un seul formulaire (remplacez forms[1] par forms[2] pour le deuxième
formulaire éventuel, et ainsi de suite).
• size="N" : il permet de fixer la longueur visible de la zone de texte à N caractères, ce
qui n’empêche pas des saisies plus longues.
• maxlength="N" : il permet de limiter le texte saisi à N caractères. Au-delà de ce nombre,
les frappes effectuées au clavier sont inopérantes. Cet attribut peut permettre de mettre
en adéquation la longueur d’une donnée avec celle du champ d’une base de données
dans laquelle elle doit être enregistrée.
• value="texte": il définit un texte par défaut qui est affiché dans la zone de texte tant que
l’utilisateur n’en a pas saisi un autre. C’est cette valeur qui est transmise au serveur si
l’internaute ne modifie rien dans le champ texte. Comme dans l’exemple ci-après :
<input type="text" name="pays" maxlenght="25" value="France" />
Si rien n’est changé dans la zone, c’est la valeur France qui est envoyée au serveur.
Créer des formulaires
CHAPITRE 7
177
• disabled="disabled" : cet attribut, qui prend la valeur booléenne unique disabled, rend
la zone de saisie inactive, empêchant ainsi toute saisie.
• readonly="readonly" : permet d’utiliser une zone de saisie pour afficher une information.
Celle-ci ne peut donc pas être modifiée, mais est en lecture seule.
• onchange="Script" : ce gestionnaire d’événements permet de déclencher un script
JavaScript quand la valeur par défaut contenue dans l’attribut value est modifiée. Le
code est exécuté soit quand l’utilisateur passe à une autre zone de saisie, soit lors de
l’envoi. Nous avons par exemple le code suivant :
<input type="text" name="pays" value="Votre pays" maxlength="20"
➥ onchange="alert(‘Modification opérée’)" />
Comme pour les boutons d’envoi, il est possible d’utiliser les attributs accesskey, tabin-
dex, pour améliorer l’accessibilité, et onfocus ou onblur pour gérer l’attribution ou la perte
du focus à la zone de texte. L’exemple 7-3 crée plusieurs zones de saisie de texte (repères ,
,
et ). Elles sont toutes précédées d’un libellé contenu dans un élément <label>
(repères , , et ). Le formulaire se termine comme il se doit par un bouton
d’envoi (repère
). Le traitement des données, réalisé en PHP, est confié dans l’attribut
action au fichier externe nommé exemple [Link] dont le code est présenté plus bas. Il
permet simplement d’afficher dans une nouvelle page, l’ensemble des données saisies
après l’envoi du formulaire.
</head>
<body>
<form method="post" action="[Link]" >
<fieldset>
<legend>Vos données personnelles</legend>
<label>Nom : </label> <input type="text" name="nom" maxlength="25" />
➥ <br /><br />
<label>Prénom : </label> <input type="text" name="prenom" value="Votre prénom"
➥ maxlength="25" onclick="[Link]=‘‘" /><br /><br />
<label>Adresse : </label> <input type="text" name="adresse" value=
➥ "Votre adresse" maxlength="60" onfocus="[Link]=‘‘" /><br /><br />
La figure 7-2 montre l’aspect visuel du formulaire obtenu. Remarquons que sa présenta-
tion n’est pas du meilleur effet, en raison des longueurs variables des contenus des élé-
ments <label> qui entraînent le décalage horizontal des zones de texte. Mais une fois de
plus, il ne s’agit que de créer une structure, et c’est bien ce qui est réalisé, et notre travail
en XHTML est donc bien fait. Pour améliorer cet aspect visuel, nous pourrons utiliser un
tableau comme nous le verrons à la fin de ce chapitre ou encore appliquer des styles CSS
aux différents éléments (voir le chapitre 14).
Figure 7-2
Les zones de saisie
de texte uniligne
Créer des formulaires
CHAPITRE 7
179
Figure 7-3
Enregistrement
de mot de passe
par le navigateur
Le langage XHTML
180 PARTIE I
L’exemple 7-5 crée un formulaire contenant simplement un champ de texte pour saisir un
login (repère ) et un champ password (repère ) pour le mot de passe, chacun étant
précédé d’un label explicatif (repères et ).
Figure 7-4
Un formulaire
de saisie de mot
de passe
Créer des formulaires
CHAPITRE 7
181
Figure 7-5
Formulaire de saisie
de données
textuelles
Pour améliorer l’accessibilité, nous ne négligeons pas, pour notre part, les attributs title,
accesskey, et tabindex. Le code de création d’un groupe de boutons radio est le suivant :
<form action="[Link]" method="post">
<fieldset>
<label>Monsieur</label> <input type="radio" name="sexe" value="Monsieur"
➥checked="checked" />
<label>Madame</label> <input type="radio" name="sexe" value="Madame" />
</fieldset>
</form>
Pour les questions qui n’appellent qu’une réponse unique, comme dans l’exemple précé-
dent sur le sexe de la personne, les boutons radio sont les composants idéaux. En revan-
che, si vous réalisez un questionnaire sur les goûts musicaux de vos visiteurs, rien ne les
empêche d’aimer à la fois le rock, le classique et la chanson française ou d’autres encore
(si ! c’est possible). Les cases à cocher représentent alors la meilleure solution.
Elles se présentent graphiquement sous la forme de petits carrés dans lesquels apparaît
une coche en V si l’utilisateur du formulaire choisit la valeur associée à la case. Le fonc-
tionnement paraît identique aux boutons radio à la différence que les cases à cocher ne
font pas partie d’un groupe, et qu’il est possible d’opérer plusieurs choix dans des cases
différentes sans que le choix précédent se trouve décoché. Dans ce cas, il faut créer autant
de cases à cocher que de choix suggérés. Une case à cocher est encore créée à l’aide de
l’élément <input /> dont l’attribut type prend cette fois la valeur checkbox. Les attributs
name de chacune des cases se doivent alors de porter des noms différents. C’est encore
l’attribut value, dont la définition est ici indispensable, qui contient la valeur associée à
chaque case, qui sera récupérée côté serveur après l’envoi du formulaire, uniquement si
la case est cochée. L’élément utilisé étant vide, il faut l’associer à un élément <label>
pour préciser le choix demandé. Le nom de chaque élément étant différent, l’attribut
value associé à chacun d’entre eux peut avoir une valeur de type booléen de la forme
« oui » ou « non » car seules les valeurs des cases choisies sont transmises au serveur.
Les attributs checked, disabled, title, accesskey et tabindex qui ont le même rôle que les
boutons radio peuvent être utilisés dans les mêmes conditions. Les gestionnaires d’évé-
nements onfocus, onblur, onchange et onselect sont aussi utilisables de la même façon.
Le code de création d’une case à cocher peut donc être le suivant :
<label>Classique : </label>
<input type="checkbox" name="classique" tabindex="1" accesskey="G" value="oui" />
L’exemple 7-7 permet de mettre en œuvre ces composants pour obtenir des renseigne-
ments divers de la part d’un visiteur. Il contient un premier groupe de boutons radio per-
mettant de déterminer la civilité de la personne (repères , et ). Il est complété par
une zone de saisie de texte pour le nom de la personne (repère ). Le second groupe per-
met d’illustrer par une image chaque bouton radio dans un élément <label> (repères ,
et
). Un paragraphe contient ensuite un ensemble de cinq cases à cocher pour offrir
un choix de goûts musicaux (repères , ,
, et ). Chaque case a un nom différent
et la valeur oui qui lui est associée ne sera récupérée côté serveur que si le visiteur la
Créer des formulaires
CHAPITRE 7
185
coche. Le formulaire est complété par les boutons d’envoi et de réinitialisation (repères
et ).
Figure 7-6
Les boutons radio et
les cases à cocher
l’option se doit d’être plus courte ou même codée, par exemple fr pour le même type de
site. Cette valeur contenue dans l’attribut value est invisible pour l’utilisateur et c’est elle
qui sera récupérée par le serveur. En plus de l’ensemble des attributs communs, l’élément
<option> possède l’attribut selected qui prend la valeur booléenne unique selected et avec
lequel on peut définir une valeur par défaut qui peut être autre que celle de la première
option de la liste. L’attribut disabled="disabled" permet comme pour les autres éléments
des formulaires de rendre une option inactive, et donc non sélectionnable. L’utilisation de
cet attribut ne présente d’intérêt que pour désactiver une option en réaction à une action
du visiteur à l’aide d’un script JavaScript. On pourrait l’utiliser par exemple dans un
questionnaire de jeu pour lequel l’internaute n’a droit qu’à un seul essai. S’il clique sur
une option, son choix est entériné par la définition de l’attribut disabled. Nous aurions
dans ce cas le code suivant :
onclick="[Link]=‘disabled’"
Dans l’exemple 7-8, nous créons un formulaire contenant plusieurs listes de sélection
d’options. La première liste (repère ) ne permet qu’un seul choix parmi quatre valeurs
(repères , , et ), la première option n’étant créée qu’à titre informatif (repère ).
La liste est affichée initialement sur une seule ligne (car l’attribut size vaut 1) (repère ).
La seconde liste (repère
) permet plusieurs choix simultanés (l’attribut multiple est
défini) parmi quatre options (repères , ,
et ). La première option est choisie par
défaut en définissant l’attribut selected (repère ). Le formulaire est bien sûr complété par
un bouton d’envoi (repère ) et un bouton de réinitialisation (repère ). Le script PHP
contenu dans l’exemple 7-4 permet d’afficher les choix effectués dans une nouvelle page.
Figure 7-7
Les listes de
sélections
Le langage XHTML
190 PARTIE I
Plutôt que de définir les éléments <option> les uns à la suite des autres, ce qui donne un
aspect uniforme à la liste une fois déroulée, il est possible de créer des groupes d’options
et de leur attribuer un titre qui fait ressortir les groupements effectués pour structurer la
liste, en particulier quand elle contient un grand nombre d’éléments. Pour réaliser ces
groupes, il faut faire intervenir l’élément <optgroup> dans l’élément <select>. Les options
de chaque groupe sont incluses entre les balises <optgroup> et </optgroup>. À l’intérieur
d’un élément <select>, on peut inclure autant de groupes que l’on veut. Le libellé de cha-
que groupe est donné dans l’attribut label de l’élément <optgroup> qui, outre les attributs
communs habituels, possède également l’attribut disabled, déjà rencontré pour les autres
composants et qui rend le groupe inactif. Le code de création d’un groupe a donc la structure
suivante :
<select name="pays" size="1" tabindex="2">
<optgroup label="Europe">
<option value="France" > France</option>
<option value="Belgique" > Belgique</option>
</optgroup>
</select>
La figure 7-8 présente le résultat obtenu après avoir déroulé la liste. Les différents groupes
y sont bien visibles.
Figure 7-8
Les groupes
d’options
</fieldset>
</form>
</body>
</html>
nom=engels&navigateur=Netscape&systeme=Win32
Le transfert de fichiers
Un site interactif peut permettre à ses visiteurs d’effectuer le transfert de divers fichiers
du poste client vers le serveur. On trouve cette possibilité par exemple dans un site de
petites annonces ou d’enchères en ligne. Le client peut ainsi transférer la photographie
de l’objet qu’il met en vente. Cette fonctionnalité est incluse dans un formulaire à l’aide
Le langage XHTML
194 PARTIE I
de l’élément <input /> doté d’un attribut type qui prend cette fois la valeur file. Il crée
dans le formulaire un champ composé d’une zone de texte pour taper le chemin d’accès
au fichier et d’un bouton de sélection de fichier dont l’intitulé fixe est Sélectionner, qui
permet au visiteur de rechercher le fichier à transférer sur son ordinateur. L’aspect type
du champ est présenté à la figure 7-9. Quand le visiteur a choisi son fichier, le chemin
d’accès complet à ce dernier est automatiquement affiché dans la zone de texte du com-
posant. Pour effectuer le transfert de fichier, l’élément <form> doit utiliser la méthode post
et avoir un attribut enctype dont la valeur est explicitement définie de la façon suivante :
<form action="[Link]" method="post" enctype="multipart/form-data">
Ce type de composant possède l’ensemble des attributs communs. Il faut y ajouter
obligatoirement l’attribut name permettant d’identifier la variable qui contiendra le
nom du fichier côté serveur. L’attribut size ="N" permet de limiter la taille visible de la
zone de saisie. Pour se prémunir du transfert de fichiers indésirables et assurer un cer-
tain degré de sécurité sur le serveur, nous pouvons limiter le transfert à un certain
nombre de types de fichiers en définissant l’attribut accept. Il doit contenir la liste des
types MIME des fichiers dont le transfert est permis. Pour autoriser plusieurs types, il
faut séparer chacun d’entre eux par une virgule. En attribuant à cet attribut une valeur
de la forme suivante :
<input type="file" name="fichier" accept="image/*" />
le serveur accepte le transfert de tous les types d’images.
Pour limiter la taille des fichiers à transférer, nous pouvons saisir celle-ci dans un champ
caché dont la valeur est égale au nombre d’octets maximal admis. Le nom de ce champ défini
dans son attribut name doit être MAX_FILE_SIZE si la réception des fichiers est gérée en
PHP sur le serveur.
Figure 7-9
Le formulaire de
transfert de fichier
images (repère ). Un champ caché transmet au serveur PHP la taille maximale des
fichiers dans la variable nommée MAX_FILE_SIZE (repère ). L’étude de la gestion du
transfert côté serveur n’entre pas dans le cadre de cet ouvrage et je vous invite à vous
reporter à un ouvrage spécialisé en fonction du langage installé sur votre serveur (PHP,
[Link] ou autres) pour récupérer les fichiers transmis. À titre indicatif, en PHP, les
informations concernant le fichier transféré sont contenues dans la variable de type
tableau nommée $_FILES. Notons enfin que le transfert simultané de plusieurs fichiers est
parfaitement réalisable en incluant autant d’éléments <input /> munis de l’attribut
type="file" qu’il y a de fichiers.
Un formulaire complet
À titre d’illustration, l’exemple 7-12 récapitule tout ce que nous venons d’étudier. Le
document inclut tous les éléments de formulaires possibles. La gestion des données
est confiée à un script externe PHP dont le code très simplifié figure dans l’exemple 7-13. Le
formulaire contenant un champ de transfert de fichier, son attribut enctype prend la
valeur multipart/form-data (repère ). Il est divisé en trois groupes délimités par des
éléments <fieldset> (repères , et ). Le premier groupe permet d’obtenir les
coordonnées du visiteur. Il contient trois zones de texte pour la saisie du nom, du
prénom et de l’e-mail (repères , et ) et une zone de mot de passe (repères ).
Le langage XHTML
196 PARTIE I
Ces champs sont suivis d’un groupe de boutons radio pour indiquer le sexe de la per-
sonne (repères
et ). Enfin, ce groupe se termine par une liste de sélection (repère )
qui contient trois groupes d’options (repères
, et ) pour le choix du pays. Le
deuxième groupe (repère ) permet de saisir des informations sur les goûts du visi-
teur. Il comprend trois cases à cocher (repères , et ) et une zone de texte multi-
lignes (repère ) de 50 caractères de large et de 5 lignes de haut. Le troisième groupe
(repère ) contient un composant d’envoi de fichier (repère ) et un champ caché
indiquant la taille maximale des fichiers fixée à 10 Ko (repère ). Le formulaire se
termine bien évidemment par l’insertion des boutons d’envoi et de réinitialisation
(repères 21 et
22 ).
<optgroup label="Amérique">
<option value="USA" label="fr" > USA </option>
<option value="Canada" > Canada</option>
<option value="Argentine" > Argentine</option>
</optgroup>
<optgroup label="Autres">
<option value="Europe" > Europe </option>
<option value="Asie" > Asie </option>
<option value="Amériques" > Amériques </option>
<option value="Océanie" > Océanie</option>
</optgroup>
</select>
<br />
</fieldset>
<!-- Deuxième groupe de composants-->
<fieldset>
<legend><b>Vos goûts</b></legend>
<input type="checkbox" name="pomme" value="pomme" /> Pommes<br />
<input type="checkbox" name="poire" value="poire" /> Poires<br />
<input type="checkbox" name="scoubidou" value="scoubidou" /> Scoubidous<br />
<textarea name="gouts" cols="50" rows="5" onclick="[Link]=‘‘">
Décrivez vos goûts en détail
</textarea>
<br />
</fieldset>
<!-- Troisième groupe de composants-->
<fieldset>
<legend><b>Envoyez nous votre photo</b></legend>
<input type="file" name="fichier" accept="image/jpeg" />
<input type="hidden" name="MAX_FILE_SIZE" value="10000" />
<br /><br />
<input type="reset" value="Effacer" />
21
<input type="submit" value="Envoyer" />
22
<br />
</fieldset>
</form>
</body>
</html>
Figure 7-10
Un formulaire
contenant tous
les composants
</tr>
<tr>
<td><label>Mail : </label></td>
<td><input type="text" name="mail" size="40" maxlength="256"
➥ value="votre mail" /></td>
</tr>
<tr>
<td><label>Code : </label></td>
<td> <input type="password" name="code" size="40" maxlength="6" /></td>
</tr>
<tr>
<td><label>Homme : </label></td>
<td><input type="radio" name="sexe" value="homme" /></td>
</tr>
<tr>
<td>Femme : </td>
<td><input type="radio" name="sexe" value="femme" /></td>
</tr>
<tr>
<td>Votre pays : </td>
<td>
<select name="pays" size="1" tabindex="2" onfocus="[Link]=‘red’"
➥ onchange="alert(‘Merci de votre choix’)"
➥ onblur="[Link]=‘black’">
<option value="null" > Votre pays</option>
<optgroup label="Europe">
<option value="France" > France</option>
<option value="Belgique" > Belgique</option>
<option value="Italie" > Italie</option>
<option value="Allemagne" > Allemagne</option>
</optgroup>
<optgroup label="Amérique">
<option value="USA" label="fr" > USA </option>
<option value="Canada" > Canada</option>
<option value="Argentine" > Argentine</option>
</optgroup>
<optgroup label="Autres">
<option value="Europe" > Europe </option>
<option value="Asie" > Asie </option>
<option value="Amériques" > Amériques </option>
<option value="Océanie" > Océanie</option>
</optgroup>
</select>
</td>
</tr>
</table>
</fieldset>
<!-- Deuxième groupe de composants-->
Créer des formulaires
CHAPITRE 7
201
<fieldset>
<legend><b>Vos goûts</b></legend>
<table border="0" width="100%" >
<colgroup width="10%" align="right"></colgroup>
<colgroup width="70%"></colgroup>
<tr>
<td><label>Pommes : </label> </td>
<td><input type="checkbox" name="pomme" value="pomme" /> </td>
</tr>
<tr>
<td><label>Poires : </label> </td>
<td><input type="checkbox" name="poire" value="poire" /></td>
</tr>
<tr>
<td><label>Scoubidous : </label></td>
<td><input type="checkbox" name="scoubidou" value="scoubidou" /></td>
</tr>
<tr>
<td><label>Décrivez nous vos goûts en détail : </label></td>
<td>
<textarea name="gouts" cols="50" rows="5" onclick="[Link]=‘‘">
Exprimez vous ici...
</textarea>
</td>
</tr>
</table>
</fieldset>
<!-- Troisième groupe de composants-->
<fieldset>
<legend><b>Envoyez-nous votre photo</b></legend>
<table border="0" width="100%" align="right">
<colgroup width="10%" align="right"></colgroup>
<colgroup width="70%"></colgroup>
<tr>
<td><label>Choisir le fichier : </label></td>
<td><input type="file" name="fichier" accept="image/jpeg" />
➥ <input type="hidden" name="MAX_FILE_SIZE" value="10000" /></td>
</tr>
<tr>
<td> <input type="submit" value=" Envoyer " /></td>
<td><input type="reset" value="Effacer toutes les données" /></td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
Le langage XHTML
202 PARTIE I
L’aspect obtenu, visible à la figure 7-11, est bien plus présentable que le précédent. Nous
reprendrons le même formulaire au chapitre 14 en lui appliquant des styles CSS pour
montrer les améliorations qu’il est possible de réaliser au niveau de la présentation.
Même si l’utilisation de tableau n’a ici pour but que d’améliorer la présentation, elle ne
constitue pas une entorse au principe de séparation du contenu et de l’aspect car le for-
mulaire a toujours une structure logique. L’usage des tableaux n’est dans ce cas nul-
lement abusif et ne nuit pas à la structuration de la page, bien au contraire. Il permet de
faire d’une pierre deux coups. Nous verrons dans la deuxième partie de cet ouvrage qu’il
est possible de se passer des tableaux dans ce cas, en créant des styles pour les éléments
<label> et les différents composants du formulaire <input /> ou <textarea>, mais cela
nécessitera un codage supplémentaire. Selon certains avis, la solution la plus pragmati-
que consiste à associer les formulaires inclus dans des tableaux avec des styles CSS pour
en améliorer encore l’aspect.
Figure 7-11
Inclusion des composants de formulaire dans un tableau
Créer des formulaires
CHAPITRE 7
203
Exercices
Exercice 1 : L’attribut action de l’élément <form> est-il obligatoire ? Quel est son rôle ?
Exercice 2 : Quelles sont les différentes applications qui correspondent aux valeurs de
l’attribut enctype dans l’élément <form> ?
Exercice 3 : Créez un bouton d’envoi avec une image.
Exercice 4 : Avec quels éléments peut-on créer des champs de saisie de texte ?
Exercice 5 : Quelles sont les différences entre les méthodes post et get ?
Exercice 6 : Créez un formulaire permettant la saisie, dans un seul groupe, d’un nom
avec un maximum de 25 caractères, d’un mot de passe de huit caractères et d’un e-mail
de 40 caractères. Ajoutez des boutons d’envoi et de réinitialisation.
Exercice 7 : Créez un formulaire de saisie de texte de 15 lignes et une largeur de
60 caractères. Ajoutez des boutons d’envoi et de réinitialisation.
Exercice 8 : Créez deux groupes de boutons radio. Le premier pour le choix de la natio-
nalité avec les choix Français, Communauté européenne et Autres, et le second pour
saisir le diplôme obtenu le plus élevé avec les choix Licence, Master et Doctorat. Saisir
également le nom et l’e-mail. Ajoutez des boutons d’envoi et de réinitialisation.
Exercice 9 : Créez un formulaire comprenant un seul groupe de champs ayant pour titre
Adresse client, et qui contient cinq zones de saisie de texte dont les libellés sont nom,
prénom, adresse, ville et code postal. Ajoutez un bouton d’envoi.
Exercice 10 : Créez un questionnaire de qualification pour recruter un webmestre,
comprenant les cases à cocher avec les libellés suivants : XHTML, CSS, PHP, JavaScript
et MySQL. Saisissez le nom et le téléphone.
Exercice 11 : Dans une optique similaire à celle de l’exercice 10, proposez les mêmes
choix avec une liste de sélection à choix multiples.
Exercice 12 : Créez une liste de sélection à choix unique permettant de saisir le départe-
ment du domicile. Les départements sont regroupés par régions (ne créez que trois
régions). Les noms des régions doivent apparaître dans la liste.
Exercice 13 : Créez un formulaire de transfert de fichiers destinés à l’envoi de document
compressés aux formats ZIP ou TAR vers le serveur.
Exercice 14 : Créez un formulaire complet dont le but est de permettre la saisie de tous
les éléments constitutifs d’un CV pour le recrutement d’un informaticien web (nom,
prénom, adresse…) en utilisant le maximum de composants de formulaire appropriés en
fonction des besoins. Créez obligatoirement plusieurs groupes de composants. Utilisez
l’exemple 7-4 pour vérifier la bonne réception des données par le serveur.
8
Créer des cadres
L’utilisation des cadres pour la création de pages web est, disons-le d’emblée, une tech-
nique considérée comme obsolète depuis déjà plusieurs années. Le W3C a cependant
maintenu cette possibilité dans ses recommandations jusqu’à la version XHTML 1.0 et
l’a définitivement supprimée dans la DTD XHTML 1.1. Pour ne pas être plus royaliste
que le roi W3C qui admet encore cette possibilité, j’ai cependant tenu à évoquer ce sujet
pour ceux qui seraient encore des inconditionnels de cette méthode utilisée en HTML,
même après avoir envisagé quels sont les moyens de se passer (en grande partie) de ce
mode d’organisation, comme nous le ferons en utilisant des styles CSS associés à un
document XHTML 1.1 au chapitre 13. Mais qu’est-ce, au juste, qu’une page avec des
cadres ? Les cadres constituent un type d’organisation bien particulier car, comme leur
nom l’indique, ils ne font que définir un découpage de la page en zones précises, alors
que le document XHTML qui les crée ne possède aucun contenu visible dans le naviga-
teur si ce n’est un éventuel avertissement pour les visiteurs dont le navigateur est confi-
guré pour refuser les cadres. À chaque cadre est associé un document XHMTL habituel
dont le contenu s’affiche dans le cadre en question et lui seul, indépendamment du
contenu du cadre qui lui est adjacent. Cela peut présenter un avantage pour actualiser une
partie donnée de la page sans avoir à réactualiser l’ensemble. Si nous imaginons une page
divisée et composée de trois cadres, ce n’est pas un document XHTML que nous allons
afficher mais trois documents distincts créés séparément dans trois fichiers différents. La
caractéristique des pages avec cadres est l’indépendance, a priori totale, de chaque cadre
vis-à-vis des autres. C’est un peu comme si la page était occupée par plusieurs fenêtres
du même navigateur. Nous avons cependant la possibilité de créer des interactions entre
chacun d’eux à l’aide de scripts JavaScript et c’est sûrement cette faculté qui a séduit plus
d’un webmestre. La figure 8-1 est une capture d’écran du site [Link]
[Link] qui utilise des cadres. Il s’agit d’une application très classique des pages avec
cadres car le cadre de gauche contient le menu du site et permet la navigation parmi
Le langage XHTML
206 PARTIE I
toutes les pages du site. Les pages cibles des liens du menu sont affichées dans le cadre de
droite sans jamais cacher le cadre de navigation. On peut remarquer d’emblée que chaque
cadre possède sa propre barre de défilement vertical indépendante. Quoique séduisants
pour l’organisation d’une page, les cadres ne sont pas sans inconvénients. Le fait que le
contenu qu’ils affichent provienne d’autres documents XHTML indépendants pose des
problèmes d’indexation aux moteurs de recherche qui référencent séparément la page
créant les cadres et celles qu’elle contient. Un internaute qui effectue une recherche peut
très bien obtenir comme résultat une des pages du site sans obtenir la page initiale qui
contient les cadres. Il ne possède plus alors le système de navigation inclus dans un autre
document, ce qui peut rendre le site incompréhensible. Le référencement d’un site étant
essentiel pour la notoriété d’un site, il s’agit là d’un inconvénient majeur.
Nous allons voir successivement quelle doit être la structure des pages divisées en cadres,
puis la manière de créer ces divisions, qu’elles soient horizontales, verticales ou encore
plus complexes en mariant ces deux possibilités. Enfin, nous envisagerons la manière de
faire communiquer les cadres entre eux.
Figure 8-1
Un exemple de site avec cadres
L’élément <frame /> est un élément vide et, comme l’élément <img />, il définit principa-
lement un document cible à afficher dans le cadre qu’il crée. Ce sont donc ces attributs
qui jouent un rôle prépondérant. En plus des attributs class, id et title habituels, il possède
les attributs suivants :
• name : il permet, comme id, d’attribuer un nom au cadre, ce qui est indispensable pour
gérer les pages et choisir dans quel cadre va s’afficher la cible d’un lien par exemple.
Le nom ne doit pas commencer par le caractère de soulignement mais par une lettre.
• longdesc : cet attribut facilite l’accessibilité des sites en donnant l’URL de la description
détaillée du contenu d’un cadre.
• src : il est essentiel car il définit l’URL du document XHTML qui va s’afficher dans le
cadre.
• frameborder : il définit si le cadre a une bordure (valeur 1) ou s’il n’en a pas (valeur 0).
Quand elle est bien gérée par les navigateurs, l’utilisation de la valeur 0 permet de
supprimer le désagréable effet visuel de délimitation des cadres.
• marginwidth : il définit la largeur de la marge entre le bord gauche du cadre et son contenu.
Sa valeur est donnée en pixel ou en pourcentage de la largeur totale du cadre.
• marginheight : il définit la hauteur de la marge entre le bord supérieur du cadre et son
contenu. Comme le précédent, il est défini en pixel ou en pourcentage de la hauteur
totale du cadre. La hauteur du cadre dépendant de son contenu, il peut être hasardeux
de définir une hauteur de marge en pourcentage.
• noresize : il prend la valeur booléenne unique noresize pour interdire au visiteur de
redimensionner le cadre. Cela permet de préserver les proportions choisies par le créateur
du site. Pour autoriser le redimensionnement, il suffit d’omettre cet attribut.
• scrolling : les cadres étant plus petits que la fenêtre du navigateur, les documents
qu’ils affichent sont généralement plus grands. Dans ce cas, des barres de défilements
horizontal et vertical peuvent apparaître sur les bords droit et bas du cadre. Pour gérer
explicitement l’apparition de ces barres de défilement, l’attribut scrolling peut pren-
dre les valeurs yes (barres toujours présentes), no (jamais de barres quel que soit le
contenu du cadre) ou auto (apparition des barres si nécessaire, la gestion étant effec-
tuée par le navigateur en fonction du contenu). Pour utiliser la valeur no, il faut être sûr
que le contenu soit entièrement intégrable dans le cadre, sinon une partie seulement
est visible.
Pour les navigateurs qui ne supporteraient pas les cadres, il est possible d’afficher un contenu
de remplacement en l’incluant dans l’élément <noframes>. Il doit être inclus dans l’élé-
ment <frameset> et doit contenir à son tour un élément <body> qui inclut les éléments
XHTML créant la page de remplacement. Ce contenu peut être du même type que celui
d’une page normale mais il ne s’affichera qu’en cas d’impossibilité de gestion des cadres.
Nous allons maintenant envisager la réalisation de différents types de pages avec cadres.
Créer des cadres
CHAPITRE 8
209
À cette hauteur du cadre central, il faut enlever l’espace variable occupé éventuellement
par les barres de menus et d’icônes des navigateurs. Comme c’est souvent le cas, la défi-
nition des hauteurs en pourcentage préserve les proportions dessinées par le créateur de
la page. Nous pouvons par exemple définir des dimensions relatives suivantes :
<frameset rows="15%,75%,10%">
<frame src="[Link] />
<frame src=" [Link] />
<frame src=" [Link] />
<noframes>
<body> <a id="lien" href="[Link] tabindex="1"
➥ accesskey="A" title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
Dans ce cas, le partage de la hauteur disponible de l’écran se fait toujours selon la propor-
tion 15 % en haut, 75 % au centre et 10 % en bas, quel que soit l’écran de visualisation de
la page.
Il est aussi possible de mélanger ces deux dernières définitions en utilisant une taille
absolue en pixel pour le cadre supérieur qui affiche par exemple un bandeau publicitaire
de hauteur fixe, et une ou plusieurs tailles relatives en pourcentage pour les autres cadres.
Si nous définissons par exemple le code suivant :
<frameset rows = "120, 75%, *">
<frame src="[Link] />
<frame src=" [Link] />
<frame src=" [Link] />
<noframes>
<body>
<p>Votre navigateur ne supporte pas les cadres!<br /> Voir la <a id="lien"
➥ href="[Link] tabindex="1" accesskey="A"
➥ title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
Le cadre du haut a toujours 100 pixels de haut, le second 75 % de la hauteur totale de
la fenêtre disponible, et le cadre du bas dispose du reste. Une dernière possibilité
consiste à définir des dimensions relatives à l’aide de coefficients numériques entiers
qui créent un partage proportionnel de la hauteur disponible. En écrivant les définitions
suivantes :
<frameset rows = "2,5,1">
<frame src="[Link] />
Créer des cadres
CHAPITRE 8
211
le cadre supérieur occupera 2/(2 + 5 + 1) soit 2/8 de la hauteur disponible, le suivant 5/8
et le dernier 1/8. Il suffit de changer un seul des coefficients pour que le partage soit
différent.
L’exemple 8-1 crée une page divisée en deux cadres horizontaux dont les hauteurs res-
pectives sont définies à 200 et 600 pixels (repère ). Le contenu du premier cadre est
ensuite déterminé grâce à l’attribut src du premier élément <frame /> (repère ), et nous
définissons de la même façon le contenu du second cadre (repère ). L’élément <nofra-
mes> fournit un contenu alternatif en proposant une version sans cadres (repère ). La
figure 8-2 montre le résultat obtenu, le premier cadre contenant la page d’accueil du site
[Link] et le second celle du site [Link]. Les valeurs utilisées pour les
attributs src sont ici celles de sites existants pour simplifier la démonstration, mais dans
la pratique des pages avec cadres, il s’agit des URL de pages XHTML standards qui
exposent le contenu du site. Ces pages peuvent donc être écrites à l’aide de la DTD
XHTML 1.1.
<p>Votre navigateur ne supporte pas les cadres!<br /> Voir la <a id="lien"
➥ href="[Link] tabindex="1" accesskey="A"
➥ title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
</html>
Figure 8-2
Une page avec deux cadres horizontaux
<body>
<p>Votre navigateur ne supporte pas les cadres!<br /> Voir la <a id="lien"
➥ href="[Link] tabindex="1" accesskey="A"
➥ title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
Dans ce cas, nous divisons la page en trois cadres verticaux, le plus à gauche ayant
250 pixels de large, le deuxième 600 pixels et le troisième 100 pixels. Les éléments
<frame /> définissent comme dans la section précédente le contenu du cadre au moyen de
leur attribut src.
L’usage des pourcentages pour définir la part de chaque cadre donnerait le code suivant :
<frameset cols = "25%, 60%, 15%">
<frame src="[Link] />
<frame src=" [Link] />
<frame src=" [Link] />
<noframes>
<body>
<p>Votre navigateur ne supporte pas les cadres!<br /> Voir la <a id="lien"
➥ href="[Link] tabindex="1" accesskey="A"
➥ title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
Ce code permet d’obtenir des cadres qui gardent les mêmes proportions dans le naviga-
teur quelle que soit la définition de l’écran du visiteur. Comme pour les cadres horizontaux,
il est possible de mélanger les dimensions en pixel et en pourcentage dans le même
élément <frameset>, par exemple :
<frameset cols = "200,*, 10%">
Dans ce cas, le cadre de gauche mesure 200 pixels de large, celui de droite 10 % de la
largeur de la fenêtre et le cadre central occupe la largeur restante.
La dernière possibilité de définition des dimensions des cadres avec des proportions per-
met d’atteindre le même but. La définition suivante crée un partage proportionnel selon
les coefficients 2, 5 et 1, soit 2/8 pour le premier cadre vertical, 5/8 pour le deuxième et
1/8 pour le dernier.
<frameset cols = "2,5,8">
<frame src="[Link] />
<frame src=" [Link] />
Le langage XHTML
214 PARTIE I
La figure 8-3 montre le résultat obtenu. Comme dans l’exemple précédent, notons que
dans un site réel le contenu de chacun des cadres est constitué du contenu du site et non
de sites externes.
Figure 8-3
Partage de la page en cadres verticaux
Figure 8-4
Une page avec des
cadres imbriqués
horizontaux puis
verticaux
• Définir le contenu du cadre supérieur avec un premier élément <frame> et son attribut
src (exemple 8-3, repère ).
• Partager le cadre du milieu en trois cadres verticaux à l’aide d’un nouvel élément
<frameset> selon le code suivant (exemple 8-3, repère ) :
<frameset cols="16%,*,18%">
• Donner un contenu à ces trois cadres en créant trois éléments <frame /> et en définissant
leur attribut src (exemple 8-3, repères , et ).
• Refermer le second élément <frameset> avec la balise </frameset> (exemple 8-3,
repère
).
• Définir le contenu du cadre du bas avec un dernier élément <frame> et son attribut src
(exemple 8-3, repère ).
• Définir éventuellement un élément <noframes> pour créer un contenu de remplacement
aux cadres (exemple 8-3, repère ).
Créer des cadres
CHAPITRE 8
217
Comme l’indiquent les images de validation du W3C présentes dans les documents
[Link], [Link] et [Link], visibles à la figure 8-4, ceux-ci sont tous validés
avec la DTD XHTML 1.1, ce qui confirme l’indépendance entre la page qui crée les
cadres en utilisant la DTD XHTML 1.0 Frameset et les documents qui s’affichent dans
ces derniers.
Nous pouvons également créer une page avec des cadres imbriqués d’un type différent
tels que ceux qui sont représentés à la figure 8-5. En apparence, cette division ressemble
beaucoup à celle de la figure 8-4, mais nous allons voir que sa réalisation est beaucoup
plus complexe.
La phase préparatoire fait tout d’abord apparaître une division en deux cadres verticaux
de 16 % et 84 % de largeur, puis la division du second cadre vertical en deux cadres
horizontaux, le premier de 80 pixels de haut et le second occupant la hauteur restante.
Le langage XHTML
218 PARTIE I
Figure 8-5
Cadres imbriqués verticaux puis horizontaux
Ce dernier cadre est ensuite lui-même partagé en deux cadres de 150 pixels de largeur à
droite et le reste au centre. Pour obtenir ce résultat, l’ordre d’apparition du code XHTML
doit donc être le suivant :
• Partager la page en deux cadres verticaux en utilisant un premier élément <frameset> et
son attribut cols (voir l’exemple 8-4, repère ).
<frameset cols="16%,*">
• Utiliser un élément <frame> et son attribut src pour définir le contenu du cadre de gauche,
en l’occurrence le document [Link] (voir l’exemple 8-4, repère ).
<frame src="[Link]" name="gauche" />
• Partager le cadre vertical droit en deux cadres horizontaux, le plus haut de 80 pixels et
le plus bas occupant la hauteur disponible, en écrivant un nouvel élément <frameset>
et en définissant son attribut rows (voir l’exemple 8-4, repère ).
<frameset rows="80,*">
• Utiliser un élément <frame> et son attribut src pour définir le contenu du cadre supérieur
haut nommé haut (voir l’exemple 8-4, repère ).
<frame src="[Link]" name="haut" />
Créer des cadres
CHAPITRE 8
219
• Partager le second cadre horizontal en deux cadres verticaux à l’aide d’un troisième
élément <frameset> (voir l’exemple 8-4, repère ).
<frameset cols="*,150px">
• Écrire les deux éléments <frame /> et définir leur contenu respectif (voir l’exemple 8-4,
repères et
). Le cadre nommé centre contient le document [Link], et celui
qui est nommé droit le document [Link].
<frame src="[Link]" name="centre" />
<frame src="[Link]" name="droit" />
• Refermer le troisième puis le deuxième élément <frameset> (voir l’exemple 8-4,
repères et ).
• Écrire un élément <noframes> pour créer un contenu de substitution (voir l’exemple 8-4,
repère
).
• Refermer le premier élément <frameset> (voir l’exemple 8-4, repère ).
</frameset>
</frameset>
<noframes>
<body>
<p>Votre navigateur ne supporte pas les cadres !<br /> Voir la <a id="lien"
➥ href="[Link] tabindex="1" accesskey="A"
➥ title="Version sans cadres">version sans cadres</a>
</p>
</body>
</noframes>
</frameset>
</html>
Le langage XHTML
220 PARTIE I
Figure 8-6
Un site composé
de trois cadres
dont un menu
éléments <frame /> (repères et ). L’élément <noframes> permet de créer un contenu
de substitution (repère ).
Nous allons maintenant envisager les méthodes qui permettent de fixer l’affichage des
documents cibles des liens dans le cadre désiré. La première méthode fait l’objet de
l’exemple 8-6, et la seconde de l’exemple 8-7 ; on doit donc pour utiliser cette dernière
modifier le code de l’exemple 8-5 en remplaçant tout simplement le code de la ligne
suivante :
<frame src="[Link]" name="gauche" id="gauche" frameborder="0" />
par celui-ci :
<frame src="[Link]" name="gauche" id="gauche" frameborder="0" />
qui confirme la nécessité de les définir systématiquement avec la même valeur dans les
éléments <frame />. Dans ce cas, correspondant au site de la figure 8-6, le cadre de gau-
che contient le menu vertical créé sous la forme d’une liste de liens qui permet de
naviguer dans le site. Ce menu est contenu dans le document de l’exemple 8-6. Chaque
clic sur un lien doit afficher un document différent dans le cadre nommé centre (voir
l’exemple 8-5, repère ).
Pour cela, il faut d’abord déclarer l’utilisation de la DTD Transitional dans la déclaration
DOCTYPE selon le modèle suivant :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
➥ Transitional//EN" "[Link]
Chaque lien créé avec l’élément <a>, et inclus dans la liste à puces introduite par l’élé-
ment <ul> (repère ), peut alors contenir, outre les attributs habituels, l’attribut target
dont la valeur est ici fixée à centre puisque tel est le nom du cadre cible (repères à ).
Du point de vue de la conformité par rapport aux spécifications du W3C, le document de
l’exemple 8-5 est conforme à XHTML 1.0 Frameset, et le document de l’exemple 8-6 à
XHTML 1.0 Transitional.
Nous obtenons donc un site fonctionnel, même s’il est réalisé au prix d’une entorse à nos
principes de base. L’entorse est minime dans la mesure où la DTD Transitional n’est
appliquée que pour l’utilisation du seul attribut target, et que nous n’en profitons pas
pour ressortir des catacombes des éléments comme <center> ou <font> que nous serions
en droit d’utiliser dans ce document. De plus, contrairement à la seconde solution, le site
reste fonctionnel même si l’internaute désactive JavaScript.
La méthode JavaScript
Comme il a déjà été signalé plusieurs fois, l'utilisation de JavaScript suppose que le visi-
teur n’a pas eu la mauvaise idée de désactiver les scripts dans son navigateur. Cette
désactivation est plutôt rare, ne serait-ce que parce qu’elle demande un effort de configu-
ration manuelle à laquelle peu d’internautes se livrent. Notre seconde méthode peut donc
être aussi fonctionnelle dans l’immense majorité des cas. Dans le cas contraire, l’utilisa-
tion de l’élément <noscript> peut permettre d’afficher un message du type : « Ce site
nécessite l’activation de JavaScript », afin de prévenir le visiteur.
La méthode JavaScript permet de détourner subtilement l’interdiction d’employer l’attri-
but target faite par XHTML 1.1 en y faisant pourtant référence, mais sans qu’il soit pré-
sent dans le code du document affiché dans le cadre nommé gauche. Le menu créé dans
l’exemple 8-7 est en effet parfaitement conforme et validé par le W3C selon la DTD
XHTML 1.1.
Pour afficher la cible de chaque lien dans le cadre nommé centre, il faut gérer l’attribut
onclick de l’élément <a> et écrire un code JavaScript de la forme suivante :
<a id="structure" href="[Link]" tabindex="1" accesskey="A"
title="Structure" onclick="[Link](‘structure’).target=‘centre’"
>Structure</a>
ou encore plus simplement, car ce code est contenu dans l’élément lui-même :
onclick="[Link]=‘centre’"
le mot-clé this permettant de faire référence à l’élément lui-même alors que la méthode
getElementById() est plus générale et « élégante » car elle permet d’accéder à un élément
quelconque du document. L’exemple 8-7 mélange volontairement ces deux codes (repères
à ) pour monter leur équivalence dans le cas présent.
Comme je l’ai déjà indiqué au début de ce chapitre, cette technique des cadres est consi-
dérée comme obsolète, et c’est donc dans le but d’être objectif et avec des réserves que je
l’ai présentée dans ce chapitre. En conclusion, je ne peux que recommander à tous ceux
qui seraient tentés d’utiliser les cadres dans leurs sites, d’examiner auparavant les solu-
tions qui se présentent à eux. Les chapitres de la deuxième partie de cet ouvrage, et en
particulier le chapitre 13 sur la mise en page, le dimensionnement et le positionnement,
peuvent les éclairer en la matière. Leur choix final n’en sera que plus motivé.
Exercices
Exercice 1 : La DTD XHTML 1.1 est-elle utilisable pour créer des cadres ?
Les documents affichés dans les cadres peuvent-ils être conformes à XHTML 1.1 ?
Pourquoi ?
Exercice 2 : Dans quel cas, sommes-nous obligés d’utiliser la DTD XHTML 1.0 Transi-
tional ?
Exercice 3 : Quels sont les inconvénients des cadres ?
Exercice 4 : Comment empêcher que les cadres soient redimensionnables par le visiteur ?
Exercice 5 : Comment faire pour supprimer les bordures qui délimitent les cadres par
défaut ?
Créer des cadres
CHAPITRE 8
225
Exercice 6 : Créez une page divisée en trois cadres horizontaux de dimensions respecti-
ves 100 pixels, 450 pixels et le reste de la hauteur totale pour le cadre inférieur. Affichez
un titre dans le cadre supérieur, une page de votre site préféré dans le cadre central et une
page contenant une suite de liens dans le cadre inférieur.
Exercice 7 : Créez une page contenant quatre cadres en opérant une division horizontale
et une division verticale sur toute la largeur et la hauteur de la page. Le cadre supérieur
gauche contient une image, le cadre inférieur gauche un menu ; le cadre supérieur droit
renferme un gros titre, et le cadre inférieur droit le contenu rédactionnel du site.
Exercice 8 : Réutilisez la structure de l’exemple 8-4 (visible à la figure 8-5) pour afficher
la cible des liens du cadre de gauche dans le cadre central en n’utilisant pas JavaScript.
Exercice 9 : Utilisez la division opérée dans l’exercice 4 pour afficher les cibles des liens
dans le cadre inférieur droit au moyen de JavaScript.
Partie II
La création de styles CSS (Cascading Style Sheets ou feuilles de style en cascade) est le
complément indispensable du langage XHTML. Ce procédé correspond parfaitement à
la séparation du contenu et de la présentation sur laquelle nous avons plusieurs fois
insisté en décrivant les différents éléments XHTML. D’une part, cette séparation permet
d’alléger les pages en centralisant les définitions des styles en un point unique, une seule
définition pouvant s’appliquer à un grand nombre d’éléments. D’autre part, elle facilite
également la maintenance et l’évolution des sites par voie de conséquence. Elle apporte
aussi une plus grande rigueur dans la conception des pages et peut permettre un travail
collaboratif entre plusieurs programmeurs travaillant en parallèle, d’où une réduction des
délais de fabrication. À l’attention de ceux pour qui ces points peuvent paraîtrent margi-
naux, nous pouvons ajouter que les styles CSS apportent une bien plus grande richesse
créative que ne le permettait le langage HTML utilisé sans CSS. Pour égaler les possibi-
lités graphiques de l’association XHTML et CSS, il aurait fallu alourdir de quantité
d’éléments spécifiques le langage XHTML, alors que la tendance actuelle est à l’opéra-
tion inverse, pour rapprocher XHTML de XML. Dans ce chapitre d’introduction aux
styles CSS, nous allons donc aborder les bases indispensables à la compréhension de leur
mécanisme. Après les règles générales d’écriture d’un style qui s’avèrent simples, nous
envisagerons toutes les nombreuses possibilités d’écriture des sélecteurs qui permettent
d’appliquer le style voulu à l’élément voulu, quel que soit son contexte. Nous termine-
rons cette introduction par l’étude des différentes méthodes d’insertion des styles dans
une page, puis par les règles de cascade (le « Cascading » de CSS) et d’héritage, dont la
connaissance permet de gérer les situations complexes d’attribution des styles à un
élément.
Les styles CSS
230 PARTIE II
Figure 9-1
Syntaxe d’écriture
d’un style
Figure 9-2
La page de validation des feuilles de style
Les sélecteurs
Une des grandes richesses de CSS est la multiplicité des possibilités de sélection des élé-
ments auxquels on veut attribuer un style donné. Cette très grande diversité permet en
effet d’appliquer un style aussi facilement à tous les éléments, en une seule ligne de code,
qu’à un unique élément isolé dans la page web, sans avoir à écrire la définition locale-
ment. De plus, la combinaison de plusieurs sélecteurs dans la même déclaration ouvre la
voie à une quasi-infinité de combinaisons, propres à répondre à tous les besoins, même
les plus complexes.
Les styles CSS
232 PARTIE II
Le sélecteur universel
Pour appliquer un style à tous les éléments, nous utiliserons le sélecteur universel * avant
la définition d’une ou plusieurs propriétés. Par exemple, pour que la couleur du fond de
tous les éléments soit le jaune, nous écrirons :
*{background-color : yellow;}
Cela n’empêche pas de modifier cette couleur de fond pour un élément particulier, en la
redéfinissant uniquement pour celui-ci, par exemple :
*{background-color : yellow;}
p{background-color : gray;}
Introduction à CSS
CHAPITRE 9
233
Dans ce cas, tous les éléments ont un fond jaune, sauf <p> qui a un fond gris redéfini
spécialement.
Les classes
Nous avons vu que tous les éléments XHTML possèdent l’attribut class. Ce dernier per-
met d’appliquer un style défini dans une classe à un élément dont l’attribut class se voit
attribuer le nom de cette classe. Pour créer une classe, le sélecteur est constitué du nom
choisi pour la classe précédé d’un point (.). Le nom de la classe peut être un mot quel-
conque, en évitant quand même les noms des propriétés CSS et des éléments XHTML
car cela occasionnerait des confusions. Nous pouvons par exemple définir la classe nommée
evidence en écrivant le code :
.evidence {color : red;}
À ce stade, la classe est abstraite et ne s’applique à aucun élément. Pour mettre en évi-
dence un paragraphe précis de la page avec un texte rouge, nous devons alors écrire dans
le code XHTML :
<p class="evidence">Texte contenu du paragraphe</p>
Le texte des autres paragraphes a toujours la couleur qui lui a été attribuée par ailleurs ou
la couleur par défaut (noire).
Les classes présentent l’intérêt de pouvoir s’appliquer à n’importe quel élément,
n’importe où dans le code de la page. Notre classe evidence peut donc s’appliquer à un
titre <h1>, une division <div> ou un élément <span>, simplement en écrivant pour chacun
d’entre eux l’attribut class="evidence".
Nous pouvons également définir une classe en la déclarant applicable seulement à un élé-
ment en faisant précéder son nom de celui de l’élément. Nous pouvons écrire par exemple :
[Link] {color : yellow;}
Dans ce cas, seules les divisions ayant un attribut class dont la valeur est jaune ont un
texte jaune. Les autres éléments, et même s’ils ont le même attribut avec la même valeur,
n’ont pas de style défini dans cette classe.
Le sélecteur universel * peut également être employé à la place du nom d’un élément
dans la définition d’une classe. Le style s’applique alors à tous les éléments dont l’attribut
class a pour valeur le nom de la classe. Nous écrivons alors par exemple :
[Link] {color : yellow;}
Il est possible de définir d’abord une classe abstraite, puis de la particulariser en ajoutant une
autre propriété pour un élément qui utilisera la même classe. Dans le code CSS ci-après :
.rouge {color : red;}
[Link] {background–color : blue;}
suivi du code XHTML dans la page,
<div class="rouge">Texte contenu de la division </div>
le texte contenu dans l’élément <div> est affiché en rouge sur fond bleu.
Les styles CSS
234 PARTIE II
Introduction à CSS
CHAPITRE 9
235
Figure 9-3
L’utilisation des
classes multiples
Sélecteur d’identifiant id
Pratiquement, chaque élément peut avoir un attribut id qui doit être unique dans une page
donnée. Nous pouvons écrire un style qui ne sera applicable qu’à l’élément dont l’id a
une valeur précise en donnant cette valeur au sélecteur (comme pour une classe) et en le
faisant précéder du caractère dièse (#).
En écrivant le style suivant :
div {color: black;}
#bleu {color: white; background-color: blue;}
puis le code XHTML :
<div id="bleu">Texte en blanc sur bleu</div>
<div>Texte en noir </div>
Les styles CSS
236 PARTIE II
seul l’élément <div> contenant l’attribut id="bleu" bénéficie du texte en blanc sur fond
bleu, et aucun autre, car l’identifiant doit être unique dans une page, et les autres élé-
ments <div> ont un texte noir. Ce type de définition est très ciblé car le style ne peut
s’appliquer qu’à un seul élément du fait de l’unicité de l’identifiant id.
tous les éléments <acronym> qui possèdent un attribut title, quelle que soit sa valeur, ont
un contenu affiché en rouge sur fond gris, ce qui permet d’attirer l’attention du visiteur
afin qu’il laisse le curseur sur le contenu pour voir apparaître la bulle d’aide donnant la
signification de l’acronyme (voir l’exemple 9-2 repères , et ).
De même, en définissant le style pour l’élément <img />
img[longdesc] {border–color: red; border–weight: 2px;}
toutes les images ayant un attribut longdesc ont une bordure rouge de deux pixels de large
(voir l’exemple 9-2 repères , et ). Nous pouvons également créer un style applica-
ble à tous les éléments qui possèdent un attribut donné en utilisant le sélecteur universel
* placé devant les crochets qui contiennent le nom de l’attribut choisi. Si nous définissons
le style suivant :
*[title] {background–color: yellow;}
ce sont tous les éléments ayant l’attribut title qui sont affichés avec un fond jaune.
Comme pour les classes, il est possible de sélectionner plusieurs attributs pour un élé-
ment en faisant suivre son nom de plusieurs attributs entre crochets. Si nous écrivons le
style suivant :
h2[title][id]{background-color: yellow;}
seuls les titres <h2> ayant à la fois les attributs title et id ont une couleur de fond jaune
(voir l’exemple 9-2 repères et ).
Introduction à CSS
CHAPITRE 9
237
</tr>
<tr>
<td id = "nom 2"> Geelsen</td>
<td id = "prenom"> Jan</td>
</tr>
<tr> <td id="editeur"> Eyrolles </td> <td>Paris</td></tr>
seules les premières cellules des deux premières lignes du tableau ont un contenu affiché
en blanc sur fond gris.
Une dernière possibilité consiste à attribuer un style à un élément dont la valeur d’un
attribut donné commence par une chaîne fixée. Pour cela, le signe égal (=) doit être précédé
du signe | selon la syntaxe suivante :
élément [attribut |="valeur"] {Définition des styles;}
Dans l’exemple suivant :
td[id |="nom"] {font-style: italic;}
toutes les cellules de tableau créées par les éléments <td> dont l’attribut id commence par
la chaîne nom devraient avoir un contenu affiché en italique. Je précise qu’à ce jour aucun
navigateur ne gère ce sélecteur.
L’exemple 9-2 résume toutes les possibilités d’utilisation des sélecteurs de valeur d’attribut
que nous venons d’aborder.
</style>
</head>
<body>
<h1 title="Les outils du Web" >XHTML et CSS</h1>
<h2 title="Les outils du Web" id="xhtml">XHTML 1.1</h2>
<h2 title="Les outils du Web" >CSS 2.1</h2>
<p> <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> et
➥ <acronym>CSS 2.1</acronym><br /><br />
Introduction à CSS
CHAPITRE 9
239
La figure 9-4 montre les résultats obtenus pour ces définitions de styles.
Figure 9-4
Les sélecteurs
d’attributs
Les styles CSS
240 PARTIE II
Note
Internet Explorer ignore ces sélecteurs.
nous obtenons pour les items de niveau 1 un texte noir sur fond gris, et pour les trois
items de niveau 2, un texte blanc sur fond gris comme le montre la figure 9-5.
Figure 9-5
Les sélecteurs
contextuels parent-
descendant
Note
Internet Explorer ignore ces sélecteurs.
de relation entre éléments, nous disposons du sélecteur + qu’il faut utiliser en adoptant la
syntaxe suivante :
element1+element2 {Définitions des styles;}
Dans ce cas, le style s’appliquera à l’élément de type 2 uniquement s’il suit immédiate-
ment un élément de type 1 dans le code XHTML sans y être inclus. Si nous définissons
les styles suivants :
p {background–color: yellow; color: blue;}
div+p {background–color: blue; color: yellow;}
puis le code XHTML ci-après :
<div>Les standards XHTML 1.1 et CSS 2.1 s’imposent aujourd’hui
<p>Texte d’un paragraphe enfant de div</p>
</div>
<p>Texte d’un paragraphe frère de div</p>
<p>Texte d’un paragraphe frère de div</p>
seul le deuxième élément <p> a le style : « texte jaune sur fond bleu », le premier n’étant
pas frère mais enfant de l’élément <div>. Le troisième paragraphe aura de plus le même
style que le premier car il ne suit pas immédiatement l’élément <div>.
On note que si les deux éléments sont reliés par le sélecteur +, seul le second présente un
style défini. En effet, si nous définissons le code suivant au lieu des styles précédents :
p {background-color: yellow; color: blue;}
p+p {background-color: blue; color: yellow;}
et si nous l’appliquons au même code XHTML que précédemment, seul le troisième
paragraphe a le style « texte jaune sur fond bleu ». Les premier et deuxième paragraphes
bien qu’étant consécutifs n’ont pas le même parent direct. Notons encore qu’avec ce der-
nier style, si un élément <div> contenait plus de deux éléments <p>, le style « jaune sur
bleu » créé avec le sélecteur p+p s’appliquerait à tous les paragraphes enfants de <div>
sauf le premier. De même, s’il existait deux paragraphes consécutifs en dehors de l’élément
<div>, le second bénéficierait également du même style.
Note
Internet Explorer ignore tout de ces sélecteurs.
Pseudo-classes et pseudo-éléments
Les sélecteurs précédents permettent d’attribuer un style à un ou plusieurs éléments bien
définis dans la hiérarchie d’un document XHTML. Les pseudo-classes et les pseudo-élé-
ments permettent d’attribuer un style à une partie abstraite d’un document non identifiable
dans cette hiérarchie, par exemple le premier caractère ou la première ligne d’un paragra-
phe. D’autres pseudo-classes permettent d’attribuer un style à un document en fonction
Introduction à CSS
CHAPITRE 9
243
des actions prévisibles mais non déterminées de l’utilisateur final, par exemple le fait de
placer son curseur sur un lien ou un composant de formulaire.
Nous utiliserons ces pseudo-classes de manière plus approfondie au chapitre 12. Les
pseudo-classes dynamiques sont mal prises en compte par les navigateurs actuels.
Pseudo-classes diverses
On peut aussi mentionner l’existence de deux autres pseudo-classes d’usage assez général.
• :first-child, qui permet d’appliquer un style à un élément donné uniquement s’il est
le premier enfant d’un autre élément. L’élément parent n’est pas nommé et peut être
quelconque (à condition de respecter les règles d’inclusion parent-enfant de la DTD).
En écrivant par exemple le style :
span:firsthild {background-color: red; color: white;}
puis le code XHTML ci-après :
<div>Les standards tels que <span>XHTML 1.1</span> et <span>CSS 2.1</span>
➥ s’imposent aujourd’hui</div>
seul le texte du premier élément <span> contenu dans <div> est de couleur blanche avec
un fond rouge. De même, en écrivant le style suivant :
a:first-child {backgroor: red; color: white;}
et en l’appliquant dans l’exemple de code XHTML :
<p> Liens utiles :
<a href= "[Link]" alt="w3c"> W3C </a>
<a href= "[Link]" alt= "PHP"> PHP</a>
</p>
seul le texte « W3C » sera en rouge puisque le lien est le premier enfant du paragraphe <p>.
• :lang(code), qui ressemble au sélecteur basé sur la valeur d’un attribut car il permet
d’attribuer un style à un élément si son attribut lang a la valeur précisée par son code de
langue. En écrivant par exemple :
p:lang (fr) {color: black;}
p:lang (en-us) {color: gray;}
les paragraphes ayant l’attribut xml:lang="fr" sont affichés en caractères noirs et ceux
ayant l’attribut xml:lang="en-us" seront affichés en gris. Cette pseudo-classe est mal
prise en compte par les navigateurs actuels.
Les pseudo-éléments
Leur nom vient de ce qu’ils permettent d’agir sur une partie du contenu d’un élément
comme s’il était contenu dans un nouvel élément fictif. On dénombre les quatre pseudo-
éléments suivants :
• :first-letter, qui permet d’affecter un style à la première lettre du contenu d’un élé-
ment indiqué avant ce sélecteur. On l’utilise classiquement pour créer des effets de let-
trines en définissant pour ce sélecteur une taille de caractères très supérieure à la taille
de l’élément. En écrivant par exemple le style suivant :
p:first-letter {fonize: 300%; color: blue;}
Introduction à CSS
CHAPITRE 9
245
la première lettre de chaque paragraphe sera trois fois plus grande que les autres et de
couleur bleue. Le pseudo-élément :first-letter n’admet que les propriétés suivantes :
font, font-size, font-family, font-style, font-weight, color, background, margin,
padding, border, text-decoration, vertical-align, text-transform, line-height,
float, letter-spacing, word-spacing, clear.
• :first-line, qui permet d’affecter un style à la première ligne du contenu de l’élément
indiqué. Cet affichage permet d’attirer l’attention sur un texte. En écrivant le style
suivant :
div:first{font-size: 150%; font-weight: bold;}
la première ligne de chaque division sera affichée en gras et dans une taille 1,5 fois
plus grande que la police en cours. Le pseudo-élément :first-line n’admet que les
propriétés suivantes :
font, font-size, font-family, font-style, font-weight, color, background,
word-spacing, letter-spacing, text-decoration, vertical-align, text-transform,
line-height.
• :before, qui permet d’insérer un contenu doté d’un style particulier avant le contenu réel
de l’élément précisé, en l’associant avec la propriété content. En écrivant le style suivant :
cite:beforeontent:"<<"; font-weight: bold;}
chaque contenu d’une citation <cite> sera précédé des caractères << en gras.
• :after, qui joue un rôle similaire au précédent mais définit un contenu doté d’un style
à la fin du contenu de l’élément utilisé. En écrivant :
cite:after {cnt: ">>";font-weight: bold;}
chaque citation contenu dans l’élément <cite> sera suivie des caractères >> en gras.
La déclaration !important
Chaque déclaration de style peut revêtir un caractère de plus grande importance par rap-
port à une autre déclaration concernant le même élément et la même propriété qui com-
porte une valeur différente. Ces deux déclarations peuvent entrer en conflit au moment de
la création de la présentation par le navigateur. Pour donner cette importance à un style,
il faut insérer la déclaration d’importance à l’aide du mot-clé !important en le plaçant
entre la valeur attribuée à la propriété et le point-virgule qui termine la déclaration. Dans
l’exemple suivant :
*{color: black !important; background-color: yellow;}
div{color: blue; background-color: white;}
les couleurs de texte et de fond des sélecteurs * et div sont en conflit, mais comme la pro-
priété color définie dans le sélecteur universel * est marquée !important, le texte de la divi-
sion figure en noir. En revanche, le fond de la division est de couleur blanche car la valeur
yellow n’est pas marquée !important et que la déclaration faite dans div est spécifique.
Les styles CSS
246 PARTIE II
Nous reviendrons en détail sur les règles de priorités dans la section consacrée à la défi-
nition des effets de cascade en fin de chapitre.
Il est évidemment possible d’utiliser la déclaration !important pour plusieurs propriétés
dans la même déclaration, par exemple :
*{color: black !important; background-color: yellow !important;}
div{color: blue; background-color: white;}
Dans ce cas, tous les éléments <div> ont un contenu affiché en noir sur fond jaune, et tous
les styles définis en propre pour cet élément sont ignorés.
Si les styles définis après la directive @import sont en contradiction avec ceux qui sont
contenus dans le fichier importé, les conflits éventuels sont tranchés selon les règles définies
dans la section concernant les effets de cascade dans ce chapitre.
Cascade et héritage
Savoir définir des styles est une chose, être sûr du résultat final en est une autre. Même si
l’on a défini des styles dans l’élément <style> ou dans un fichier externe, il faut encore
tenir compte, en dehors des problèmes d’interprétation propres aux différents naviga-
teurs, du fait que l’on n’est pas le seul à avoir créé des styles pour des sélecteurs donnés.
Les styles CSS ont en effet des origines diverses. Ils peuvent provenir du concepteur
(c’est-à-dire de soi-même ou « l’auteur » selon le vocable du W3C). Il peut s’agir aussi
de l’utilisateur final qui a la possibilité de définir sa propre feuille de style dans son navi-
gateur. Même si les utilisateurs se prêtent rarement à cet exercice, cela est possible, en
particulier pour ceux qui ont des problèmes de vue et qui vont définir par exemple un affi-
chage en très gros caractères, ou ceux qui ont des problèmes de vision de couleurs et qui
vont donc définir des choix leur permettant d’obtenir un contraste fond/texte lisible. La
dernière origine des styles est le navigateur lui-même qui possède sa propre feuille de
style par défaut, dont un modèle est édicté par le W3C, et dont vous trouverez la copie
dans l’annexe B.
C’est la partie logicielle CSS du navigateur qui se charge de résoudre les conflits pouvant
exister entre les différentes déclarations de styles attachées à un élément. Les différentes
Introduction à CSS
CHAPITRE 9
249
h1{color: red;}
/*style du navigateur */
h1{color: black;}
L’élément <h1> a un contenu affiché en rouge car les styles du concepteur, non décla-
rés !important, l’emportent sur ceux de l’utilisateur, également non déclarés !important,
et toujours sur ceux du navigateur.
En revanche, avec les déclarations de styles suivantes :
/*style de l’utilisateur
h1{color:blue !important;}
/* style du concepteur
h1{color:red !important;}
c’est le style de l’utilisateur qui l’emporte quand il entre en conflit avec un style de
l’auteur également déclaré !important, et l’élément <h1> a donc un contenu bleu.
N=1000, ce style ne peut être dominé que par un style utilisateur déclaré !important (y
compris s’il est lui-même déclaré de cette façon).
div.h1#force{décl}
N=0102 car le sélecteur contient un identifiant ( #force) et deux éléments XHTML (div
et h1).
[Link] [Link] {}
N=0022 car le sélecteur contient deux classes ( .gras et .rouge) et deux éléments XHTML
(h1 et a).
div#menu {background-color: #FC9;}
N=0101 car le sélecteur contient un sélecteur d’identifiant ( #menu) et un élément (div).
Le titre <h1> a un texte de couleur red car les styles liés apparaissent avant ceux qui
sont écrits dans l’élément <style>, même si l’élément <link /> est écrit après l’élément
<style> dans l’en-tête.
L’héritage
L’héritage est le fait qu’un élément enfant possède les mêmes styles que l’élément qui le
contient (son parent dans la hiérarchie des éléments d’une page). Nous pouvons par
exemple définir les styles suivants :
div{color: white; background-color: blue;}
L’élément <p> est enfant de <div> et les éléments <span> et <strong> sont eux-mêmes
enfants de <p>. Par héritage et bien sûr faute d’avoir définis des styles propres pour les
éléments <p>, <span> et <strong>, ceux-ci ont un contenu qui possède les styles définis
pour leur parent direct ou indirect <div>. Ils sont donc tous en blanc sur fond bleu. Si nous
créons un style différent pour l’élément <p>, ses éléments enfants héritent alors de ces
styles et non plus de ceux de l’élément <div>.
De même, si nous définissons un style pour les éléments de listes ordonnées ou non <ol>
et <ul>, tous les items de la liste, quel que soit leur niveau d’imbrication, ont les mêmes
caractéristiques par défaut sans qu’il faille créer un style propre pour eux.
L’héritage concerne un grand nombre de propriétés CSS que nous allons aborder dans les
chapitres suivants, mais toutes les propriétés ne sont pas systématiquement héritées, par
exemple les marges, les bordures, ou les dimensions et la position pour des raisons évi-
dentes de mise en page. Depuis CSS 2, la quasi-totalité des propriétés peut prendre la
valeur inherit permettant de définir explicitement l’héritage de la valeur que possède la
même propriété dans l’élément parent. Toute modification opérée pour l’élément parent
est donc répercutée à ses enfants. Comme trop de précision ne nuit pas, et qu’il est préfé-
rable de ne pas laisser l’initiative d’interprétation aux navigateurs, nous conseillons en
cas de doute de définir clairement la propriété voulue pour un élément plutôt que de
compter sur la réalisation ou non de l’héritage.
Les unités
Toutes les propriétés CSS peuvent prendre une valeur dans un domaine particulier propre
à chacune d’elle. En dehors des nombreux mots-clés existants, nous allons faire ici
l’inventaire des différents types de valeurs parmi les plus générales que l’on retrouve
pour un grand nombre de propriétés.
Introduction à CSS
CHAPITRE 9
253
Les couleurs
Une valeur de couleur s’exprime en mettant en œuvre l’une des trois manières suivantes :
• Un mot-clé parmi une liste limitative donnée à l’annexe C. Tous les mots-clés sont en
anglais, par exemple black, yellow qui correspondent à des couleurs connues ; d’autres
sont plus fantaisistes comme whitesmoke.
• Un code hexadécimal de couleur basé sur les composantes RGB d’une couleur dans le
système additif. Chaque composante prend une valeur qui va de 0 à FF, et l’ensemble
doit être précédé du caractère dièse (#), par exemple #F4C5A8. Il est possible de ne pré-
ciser que trois nombres hexadécimaux de 0 à F, par exemple #FC5, les navigateurs
convertissant ces valeurs par réplications (la couleur notée #FC5 est interprétée comme
#FFCC55).
Les styles CSS
254 PARTIE II
• À l’aide de la fonction rgb() qui admet trois paramètres représentant la valeur des
composantes RGB d’une couleur selon la syntaxe rgb(Red, Green, Blue), chaque com-
posante est exprimée par un nombre entier variant de 0 à 255 ou par un pourcentage de
0 à 100 %. On peut définir par exemple des couleurs de la façon suivante :
rgb(45, 78, 2ou encore rgb(25%, 85%, 12%).
Exercices
Exercice 1 : Écrivez la syntaxe générale de la déclaration d’un style.
Exercice 2 : Écrivez le sélecteur et le style donnant une couleur rouge et un fond noir
aux éléments <h1> et <h3>.
Exercice 3 : Écrivez le sélecteur afin que tous les éléments de la page soient écrits en
vert.
Exercice 4 : Écrivez une classe qui définit un fond jaune et appliquez-la aux éléments
<h1> et <p>.
Exercice 5 : Écrivez une classe spécifique à un élément <code> afin que son texte soit
bleu.
Exercice 6 : Écrivez les classes correspondant aux styles « fondgris », « textevert » et
« textejaune ». Appliquez la première et la troisième à un paragraphe, puis la première et
la deuxième à une division <div>.
Exercice 7 : Écrivez le sélecteur afin que l’élément dont l’attribut id vaut « menu » ait un
fond rouge.
Exercice 8 : Écrivez le sélecteur afin que tous les éléments ayant un attribut id aient un
texte noir sur fond jaune.
Exercice 9 : Écrivez le sélecteur afin que les éléments <h1> ayant un attribut title aient
un texte bleu, les autres ayant un texte noir.
Exercice 10 : Écrivez les sélecteurs afin que les paragraphes inclus dans <body> aient un
texte gris et que ceux inclus dans <div> aient un texte marron.
Exercice 11 : Écrivez le sélecteur afin que seuls les éléments <span> enfants de <p>
aient un texte bleu, tous les autres ayant un texte noir.
Exercice 12 : Pour une liste imbriquée sur deux niveaux, écrivez le sélecteur pour que
les éléments <li> de premier niveau inclus dans <ol> soient rouges, et que ceux de second
niveau soient en vert.
Exercice 13 : Écrivez le sélecteur pour appliquer un style différent à un élément <li>
selon qu’il est inclus dans <ol> ou <ul>.
Exercice 14 : Écrivez le sélecteur pour que le survol d’un élément <h1> provoque le
changement de couleur du texte en rouge.
Introduction à CSS
CHAPITRE 9
255
Exercice 15 : Écrivez le sélecteur afin que seule la première ligne d’un paragraphe soit
en rouge, le reste s’affichant en gris.
Exercice 16 : Où peut-on écrire des styles CSS ?
Exercice 17 : Écrivez des styles dans un fichier externe et les incorporer dans l’élément
<style>.
Exercice 18 : Comment un utilisateur peut-il s’assurer que ses styles personnels sont
bien appliqués ?
Exercice 19 : En reprenant les exercices précédents, définissez les couleurs en utilisant
la fonction rgb().
Exercice 20 : Testez les différents styles des exercices précédents dans le validateur du
W3C, en les écrivant dans l’élément <style> ou dans un fichier externe.
10
Couleurs et image de fond
Dans les anciennes versions de HTML, les définitions des couleurs de polices faisaient
appel à une multiplication d’éléments <font>, et à leur attribut color, appliqués locale-
ment. Il en était de même pour les couleurs de fond des éléments qui ne pouvaient être
définis que pour un nombre restreint d’éléments. Ces éléments et attributs ont heureuse-
ment disparu des recommandations XHTML, au profit de définitions centralisées dans
une feuille de style CSS. Chaque élément peut également se voir attribuer une couleur ou une
image de fond.
Nous allons envisager ici la manière de définir la couleur d’avant-plan du contenu d’un
élément, c’est-à-dire essentiellement celle du texte qui y est inclus. Nous verrons ensuite
comment attribuer les couleurs et images de fond, ainsi que le positionnement de ces
derniers. L’ensemble de ces définitions permet la création d’effets attractifs.
La couleur d’avant-plan
Nous ne sommes plus au temps des écrans monochromes ni même de ceux qui affichent
seize couleurs. Aujourd’hui, même les téléphones portables ont des capacités supérieures.
L’emploi de la couleur dans un site est donc aujourd’hui indispensable. Comme toute
nouvelle technologie, l’apparition des écrans couleur a entraîné des abus d’usage. Selon
la nature du site que vous allez construire, il faudra agir avec circonspection dans le choix
et le nombre de couleurs employées. La multiplication des couleurs ne crée plus néces-
sairement un effet positif sur le visiteur et une certaine harmonie doit aussi être recher-
chée. C’est là l’affaire du designer, le créatif qui saura choisir et associer les teintes.
Les styles CSS
258 PARTIE II
Mais on vous demandera peut-être de remplir à la fois cette fonction en plus de celle de
programmeur XHTML. Pour vous aider dans le choix et l’association des couleurs en
fonction de l’effet désiré, vous pouvez consulter les sites mentionnés dans l’annexe E.
Ils vous aideront par exemple à choisir une couleur de fond selon celle du texte pour
obtenir différents effets de contraste.
Comme nous l’avons indiqué, la couleur d’avant-plan est avant tout celle du texte, à
laquelle on pense immédiatement quand on parle de couleur, mais quand elle est définie,
elle est aussi par défaut celle des bordures de l’élément auquel elle s’applique. Il ne fau-
dra pas oublier cet état de fait lors de la définition des bordures afin de leur affecter expli-
citement une autre couleur (voir la propriété border-color). La couleur d’avant-plan est
définie par la propriété color selon la syntaxe suivante :
Si elle n’est pas définie explicitement, sa valeur peut dépendre du navigateur utilisé,
mais il s’agit généralement du noir. Nous pouvons définir explicitement une couleur en
utilisant les méthodes vues au chapitre 9 à savoir un nom de couleur (par exemple :
black), une valeur hexadécimale à trois ou six positions représentant les composantes
RGB de la couleur précédée du caractère (#) (par exemple : #F3C ou #FA3258), et enfin à
l’aide de la fonction rgb() qui doit avoir trois paramètres entiers variants de 0 à 255,
représentant également les composantes RGB en notation décimale (par exemple :
rgb(56,250,20)).
L’exemple 10-1 permet de mettre en œuvre les couleurs d’avant-plan et la manière dont
elles sont héritées. Nous y définissons la propriété color pour l’élément <body> (repère ),
<div> (repère ), <i> et <acronym> (repère ), et enfin <span> (repère ). Pour l’élé-
ment <div>, nous définissons également une bordure pour montrer que la couleur
d’avant-plan s’y applique. Nous reviendrons en détail sur la création des bordures au
chapitre 11.
Dans le corps du document figure un titre <h1> (repère ) qui n’a pas de style propre.
Il hérite donc de la couleur définie pour <body>. Vient ensuite une division <div> dont la
couleur d’avant-plan est noire (repère ). Le titre <h2> qu’elle contient figure donc
également en noir, de même que le texte qui suit. L’élément <p> (repère ) sans style
propre et également inclus dans <div> a aussi un texte noir. En revanche, les éléments
<acronym> (repère ) et <i> (repère
), tous deux enfants de ce paragraphe, ont un style
propre, et leur contenu est affiché en rouge. De même, l’élément <span> enfant de ce
même paragraphe, mais ayant également un style propre, affiche son contenu en bleu.
Il inclut à son tour deux éléments <big> et <i>. L’élément <big> (repère ) hérite de la
couleur de <span> qui est son parent direct et son texte est donc en bleu. En revanche,
l’élément <i> (repère ) est aussi enfant de <span> mais il a un style propre (repère )
et son texte est donc en rouge. Le texte placé dans la fin de la division (repère ) est
affiché en noir en tant que contenu direct de <div>. Remarquons que sa bordure a la
même couleur que le texte. Vient ensuite un paragraphe indépendant (repère ) sans
style propre qui hérite donc de la couleur d’avant-plan de son parent direct qui est
Couleurs et image de fond
CHAPITRE 10
259
<body>. Comme il inclut des éléments <acronym> et <i> pour lequel la propriété color a
la valeur red, le contenu de ces derniers est affiché en rouge comme les éléments inclus
dans <div>.
La figure 10-1 montre le résultat obtenu pour les différentes couleurs d’avant-plan (ici en
niveaux de gris).
Figure 10-1
Les couleurs
d’avant-plan et leur
héritage
La couleur de fond
La couleur de fond d’un élément est définie par la propriété background-color que nous
pouvons appliquer à tous les éléments XHTML. Sa syntaxe est la suivante :
background-color:<couleur> | transparent | inherit
Par défaut, l’arrière-plan est transparent et laisse donc apparaître la couleur de fond de
l’élément parent. La transparence peut aussi être définie explicitement avec la valeur
transparent. Les valeurs du paramètre <couleur> sont celles qui ont été définies au
chapitre précédent et pour la propriété color (mot-clé, code RGB ou fonction rgb()).
La couleur de fond n’est pas héritée par défaut et il faut utiliser la valeur inherit pour
obtenir l’héritage de cette couleur. L’exemple 10-2 montre l’application de couleurs
de fond à différents éléments. La couleur yellow est appliquée au corps du document
<body> (repère ). Nous pouvons remarquer dans la figure 10-2 que la couleur de
fond de l’élément <h1> (repère
), n’étant pas définie explicitement, elle est celle
de son élément parent <body> (repère ), non pas par héritage, mais parce que son
fond est transparent.
Couleurs et image de fond
CHAPITRE 10
261
Pour la même raison, la définition de la couleur de fond pour l’élément <div> (repère )
s’applique à l’élément <h2>, qui y est inclus (repère ). En revanche, le paragraphe <p>
(repère
) a une couleur de fond bien définie (repère ). Il a donc sa couleur propre et
non pas celle de l’élément parent <div>.
Cette couleur est la même pour l’élément <acronym> (repère ) pour la même raison que
pour les éléments <h1> et <h2> à la différence près que la couleur de fond est ici définie
avec la valeur transparent (repère ). Enfin, l’élément <i> (repère ) ayant un style de
fond défini avec le mot-clé orange (repère ) son contenu est affiché sur un fond orange.
L’association des propriétés color et background-color dans la même classe (repère )
permet d’obtenir des effets particuliers susceptibles d’attirer l’attention sur un titre
(repère ).
Figure 10-2
Définition des
couleurs de fond
En revanche, la définition d’une couleur de fond pour un élément, l’emporte sur l’image
de fond de son parent. De plus, si nous définissons ces deux propriétés pour le même élé-
ment, c’est l’image de fond qui l’emporte sur la couleur. Il est d’ailleurs prudent de défi-
nir les deux avec une couleur de fond proche de celle de l’image, car s’il l’on ne trouve
pas l’image sur le serveur, c’est la couleur qui sert de fond. Enfin, signalons que, par
défaut, l’image de fond est répétée horizontalement et verticalement pour occuper toute
la surface de l’élément concerné.
L’exemple 10-3 illustre notre propos en définissant des images de fond pour les éléments
<body> (repère ), <h1> (repère ), <div> (repère ), <i> (repère ) et une classe nom-
mée herit (repère ) qui est appliquée au second élément <h2> (repère
). Dans le corps
du document, l’image de fond de chacun de ces éléments se superpose à celle de son
parent. Pour l’élément <p> (repère ) qui n’a pas d’image de fond, la couleur de fond
l’emporte également sur l’image de fond de son parent <div> (repère
). L’élément <i>
(repère ), enfant du paragraphe, possède à la fois une couleur de fond et une image de
fond, donc celle-ci l’emporte à la fois sur sa couleur de fond et sur la couleur de fond de
son parent.
Sur la figure 10-3 qui montre la visualisation du document dans Mozilla, nous pou-
vons constater les effets obtenus par les définitions de ces différentes images et
couleurs de fond. En étant attentif, on peut remarquer que l’image de fond du second
élément <h2> contenant le texte « CSS 2.1 », tout en étant la même que celle de la
page, est décalée par rapport à celle de <body>. Ce phénomène ne se produit pas dans
Internet Explorer qui effectue un rendu du fond hérité comme si celui-ci avait été
déclaré transparent.
Figure 10-3
Les images de fond
Quand on lui attribue la valeur repeat, qui est la valeur par défaut, l’image est répétée
selon les axes x et y et occupe toute la boîte de l’élément telle qu’elle a été définie au
chapitre 9. Avec la valeur repeat-x, l’image n’est répétée que horizontalement en haut de
l’élément, avec la valeur repeat-y, elle n’est répétée que verticalement sur le côté gauche
de l’élément. La valeur no-repeat empêche quant à elle toute répétition. Dans ce cas, et si
d’autres propriétés ne donnent pas de directives contraires, l’image est placée en haut et
à gauche de l’espace occupé par l’élément. La valeur inherit permet de forcer l’applica-
tion de la valeur définie pour l’élément parent car la propriété background-repeat n’est pas
héritée par défaut.
Dans l’exemple 10-4, nous définissons une couleur, une image de fond et la répétition de
l’image selon l’axe des abscisses, pour les éléments <body> et <h2> (repères et ).
L’image de fond de <body> apparaît donc en haut de la page comme s’il s’agissait de celle
de <h1> (repère ) qui n’en est pas muni. Les deux éléments <h2> (repères et ) pré-
sents dans la page ayant à la fois une couleur et une image de fond avec une répétition
horizontale, l’image s’affiche en haut du titre et la couleur de fond occupe le reste de
l’espace alloué aux titres.
Figure 10-4
Répétition
horizontale de
l’image de fond
Figure 10-5
Répétition verticale
des images de fond
signifie que la position horizontale peut être définie au minimum par un pourcentage, une
unité de longueur ou un des mots-clés left, center ou right dont nous allons donner la
signification. La partie suivante :
[<pourcent> | <long> | top | center | bottom]
indique qu’il est possible, mais facultatif, de définir également la position verticale avec
les mêmes unités et les mots-clés top, center et bottom. Si la position est fixée au moyen
d’une unité de longueur, elle est calculée par rapport aux bords gauche et haut. Quand
elle est donnée en pourcentage, celui-ci est calculé par rapport à la largeur de l’élément
pour l’alignement horizontal et par rapport à sa hauteur pour l’alignement vertical.
Si la position donnée en pixel ou en pourcentage, est faite avec une valeur négative,
l’image de fond est coupée sur ses côtés gauche ou droit et haut ou bas selon le position-
nement choisi. Elle n’apparaît donc que partiellement, ce qui peut entraîner des effets par-
ticuliers. Associée à une boucle en JavaScript, cette possibilité peut permettre de faire
apparaître l’image progressivement, à partir d’un bord de l’élément auquel elle s’applique.
La dernière partie de la syntaxe :
[left | center | right]||[top | center | bottom]
indique qu’il est aussi envisageable de n’utiliser que des mots-clés. Dans ce cas, nous
avons le choix d’indiquer un seul mot-clé pour la position horizontale, ou deux, donnant
Les styles CSS
268 PARTIE II
dans l’ordre la position horizontale suivie de la position verticale. Le tableau 10-1 indique
la signification des différents mots-clés.
La propriété background-position n’étant pas héritée, la valeur inherit permet d’appliquer
la même valeur que celle de l’élément parent.
Position horizontale
left L’image est placée à gauche dans la zone de contenu de l’élément.
center L’image est centrée dans la zone de contenu de l’élément.
right L’image est placée à droite dans la zone de contenu de l’élément.
Position verticale
top L’image est placée en haut de la zone de contenu de l’élément.
center L’image est centrée verticalement dans la zone de contenu de l’élément.
bottom L’image est placée en bas de la zone de contenu de l’élément.
Les codes de l’exemple 10-5 indiquent les définitions de styles de toutes les possibilités
représentées à la figure 10-6 en utilisant des mots-clés. Les repères à correspondent
à ceux de la figure 10-6.
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:center top;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:right top;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:left center;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:center center;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:right center;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:left bottom;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:center bottom;}
body{background-image:url([Link]);background-repeat:no-repeat;
➥ background-position:right bottom;}
Figure 10-6
Différents
positionnements
de l’image de fond
Les styles CSS
270 PARTIE II
Figure 10-6
Différents
positionnements
de l’image de fond
(suite)
Couleurs et image de fond
CHAPITRE 10
271
Pour certains éléments, le plus évident étant <body>, quand le contenu est plus haut que la
fenêtre, des barres de défilement apparaissent automatiquement dans le navigateur. Si
l’élément possède une image de fond, celle-ci va par défaut défiler avec le reste de la
page et elle peut donc disparaître, en particulier si elle est positionnée en haut ou même
au centre de la page. Il est possible de choisir si l’on veut permettre ou non ce défilement
en utilisant la propriété background-attachement dont la syntaxe est :
background-attachement:scroll|fixed|inherit
Si la valeur scroll correspond au comportement par défaut qui implique le défilement de
l’image avec le contenu, la valeur fixed permet de conserver l’image à sa position ini-
tiale, définie par background-position. Avec la valeur fixed nous pourrons par exemple
conserver une image centrée dans la fenêtre quelle que soit la hauteur du contenu d’une
page. La propriété n’étant pas héritée par défaut par un élément enfant, la valeur inherit
permet de définir cet héritage.
Figure 10-7
Une image de fond fixe
À titre d’exemple, en utilisant le même code XHTML que celui de l’exemple 10-4 pour
définir le contenu d’une page, et, en appliquant le style suivant à l’élément <body>
pour fixer l’image de fond, nous obtenons le résultat présenté à la figure 10-7 après avoir
Les styles CSS
272 PARTIE II
fait défiler son contenu. Nous pouvons constater que l’image de fond conserve sa position
initiale malgré le défilement opéré sur le texte de la page.
body{background-image:url([Link]); background-repeat:no-repeat;
➥ background-position:top center; background-attachment: fixed; color:#BBB; }
En revanche, en définissant les styles suivants qui autorisent le défilement de l’image,
nous obtenons le résultat présenté à la figure 10-8. Nous y remarquons que le paysage de
fond s’est déplacé avec le texte auquel il est lié.
body{background-image:url([Link]); background-repeat:no-repeat;
➥ background-position:top center; background-attachment:scroll;
➥ background-color:#BBB; color:white; }
Figure 10-8
Une image de fond défilante
Couleurs et image de fond
CHAPITRE 10
273
Exercices
Exercice 1 : Quels sont les différents effets de la définition de la propriété color ?
Exercice 2 : Créez les styles pour que les titres <h1> soient affichés en rouge sombre, les
titres <h2> en bleu et les paragraphes en gris moyen. Pour définir les couleurs, utilisez
successivement des mots-clés, des codes hexadécimaux et la fonction rgb(). Appliquez
ces styles à un document.
Exercice 3 : Créez les styles afin que le texte des paragraphes qui suivent un titre <h1>
soit bleu et que celui des paragraphes qui suivent un titre <h2> soit vert. Appliquez ces
styles à un document.
Exercice 4 : Créez une page à fond jaune clair et dont le texte soit bleu foncé.
Exercice 5 : Créez une page à fond bleu pale dont le texte par défaut soit noir. Les titres
<h1> doivent être écrits en rouge sur fond jaune et les titres <h2> en bleu foncé sur fond
transparent.
Exercice 6 : Créez le style permettant d’afficher le contenu des éléments <code> en vert
vif sur fond noir, à l’image des antiques terminaux monochromes.
Exercice 7 : Créez les styles de façon à ce que seuls les paragraphes ayant un attribut id
soient affichés avec un texte gris sur fond rose pale. Les autres paragraphes doivent être
affichés en noir sur blanc.
Les styles CSS
274 PARTIE II
Exercice 8 : Définissez une image de fond de petit format qui soit répétée horizontale-
ment et verticalement dans toute la page. Tous les autres éléments de la page, quels qu’ils
soient, doivent avoir un fond blanc.
Exercice 9 : Créez une page dont l’image de fond soit non répétée et située au centre et
en haut de la fenêtre.
Exercice 10 : Écrivez un style de façon que n’apparaisse que la moitié inférieure de
l’image de fond choisie. Celle-ci doit être placée en haut et au centre de la page.
Exercice 11 : Créez un style pour que l’image de fond (de petite taille de préférence pour
créer un motif) de tous les éléments d’une page soit centrée et répétée verticalement.
Exercice 12 : Placez une image de fond dans une page à 15 % du bord gauche et à 30 %
du bord supérieur.
Exercice 13 : Fixez l’image de fond de l’exemple précédent pour qu’elle ne défile pas.
Qu’observe-t-on quand on redimensionne la fenêtre du navigateur ?
Exercice 14 : Écrivez tous les styles des exercices précédents en utilisant la propriété
raccourcie background quand cela est possible.
11
Créer des bordures, marges,
espacements et contours
CSS définit un espace dans la page pour chaque élément de la hiérarchie du document
XHTML. C’est ce que l’on nomme communément le modèle de boîte de CSS. La boîte
associée à chaque élément conditionne la surface, et éventuellement la position qu’il a
dans la page, et donc, la position des boîtes des autres éléments par rapport à lui. Dans le
modèle de boîte, chaque élément visuel a un contenu direct ou indirect que nous pouvons
dimensionner, mais il peut également avoir un espacement, une bordure et une marge par
rapport aux boîtes des éléments environnants.
Figure 11-1
Le modèle de boîte
CSS 2
donc dans le code XHTML. Nous allons maintenant faire le tour de ces différents élé-
ments de présentation. Pour déterminer l’encombrement total d’un élément dans le
navigateur, il ne faudra pas perdre de vue que les dimensions de tous ces éléments
s’additionnent. Si, par exemple, nous définissons une largeur de 500 pixels pour un
élément, un espacement de 20 pixels, une bordure de 5 pixels et une marge de 15
pixels, le rendu visuel de l’élément aura une largeur totale de 15 + 5 + 20 + 500 + 20
+ 5 + 15 = 580 pixels. Les anciennes versions de certains navigateurs très connus pre-
naient comme dimension totale celle qui avait été définie avec la propriété width et
réduisaient donc d’autant le contenu pour placer marge, bordure et espacement. Les
navigateurs modernes réalisent bien l’addition de toutes les valeurs et il ne faut donc
pas oublier d’en tenir compte pour éviter les débordements par rapport à la fenêtre du
navigateur, ce qui obligerait l’utilisateur à faire défiler la page en largeur, ce qui est
désagréable et fait perdre du temps.
Les bordures
La création de bordures autour d’un élément permet d’obtenir des effets visuels qui atti-
rent l’attention et permettent également par exemple de mettre davantage en évidence la
structure de la page. En CSS, nous pouvons attribuer à une bordure des caractéristiques
variées, telles qu’un style, une largeur et une couleur.
Le style de la bordure
CSS offre de nombreuses possibilités de style pour les bordures grâce à la propriété bor-
der-style. Elle peut prendre un grand nombre de valeurs auxquelles sont attachés des
effets visuels divers et variés propres à satisfaire les designers de site. Cette propriété
s’applique à tous les éléments visuels et sa syntaxe est la suivante :
border-style : [none | hidden | <style>] {1,4} | inherit
La valeur none indique qu’il n’y a pas de bordure. La valeur hidden donne le même résul-
tat pour la plupart des éléments sauf les cellules de tableaux. Avec la valeur inherit, la
bordure a explicitement le même style que son élément parent. Le paramètre style peut
prendre une des valeurs suivantes :
• dotted : bordure en pointillés courts (figure 11-2, repère ) ;
• dashed : bordure en tirets longs (figure 11-2, repère ) ;
• solid : bordure pleine continue (figure 11-2, repère ) ;
• double : bordure constituée de deux traits parallèles continus (figure 11-2, repère ).
Si la largeur de bordure est insuffisante, un seul trait apparaît (pour définir la largeur,
voir la propriété border-width) ;
• groove : bordure en creux. L’effet de creux est créé par l’emploi de couleurs différentes
pour les côtés (figure 11-2, repère ) ;
Les styles CSS
278 PARTIE II
• ridge : bordure en relief. Même remarque sur la couleur des côtés (figure 11-2,
repère ) ;
• inset : bordure en creux dont chaque côté n’a qu’une seule couleur (figure 11-2,
repère
) ;
• outset : bordure en relief dont chaque côté n’a qu’une seule couleur (figure 11-2,
repère ).
La notation {1,4} précise qu’il est possible d’établir de 1 à 4 valeurs si l’on veut définir
séparément les styles des bordures haute, droite, basse et gauche, dans cet ordre (pour
mémoriser cet ordre, pensez au sens des aiguilles d’une montre en partant de midi).
Cette multiplication des valeurs obéit aux règles suivantes :
• En donnant une seule valeur, elle s’applique aux quatre côtés.
• En donnant deux valeurs, la première s’applique aux côtés haut et bas, et la seconde
aux côtés droit et gauche.
• En donnant trois valeurs, la première s’applique au côté haut, la suivante aux côtés
droit et gauche, et la dernière au bord bas.
Si vous voulez éviter de mémoriser toutes ces règles, il vaut mieux définir soit une seule,
soit quatre valeurs explicitement, le code étant alors immédiatement plus lisible.
L’exemple 11-1 contient la définition de la couleur d’avant-plan qui est aussi celle des
bordures (repère ). Vient ensuite la définition de huit classes pour les éléments <h1>
(repères à ) qui permet de visualiser tous les styles de bordures possibles.
<body>
<h1 class="dotted">XHTML et CSS</h1>
<h1 class="dashed">XHTML et CSS</h1>
<h1 class="solid">XHTML et CSS</h1>
<h1 class="double">XHTML et CSS</h1>
<h1 class="groove">XHTML et CSS</h1>
<h1 class="ridge">XHTML et CSS</h1>
<h1 class="inset">XHTML et CSS</h1>
<h1 class="outset">XHTML et CSS</h1>
</body>
</html>
Figure 11-2
Les différents styles
de bordures
Nous pouvons définir individuellement chacune des bordures d’un élément en utilisant
les propriétés suivantes :
• border-top-style : définit le style de la bordure haute ;
• border-right-style : définit le style de la bordure droite ;
• border-bottom-style : définit le style de la bordure basse ;
• border-left-style : définit le style de la bordure gauche.
Dans l’exemple 11-2, nous définissons avec les propriétés susmentionnées quatre styles
différents pour les bordures des titres <h1> (repère ). Nous procédons de même en
Les styles CSS
280 PARTIE II
définissant deux styles différents pour les bordures gauche et droite des paragraphes <p>
(repère ). L’utilisation de la pseudo-classe :hover permet de modifier individuellement
chacune de ces bordures quand le curseur survole la boîte du paragraphe (repère ).
Figure 11-3
Les bordures individuelles
Créer des bordures, marges, espacements et contours
CHAPITRE 11
281
La largeur de la bordure
En donnant un style aux bordures, elles prennent une largeur fixe comme nous l’avons
constaté à la figure 11-2. Nous pouvons donner une largeur particulière aux bordures
d’un élément grâce à la propriété border-width, dont la syntaxe est la suivante :
border-width: <bord>{1,4} | inherit
Les meilleurs effets visuels sont souvent obtenus en ne définissant une bordure que sur
un ou deux côtés de la boîte de contenu. On procède à ces définitions à l’aide des propriétés
suivantes :
• border-top-width : pour la bordure haute ;
• border-right-width : pour la bordure droite ;
• border-bottom-width : pour la bordure basse ;
• border-left-width : pour la bordure gauche.
Leur syntaxe est la même que celle de la propriété border-width mais ne doit bien sûr
comporter qu’une seule valeur.
L’exemple 11-3 illustre les différentes possibilités de définition de la largeur des bordu-
res. Le premier style définit la couleur d’avant-plan, et donc également celle des bordures
Les styles CSS
282 PARTIE II
(repère ). Pour l’élément <div>, la largeur des bordures est fixée à la valeur double et
des largeurs différentes sont créées pour les côtés haut, bas et gauche au moyen d’unités
différentes (repère ). Pour les paragraphes (repère ), la largeur est définie à l’aide du
mot-clé thick (repère ) tandis que pour l’élément <span> (repère ), qui est inclus dans
<p>, la largeur est fixée à la valeur medium (repère ). Pour cet élément, le style des bor-
dures est modifié dynamiquement à l’aide d’un code JavaScript et passe de inset, quand
le curseur survole le texte (repère
), à outset, quand il le quitte (repère ). Pour les
titres <h1> (repères
et ), la largeur est définie en unités ex et le style utilise la pro-
priété width pour limiter la largeur de la boîte associée à l’élément à 50 % de celle de son
parent <div> (repère ).
Figure 11-4
La largeur des
bordures
La couleur de la bordure
Afin d’améliorer encore l’aspect des bordures, nous pouvons définir une couleur pour
chaque bordure d’élément avec la propriété border-color dont la syntaxe est la suivante :
border-color: [<couleur> | transparent]{1,4} | inherit
Le paramètre <couleur> est donné par un code de couleur hexadécimal précédé du sym-
bole dièse (#), un mot-clé (voir annexe C) ou les composantes RGB de la couleur don-
nées comme paramètres de la fonction rgb().Le mot-clé transparent indique que la bordure
sera invisible et laissera voir la couleur du fond, ce qui peut constituer un effet particulier
ou simplement créer une marge autour du contenu. Comme pour la propriété border-
width, l’indication {1,4} précise qu’il est possible de définir individuellement la couleur
des bordures des côtés haut, droit, bas et gauche avec les mêmes conditions d’attribution
en tournant dans le sens des aiguilles d’une montre. Il est à noter que si nous définissons
une largeur de bordure avec la propriété border-width, mais pas sa couleur, le navigateur
crée une bordure dont la couleur est celle de la propriété color attribuée au texte. Mais il
est encore possible de définir individuellement la couleur de chaque côté de la bordure à
l’aide des propriétés suivantes :
• border-top-color : pour la couleur de la bordure haute ;
• border-right-color : pour la couleur de la bordure droite ;
• border-bottom-color : pour la couleur de la bordure basse ;
• border-left-color : pour la couleur de la bordure gauche.
Les styles CSS
284 PARTIE II
En modifiant les définitions des styles de l’exemple 11-3 afin d’obtenir pour les bordures
des couleurs personnalisées et qui soient différentes de la couleur d’avant-plan définie
pour l’élément <body> (repère ), nous obtenons le code de l’exemple 11-4. Les paragra-
phes ont alors des bordures jaunes (repère ). Pour l’élément <div>, la propriété border-
color est définie avec les valeurs red, blue et yellow, et nous obtenons donc une bordure
haute rouge, des bordures droite et gauche bleues et une bordure basse jaune (repère ).
L’élément <span> a encore une bordure outset dont la couleur est maintenant bleue
(repère ). Quant aux titres <h1>, leur couleur de bordure est définie avec la fonction
rgb() (rgb(25,255,50)) en vert (repère ).
<div>
<h1>XHTML</h1>
<p> In principio creavit
<span onmouseover="[Link]=‘double’"
➥ onmouseout="[Link]=‘solid’">
caelum et terram terra autem erat inanis et vacua et tenebrae super faciem
</p>
<h1>CSS 2.1</h1>
</div>
</body>
</html>
La figure 11-5 présente le résultat obtenu par la définition de ces bordures et la modification
du style du premier titre <h1> en cas de survol.
Figure 11-5
Modification dynamique de bordure
Les marges
Afin d’aérer le contenu d’une page et en particulier l’espace entre le rendu d’un élément
et ses voisins dans la page, nous pouvons définir une marge autour de chaque élément.
Cette dernière est située, d’après le modèle de boîtes CSS illustré à la figure 11-1, à
Créer des bordures, marges, espacements et contours
CHAPITRE 11
287
Le paramètre large est un nombre entier suivi d’une unité (px, ex, em, %, mm, cm, in, pc,
pt). Les marges peuvent être négatives, et dans ce cas la boîte d’un élément sort de celle
de son parent.
Si la largeur de la marge est donnée en pourcentage, elle est calculée par rapport à celle
du bloc parent. La notation {1,4} permet ici encore de définir de une à quatre marges dans
le sens des aiguilles d’une montre (haut, droit, bas, gauche), et ce avec les mêmes condi-
tions d’affectation si nous ne définissons qu’une, deux ou trois valeurs. La valeur inherit
applique la marge de l’élément parent.
Comme dans les cas précédents de bordures, il est possible de définir individuellement
chaque marge. Nous utiliserons les propriétés suivantes pour définir par exemple une
seule marge (ce qui est aussi possible avec la propriété border en mettant les autres à 0),
ou encore pour agir dynamiquement sur une seule des marges.
• margin-top : définit la marge haute ;
• margin-right : définit la marge droite ;
• margin-bottom : définit la marge basse ;
• margin-left : définit la marge haute.
Les valeurs à donner à ces propriétés sont les mêmes que celles de border auxquelles
s’ajoute la valeur auto pour laquelle seul le navigateur détermine la valeur de la marge.
Nous éviterons ce type de valeur qui laisse l’initiative aux navigateurs et risque ainsi de
créer des effets divergents. Il est préférable de définir explicitement une valeur pour créer
un effet de présentation donné.
Dans l’exemple 11-6, nous créons des marges pour les différents éléments de la page.
Les couleurs de fond qui leur sont attribuées permettent de mieux visualiser ces derniè-
res. Les titres <h1> ont des marges haute et basse de 40 pixels et des marges droite et
gauche de 10 % de la largeur de leur élément parent (repère ). Pour le premier
(repère ), inclus dans <body>, les marges droite et gauche sont donc de 10 % de la lar-
geur de la fenêtre du navigateur. Elles vont donc évoluer si nous redimensionnons cette
dernière. Pour l’élément <div> (repère ), seule la marge gauche est définie à 5 % de la
largeur de son parent (ici, il s’agit de <body>)(repère ). En conséquence, le deuxième
et le troisième élément <h1> (repères et ) qui sont inclus dans <div> ont une marge
gauche totale dans la page supérieure à celle du premier car elle représente la somme
des 5 % de marge de <div> et des 10 % de marge de <h1>. La marge des paragraphes est
Les styles CSS
288 PARTIE II
donnée par trois valeurs (repère ) ; nous obtenons donc une marge supérieure de
10 pixels, des marges droite et gauche négatives de – 1 em qui font déborder le contenu
de l’élément <p> (repère
) à droite et à gauche de son parent <div>, et une marge basse de
15 pixels.
La figure 11-6 présente le résultat obtenu. Nous pouvons y remarquer que l’espace entre
le second titre <h1> et le paragraphe n’est pas la somme des marges de chacun d’eux
comme on pouvait s’y attendre mais qu’elle vaut 40 pixels. En effet, les marges basse de
<h1> et haute de <p> ont fusionné, et ce, de la manière suivante :
• Les marges hautes et basses de boîtes générées par des éléments de type bloc fusion-
nent à condition d’être dans un flux normal, c’est-à-dire de ne pas utiliser de
propriété de positionnement (comme float ou position que nous aborderons au cha-
pitre 13). Dans ce cas, la marge finale a la plus grande des deux valeurs des éléments
contigus. Si une des marges est négative, la marge résultante est la différence des
deux marges. Si les deux marges sont négatives, celle qui a la plus grande valeur
absolue l’emporte.
Créer des bordures, marges, espacements et contours
CHAPITRE 11
289
• Les marges entre les boîtes flottantes (voir la propriété float) ou celles qui sont posi-
tionnées absolument ou relativement (voir la propriété position au chapitre 13) ne
fusionnent jamais.
Figure 11-6
Définition
des marges
Les espacements
En nous référant une fois de plus au modèle des boîtes illustré à la figure 11-1, nous pou-
vons constater qu’il est possible de définir une zone située entre la boîte de contenu d’un
élément et sa bordure. Cette zone qui est nommée l’espacement (padding) permet
comme la propriété margin d’aérer la présentation mais cette fois non pas entre deux élé-
ments voisins mais directement autour du contenu, qu’il existe une bordure définie expli-
citement ou pas. Contrairement à la marge, l’espacement a la même couleur ou image de
fond que le contenu de l’élément qu’elle entoure, telles que ces dernières sont définies
par les propriétés background-color, background-image ou background. Cet espacement est
créé par la propriété padding qui s’applique à tous les éléments XHTML, excepté ceux
qui sont inclus dans l’élément <table> (<tr>, <td>, <th>, <thead>, <tbody>, <tfoot>, <colgroup>,
<col />). La syntaxe de la propriété padding est similaire à celle de margin :
padding: <large>{1,4} | inherit
Les valeurs du paramètre large sont données par un à quatre nombres positifs qui défi-
nissent dans l’ordre les espacements haut, droit, bas et gauche de l’élément. Si nous
définissons une seule valeur, elle s’applique ici encore à toutes les marges. Si nous en
Les styles CSS
290 PARTIE II
définissons deux, la première s’applique aux espacements haut et bas et la deuxième aux
espacements droit et gauche. Si nous définissons trois valeurs, la première s’applique en
haut, la deuxième à droite et à gauche, et la troisième en bas. Il est souvent plus simple
de donner quatre valeurs explicites, dont certaines nulles.
Comme pour les propriétés de bordure ou de marge vues précédemment, il est encore
possible de définir individuellement chacun des espacements d’un élément au moyen des
propriétés suivantes :
• padding-top : définit l’espacement haut ;
• padding-right : définit l’espacement droit ;
• padding-bottom : définit l’espacement bas ;
• padding-left : définit l’espacement gauche.
Les valeurs possibles et les restrictions sont les mêmes que pour padding.
Dans l’exemple 11-7, nous créons des espacements différents pour quatre paragraphes et
des couleurs de fonds qui n’ont ici d’autre rôle que de bien matérialiser les limites de la
boîte de chaque élément.
L’espacement du bloc <div> parent de tous les paragraphes est de 20 pixels sur chacun de
ses côtés (repère ). L’espacement de chacun des trois premiers paragraphes (repères ,
et ) est défini dans une classe particulière, en pixels, en em et en pourcentage (repères
, et ). L’espacement du dernier paragraphe (repère ) a la valeur inherit et va
donc hériter de la valeur définie pour son élément parent <div> (repère ), ici donc de la
valeur 20 pixels (l’héritage n’est pas réalisé dans Explorer, ce qui montre une fois de plus
l’intérêt de la définition explicite de la valeur souhaitée, sans compter sur l’héritage). Les
éléments <h1> inclus directement dans le corps de la page (repère ) n’ont qu’un espace-
ment haut de 0,5 em (repère ), alors que ceux qui sont inclus dans <div> (repère
) ont
en plus un espacement gauche de 200 pixels (repère
).
</style>
</head>
<body>
<h1>XHTML</h1>
<div>
<h1>XHTML</h1>
<p class="retrait1">In principio creavit Deus caelum et terram terra autem erat
➥ inanis . . .</p>
<p class="retrait2">In principio creavit Deus caelum et terram terra autem erat
➥ inanis . . .</p>
<p class="retrait3">In principio creavit Deus caelum et terram terra autem erat
➥ inanis . . .</p>
<p class="retrait herit">In principio creavit Deus caelum et terram terra autem
➥ erat inanis . . .</p>
</div>
</body>
</html>
Figure 11-7
Création
d’espacements
autour des contenus
Les styles CSS
292 PARTIE II
Les contours
Nous avons vu que les marges situées à l’extérieur des bordures sont transparentes. Dans
cet espace extérieur aux bordures, il est possible de créer des contours qui ont une épais-
seur, un style et une couleur. Ces contours vont avoir le même aspect qu’une bordure,
mais avec deux différences de comportement :
• Les dimensions d’un contour ne sont pas prises en compte dans le modèle de boîte et
ne peuvent donc pas modifier les dimensions totales de la boîte la plus externe. Les
éléments contigus à la boîte générale pour un élément ne se trouvent pas décalés par
l’existence d’un contour comme ils le sont par une marge. L’inconvénient de cet état
de fait est qu’un contour très large peut se superposer aux éléments voisins, et en
cacher une partie.
• Les contours ne forment pas une boîte rectangulaire et ils peuvent s’étendre sur deux
lignes (voir la figure 11-8 pour l’élément <span>).
Les propriétés que nous allons utiliser pour créer des contours sont théoriquement appli-
cables à tous les éléments XHTML. Cependant, à ce jour, seul le navigateur Opéra réalise
ces contours à peu près correctement. Les autres navigateurs (Mozilla, Firefox, Net-
scape) ne les affichent que dans certaines conditions voire pas de tout (Explorer 6). En
pratique, les propriétés peuvent être appliquées pour faire apparaître dynamiquement un
contour autour de certains éléments, comme des images des boutons ou des zones de sai-
sie de formulaire, en réponse aux attributs onfocus ou onmouseover, gérés par les pseudo-
classes :focus et :hover, ou des scripts JavaScript.
Le style du contour
Le style du contour est la première des propriétés à définir pour obtenir un affichage, les
autres ayants des valeurs par défaut. Il est créé grâce à la propriété outline-style, dont la
syntaxe est similaire à celle de border-style :
outline-style: none | <style> | inherit
La valeur none supprime tout contour et le paramètre <style> peut prendre une des valeurs
suivantes :
• dotted : bordure en pointillés courts (figure 11-2, repère ) ;
• dashed : bordure en tirets longs (figure 11-2, repère ) ;
• solid : bordure pleine continue (figure 11-2, repère ;
• double : bordure constituée de deux traits parallèles continus (figure 11-2, repère ).
Si la largeur de bordure est insuffisante, un seul trait apparaît (pour définir la largeur,
voir la propriété border-width) ;
• groove : bordure en creux. Les quatre côtés sont de couleur différente ce qui permet de
créer cet effet de creux (figure 11-2, repère ) ;
Créer des bordures, marges, espacements et contours
CHAPITRE 11
293
• ridge : bordure en relief. Même remarque sur la couleur des côtés (figure 11-2,
repère ) ;
• inset : bordure en creux dont chaque côté n’a qu’une seule couleur (figure 11-2,
repère
) ;
• outset : bordure en relief dont chaque côté n’a qu’une seule couleur (figure 11-2,
repère ).
Notons que, contrairement aux bordures, il n’est pas possible de définir une valeur de
style différente pour chaque côté du contour.
La couleur du contour
La définition explicite de la couleur du contour est obtenue grâce à la propriété outline-
color, dont la syntaxe se rapproche de celle de border-color et est la suivante :
outline-color: <couleur> | invert | inherit
Le paramètre <couleur> est donné par un code de couleur, un mot-clé ou la fonction rgb ()
comme habituellement. Le mot-clé invert permet d’obtenir un contour dont la couleur
est l’inversion vidéo de la couleur du fond sur lequel il est dessiné. Nous sommes ainsi
assuré d’obtenir un effet visuel qui attire l’attention. Comme pour le style, la couleur du
contour s’applique à ses quatre côtés en même temps. Si nous définissons cette propriété,
il faut également obligatoirement définir outline-style, sinon aucun contour ne s’affi-
chera.
Pour créer un contour sur une zone de saisie quand elle reçoit le focus avec le curseur, la
touche de tabulation ou un raccourci clavier, nous écrirons par exemple le code suivant :
input: focus{outline-style: dotted; outline-color: orange;}
La largeur du contour
Nous pouvons enfin définir une largeur pour le contour au moyen de la propriété outline-
width, dont la syntaxe est la suivante :
outline-width: <long> | thin | medium | thick | inherit
Les paramètres sont les mêmes que ceux de la propriété border-width. Les mots-clés thin,
medium et thick correspondent respectivement à un contour fin, moyen et épais, leur
dimension réelle étant fonction du navigateur. Pour obtenir une dimension fixe, nous pré-
férons définir une longueur fixe dans les unités habituelles (px, em, ex, mm, cm, in, pc, pt).
Comme nous l’avons déjà signalé, les dimensions du contour ne sont pas prises en
compte dans le calcul de la dimension totale de la boîte générée pour un élément. Si le
contour est plus large que la marge, il y a débordement sur les éléments voisins. Il faut
donc veiller à ne pas définir une largeur de contour inesthétique.
Les styles CSS
294 PARTIE II
L’exemple 11-8 permet de mettre ces propriétés en œuvre. Les éléments <div> y ont une
bordure et une marge, mais également un contour bleu de 7 pixels avec le style double
(repère ). Cela s’applique au premier élément <div> (repère ). L’association du
sélecteur d’attribut id et de la pseudo-classe :hover permet de modifier dynamiquement à
la fois le contour mais aussi l’espacement et la bordure de l’élément (repère ) du
second élément <div> (repère
). Le survol du bouton inclus dans le paragraphe permet
de faire apparaître un contour autour de celui-ci (repère ). Le contour défini dans la
classe contour (repère ) et appliqué à un élément <span> (repère
) permet de constater
que ce dernier peut apparaître sur plusieurs lignes comme le montre la figure 11-8. Enfin,
la pseudo-classe :focus associée à l’élément <input /> (repère ) permet d’afficher un
contour sur une zone de saisie de texte (repère ) quand elle reçoit le focus.
La figure 11-8 montre le résultat obtenu quand la zone de saisie de texte a le focus et
quand la seconde division est survolée par le curseur. Nous pouvons remarquer que son
contour déborde en haut et en bas sur les éléments adjacents.
Figure 11-8
Les contours
obtenus dans
Opera 8
Exercices
Exercice 1 : Reproduisez le modèle de boîte de CSS (sans consulter la figure 11-1 bien
sûr).
Exercice 2 : Créez une bordure double bleue de 7 pixels pour les divisions, puis une
bordure basse rouge de style inset et de 1,2 em pour les titres <h2> inclus dans ces
éléments <div>.
Exercice 3 : Créez des bordures jaune vif pour les éléments <input /> de type text qui
apparaissent uniquement quand ils reçoivent le focus.
Exercice 4 : Créez une bordure inférieure double bleue pour les liens <a> ; modifiez
dynamiquement la couleur de cette bordure quand ces derniers sont survolés.
Exercice 5 : Créez une bordure d’une couleur différente pour chaque côté de la boîte de
l’élément <p>.
Exercice 6 : Créez une marge gauche de 10 % pour les paragraphes. Réduire dynami-
quement cette marge à 2 % quand ils sont survolés par le curseur afin de les mettre en
évidence.
Exercice 7 : Créez une bordure simple de 3 pixels et un espacement de 5 pixels pour les
éléments <blockquote>. Augmentez cet espacement à 10 % et rendez la bordure double
quand ces éléments sont survolés.
Les styles CSS
296 PARTIE II
Ceux qui ont connu l’élément <font>, qui permettait de définir la taille du texte en HTML
3.2, ne risquent pas de regretter sa disparition, tant il leur paraîtrait pauvre par rapport
aux multiples possibilités de gestion des polices offertes par les propriétés CSS.
Dans une page web, le texte constitue souvent l’essentiel du contenu. Pour la définition
de ses styles, nous allons suivre la même logique que celle mise en œuvre dans un traite-
ment de texte. Nous pouvons par exemple agir sur la police de caractères et leur taille,
puis sur leur style physique comme le passage en gras de certaines parties du texte en
gras, en italique ou souligné, ou bien encore comme la création de lettrine.
Les anciennes définitions de styles des liens, écrites à l’aide d’attributs de l’élément
<body>, sont aujourd’hui obsolètes. Elles sont désormais remplacées par l’utilisation de
pseudo-classes spécifiques.
Les polices
La plupart des polices de caractères que nous utilisons quotidiennement, telles que Times
New Roman ou Arial, sont en réalité des familles de polices car elles se déclinent en plu-
sieurs polices réelles de types différents, par exemple une série de caractères normaux,
une série en gras, une série en italique ainsi que les diverses combinaisons possibles. La
propriété font-family permet de définir une ou plusieurs familles de polices par leur nom.
Si ce nom est composé et contient des espaces, il doit être écrit entre guillemets. En sup-
plément, CSS propose cinq familles de polices génériques, le navigateur pouvant ainsi
choisir la plus proche si celle qui est déclinée explicitement n’est pas disponible sur le
Les styles CSS
298 PARTIE II
poste client. Ces familles génériques sont définies à l’aide des mots-clés suivants qui,
pour leur part, ne doivent pas être écrits entre guillemets.
• serif : il s’agit des polices à empattements et proportionnelles, c’est-à-dire pour les-
quelles tous les caractères n’ont pas la même largeur (par exemple « w » et « i »). On
trouve dans cette famille les polices Times New Roman, Baskerville, Georgia,
Modern.
• sans-serif : il s’agit des polices sans empattement et proportionnelles. On trouve dans
cette famille les polices Arial, Abadi, Helvetica, Verdana.
• cursive : il s’agit des polices dont l’aspect ressemble à l’écriture manuscrite. Elles
sont également proportionnelles. On trouve dans cette famille les polices Script et
Vivaldi.
• monospace : il s’agit des polices non proportionnelles dans lesquelles chaque carac-
tère occupe la même largeur, comme dans une machine à écrire ou un éditeur de
code comme Edit Plus. On trouve dans cette famille des polices telles que Courier
New.
• fantasy : on classe dans cette famille toutes les polices originales ne rentrant pas dans
les catégories précédentes. Le rendu final de ce type de police est assez aléatoire selon
les navigateurs. On peut par exemple citer la police Comic Sans MS.
Voici la syntaxe de la propriété font-family :
font-family :[[<nom> |<generic>],]* | inherit
Nous pouvons définir plusieurs noms de familles de polices à la suite en les séparant par
une virgule, puis terminer par un nom de famille générique. Dans ce cas, le navigateur
tente d’utiliser la première en priorité et, si elle n’est pas disponible, il recherche la
deuxième, et ainsi de suite. Si aucune police ne correspond aux noms des familles indi-
quées, il utilisera la police générique précisée. Il est donc conseillé de toujours indiquer
une famille générique en fin de liste pour obtenir un résultat ressemblant à ce qui est
attendu.
L’exemple 12-1 permet de mettre en œuvre cette propriété pour différents éléments. La
police par défaut de la page est définie comme étant « Times New Roman » avec le
sélecteur body (repère ). Cette police est donc applicable à tous les éléments n’ayant
pas de style propre, par exemple <h1> (repère ) et le troisième paragraphe <p> (repère
).
Le premier paragraphe (repère
) utilise une police Arial grâce à un sélecteur d’id
(repère ). Les classes [Link] (repère ) et [Link] (repère ) permettent respec-
tivement d’appliquer une police de type script au deuxième paragraphe (repère ) et la
police Comic Sans MS au dernier (repère ). Pour l’élément <code> (repère ) inclus
dans le premier paragraphe, nous définissons une police à espacement fixe, Courier
New (repère ).
Le style du texte et des liens
CHAPITRE 12
299
La figure 12-1 présente le résultat obtenu. Nous pouvons remarquer qu’à taille égale, la
police script Vivaldi est beaucoup moins lisible que les autres.
Les styles CSS
300 PARTIE II
Figure 12-1
Les polices du texte
Le mot-clé medium correspond à la taille normale choisie par l’utilisateur dans les préfé-
rences de son navigateur ou définie par défaut par ce dernier. Un coefficient multi-
plicateur de 1,2 est appliqué entre chaque taille et la suivante (il était de 1,5 en CSS 1 et
il garde cette valeur dans les anciens navigateurs).
Si, par exemple, la taille correspondant au mot-clé medium est de 15 pixels, la taille cal-
culée définie par small sera de 15 / 1,2 = 12,5 (arrondi à 12), et celle définie par large
de 15 ¥ 1,2 = 18 pixels, et ainsi de suite en montant ou en descendant dans l’ordre des
mots-clés. L’exemple 12-2 permet de tester ces différentes tailles de caractères. La
taille des caractères de la page est définie par défaut avec le mot-clé large pour le sélec-
teur body (repère ) ; cette valeur est donc héritée par le paragraphe <p> (repère ).
Nous définissons ensuite les tailles des caractères des éléments <h1> à <h6> (repères
à ) avec les mots-clés de valeurs décroissantes, de xx-large à x-small (repères à
). La
taille du contenu de l’élément <address> est fixée à la valeur xx-small. Le pseudo-
élément :first-letter est utilisé pour créer une lettrine de taille x-large (repère )
pour le paragraphe situé en fin de page (repère ) et doté d’une couleur de fond
(repère
). La couleur de fond de la lettrine met en évidence son indépendance par
rapport au texte du paragraphe.
address{font-size: xx-small;}
p:first-letter{font-size: xx-large; color: #000; background-color: #AAA;}
p{background-color: #EEE;}
</style>
</head>
<body>
<h1>Les tailles des caractères : xx-large</h1>
<h2>Les tailles des caractères : x-large</h2>
<h3>Les tailles des caractères : large</h3>
<h4>Les tailles des caractères : medium</h4>
Les styles CSS
302 PARTIE II
Figure 12-2
Les tailles absolues des polices
Dans l’exemple 12-3, la taille par défaut est définie pour <body> à la valeur medium (repère )
Le texte de l’élément <h1> (repère
) est plus grand car sa taille est définie grâce au mot-
clé larger (repère ). Le texte de la première division <div> (repère ) hérite de la taille
medium. Le texte de la seconde division <div> (repère ) a une taille explicite définie à la
valeur x-large par la classe [Link] (repère ). Le texte de l’élément <p> (repère
)
inclus dans cet élément <div> est plus petit que celui de son parent car sa taille est définie
par la valeur smaller (repère ), et celui de <span> (repère ) est encore plus petit, car il
est aussi défini à la valeur smaller, l’élément <code> étant enfant de l’élément <p>. L’effet
de la valeur smaller est donc bien cumulatif à chaque inclusion d’élément. Le texte qui
suit (repère ) étant directement inclus dans la division, il a la taille x-large. Le dernier
paragraphe (repère ) hérite explicitement de la taille définie pour la page (repère ).
En supposant que l’utilisateur ait classé par défaut dans son navigateur une taille stan-
dard de 16 pixels, correspondant à la valeur medium, nous obtiendrions les tailles de
polices suivantes :
• pour <h1> : 16 ¥ 1,2 = 19,2 pixels arrondis à 19 pixels ;
• pour le premier élément <div> : 16 pixels par héritage ;
• pour le contenu direct du second élément <div> : 16 ¥ 1,2 ¥ 1,2 = 23 pixels ;
• pour le paragraphe <p> inclus dans <div> : 23 / 1,2 = 19 pixels ;
• pour l’élément <span> inclus dans <p> : 19 / 1,2 = 16 pixels.
Toutes ces tailles de caractères sont donc liées à la taille par défaut définie dans le navi-
gateur.
</style>
</head>
<body>
<h1>Les tailles relatives des caractères</h1>
<div> MEDIUM (héritée de body) : In principio creavit Deus caelum et terram
➥ terra autem erat inanis et vacua et tenebrae super faciem abyssi et spiritus
➥ Dei . . .</div>
<div class="xlarge">x-large : In principio creavit Deus caelum et terram autem
➥ erat inanis et vacua et tenebrae super faciem abyssi et spiritus Dei ferebatur
➥ super aquas
<p class="small"> SMALLER : In principio creavit Deus
<span class="petit">SMALLER : caelum et terram terra autem erat inanis
</span> et vacua et tenebrae super faciem abyssi et spiritus Dei ferebatur
➥ super aquas
</p>
In principio creavit Deus caelum et terram
</div>
<p class="herite"> Cette taille de la police est héritée de body</p>
</body>
</html>
La figure 12-3 présente le résultat obtenu pour ces définitions de tailles relatives.
Figure 12-3
Les tailles relatives des polices
Le style du texte et des liens
CHAPITRE 12
305
Figure 12-4
Les tailles
dimensionnées
des polices
de 150 %, soit 24 pixels (repère ). Cette division contient un paragraphe avec une
taille de police fixée à 70 % (repère ), donc 70 % de 24 pixels = 17 pixels, puisque la taille
dans son parent est de 24 pixels. L’élément <p> (repère
) contient à son tour un élé-
ment <span> (repère ) dont le contenu a une taille de 60 % de celle de son parent, soit
60 % de 17 pixels = 10 pixels (repère ). Enfin, le dernier paragraphe (repère ) hérite
explicitement de la taille de son parent, soit <body> (repère ).
En appliquant ces styles au même code XHTML, nous obtenons l’affichage présenté à la
figure 12-5.
Figure 12-5
Les tailles en
pourcentage
La graisse du texte
On nomme graisse d’une police de caractère le fait qu’elle soit en caractère gras ou mai-
gre. Cette caractéristique est définie par la propriété font-weight, dont les valeurs sont des
mots-clés ou des nombres. La syntaxe de la propriété font-weight est la suivante :
font-weight : normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 |
➥ 700 | 800 | 900 | inherit
Les valeurs relatives bolder et lighter indiquent respectivement que la police doit être
plus grasse ou plus maigre que celle de l’élément parent. Notons que si la police de l’élé-
ment parent est déjà la plus grasse ou la plus maigre, l’utilisation de bolder ou lighter
sera sans effet visible.
Les valeurs normal et bold définissent respectivement l’utilisation de la graisse allant de la
plus mince (valeur 100) à la plus forte (valeur 900). Nous précisons bien que cela est théo-
rique car, pour une police donnée définie avec la propriété font-family, nous ne disposons
pas de neuf graduations de graisse, mais en général de trois au maximum. L’équivalent
du mot-clé normal est la valeur 400 et celui du mot-clé bold est la valeur 700.
La valeur inherit permet comme d’habitude de choisir explicitement la même graisse
que celle de l’élément parent.
Le style du texte et des liens
CHAPITRE 12
309
Dans l’exemple 12-6, nous définissons la graisse de <body> à la valeur normal (repère )
qui s’applique aux éléments pour lesquels aucune graisse n’est définie explicitement. On
pourrait donc s’attendre à ce que les éléments <div> (repère ) et <h2> (repère
) aient
une graisse normale. Si c’est bien le cas pour <div>, il n’en est rien pour <h2> qui apparaît
en gras, comme on peut le constater à la figure 12-6. En effet, il conserve son style par
défaut qui est inclus dans le navigateur et qui apparaît en gras. Il faut donc se méfier de la
feuille de style par défaut et ne pas oublier ses caractéristiques. La graisse des éléments
<h1> et <em> est fixée à la valeur bolder (repère ), ils seront donc plus gras que leurs
parents. Le sélecteur [Link] (repère ) permet d’appliquer la valeur bold à une division
(repère ). Elle contient un élément <span> (repère
) pour lequel la graisse est fixée à
la valeur 300 (repère ). Les paragraphes ont quant à eux une graisse systématiquement
moins forte que leur parent (repère ).
Figure 12-6
La graisse du texte
ensuite deux classes pour l’élément <p> avec les valeurs respectives italic et oblique
(repères et ). Nous pouvons constater sur la figure 12-7 que leurs contenus ont la
même apparence. Les éléments <em> et <span> (repères et ), inclus dans les paragra-
phes (repères
et ), ayant un style explicite (repère ) n’héritent pas de leur parent
respectif.
Figure 12-7
Le style du texte
<body>
<h1>Style du texte <span>XHTML et CSS 2</span></h1>
<h2>ITALIC</h2>
<p class="italic">ITALIC : In principio creavit Deus <em>caelum et terram
➥ </em> terra autem erat inanis et vacua et tenebrae super faciem abyssi et
➥ spiritus Dei ferebatur super aquas dixitque Deus fiat lux et facta est lux
➥ et vidit . . .</p>
<h2>OBLIQUE</h2>
<p class="oblic">OBLIQUE : In principio creavit Deus <span>caelum et terram
➥ </span> terra autem erat inanis et vacua et tenebrae super faciem abyssi
➥ . . .</p>
</body>
</html>
</style>
</head>
<body>
<h1>style du texte <span>xhtml et CSS 2</span></h1>
<h2>XHTML : c’est l’avenir. <span class="raye">HtMl</span> est mort</h2>
<h3>XHTML 1.1 en est la dernière version parue </h3>
<p>Le langage <span class="cligno">XHTML 1.1</span> : Les éléments <span
➥ class="min">HTml, HeAd et BODY</span> constituent la base de la structure d’une
➥ page <span>xhtml</span>.<br />In principio creavit Deus caelum et terram
➥ terra autem erat inanis et vacua et . . . </p>
</body>
</html>
Les styles CSS
314 PARTIE II
Figure 12-8
Les styles
de modifications
du texte
Régler l’interligne
Afin d’améliorer la lisibilité du texte d’un élément, tel qu’un paragraphe, en « aérant »
son contenu, nous pouvons modifier l’interligne par défaut à l’aide de la propriété line-
height dont la syntaxe est :
line-height:normal | <nombre> | <long> | <pourcent> | inherit
La valeur de cette propriété, toujours héritée par les éléments enfants, est généralement
supérieure à celle de la propriété font-size. Dans ce cas, la différence entre ces deux
valeurs est la somme des deux demi-interlignes, situés l’un au-dessus de la ligne de texte
et l’autre en dessous. La valeur normal définit explicitement l’interligne par défaut corres-
pondant à la police employée. Le paramètre <nombre> définit un coefficient multiplicateur
qui est appliqué à la valeur de la taille de police définie par la propriété font-size. Les
valeurs de <nombre> peuvent être décimales mais pas négatives. Ce coefficient est hérité
par les éléments enfants. La valeur <long> est donnée par un nombre positif et une unité
de longueur habituelle relative ou absolue (em, ex, px, mm, cm, in, pc, pt). Il est enfin possi-
ble de définir une valeur en pourcentage qui sera appliquée à la taille de la police spécifiée
par la propriété font-size.
Dans l’exemple 12-9, nous définissons tout d’abord une taille de caractères de 20 pixels
(repère ). L’interligne pour l’élément <h1> est fixé à la valeur 2 em (repère ) et celui de
<h2> à 0,6 em (repère ). La figure 12-9 permet de constater que dans ce dernier cas les
caractères montants et descendant tels que « p » ou « f » sont plus hauts que l’interligne
et sortent de la boîte de contenu de l’élément matérialisée par une couleur de fond. Les
classes norm (repère ) et serre (repère ) permettent de comparer des paragraphes avec
l’interligne standard (repère ) et très resserré (repère
). Avec l’élément <span> (repère
),
qui utilise la classe norm, on peut matérialiser au moyen de sa couleur de fond les diffé-
rences d’interligne, quand il est inclus dans l’élément <h1>.
Le style du texte et des liens
CHAPITRE 12
315
<p class="serre">In principio creavit Deus caelum et terram terra autem erat
➥ inanis et vacua et tenebrae super faciem abyssi et spiritus. . .</p>
</body>
</html>
Figure 12-9
Réglages des
interlignes
Les styles CSS
316 PARTIE II
Chacun des paramètres de cette propriété globale peut prendre les valeurs qui corres-
pondent aux propriétés individuelles que nous venons d’aborder dans les sections
précédentes.
Nous pouvons par exemple créer le style suivant :
p{font:italic small-caps bold 14px/18px Arial, sans-serif
<body>
<h1>Style du texte <span>XHTML et CSS 2</span></h1>
<h2>XHTML : pas de quoi s’en faire un monde</h2>
<p class="droit">In principio creavit Deus caelum et terram terra autem erat
➥ inanis et vacua et tenebrae super faciem abyssi et spiritus Dei ferebatur
➥ . . .</p>
<p class="justifie">In principio creavit Deus caelum et terram terra autem
➥ erat inanis et vacua et tenebrae super faciem abyssi et spiritus Dei ferebatur
➥ super . . .</p>
</body>
</html>
Figure 12-10
Les styles
d’alignement
du texte
L’indentation du texte
L’indentation du texte est définie par défaut pour certains éléments comme <blockquote>,
ou les éléments de liste <ul> et <ol> par exemple. Nous pouvons définir une indentation
personnalisée mais il faut noter qu’elle ne s’applique qu’à la première ligne de texte, ce
qui, pour un titre, ne présente généralement pas de problème, mais ne correspond pas for-
cément à l’effet désiré pour un paragraphe. Pour décaler tout un paragraphe, il vaudra
mieux avoir recours soit à la définition d’une marge, soit à un positionnement de l’élément
(voir chapitre 13).
Le style du texte et des liens
CHAPITRE 12
319
L’indentation du texte peut être définie à l’aide de la propriété text-indent, dont la syn-
taxe est la suivante :
text-indent:<long>|<pourcent>|inherit
Elle est applicable aux éléments de bloc, aux cellules des tableaux, et elle est héritée.
Les valeurs d’indentation peuvent être définies à l’aide d’un nombre et d’une unité de
longueur habituelle (em, px, ex, mm, cm, in, pt, pc) ou en pourcentage. Dans ce dernier
cas, l’indentation est calculée par rapport à la largeur de l’élément qui contient le
texte. Les valeurs négatives sont admises pour créer une saillie à gauche (pour le sens
de lecture européen avec dir = "ltr") ou le contraire, sinon par rapport à l’alignement
normal.
Dans l’exemple 12-11, le titre <h1> (repère ) est indenté de 20 % de la largeur de l’élé-
ment, soit, faute de dimensionnement, de 20 % de la largeur de la fenêtre du navigateur
(repère ). Le titre <h2> est indenté de 5 em (repère ). Quand l’indentation s’applique
à des éléments imbriqués, nous pouvons obtenir des effets intéressants. L’indentation de
l’élément <div> est fixée à 15 % (repère ), ce qui s’applique à son contenu direct
(repère ). Pour l’élément <p> qu’elle contient, l’indentation est négative (repère ) et
elle contraint à définir une marge gauche, sinon le texte « XHTML 1.1 » n’est plus visi-
ble, car il disparaît sur la gauche de la page. Les listes (repère ) ont une indentation par
défaut mais nous pouvons la fixer à la valeur désirée pour personnaliser leur présentation
(repère ).
La figure 12-11 montre l’affichage obtenu. Les couleurs de fond permettent de situer les
différentes boîtes de contenu des éléments.
Figure 12-11
L’indentation
du texte
Le style du texte et des liens
CHAPITRE 12
321
</style>
</head>
<body>
<p>Le langage <span>XHTML 1.1 </span>: Les éléments html, head et body
➥ constituent la base de la structure d’une page <span>XHTML</span>.
➥ In principio creavit Deus caelum et terram terra autem erat inanis et . . .</p>
<p class="space">Le langage <span>XHTML 1.1 </span>: Les éléments html, head
➥ et body constituent la base de la structure d’une page <span>XHTML</span>.
➥ In principio creavit Deus caelum et terram terra autem erat inanis et . . .</p>
</body>
</html>
La figure 12-12 montre les grandes différences de présentation obtenues avec ces styles.
Figure 12-12
L’espacement des lettres et des mots
La dernière possibilité de gestion des espaces est offerte par la propriété white-space qui
permet de choisir le mode d’affichage des différents caractères d’espacement placés dans
le code XHTML. Nous retrouvons ici l’équivalent de ce qu’il est possible de faire avec
l’élément <pre>. Sa syntaxe est la suivante :
white-space: normal | pre | nowrap | inherit
La valeur normal crée l’affichage habituel des navigateurs (un seul espace dans la page,
quel qu’en soit le nombre dans le code). La valeur pre préserve tous les caractères
d’espacement présents dans le code. On peut alors directement positionner les différents
Le style du texte et des liens
CHAPITRE 12
323
contenus d’un élément dans l’éditeur de code, en particulier pour afficher des listings. La
valeur nowrap gère les espaces de la même façon que la valeur normal à la différence
quelle désactive en plus les sauts de lignes, le contenu étant donc affiché sur une seule
ligne, le visiteur est donc contraint d’effectuer un défilement horizontal, ce qui ne facilite
pas la lecture du contenu s’il est long.
L’exemple 12-13 présente une illustration de cette propriété avec la valeur pre (repère )
pour afficher du code XHTML contenu dans un élément <code> (repère ).
La figure 12-13 montre qu’avec la valeur pre tous les espaces et sauts de lignes sont bien
préservés dans la page affichée.
Figure 12-13
La gestion
des espaces
Pour créer des styles propres aux liens, nous utilisons les pseudo-classes qui leur sont
dédiées et des propriétés déjà rencontrées par ailleurs comme la couleur du texte, celle du
fond ou la définition d’une police particulière.
Les pseudo-classes :link, :visited et :active sont prévues à cet effet, les deux premières
n’étant applicables qu’aux liens. Nous rappelons ici leurs définitions, déjà vues au
chapitre 9 ;
• :link, qui s’applique au lien non encore visité avant toute action du visiteur. Elle permet
de définir les styles du lien, généralement textuel.
• :visited, qui s’applique au lien qui a déjà été visité au moins une fois. Elle permet par
exemple de changer la couleur du lien.
• :active, qui s’applique au lien au moment précis où l’utilisateur maintient le bouton
de la souris enfoncé, quand le curseur est positionné sur le texte du lien. Cette pseudo-
classe est mal prise en compte par les navigateurs et ne présente pas réellement un
intérêt fondamental aujourd’hui.
Nous pouvons également ajouter les pseudo-classes :focus et :hover qui ne sont pas spéci-
fiques aux liens mais que nous pouvons utiliser :
• :focus, qui permet de modifier le style d’un lien quand il reçoit le focus à l’aide de la
touche Tab ou d’un raccourci clavier.
• :hover, qui permet de donner un style particulier quand le curseur est positionné sur le
lien. L’effet réalisé, comme un changement de couleur par exemple, est réversible
instantanément quand le curseur quitte la zone du lien.
L’exemple 12-14 illustre l’emploi de ces différentes pseudo-classes. La page contient une
liste à puce de liens (repères ,
et ). Le sélecteur a:link crée le style de base des
liens soulignés et de couleur bleue (repère ). Les liens ayant le focus ont une taille de
police double de la normale et une bordure double jaune (repère ). L’usage de la
pseudo-classe :hover nécessite un sélecteur plus complexe ul li a:hover, car le sélecteur
simple a:hover ne fonctionne pas dans la plupart des navigateurs. Il permet de gérer une
taille de police de 25 pixels, une bordure, une couleur de fond et de texte modifiée (repère ).
Les liens visités sont affichés en vert sur fond gris (repère ), et les liens activés en rouge
sur fond noir (repère ).
La figure 12-14 présente les effets obtenus. Dans cette page, le lien « XHTML 1.1 » a le
focus et le lien « CSS 2.1 » est survolé par le curseur, mais pas cliqué.
Figure 12-14
Les styles des liens
Exercices
Exercice 1 : Définissez la police Georgia pour un paragraphe et ajouter le nom de la
police générique correspondante.
Exercice 2 : Écrivez le style de façon à ce que les éléments <code> et <samp> aient une
police à espacement fixe.
Exercice 3 : Créez les styles afin que les titres <h1> soit affichés avec une police Arial de
24 pixels et que les titres <h2> soient dans une police de la famille serif avec une taille
de 1,2 em.
Le style du texte et des liens
CHAPITRE 12
327
Exercice 4 : Définissez la taille des titres <h1>, <h2>, <h3> avec des pourcentages décrois-
sants et une police de la famille sans-serif. La taille fixée pour <h1> doit être l’équivalent
de la taille 2 em.
Exercice 5 : Faites la même opération que pour l’exercice 4 en utilisant des tailles absolues,
puis des tailles en pixel.
Exercice 6 : Créez une classe qui permette d’obtenir un texte plus grand que celui de
l’élément parent.
Exercice 7 : Définissez explicitement le style qui permet d’obtenir le contenu des
éléments <b> en gras et plus grand que son contexte.
Exercice 8 : Définissez les styles afin que le contenu de l’élément <code> soit dans une
police à espacement fixe, plus grande et plus grasse que celle de son parent.
Exercice 9 : Définissez explicitement le style de l’élément <i> en italique gras.
Exercice 10 : Créez les styles de façon à ce que les titres <h3> et la première ligne des
paragraphes apparaissent en petites majuscules.
Exercice 11 : Définissez les styles pour obtenir l’affichage du contenu des éléments
<code> et <samp> en minuscules et dans une police monospace.
Exercice 12 : Créez les styles de façon à ce que les éléments <h3> soient affichés avec un
texte clignotant.
Exercice 13 : Réglez l’interligne des éléments <div> à 1,2 fois la valeur normale et celui
des paragraphes à 80 % (il y a deux possibilités).
Exercice 14 : Définissez le style du texte de l’élément <blockquote> avec la police
système message-box.
Exercice 15 : Définissez l’alignement des éléments <code> à gauche avec un espacement
de 0,2 em et ceux des éléments <h2> au centre.
Exercice 16 : Créez le style permettant la préservation des espaces dans l’élément <block-
quote>.
Exercice 17 : Créez les styles pour que les liens vierges soient rouges et en gras, que les
liens visités soient marrons sur fond gris clair et en graisse normale. Les liens survolés
doivent apparaître entourés d’une bordure bleu vif.
13
Créer une mise en page :
le dimensionnement et
le positionnement
Les méthodes de mise en page au moyen de cadres (telles que nous les avons vues au
chapitre 8) ou à l’aide de tableaux (chapitre 6), outre qu’elles sont aujourd’hui consi-
dérées comme obsolètes, ne manquent pas de présenter des inconvénients importants.
Si les cadres gênent considérablement l’indexation correcte des pages web, les mises
en page à base de tableaux, pour pratiques qu’elles aient l’air à première vue, impli-
quent des structures trop complexes qui nuisent à la lisibilité de l’organisation et à la
maintenance des sites. Nous allons voir dans ce chapitre que tous ces problèmes
peuvent être contournés en utilisant conjointement le dimensionnement et le position-
nement des éléments qui contiennent les différentes zones d’une page. Ces méthodes
apportent enfin des réponses simples permettant de créer les mises en page les plus
diverses, et qui plus est en respectant le principe, fondamental en XHTML, de sépara-
tion du contenu et de la présentation. Nous pouvons par exemple obtenir des présen-
tations différentes à partir du même code XHTML en modifiant simplement les styles
CSS attachés à ces différents composants.
Les styles CSS
330 PARTIE II
Figure 13-1
Les problèmes dus au dimensionnement
Les styles CSS
332 PARTIE II
Nous pouvons corriger facilement ce résultat en donnant la valeur auto à la propriété height
des éléments <div> et <p> (repères et ). L’élément <style> devient donc :
<style type="text/css" >
body {font-family: Arial sans-serif;font-size: 16px;}
div{width:80%;height:auto ;background-color:#EEE;}
p{width:75%;height:auto ;background-color:#BBB;}
h1{width: 80%; height: 50px;background-color:#888;color:white;}
</style>
Nous obtenons alors le dimensionnement présenté à la figure 13-2, dans lequel chaque
paragraphe occupe la place qui lui est nécessaire pour afficher son contenu.
Figure 13-2
Le dimensionnement avec la valeur auto
L’utilisation de la valeur auto ne permet pas une mise en page précise des différents élé-
ments dans le document, en particulier si leur contenu est créé dynamiquement, en prove-
nance d’une base de données, suite à une recherche déclenchée par le visiteur par exemple.
S’il semble nécessaire au programmeur de définir impérativement une hauteur à chaque
élément, il est possible de conserver cette présentation en appliquant la propriété overflow
pour gérer les éventuels débordements des contenus. Sa syntaxe est la suivante :
overflow : visible | hidden | scroll | auto | inherit
Voici le rôle imparti à chacune de ses valeurs :
• visible : le contenu débordant est affiché.
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
333
Figure 13-3
Gestion des débordements
Les styles CSS
334 PARTIE II
Dans les cas précédents, et en gérant les débordements avec la propriété overflow, tous les
paragraphes ont les mêmes dimensions quels que soient leurs contenus. Dans notre der-
nier exemple, le premier et le second ont une hauteur de 200 pixels alors que le premier
ne contient que quelques lignes. Pour pouvoir intervenir sur les hauteurs des éléments
sans pour autant les fixer de manière absolue, nous pouvons définir une hauteur minimale
et une hauteur maximale pour tous les éléments, à l’exception des éléments en ligne non
remplacés et des éléments de tableau.
Nous disposons pour cela des propriétés min-height et max-height dont la syntaxe est la
suivante :
min-height: <longueur> | NN% | inherit
max-height: <longueur> | NN% | none |inherit
Le paramètre <longueur> est donné comme d’habitude par un nombre et une unité, et les
pourcentages sont donnés en référence à la hauteur du bloc conteneur. La valeur none (qui
est la valeur par défaut pour la hauteur maximale) indique que la valeur limite est celle du
bloc conteneur.
De même, une largeur minimale et une largeur maximale peuvent être indiquées pour les
mêmes éléments à l’aide des propriétés min-width et max-width dont les syntaxes sont
similaires aux précédentes :
min-width: <longueur> | NN% | inherit
max-width: <longueur> | NN% | none |inherit
L’exemple 13-2 nous permet d’affiner les mises en pages obtenues dans les exemples pré-
cédents. L’élément <div> se voit affecté une largeur maximale de 900 pixels et une hauteur
maximale de 800 pixels (repère ). Les paragraphes ont une hauteur minimale de 80 pixels
et maximale de 250 pixels (repères et ), ainsi qu’une largeur comprise entre 500 et
600 pixels (repères et ). Les éventuels débordements sont gérés en utilisant la propriété
overflow (repère ). L’élément <h1> a pour sa part une largeur comprise entre 400 et
500 pixels au maximum (repères
et ). Comme nous pouvons le constater sur la
figure 13-4, le contenu du titre <h1> est affiché sur deux lignes car sa largeur est limitée à
400 pixels. Le premier élément <p> (repère ) occupe juste la hauteur nécessaire à son
contenu limité à quatre lignes. En revanche, le deuxième (repère
) a un contenu beau-
coup plus long et il apparaît avec une hauteur de 250 pixels, ce qui est sa limite supérieure,
et, comme son contenu déborde, des barres de défilement apparaissent automatiquement.
Quant au troisième paragraphe (repère ), il a le même comportement que le premier et
sa hauteur est exactement adaptée à son contenu en respectant les contraintes de hauteur.
Figure 13-4
Les dimensions minimales et maximales
Les styles CSS
336 PARTIE II
Sa valeur par défaut est inline mais la feuille de style par défaut la modifie et donne à
chaque élément le style que nous lui connaissons. Ce sont ces valeurs par défaut sur les-
quelles nous intervenons. Les principales valeurs qu’elle peut prendre ont la signification
suivante :
• none : l’élément n’est pas affiché et la boîte qui lui est associée n’est pas créée. Tout se
passe comme s’il n’existait pas dans le code XHTML.
• inline : l’élément devient du type en ligne (comme <span> par exemple).
• block : l’élément devient du type bloc (comme <h1>, <p>, <div>…).
• list-item : l’élément devient du type liste (équivalent de <li>).
Les autres valeurs sont rarement utilisées en XHTML, mais plutôt réservées à la création
de styles destinés à des documents XML pour induire des comportements identiques à
ceux des éléments de tableau XHTML. Le tableau suivant donne les correspondances
entre les valeurs de la propriété display et l’élément XHTML dont le comportement est
induit par celles-ci.
L’exemple 13-3 offre une illustration de la propriété display. La page comprend un para-
graphe <p> qui inclut quatre éléments <span> (repère ). Ces éléments, qui sont normale-
ment de type en ligne, sont affichés sous forme de liste en donnant la valeur list-item à
la propriété display (repère ). La page contient également une liste non ordonnée
(repère ). En donnant la valeur inline à display pour les éléments <li> (repère ), ils
constituent un menu sur une seule ligne. La page contient enfin une division (repère )
incluant une image (repère ), deux titres <h1> (repères et ) et un paragraphe (repère ).
Pour ces derniers, la propriété display prend la valeur inline. Le contenu des titres est
donc affiché comme du texte en ligne dans le paragraphe. Quant à l’image incluse dans
<div>, le gestionnaire d’événements onclick permet de la faire disparaître quand le visiteur
clique sur la division en donnant à l’aide de code JavaScript la valeur none à la propriété
display (repère
) ; en gérant l’événement ondblclick, un double-clic la fait réapparaître
en lui octroyant la valeur inline (repère ).
<h1>XHTML </h1>
<h1> CSS 2.1 : </h1>
<p> In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas dixitque
➥ Deus fiat lux et facta est lux et vidit Deus lucem quod esset bona et divisit
➥ lucem ac tenebras appellavitque lucem diem et tenebras noctem factumque est
➥ vespere et mane dies unus dixit quoque Deus fiat firmamentum in medio aquarum
➥ et dividat aquas ab aquis et fecit </p>
</div>
</body>
</html>
Figure 13-5
Les modifications
du rendu normal
des éléments
ses attributs, soit par les propriétés width et height. En revanche, cette boîte est déplacée
afin d’être positionnée le plus haut et le plus à gauche possible dans le contenu.
Le positionnement absolu : avec ce type de positionnement, le bloc généré par l’élément
devient complètement indépendant du flux normal. Sa position est en particulier sans
aucun rapport avec son ordre d’apparition dans le code XHTML. Des propriétés particuliè-
res doivent être définies pour placer la boîte de l’élément par rapport à son contenu, qu’il
s’agisse de <body> ou d’un autre élément.
Le positionnement fixe : dans ce cas, un élément occupe une position fixe dans la fenêtre
du navigateur et ne défile pas avec le reste de la page.
Le flottement
Le concept du modèle de boîtes vu au chapitre 11 suppose que les blocs apparaissent
dans la page les uns à la suite des autres, de haut en bas, selon leur ordre d’apparition
dans le code XHTML. De même, un élément remplacé, comme une image incluse dans
un paragraphe au milieu d’un texte par exemple, est affiché comme un sous-bloc en pro-
voquant un retour à la ligne avant et après l’image. Si sa largeur est inférieure à celle du
paragraphe, cela entraîne l’apparition d’une zone blanche à sa droite, car elle est alignée
à gauche par défaut. Cela crée un effet évidemment disgracieux dans la page. Il en est de
même pour un élément de bloc, par exemple un tableau dont la largeur est faible par
rapport à celle de son conteneur.
Pour améliorer cet état de fait, nous pouvons rendre n’importe quel élément flottant.
Quand un élément est déclaré flottant, le contenu des autres éléments voisins se dispose
autour de lui comme l’eau s’écoule autour d’un rocher placé au milieu d’une rivière.
L’espace laissé libre autour de cet élément est comblé, créant ainsi une meilleure occupation
de la surface de la page.
Quand un élément est déclaré flottant, la boîte qui correspond à l’élément est déplacée
vers la gauche ou la droite de son conteneur selon la valeur choisie pour le flottement.
L’alignement vertical est tel que la boîte est déplacée sur le haut de la ligne qui contient
l’élément, ou sur le bas du bloc qui le précède. On procède à la définition du flottement
d’un élément au moyen de la propriété float qui peut s’appliquer à tous les éléments
XHTML et dont la syntaxe est la suivante :
float:left|right|none|inherit
Les valeurs qu’elle peut prendre ont la signification suivante :
• left : la boîte de l’élément est déplacée en haut et à gauche de son conteneur ;
• right : la boîte de l’élément est déplacée en haut et à droite ;
• none : la boîte ne flotte pas (c’est la valeur par défaut) ;
• inherit : la boîte hérite du comportement de son élément parent (ce qui n’est pas le cas
par défaut).
Les styles CSS
340 PARTIE II
Pour qu’un élément soit flottant, il est nécessaire qu’il soit dimensionné explicitement
avec la propriété width, ou implicitement par ses dimensions intrinsèques (celles d’une
image par exemple), ou par ses attributs width et height dans le cas d’un élément <img />
ou <object>. Dans le cas contraire, le navigateur risque de l’afficher avec une largeur
minimale, si ce n’est nulle.
Si un élément flottant possède des marges, ces dernières ne fusionnent pas avec celles des
éléments voisins, mais elles s’ajoutent à celles-ci. Quand plusieurs éléments sont flot-
tants du même côté, celui qui apparaît en seconde position dans le code peut être amenée
à butter sur le bord droit ou gauche du premier selon que la propriété float a respecti-
vement la valeur left ou right.
Dans l’exemple 13-4, la page contient un élément <div> (repère ) qui inclut du texte
brut puis une image (repère ), à nouveau du texte puis un paragraphe (repère ). La
division a une couleur de fond, des marges de 15 pixels et un alignement justifié (repère ).
L’image est positionnée flottante à gauche et a des marges de 20 pixels. Le paragraphe est
flottant à droite, dimensionné avec une largeur de 200 pixels, et est muni d’une bordure
qui permet de bien le distinguer du reste du texte. La figure 13-6 montre le résultat
obtenu. Nous y constatons que les éléments flottants n’apparaissent que relativement à
l’ordre dans lequel ils sont écrits dans le code XHTML. Par exemple, l’image n’apparaît
qu’une fois que la ligne dans laquelle l’élément <img /> est situé a été complétée par du
texte qui se situe après cet élément.
Figure 13-6
Le flottement des éléments
Seule la deuxième image est dimensionnée explicitement avec ses attributs height et
width, les autres ayant les dimensions originales de l’image.
On peut le vérifier à la figure 13-7, la première image est positionnée comme dans
l’exemple précédent, et la deuxième flottante à gauche vient se positionner le plus à gau-
che possible, selon les principes énoncés plus haut. Mais comme l’espace est occupé par
la première, elle vient se placer contre le bord droit de cette dernière, et non plus sur le
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
343
bord gauche de son conteneur. Nous pouvons remarquer à cette occasion que les marges
de chacune des images sont conservées et ne fusionnent pas. Le cas de la troisième image
flottante à droite est le plus particulier. En effet, l’élément <div> ne pouvant la contenir en
entier, elle déborde et empiète sur le paragraphe qui suit et se comporte comme si elle
était flottante dans ce paragraphe, le texte de ce dernier l’entourant.
Figure 13-7
Cas particuliers de flottement
Empêcher le flottement
Nous pouvons empêcher le type de comportement de la troisième image qui flotte sur le
paragraphe <p> en appliquant pour ce dernier la propriété clear. Ce procédé n’est possible
que pour les éléments de bloc, mais il permet d’éviter le flottement d’un élément sur la gau-
che ou la droite de celui pour lequel la propriété est définie. Ainsi, l’image a la place
nécessaire à son affichage et le texte du paragraphe est repoussé vers le bas, laissant
apparaître un espace vide. Cela peut constituer un choix de présentation dans certains
cas, mais la solution précédente est en l’occurrence plus compacte. Voici la syntaxe de la
propriété clear :
clear: none | left | right | both | inherit
Les styles CSS
344 PARTIE II
Figure 13-8
Suppression du flottement sur le côté d’un élément
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
345
Le positionnement relatif
Dans le positionnement relatif, les navigateurs analysent un document et déterminent un
emplacement pour chacun des éléments comme dans le flux normal, puis déplacent ceux
qui ont un positionnement relatif par rapport à la position qu’ils auraient dû occuper,
mais en ne déplaçant pas les autres éléments. En conséquence, l’emplacement initial
reste vide et il en résulte des chevauchements.
En positionnement relatif, l’ordre d’écriture des éléments est important car il conditionne
l’emplacement de chaque élément (avant le déplacement relatif) et l’ordre de superpo-
sition en cas de chevauchement des boîtes ; la dernière écrite dans le code se superpose à
celle de l’élément écrit avant.
Le positionnement relatif est spécifié au moyen de la propriété position, munie de la
valeur relative. Prise isolément, cette propriété n’a aucun effet. Il faut ensuite préciser le
décalage voulu au moyen des propriétés left, top, right, bottom, dont les significations
sont les suivantes :
• left : décale l’élément vers la droite (si sa valeur est positive) ou vers la gauche (si sa
valeur est négative) ;
• top : décale l’élément vers le bas (si sa valeur est positive) ou vers le haut (si sa valeur
est négative) ;
• right : décale l’élément vers la gauche (si sa valeur est positive) ou vers la droite (si sa
valeur est négative) ;
• bottom : décale l’élément vers le haut (si sa valeur est positive) ou vers le bas (si sa
valeur est négative).
Les quatre propriétés left, top, right, bottom ont la même syntaxe. Par exemple :
left: <longueur> | NN% | auto | inherit
Le paramètre <longueur> est donné comme à l’habitude par un nombre et une unité ; les
pourcentages se référent aux dimensions du bloc conteneur. Avec le mot-clé auto, la valeur
de la propriété est calculée en fonction de la valeur de celle qui lui est complémentaire (les
couples left/right et top/bottom sont complémentaires) de la manière suivante :
• Si les deux propriétés complémentaires ont la valeur auto, leur valeur calculée est 0.
• Si l’une vaut auto et que l’autre a une valeur numérique explicite, la première prend la
valeur opposée à celle de la seconde.
• Si les deux propriétés complémentaires sont définies avec des valeurs numériques
(donc différentes de auto) et que ces deux valeurs ne sont pas opposées, la valeur qui
l’emporte dépend du sens de lecture du texte définie par l’attribut dir. S’il vaut ltr,
c’est la propriété left qui l’emporte, et right prend la valeur opposée ; sinon, quand il
vaut rtl, c’est right qui l’emporte.
L’exemple 13-6 illustre le positionnement relatif. L’élément <div> (repère ) inclut
un paragraphe qui contient du texte brut, puis trois images (repères
, et ) dans un
ordre donné. Si aucun de ces éléments n’est positionné, nous obtenons le résultat habituel
présenté à la figure 13-9. Si nous positionnons chacune de ces images en leur appliquant
Les styles CSS
346 PARTIE II
respectivement les classes [Link], [Link] et [Link], nous obtenons les déplacements
relatifs suivants :
• image 1 : déplacement de 30 pixels vers le bas (top vaut 30 px) et de 40 pixels vers la
droite (left vaut 40 px) (repère ) ;
• image 2 : déplacement de 50 pixels vers le haut (top a une valeur négative de – 50 px)
et de 40 pixels vers la gauche (left a une valeur négative de - 40 px) (repère ) ;
• image 3 : déplacement de 80 pixels vers le haut (top a une valeur négative de – 80 px)
et de 40 pixels vers la droite (left vaut 40 px) (repère ).
Le paragraphe est quant à lui déplacé de 20 pixels vers le bas (bottom a une valeur néga-
tive de – 20 px équivalente au style top:20 px) et de 6 % de la largeur de son conteneur
(l’élément <div>) vers la droite. Notons ici que les valeurs négatives de pourcentage ne
fonctionnent pas.
Figure 13-9
La page sans positionnement
Figure 13-10
La page avec
positionnement
Les styles CSS
348 PARTIE II
Le positionnement absolu
Dans le positionnement absolu, qui peut s’appliquer à tous les éléments, la boîte créée
pour l’élément concerné n’apparaît plus dans le flux normal du document. Autrement dit,
si un bloc <div> est positionné de manière absolue, il peut être écrit n’importe où dans le
document XHTML sans que cela ne modifie la position qui va lui être assignée avec un
style CSS. Le positionnement d’un élément est effectué par rapport au bloc de son conte-
neur (il s’agit souvent de l’élément <body> mais pas nécessairement). Chaque bloc d’un
élément positionné de manière absolue devient à son tour le conteneur de ses éléments
enfants. Si ces éléments sont eux-mêmes en position absolue, ils le sont par rapport à leur
bloc parent direct et non par rapport au bloc qui contient leur parent. Nous pouvons donc
créer des blocs <div> et les positionner, puis écrire normalement leur contenu.
L’indépendance de la position par rapport au flux normal fait que deux éléments en posi-
tion absolue peuvent occuper la même zone dans leur bloc parent commun. Dans ce cas,
aucun d’eux ne repousse l’autre comme il en va pour les éléments flottants. Le bloc d’un
élément peut alors recouvrir l’autre en fonction de leur ordre d’empilement (voir la pro-
priété z-index). Cette propriété peut alors être utilisée pour créer des effets dynamiques
d’apparition et de disparition gérés par des scripts JavaScript.
Comme le positionnement relatif, le positionnement absolu est défini en utilisant encore
la propriété position, mais en lui donnant cette fois la valeur absolute (ou fixed sur
laquelle nous reviendrons par la suite). Il faut ensuite définir la position de l’élément par
rapport à son conteneur à l’aide des propriétés left, top, right, bottom, qui définissent la
position des bords de l’élément respectivement par rapport aux bords gauche, haut, droit
et bas du conteneur. Nous ne définissons généralement que deux de ces propriétés, le plus
souvent left et top (les propriétés symétriques right et bottom prenant une valeur oppo-
sée), et la boîte de l’élément doit être dimensionnée avec les propriétés width et height.
L’utilisation conjointe des propriétés position et float est impossible, et si c’est le cas la
propriété float prend automatiquement la valeur none.
Dans les exemples suivants, nous allons étudier divers cas de mise en page correspondant
à des types de présentation couramment rencontrés sur le Web.
Le premier cas présenté dans l’exemple 13-7 consiste à diviser la page en deux zones
horizontales. La zone supérieure est un bandeau contenant le titre du site et un menu
composé de liens vers les différentes pages. Pour permettre une navigation aisée, toutes
les pages contiennent ce même bandeau dont il suffit de copier le code et les styles qui lui
sont associés dans chacune des pages. Il est contenu dans un élément <div> muni d’un
attribut id (repère ) et il inclut un titre <h1> (repère ) et le menu créé par une liste non
ordonnée <ul> (repère
) dont chaque item contient un lien vers les différentes pages.
Ce premier élément <div> est positionné de manière absolue en haut et à gauche de la
page en définissant les propriétés top et left avec la valeur 0. Il est dimensionné à 100 %
en largeur et à 110 pixels en hauteur (repère ). La propriété display appliquée à l’élé-
ment <li> permet d’obtenir le menu des liens en ligne sous forme horizontale (repère ).
Les items sont, de plus, munis de bordures pour en améliorer l’aspect.
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
349
La zone de contenu est également incluse dans un second élément <div> qui contient un
titre <h1>, un paragraphe <p> et une image (repère ), ces éléments n’étant pas position-
nés. Comme la première, cette zone est dimensionnée à 100 % de la largeur de la page et
positionnée de manière absolue en étant placée à 110 pixels du bord supérieur de la page
(correspondant à la hauteur du bandeau) et collée à son bord gauche en mettant la propriété
left à la valeur 0 (repère ).
Figure 13-11
Le positionnement en deux blocs horizontaux
Nous pouvons également envisager une variante de ce premier cas qui va nous montrer
que nous pouvons positionner des éléments de manière absolue à l’intérieur d’un élément
lui-même positionné de cette façon. Nous réalisons cette opération à l’intérieur du
second élément <div> de l’exemple 13-7 en conservant intégralement son code XHTML.
Pour positionner les éléments enfants du second élément <div>, nous pouvons par exemple
modifier simplement les styles CSS de la manière suivante :
<style type="text/css">
body{font-size: 18px;}
h1{font-size: 2em;margin-top: 5px;}
div#menu {position: absolute ; width:100%; height: 110px; left:0px; top:0;
➥ background-color:rgb(255,102,5);color:white; }
div#corps { position: absolute ;width:100%; left:0; top:110px;color:black;}
li {display:inline; border: solid 1px white;padding: 0 10px 0 10px;}
div#corps h1{position: absolute; width:600px; height:40px;top: 20px;
➥ left: 300px;background-color: #AAA;margin: 0;}
img {position: absolute; top: 70px;right:20px;}
p {position: absolute;width: auto; top: 70px; right:260px; left:30px;margin: 0;
➥ text-align: justify;background-color: #BBB;}
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
351
Figure 13-12
Positionnement dans un élément lui-même positionné
Les styles CSS
352 PARTIE II
L’exemple suivant permet de créer un autre type de présentation très classique puisqu’il
permet de diviser la page en trois zones. La première est un bandeau qui peut contenir le
titre du site ou une publicité, l’espace restant étant divisé en deux colonnes de la même
façon que nous l’avons réalisé avec des cadres au chapitre 8. Le contenu est identique à
celui des exemples précédents mais il est structuré différemment. À chaque zone corres-
pond un élément <div> qui va être positionné de manière absolue dans la page. Nous
n’avons pas défini ici d’attributs id pour chacun d’eux, mais nous appliquons des classes
différentes à chaque division.
Le premier élément <div> (repère ) qui contient un titre <h1> (repère ) est positionné
comme précédemment en haut de la page après avoir été dimensionné à 100 % en largeur
et 100 pixels en hauteur. On évite ici de définir une hauteur en pourcentage pour qu’elle
ne dépende pas du contenu de la page. Ces styles sont définis dans la classe [Link]
(repère ).
Le reste de la page est partagé en deux colonnes. La colonne de gauche (repère ) contient
le même menu (repère ) que dans l’exemple 13-7, mais dans un affichage vertical, soit
son style par défaut. Cet élément <div> est d’abord dimensionné avec une largeur de 20 %
de celle de la page et une hauteur de 100 %. Il est positionné de manière absolue au
moyen de la classe [Link] à 100 pixels du bord haut de la page et à 0 pixel de son bord
gauche (repère ).
Le contenu éditorial de la page constitue la colonne de droite créée avec le troisième
élément <div> (repère ). Il contient un titre (repère
), une image (repère ) et un
paragraphe (repère ) comme dans les exemples précédents. Son traitement est
assuré par la classe [Link] dans laquelle il est dimensionné en largeur à 78 % et
avec la valeur auto en hauteur. Son positionnement est absolu et il est placé à 20 % de
la largeur de la page du bord gauche et à 100 pixels du bord supérieur (repère ).
Avec leurs dimensions et positionnement respectifs, les trois zones sont bien collées
les unes aux autres.
La figure 13-13 montre le résultat obtenu avec ces définitions de styles. Nous pouvons
remarquer une fois de plus l’intérêt des styles CSS car la présentation n’est pas la même
que celle de la figure 13-12 alors que le contenu est le même.
Figure 13-13
Positionnement en trois zones
Notre dernier exemple constitue une structure de page complexe comportant un bandeau,
trois colonnes, la première contenant le menu, la deuxième un contenu textuel et un pied
de page qui inclut l’adresse de contact. La troisième colonne contient une liste de liens
utiles. La figure 13-14 montre la présentation de la page que nous allons obtenir.
Chacune de ces zones est créée par un élément <div> dimensionné puis positionné de
manière absolue en leur appliquant les classes [Link], [Link], [Link], [Link] et
[Link]. La seule division qui représente un élément nouveau par rapport aux cas anté-
rieurs est celle qui permet de placer la division d’adresse en bas de la zone centrale de
contenu. Cette division est incluse dans la division précédente et non plus directement
dans <body>.
Dans le code de l’exemple 13-9, les éléments <div> sont volontairement placés dans le
désordre afin de démontrer que leur position dans le code XHTML n’a aucune impor-
tance. Les définitions et les rôles des classes sont les suivants :
• [Link] : (repères et ) largeur 100 %, hauteur 70 pixels, positionné en haut et à
gauche (top:0 et left:0).
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
355
Figure 13-14
Organisation d’une page complexe en cinq zones
<head>
<title> La référence des éléments XHTML 1.1 </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
body{font-size: 18px;background-color:white;color:black;}
[Link] {position: absolute ; left:0px;top:0px; width:100%; height:70px;
➥ background-color:rgb(0,0,153);margin:0; }
[Link] {position: absolute ; width:15%; height: auto; left:0px; top:70px;}
[Link]{position: absolute ; width:15%; height: 100%; right:0; top:70px; }
[Link] {position: absolute ;width:70%; height:auto;left:15%;
➥ top:70px;padding: 0 10px 0 10px;border-left: 1px solid black;
➥ border-right: 1px solid black; }
[Link]{position: absolute ; left:0px; bottom:0px; width:100%;
➥ height:60px;background-color:rgb(0,220,153);}
div h1 {font-size:50px;font-style:italic;color:rgb(255,102,151);
➥ margin-top:0px;margin-left:200px;}
li {padding: 15px;}
p{text-align: justify;margin-bottom:60px;}
img{float: left;margin: 0 10px 0 0;}
</style>
</head>
<body>
<div class="droit">
<ul>
<li> <a href="[Link]" tabindex="1" accesskey="A" title="Structure">XHTML
➥ 1.0</a> </li>
<li> <a href="[Link]" tabindex="2" accesskey="B" title="Texte">XHTML 1.1
➥ </a> </li>
<li> <a href="[Link]" tabindex="3" accesskey="C" title="Images">XHTML
➥ frameset</a> </li>
<li> <a href="[Link]" tabindex="4" accesskey="D" title="Formulaires">CSS
➥ 1</a> </li>
<!—Suite de la liste -->
</ul>
</div>
<div class="contenu">
<h1>La déclaration <!DOCTYPE></h1>
<img src="couvxhtml_gd.jpg" alt="XHTML CSS" />
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas dixitque
➥ Deus fiat lux et facta est lux et vidit Deus lucem quod esset . . .</p>
<div class="bas">
Contactez-moi pour toutes questions sur XHTML <address>xhtml@[Link]
➥ </address>
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
357
</div>
</div>
<div class="gauche">
<ul>
<li> <a href="[Link]" tabindex="1" accesskey="A"
➥ title="Structure">Structure</a> </li>
<li> <a href="[Link]" tabindex="2" accesskey="B" title="Texte">Texte</a>
➥ </li>
<li> <a href="[Link]" tabindex="3" accesskey="C" title="Images">Images</a>
➥ </li>
<!—Suite de la liste -->
</ul>
</div>
<div class="haut">
<h1> Référence XHTML 1.1 </h1>
</div>
</body>
</html>
Le positionnement fixe
Au chapitre 8, nous avons envisagé la manière de créer des cadres pour diviser la page en
zones qui demeurent fixes dans la fenêtre du navigateur. Outre que cette méthode, consi-
dérée aujourd’hui comme obsolète, présente plusieurs inconvénients déjà abordés, elle
nécessite l’emploi de la DTD XHTML 1.0 frameset. Comme nous l’avions signalé au
chapitre 8, en utilisant des styles CSS appropriés, il est possible de créer une présentation
quasi similaire.
Le positionnement fixe n’est qu’un cas particulier du positionnement absolu. La détermi-
nation des dimensions et de la position d’un élément se réalisent de la même façon à
l’aide des propriétés width et height pour les dimensions, et top, left, right et bottom pour
déterminer la position. La seule différence réside dans le fait que le bloc conteneur utilisé
n’est plus forcément l’élément parent mais la fenêtre du navigateur. De cette façon, un
élément positionné de manière fixe reste à sa place même en cas de défilement de la page
quand la hauteur de celle-ci dépasse celle de la fenêtre du navigateur. En d’autres termes,
les propriétés de positionnement sont appliquées non plus par rapport au conteneur mais
par rapport aux bords de la fenêtre.
Ce type de positionnement peut être réalisé en utilisant encore la propriété position en lui
donnant la valeur fixed. Elle est bien gérée par les navigateurs actuels comme Mozilla,
Firefox, Netscape, ce qui n’a pas toujours été le cas, mais très incomplètement par Internet
Explorer.
Si nous reprenons exactement le même code XHTML que celui de l’exemple 13-9, nous
pouvons réaliser un positionnement fixe des zones haute, gauche, droite et basse qui sont
Les styles CSS
358 PARTIE II
des parties de navigation qu’il peut être utile de voir en permanence. Pour ce faire, nous
écrivons les styles suivants :
Les seules modifications effectuées consistent à remplacer le mot-clé absolute par fixed dans
toutes les classes sauf celle du contenu qui doit pouvoir défiler pour être lisible. La
figure 13-15 montre le résultat obtenu dans une fenêtre redimensionnée et après avoir effec-
tué un défilement vertical. Nous y constatons que seule la zone centrale a défilé alors que les
autres n’ont pas bougé et restent entièrement visibles. Nous pouvons remarquer également
que la zone basse est maintenant bien positionnée par rapport à la fenêtre car elle
occupe toute la largeur de l’écran contrairement au cas précédent de positionnement absolu.
Le positionnement fixe représente donc une alternative crédible à la création de cadres
comme nous l’avons fait au chapitre 8. Nous parlerons plutôt de simili-cadres qui donnent
l’illusion d’une page avec cadres et en présente les avantages visuels, mais sans interac-
tivité entre les différentes zones comme c’est le cas des cadres. La procédure à suivre,
relativement simple, est la suivante :
• Créer autant d’éléments <div> que l’on désire obtenir de zones différentes dans la page.
Chaque zone est l’équivalent des éléments <frame /> utilisés dans la méthode avec
cadres. Pour chacune de ces zones, définir la propriété position avec la valeur fixed.
• Dimensionner chacune de ces divisions en utilisant les propriétés width (largeur) et
heigth (hauteur).
• Positionner les éléments <div> en définissant les propriétés left, top, right et bottom
qui nous permettent de placer les éléments <div> par rapport aux bords de la fenêtre.
• Définir éventuellement les propriétés de couleur de fond, de bordure, de marge et d’espa-
cement pour améliorer la présentation du contenu de chaque élément <div>.
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
359
Figure 13-15
Le positionnement fixe
Pour retrouver une interactivité entre les « simili-cadres », par exemple afin que le clic
sur un lien du menu affiche un contenu adapté dans la zone centrale, nous pouvons créer
plusieurs pages qui ont toutes en commun les divisions positionnées de manière fixe et
dont le contenu de la zone centrale est variable. L’illusion d’un site avec cadres est alors
complète.
Elle ne s’applique qu’aux éléments positionnés, et les valeurs qu’elle peut prendre sont
les suivantes :
• auto : l’élément a la même valeur que celle de son parent direct, qu’il soit défini expli-
citement par un nombre ou implicitement par son ordre d’apparition dans le code
XHTML (le dernier ayant la priorité).
• <Nombre> : un nombre entier positif ou négatif, sachant que plus le nombre est
grand, plus l’élément est placé en avant, et se superpose à ceux dont la valeur
est inférieure.
Dans le même ordre d’idées, nous pouvons appliquer à tous les éléments la propriété
visibility qui permet de les cacher ou de les rendre visibles. Sa syntaxe est la
suivante :
visibility : visible | hidden | collapse | inherit
• hidden : l’élément est caché mais la différence de comportement avec la propriété dis-
play, quand elle prend la valeur none, c’est que la boîte de l’élément est ici maintenue
dans la page mais qu’elle est simplement vide et non retirée de la page comme avec
display.
• collapse : son comportement est identique à la valeur hidden mais elle s’applique par-
ticulièrement aux cellules des tableaux.
Cette propriété est héritée par défaut et elle s’applique donc aux éléments enfants.
Compte tenu de l’ordre d’apparition des éléments enfants de la division <div>, l’ordre
d’empilement sans utilisation de la propriété z-index devrait être de l’arrière vers l’avant,
le paragraphe, l’image « un » puis l’image « deux » au premier plan. Cependant, comme
nous attribuons à la propriété z-index de la première image la valeur 2 et à la suivante la
valeur 1, cet ordre est inversé.
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
361
Figure 13-16
L’état initial de la page avec des éléments empilés
La figure 13-17 donne le résultat obtenu après avoir successivement mis le paragraphe
devant la première image (en cliquant sur le paragraphe), la seconde image devant la pre-
mière (en cliquant sur la seconde), puis en plaçant le curseur sur l’image incluse dans le
paragraphe. Par une série de nouveaux clics, il est possible de revenir en arrière.
Créer une mise en page : le dimensionnement et le positionnement
CHAPITRE 13
363
Figure 13-17
L’état de la page après la modification de l’empilement et de la visibilité de certains éléments
Exercices
Exercice 1 : Incorporez trois images dans une page en définissant pour l’élément <img /> les
propriétés CSS width et/ou height (sans utiliser les attributs de même nom). Que se passe-
t-il si les dimensions intrinsèques des images dépassent ces valeurs ?
Exercice 2 : Dans l’exercice précédent, comment procéder au dimensionnement CSS de
façon que chaque image occupe la place qui lui est nécessaire d’après les dimensions du
fichier image ?
Exercice 3 : Si les dimensions d’une image sont définies en pourcentage de celles de son
conteneur, et que ses proportions largeur/hauteur sont inconnues, comment faire pour
qu’elle ne soit pas déformée ?
Exercice 4 : Incluez trois éléments <div> contenant du texte, l’un dans l’autre, et définis-
sez la largeur à 70 % du précédent pour chacun d’eux. Le premier doit avoir 800 pixels
de haut et les suivants doivent correspondre à 80 % de la hauteur du précédent.
Exercice 5 : Créez deux paragraphes d’une hauteur de 300 pixels et d’une largeur de
700 pixels. Incluez-y un texte très long et gérez le débordement du texte afin qu’il soit
entièrement lisible.
Les styles CSS
364 PARTIE II
Exercice 6 : Créez cinq titres de niveau 2 et affichez les sous-formes de liste (indice :
voir la propriété display).
Exercice 7 : Dans un élément <div>, incluez un élément <span> contenant du texte et
donnez-lui le style bloc.
Exercice 8 : Créez un menu vertical dont les éléments sont des liens <a>.
Exercice 9 : Créez une page contenant un paragraphe incluant du texte et deux éléments
<img /> qui se suivent. Faites flotter les images, la première à gauche et la seconde à
droite.
Exercice 10 : Reprenez l’exercice précédent et empêchez le flottement de la deuxième
image.
Exercice 11 : Placez trois images de tailles initiales différentes dans une page. Écrivez
les styles pour qu’elles s’affichent avec la même taille. Ensuite, positionnez-les afin
d’obtenir un effet de cascade avec un décalage horizontal et vertical constant pour chaque
image par rapport à la précédente. L’utilisateur doit pouvoir mettre chacune d’elles au
premier plan en cliquant dessus (voir la propriété z-index).
Exercice 12 : Créez une mise en page à trois colonnes de largeurs respectives de 20 %,
65 % et 15 %. La première et la troisième doivent contenir respectivement un menu et
une liste de liens créés à partir d’images. La colonne centrale doit avoir un contenu éditorial.
Exercice 13 : Créez une mise en page selon le modèle de la figure ci-dessous :
Nous avons constaté dans les chapitres précédents que les tableaux peuvent avoir des
applications très variées, qu’il s’agisse d’organiser des données de manière structurée,
de présenter un formulaire ou encore, malgré les réserves indiquées, d’ordonner toute
une page. Cela dit, les styles par défaut appliqués aux tableaux et à leur contenu dans les
éléments <td> ou <th> ont un rendu particulièrement pauvre et austère du point de vue
esthétique. Nous allons voir maintenant qu’un certain nombre de propriétés, déjà
étudiées par ailleurs, peuvent s’appliquer aux tableaux et à leurs composants, comme les
bordures, les couleurs et images de fond. De plus, le modèle CSS de gestion des tableaux
possède des caractéristiques spécifiques qui permettent de gérer les dimensions des cellules,
des largeurs de tableaux entiers ou des colonnes qui les composent. De nouvelles propriétés
fournissent également des outils pour gérer les tableaux et les cellules vides des tableaux
symétriques ou irréguliers.
Le modèle CSS de gestion des tableaux se conforme à celui défini dans XHTML, ce qui
établit une cohérence entre ces deux systèmes complémentaires. Mis à part le titre du
tableau créé avec l’élément <caption>, et situé en dehors du quadrillage visible ou non
du tableau, tout le contenu est inclus prioritairement dans des lignes. Dans le modèle
XHTML et CSS, nous ne pouvons pas créer de colonnes indépendamment des lignes,
autrement dit le modèle donne la priorité aux lignes sur les colonnes. Une colonne n’a
d’existence que parce qu’elle contient des cellules qui appartiennent à une suite de lignes
créées antérieurement. Une des premières conséquences de cet état de fait est que si nous
définissons un style pour un élément <tr> particulier, en écrivant une classe ou un sélec-
teur d’attribut id par exemple, ce style va s’appliquer à toutes les cellules de la ligne en
question et pas aux cellules de la ligne suivante.
6. La couleur de fond définie pour l’élément <table> parent de tous les précédents a la
plus basse des priorités.
La figure 14-1 résume cet ordre de priorité des couches des éléments de tableau.
Figure 14-1
L’empilement des
couches pour les
éléments de tableau
Dans l’exemple de la figure 14-1, la couleur de fond pour l’élément <table> est gris clair
(#EEE repère ). L’en-tête <thead> (repère
) et le pied de tableau <tfoot> (repère ),
dont les couleurs de fond sont un gris plus foncé (#DDD repère ), vont l’emporter sur la
couleur de l’élément <table> car ils sont sur une couche supérieure. En revanche, les
lignes de données contenues dans l’élément <tbody> (repère ), pour lequel aucune cou-
leur n’est définie explicitement, ont la couleur de fond de l’élément <table>. La couleur
de fond de l’élément <col /> (repères et ), qui s’applique aux deux premières colon-
nes, s’impose également à celle de <table> pour la même raison et aussi parce qu’aucune
couleur n’est définie pour <tbody>. Cependant, comme la couleur de fond définie dans la
classe .fonce (repère ) est appliquée au troisième élément <tr> (repère ), celle-ci
s’impose au-dessus de celle des éléments <table> et <col /> dont les ordres de priorité
sont inférieurs.
Pour personnaliser et mettre en évidence la cellule particulière qui contient la variation
maximale, nous créons un style avec un sélecteur d’id (repère ) qui sera appliqué au
seul élément <td> dont l’attribut id vaut "max" (repère
).
<tr>
<th>Trimestre</th>
<th>Indice </th>
<th>Moyenne </th>
<th>Variation annuelle en % </th>
<th>Date de parution</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Trimestre</th>
<th>Indice </th>
<th>Moyenne </th>
<th>Variation annuelle en % </th>
<th>Date de parution</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>1er trimestre 2005</td>
<td>1270</td>
<td>1269,50</td>
<td id="max">+4,83</td>
<td>08/07/2005</td>
</tr>
<tr>
<td>4ème trimestre 2004</td>
<td>1269</td>
<td>1258,25</td>
<td>+4,81</td>
<td>08/04/2005</td>
</tr>
Le style des tableaux
CHAPITRE 14
369
<tr class="fonce">
<td>3ème trimestre 2004</td>
<td>1272</td>
<td>1244,50</td>
<td >+4,58</td>
<td>12/01/2005</td>
</tr>
<tr>
<td>2ème trimestre 2004</td>
<td>1267</td>
<td>1227,25</td>
<td>+3,85</td>
<td>15/10/2004</td>
</tr>
< !-- Suite des données -->
</tbody>
</table>
</body>
</html>
La figure 14-2 montre le résultat obtenu. On remarque bien l’empilement des couleurs de
fond des différents éléments.
Figure 14-2
L’empilement des couleurs de fond
Les styles CSS
370 PARTIE II
Dans l’exemple 14-2, nous verrons qu’il est possible de créer des styles spécifiques pour
mettre en évidence des colonnes ou des groupes de colonnes.
</tbody>
</table>
</body>
</html>
La figure 14-3 montre le résultat obtenu pour le titre et les couleurs des colonnes.
Figure 14-3
Titre de tableau et groupes de colonnes
utilisable que si les bordures sont déclarées séparées avec border-collapse. Sa syntaxe
est la suivante :
border-spacing : <longueur> <longueur> ? | inherit
Elle s’applique également à tous les éléments de tableau inclus dans <table> et elle est
héritée par défaut. Les deux paramètres <longueur> définissent respectivement les espace-
ments horizontaux et verticaux entre les cellules. La seconde valeur est facultative, et
dans ce cas l’unique valeur indiquée s’applique aux deux espacements. Ces valeurs sont
données par un nombre positif et une unité de longueur. Dans l’espacement créé entre les
bordures apparaît la couleur de fond définie pour l’élément <table> ou un de ses enfants
situés plus haut dans l’ordre de priorité défini plus haut.
Une cellule est matérialisée par les bordures entourant son contenu et par sa couleur de
fond. Quand elle est vide, on peut soit la matérialiser quand même en affichant ses carac-
téristiques, soit l’effacer en empêchant l’apparition des bordures et du fond. Une cellule
est considérée non vide si elle contient ne serait-ce qu’un seul caractère (mais pas une
espace) ou même l’entité . En revanche, si elle contient les codes ASCII hexadéci-
maux du retour chariot (\0D), de nouvelle ligne (\0A), de tabulation (\09) ou d’espace (\20)
qui peuvent être générés avec la propriété content par exemple, elle est quand même
considérée comme vide. De plus, une cellule pour laquelle la propriété visibility est
définie avec la valeur hide est aussi considérée comme vide.
Pour déterminer le comportement des cellules vides, nous utilisons la propriété empty-
cells dont voici la syntaxe :
empty-cells : show | hide | inherit
Elle ne s’applique qu’aux éléments <td> et <th>. La valeur show permet l’affichage du
fond et des bordures, et hide cache l’ensemble de la cellule et laisse donc apparaître la
couleur de fond définie pour son premier élément parent (<tr>, <tbody>, <tfoot>, <thead>,
<col />, <colgroup> ou <table>).
L’exemple 14-3 permet de vérifier le modèle des bordures séparées. Pour l’élément
<table>, la propriété border-collapse y est définie avec la valeur separate (repère ),
l’espacement horizontal entre les bordures a une valeur de 20 pixels et l’espacement ver-
tical est de 5 pixels (repère ). Les cellules vides (telle celle du repère
) sont définies
comme cachées en donnant la valeur hide à la propriété empty-cells (repère ). Les bor-
dures des cellules ont le style double et une largeur de 5 pixels (repère ). De plus, une
bordure particulière nettement plus large est créée pour la cellule qui contient la valeur
maximale de la colonne « Variations » (repères et ).
Les styles CSS
374 PARTIE II
<td>08/07/2005</td>
</tr>
<tr>
<td>4ème trimestre 2004</td>
<td>1269</td>
<td>1258,25</td>
<td>+4,81</td>
<td>08/04/2005</td>
</tr>
<tr>
<td>3ème trimestre 2004</td>
<td>1272</td>
<td>1244,50</td>
<td >+4,58</td>
<td> </td>
</tr>
<!—Suite des données -->
</tbody>
</table>
</body>
</html>
La figure 14-4 montre le résultat obtenu dans Mozilla. Nous constatons que les bordures
des cellules sont bien séparées, qu’à la deuxième ligne la définition d’une seule bordure
plus large a entraîné l’augmentation de la hauteur de toute la ligne et que la cellule vide
de la dernière colonne est entièrement cachée.
Figure 14-4
Les bordures
séparées
Les styles CSS
376 PARTIE II
Figure 14-5
Tableau avec des bordures fusionnées
Dans cet exemple, toutes les bordures des cellules ont le même style, et l’affichage
obtenu est uniforme. Dans les cas où nous définissons des bordures différentes pour des
groupes de lignes, de colonnes ou des cellules particulières, il survient des conflits entre
Le style des tableaux
CHAPITRE 14
377
ces définitions puisqu’une seule bordure sépare désormais ces éléments. Ces cas de conflits
sont résolus de la manière suivante :
• Si la propriété border-style d’un élément a la valeur hidden, la bordure de cet élément
est toujours cachée, quelle que soit la définition donnée pour l’élément voisin.
• Si la propriété border-style a la valeur none, il faut que toutes les autres définitions
concernant la même bordure aient aussi cette valeur none afin que la bordure soit
cachée, sinon elle reste visible. Si un seul élément a une valeur différente de none, alors
la bordure la plus large est affichée. En cas d’égalité de largeur et quand la propriété
border-style a une valeur différente pour les deux cellules voisines, les styles sont
retenus dans l’ordre de préséance suivant : double, solid, dashed, dotted, ridge, outset,
groove et inset.
• Si les bordures des différents éléments ont toutes en commun la même largeur et le
même style, mais simplement une couleur différente, la couleur qui l’emporte est celle
de l’élément situé le plus haut dans l’ordre de priorité défini pour les couleurs de fond,
que nous avons indiqué dans une section précédente et dont le schéma est représenté à
la figure 14-1.
L’exemple 14-4 permet de vérifier la manière dont CSS règle les nombreux conflits exis-
tant dans cette page entre les différents styles de bordures affectés aux cellules d’un
tableau quand elles sont fusionnées, donc quand la propriété border-collapse prend la
valeur collapse (repère ). La bordure extérieure de l’ensemble du tableau a une largeur
de 15 pixels (repère ) et elle va donc l’emporter sur celles des cellules qui ont toutes
des largeurs inférieures. En revanche, cette bordure disparaît autour de la cellule L1C1
dont la propriété border est définie avec la valeur hidden (repère ). Cette valeur cause égale-
ment l’effacement de la bordure gauche de la cellule L1C2 et de la bordure haute de
L2C1. La bordure définie pour le sélecteur td (repère ) devrait s’appliquer à toutes les
autres cellules. Il n’en est rien et elle ne s’applique, et encore que partiellement, qu’aux
cellules L2C1, L2C2, L3C1 et à la quatrième ligne pour les raisons suivantes :
• L1C2 a une bordure dont le style double (repère ) l’emporte sur le style solid à
épaisseur égale.
• L1C3 a une bordure gauche écrasée par celle de L1C2 pour la même raison et une bor-
dure basse écrasée par celle qui est définie pour L2C3 dans la classe .dashed (repère ),
car son épaisseur est de 12 pixels.
• L2C2 a une bordure haute écrasée par celle de L1C2, une bordure droite dominée par
celle de L2C3 pour la même raison que L1C3 et une bordure basse écrasée par celle de
L3C2 définie dans la classe .double appliquée à L3C2 et L3C3, et qui l’emporte en
fonction de son épaisseur de 10 pixels (repère
). Il en est de même pour les cellules
L4C2 et L4C3.
• Le style défini pour la deuxième colonne (repère ) ne s’applique en définitive à
aucune cellule car il est dominé par tous les autres, soit par l’épaisseur supérieure, soit
par le style solid qui l’emporte sur le style dotted.
Les styles CSS
378 PARTIE II
La figure 14-6 montre le résultat obtenu, lequel permet de constater l’application des
règles de priorité vues ci-dessus.
Figure 14-6
Résolution
des conflits entre
les bordures
• Quand une cellule de la première ligne a une largeur explicite autre que auto, cette
valeur est utilisée pour toute la colonne à laquelle elle appartient. Dans le cas où
cette cellule est la fusion de plusieurs cellules virtuelles (voir le chapitre 6) réalisée en
définissant son attribut colspan, et que la ligne suivante contient réellement plusieurs
cellules, la largeur de la cellule fusionnée est partagée entre chacune des cellules de la
ligne suivante, de manière égale.
• Pour les autres colonnes du tableau qui n’ont pas une largeur définie explicitement par
une valeur numérique ou si elles ont la largeur auto, l’espace restant est partagé équi-
tablement entre elles (voir l’exemple 14-5).
Cet algorithme présente l’avantage d’être plus rapide car seules les largeurs des colonnes
et des cellules de la première ligne sont prises en compte, et le navigateur n’examine pas
toutes les suivantes pour déterminer l’affichage.
L’exemple 14-5 donne une première illustration de ce mécanisme quand la propriété
table-layout a la valeur fixed (repère ). Dans ce tableau, la largeur affectée à l’élément
<table> est de 100 % (repère ). La seule cellule qui se voit affectée une largeur est la
première de la deuxième colonne par l’intermédiaire de la classe .larg qui la détermine à
150 pixels (repère ). En conséquence, les colonnes 1, 3 et 4 (repères , et
) ont
pour largeur commune un tiers de celle de l’écran, diminuée des 150 pixels de la
deuxième colonne, soit pour un écran de 1 024 pixels : (1 024 – 150) / 3 = 291 pixels,
valeur arrondie au pixel près et diminuée des bordures éventuelles. Remarquons que la
dernière colonne, bien qu’ayant un contenu très petit, a la même largeur que les colonnes
1 et 3. Pour un écran plus petit, seule la deuxième colonne garderait une largeur fixe de
150 pixels, les trois autres se partageant l’espace restant.
Dans la mesure où la deuxième cellule de la première ligne est la fusion de deux colon-
nes (repère ), les cellules 2 et 3 (repères et ) de la seconde ligne se partagent sa
largeur et font donc 75 pixels chacune. L’inconvénient de ce partage automatique est
qu’il ne tient pas compte du contenu des cellules. Dans notre exemple la deuxième
cellule de la deuxième ligne voit son contenu coupé (dans Opera par exemple) ou
débordant (dans Mozilla et FireFox) sur la cellule suivante selon les navigateurs, car
aucune césure des mots n’est effectuée. Ce problème se règle théoriquement à l’aide de
la propriété overflow qui permet de cacher ou de montrer le débordement (voir le cha-
pitre 13), mais les navigateurs gèrent très mal ou de façon discordante cette propriété
pour les cellules.
La figure 14-7 montre le résultat obtenu dans Opera, navigateur dans lequel le contenu
débordant est coupé.
Figure 14-7
Largeurs de cellules dans l’algorithme fixed
Quand la propriété table-layout prend la valeur auto, l’algorithme utilisé par le navigateur
procède de la manière suivante :
• Il calcule pour toutes les cellules la largeur minimale nécessaire pour afficher leur contenu.
Cette largeur minimale peut par exemple correspondre à celle qu’il faut pour afficher
en entier le mot le plus long d’un texte. Si la propriété width est définie pour une
cellule et qu’elle est supérieure à la largeur calculée précédemment, c’est elle qui
devient la largeur minimale.
• Il détermine la largeur minimale de chaque colonne en fonction de celles des cellules
qu’elle contient, la plus grande devenant celle de la colonne. Si une propriété width est
définie pour un élément <col /> et qu’elle est supérieure à cette valeur minimale, c’est
elle qui devient la largeur minimale. Il suffit donc qu’une cellule contienne un objet
très large (une image par exemple) pour que la colonne entière ait cette largeur mini-
male. Dans ce cas, il est préférable de fusionner des cellules pour en créer une seule
qui aura ce contenu sans obliger toutes celles de la même colonne à avoir la même
largeur.
Le style des tableaux
CHAPITRE 14
383
En reprenant exactement le même code contenu dans l’élément <body> que celui de
l’exemple 14-5 et en modifiant les styles de la manière suivante :
<style type="text/css">
table {table-layout: auto;}
[Link] {width: 150px;}
</style>
Figure 14-8
Largeurs de cellules dans l’algorithme auto
Les styles CSS
384 PARTIE II
Figure 14-9
Présentation d’un formulaire
Le style des tableaux
CHAPITRE 14
387
Exercices
Exercice 1 : Si on définit une couleur de fond rouge pour l’élément <table> et bleue pour
l’élément <tr>, quelle est la couleur réellement obtenue ?
Exercice 2 : Créez les styles pour que les couleurs de chaque ligne d’un même tableau
soient différentes.
Exercice 3 : Créez les styles pour que les lignes paires d’un tableau aient un fond gris
clair et un texte noir, et que les lignes impaires aient un fond gris foncé et un texte jaune.
Exercice 4 : Créez un tableau à sept colonnes réparties en trois groupes contenant
respectivement 2, 3 et 2 colonnes. Appliquez des styles de couleur de fond et de texte
différents pour chaque groupe.
Exercice 5 : Mettez en évidence trois cellules d’un tableau dont la couleur de fond est
verte en définissant des styles propres pour ces cellules au moyen d’une classe, puis de
sélecteurs d’attribut id.
Exercice 6 : Placer le titre d’un tableau en dessous de celui-ci en l’entourant d’une bordure
double bleue de 3 pixels. Le texte doit être écrit dans une police Arial de 20 pixels.
Exercice 7 : Créez un tableau dont les bordures des cellules sont de type solid de 2 pixels
de large et sont séparées les unes des autres. Cachez les cellules vides.
Exercice 8 : Créez un tableau pour lequel une ligne sur deux est munie de bordures, en
utilisant le modèle des bordures fusionnées.
Exercice 9 : Incluez les éléments d’un formulaire dans un tableau à deux colonnes et
écrivez les styles pour que chaque ligne ait une couleur différente selon qu’elle est paire
ou impaire.
15
Le style des listes
De prime abord, les listes peuvent sembler être des éléments mineurs dans la structu-
ration du contenu d’une page. Cependant, leur utilisation ne se limite pas au simple
affichage d’un sommaire. Au niveau de la présentation, qu’elle soit ordonnée ou non,
une liste a un aspect pauvre, et nous pouvons nous en satisfaire dans la mesure où son
rôle est avant tout d’ordre sémantique, comme nous l’avons vu au chapitre 3.
L’aspect esthétique d’une liste doit donc être élaboré à l’aide de styles CSS. Nous
allons voir dans ce chapitre que les différents rendus visuels d’une liste peuvent être
très variés tant au niveau des différentes possibilités de numérotation que s’agissant
du choix des puces dans les listes non ordonnées. Les listes sont également très en
vogue pour la création des menus d’un site, et c’est sur ce point que nous terminerons notre
étude.
Pour les listes ordonnées, le paramètre <type> peut prendre une des valeurs suivantes :
• decimal : numérotation en chiffres arabes : 1, 2, 3… C’est la valeur par défaut.
• decimal-leading-zero : idem, mais les nombres inférieurs à 10 sont précédés d’un
zéro : 01, 02, 03… Cette valeur n’est pas prise en compte par Internet Explorer.
• upper-latin ou upper-alpha : numérotation alphabétique en majuscules : A, B, C…
• lower-latin ou lower-alpha : numérotation alphabétique en minuscule : a, b, c…
• upper-roman : numérotation en chiffres romains majuscules I, II, III, IV…
• lower-roman : numérotation en chiffres romains minuscules i, ii, iii, iv…
• lower-greek : numérotation en caractères grecs minuscules , a, b, y… Cette valeur
n’est pas prise en compte par Internet Explorer.
• georgian : numérotation en caractères géorgiens. Cette valeur n’est pas prise en
compte par Internet Explorer.
• armenian : numérotation en caractères arméniens. Cette valeur n’est pas prise en
compte par Internet Explorer.
La valeur none permet de supprimer toute numérotation. On peut l’utiliser pour conser-
ver la sémantique des listes sans aucune numérotation. La valeur inherit permet
d’obtenir explicitement la même numérotation que celle de l’élément parent, ce qui est
appliqué par défaut car la propriété est héritée. L’exemple 15-1 nous permet de mettre
en œuvre toutes les différentes possibilités de numérotation pour des listes ordonnées
imbriquées sur deux niveaux, en appliquant des numérotations différentes pour chacun
d’eux. Il contient quatre fois le même code XHTML de création des mêmes listes
imbriquées (repères
, , et ), chacune d’elles ayant un premier élément <ol>
muni d’un identifiant id spécifique afin de lui appliquer un style propre, indépendamment
des autres listes. Dans la définition des styles, le premier sélecteur (par exemple #deci)
permet de créer le style des items de premier niveau, et le second (par exemple #deci li ol)
celui des items imbriqués. La première liste est numérotée avec les styles decimal et
decimal-leading-zero (repères et ). La deuxième avec les styles upper-roman et lower-
roman (repères et ). La troisième utilise les styles upper-latin et lower-greek
(repères et
) et la dernière les styles exotiques armenian et georgian (repères et ).
Le contenu des éléments de premier niveau est également mis en évidence en utilisant
la propriété font-weight pour les afficher en gras. Notez que l’utilisation des attributs
id ne serait pas nécessaire s’il n’y avait qu’une liste dans la page ou si nous voulions
les numéroter toutes de la même façon. Nous pourrions en effet écrire simplement la
définition des styles suivante (repère ) :
ol {list-style-type:decimal; font-weight:bold; }
ol li ol{list-style-type:decimal-leading-zero; font-weight:lighter;}
Le style des listes
CHAPITRE 15
391
#armenie {list-style-type:armenian;font-weight:bold; }
#armenie li ol {list-style-type:georgian;font-weight:lighter; }
</style>
</head>
<body>
<h1>Liste ordonnée decimal puis decimal-leading-zero</h1>
<ol id="deci">
<li> XHTML 1.0
<ol>
<li> DTD transitional </li>
<li> DTD strict </li>
<li> DTD frameset </li>
</ol>
</li>
<li> XHTML 1.1
<ol>
<li>DTD unique </li>
</ol>
</li>
<li> CSS
<ol>
<li> CSS 1 </li>
<li> CSS 2 </li>
Les styles CSS
392 PARTIE II
Les figures 15-1 et 15-2 illustrent les résultats obtenus pour ces différents styles de numé-
rotation.
Figure 15-1
Les listes
numérotées
(décimales
et en chiffres
romains)
Le style des listes
CHAPITRE 15
393
Figure 15-2
Les listes
numérotées
(latin-grec et en
arménien-géorgien)
Les items d’une liste sont affichés par défaut en retrait par rapport au bord gauche de leur
conteneur, laissant apparaître une marge gauche. Les caractères utilisés pour les numéro-
ter font normalement partie intégrante du texte des items comme s’ils étaient écrits en
tant que contenu des éléments <li>. Il est possible d’intervenir sur la position horizontale
de ces caractères (chiffres ou lettres) en définissant la propriété list-style-position dont
la syntaxe est la suivante :
list-style-position :inside|outside|inherit
• Avec la valeur inside, les caractères de la numérotation sont placés dans la marge de
retrait du texte de l’item.
• Avec la valeur outside, qui est la valeur par défaut, ces caractères sont intégrés au texte
de l’item.
• La valeur inherit permet de définir explicitement le style de l’élément parent mais la
propriété est de toute façon héritée par défaut.
Dans l’exemple 15-2, le code des listes imbriquées est semblable à celui de l’exemple 15-1
(repères et ). Le style du premier niveau de liste est upper-roman et celui du second
est lower-latin (repères et , puis et ). Nous définissons successivement la
position inside pour la première liste (repère ) et outside pour la seconde (repère ).
Les styles CSS
394 PARTIE II
Les définitions d’alignement des éléments de liste de second niveau sont ici explicites
bien que la propriété list-style-position soit héritée, car certains navigateurs gèrent mal
cet héritage.
Sur la figure 15-3, nous pouvons constater les différences d’alignement des symboles de
numérotation dues à l’utilisation des valeurs inside et outside.
Figure 15-3
Positionnement
de la numérotation
des listes
Les styles CSS
396 PARTIE II
La création de compteurs
Les propriétés que nous venons d’étudier permettent de faire varier le type de numé-
rotation des listes. Elles ne sont cependant pas adaptées, pour les listes imbriquées, à
la réalisation de numérotations complexes tenant compte du symbole du niveau précé-
dent. En particulier, elles ne permettent pas de créer des numérotations du type « I.A,
I.B, I.C » ou même d’insérer un mot avant la numérotation pour obtenir automati-
quement des listes identifiées par des en-têtes du type « Chapitre 1, Chapitre 2… ».
Ce type de numérotation est adapté à la création de pages dynamiques dont le contenu
répond à une demande du visiteur, et dont le nombre d’items ne peut être connu à
l’avance.
Pour parvenir à ce type de résultats et à d’autres variantes, CSS offre plusieurs propriétés
qui doivent être utilisées de concert.
La procédure à suivre comporte plusieurs étapes. Il faut tout d’abord déclarer et initiali-
ser un compteur. L’étape suivante consiste à définir la manière dont le compteur va être
incrémenté. La phase finale permet d’afficher le contenu généré dans les listes.
On effectue la déclaration et l’initialisation du compteur à l’aide de la propriété counter-
reset dont la syntaxe est la suivante :
counter-reset :[<identifiant> N ?]+ | none | inherit
L’identifiant du compteur est un nom arbitraire choisi par le programmeur comme c’est
le cas pour l’attribut id. Si l’identifiant est le seul paramètre défini, le compteur est initia-
lisé à 0 et le premier item de la liste est numéroté avec la valeur 1 (ou le caractère corres-
pondant au style alphabétique choisi). S’il est suivi d’un entier N, la numérotation com-
mence avec la valeur N + 1 (ou la N + 1e lettre). Les valeurs négatives de N sont admises
à partir de – 32 768. On évitera ces valeurs négatives pour les numérotations alphabéti-
ques ou romaines qui risquent de donner des résultats incohérents. En écrivant par exemple
les styles suivants :
ol{counter-reset :partie ;}
les items de la liste sont numérotés 1, 2, 3… ou A, B, C…
Le style des listes
CHAPITRE 15
397
compteur nommé « jeux » et initialisé à la valeur 1988 (repère ). On définit une taille de
caractères pour les items de la liste (repère ) et on attribue à la propriété list-style-
type la valeur none pour supprimer la numérotation habituelle non désirée en tête des
items (repère ). La liste n’ayant qu’un niveau, le sélecteur utilisé est ol li:before. Le
compteur est incrémenté de 4 unités pour chaque item à l’aide de la propriété counter-
increment (repère ) et la propriété content permet de générer le contenu qui va figurer
devant chaque item à l’aide de la fonction counter() (repère ).
La figure 15-4 montre le résultat obtenu dans Opera 8.0, qui correspond bien à notre
attente. Les autres navigateurs se contentent d’afficher une numérotation de 1 à 6, mais
ils ne manqueront pas de se mettre à la page un jour !
Notre second exemple (exemple 15-4) permet de générer une numérotation personnalisée
plus complexe car elle s’applique à une liste imbriquée sur deux niveaux (repère
).
Nous voulons faire apparaître le mot « Partie » suivi d’une numérotation en chiffres
romains majuscules devant les items du premier niveau, puis le mot « Chapitre » suivi du
chiffre précédent et d’une numérotation décimale des items de second niveau (du type
I.1, I.2, etc.).
Le style des listes
CHAPITRE 15
399
Figure 15-4
Une numérotation
simple sur un niveau
Après la définition d’une taille de police différente pour mettre en évidence les items de
chaque niveau (repères et ), nous créons les compteurs nommés « titre1 » (repère )
et « titre2 » (repère ), puis nous supprimons la numérotation classique (repère ).
Pour le premier niveau, le sélecteur utilisé est ol li:before, pour lequel nous définissons
l’incrémentation du premier compteur (repère ) et le contenu généré par la propriété
content dans laquelle nous précisons le style de numérotation souhaité comme second
paramètre de la fonction counter() (repère
). Pour les items de second niveau, le sélec-
teur est ol li ol li:before pour lequel nous incrémentons le second compteur (repère ),
puis nous créons le contenu généré qui utilise ici deux fois la fonction counter() avec
deux paramètres, ainsi que deux chaînes de caractères (repère ).
</head>
<body>
<h1>Numérotation automatique</h1>
<ol>
<li> XHTML 1.0
<ol>
<li> DTD transitional </li>
<li> DTD strict </li>
<li> DTD frameset </li>
</ol>
</li>
<li> XHTML 1.1
<ol>
<li> DTD unique </li>
</ol>
</li>
<li> CSS
<ol>
<li> CSS 1 </li>
<li> CSS 2 </li>
<li> CSS 2.1 </li>
</ol>
</li>
</ol>
</body>
</html>
Là encore, le résultat présenté à la figure 15-5 ne peut être obtenu pour l’instant que dans
le navigateur Opera 8.
Figure 15-5
Numérotations
automatiques
de parties
et de chapitres
Le style des listes
CHAPITRE 15
401
Exemple 15-5. Numérotation automatique des listes pour un nombre quelconque de niveaux
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"[Link]
<html xml:lang="fr" xmlns="[Link]
<head>
<title>Les compteurs automatiques</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="images/x-icon" href="../images/[Link]" />
<style type="text/css" title="Listes">
<!-- Compteurs -->
ol {counter-reset: titres;list-style-type: none;}
li:before{content: "Niveau " counters(titres,".",decimal) " :
➥" ;counter-increment: titres 1;}
</style>
</head>
<body>
<ol>
<li> XHTML 1.0
<ol>
<li> DTD transitional
<ol>
<li>Introduction</li>
<li>Éléments</li>
Les styles CSS
402 PARTIE II
<li>Attributs</li>
</ol>
</li>
<li> DTD strict
<ol>
<li>Introduction</li>
<li>Éléments</li>
<li>Attributs</li>
</ol>
</li>
<li> DTD frameset
<ol>
<li>Introduction</li>
<li>Éléments</li>
<li>Attributs</li>
</ol>
</li>
</ol>
</li>
<li> XHTML 1.1
<ol>
<li> DTD unique
<ol>
<li>Introduction</li>
<li>Éléments</li>
<li>Attributs</li>
</ol>
</li>
</ol>
</li>
<li> CSS
<ol>
<li> CSS 1
<ol>
<li>Introduction</li>
<li>Propriétés</li>
<li>Valeurs</li>
</ol>
</li>
<li> CSS 2
<ol>
<li>Introduction</li>
<li>Éléments</li>
<li>Attributs</li>
</ol>
</li>
Le style des listes
CHAPITRE 15
403
La figure 15-6 présente le résultat obtenu pour notre liste à trois niveaux d’imbrication.
Figure 15-6
Numérotation
automatique
sur trois niveaux
ayant un style
unique, avec la
fonction counters()
Les styles CSS
404 PARTIE II
<ul>
<li> DTD transitional </li>
<li> DTD strict </li>
<li> DTD frameset </p></li>
</ul>
</li>
<li> XHTML 1.1
<ul>
<li> DTD XHTML 1.1 unique</li>
</ul>
</li>
<li> CSS
<ul>
<li> CSS 1 </li>
<li> CSS 2 </li>
<li> CSS 2.1</li>
</ul>
</li>
</ul>
</body>
</html>
Figure 15-7
Une liste imbriquée
à puces classiques
La propriété list-style-position peut également être mise à profit pour les listes à puces.
On peut ainsi déterminer si l’alignement des puces des items figurera en retrait (avec la
valeur outside) ou non (avec la valeur inside).
Les styles CSS
406 PARTIE II
La figure 15-8 montre le résultat obtenu. On notera encore que la taille des images utili-
sées doit être préalablement adaptée au contexte, car il n’est pas possible d’intervenir sur
ses dimensions avec une propriété CSS.
Figure 15-8
Listes imbriquées
avec puces
graphiques
Les styles CSS
408 PARTIE II
Figure 15-9
Les listes mixtes
Le style des listes
CHAPITRE 15
409
Figure 15-10
Création d’un menu
horizontal
L’exemple 15-8 contient le code de création d’un tel menu. La structure est constituée
à partir d’une liste ordonnée <ol> (repère ) contenant cinq items <li> (repères , ,
, et ) renfermant chacun un lien, comme il se doit dans un menu. Pour le sélec-
teur ol nous définissons la propriété text-align qui permet le centrage du contenu de la
liste dans la page, quelle que soit la largeur de la fenêtre (repère ). Pour créer un
cadre général aux items, nous définissons également une bordure basse (repère ), une
couleur de fond pour ol (repère ) et nous annulons la marge gauche inhérente aux lis-
tes (repère ). C’est pour le sélecteur li que nous pouvons créer tous les styles avec
lesquels nous obtenons le menu horizontal. La propriété display qui prend la valeur
inline permet d’obtenir l’affichage des items sur une seule ligne (repère ) et l’attri-
bution de la valeur none à la propriété list-style-type supprime toute numérotation
(repère ). Les propriétés font-size (repère
), background-color (repère ) et pad-
ding (repère ) concourent à améliorer la présentation du menu mais ne sont pas
nécessaires. Il en va de même de la définition des bordures droites (repère
) et basses
(repère ) pour chaque élément du menu, qui permettent de donner un aspect de relief
à chaque occurrence. La feuille de style se termine par les définitions facultatives de la
couleur des liens <a> (repère ) et de la présentation du titre principal <h1> qui joue le
rôle de bandeau en haut de la page (repère ).
Les styles CSS
410 PARTIE II
L’aspect obtenu présenté à la figure 15-10 est similaire dans presque tous les navigateurs,
à l’exception de Internet Explorer dans lequel la séparation entre chaque item n’existe
pas. Le code de l’exemple 15-8 peut facilement être réutilisé. En effet, il suffit d’ajouter
des éléments <li> pour l’enrichir et obtenir par exemple le résultat présenté à la figure 15-11
sans effectuer aucune modification dans les définitions de styles.
Du point de vue structurel, il serait parfaitement possible de remplacer l’élément <ol> par
<ul>, la liste n’ayant aucun caractère de numérotation.
Le style des listes
CHAPITRE 15
411
Figure 15-11
Adaptation du menu horizontal
Figure 15-12
Création d’une liste à partir d’éléments <h2>
Le style des listes
CHAPITRE 15
413
Dans la même optique, il est possible de réaliser une liste imbriquée sur plusieurs niveaux
à partir des éléments <h1>, <h2> et <h3> en définissant pour chacun d’eux (repères ,
et ), dans l’exemple 15-10, la propriété display avec la valeur list-item comme précé-
demment. Nous définissons ensuite les propriétés list-style-image, list-style-type et
list-style-position (repères , , , et ) pour créer et positionner des puces dif-
férentes pour chaque niveau. En créant des marges gauches (repères
et ), on peut
afficher chaque niveau en retrait du niveau précédent.
<h3>Section A</h3>
<h3>Section B</h3>
</body>
</html>
Figure 15-13
Création d’une liste
imbriquée à partir
de différents niveaux
de titre
Notons pour finir que l’utilisation d’autres éléments XHTML aurait le même effet à
condition de leur attribuer la propriété display avec la valeur list-item.
Exercices
Exercice 1 : Créez deux listes et définissez explicitement les styles par défaut des
éléments <ol> et <ul>.
Exercice 2 : Créez une liste numérotée en caractères latins majuscules.
Exercice 3 : Créez une liste sur deux niveaux, numérotée en caractères latins pour le
premier et en alphabet grec pour le second. Attribuez une fonte et une taille différentes à
chaque niveau.
Exercice 4 : Créez une liste non ordonnée dotée de puces carrées.
Exercice 5 : Créez une liste numérotée en chiffres romains pour le premier niveau et à
puces graphiques pour le second.
Le style des listes
CHAPITRE 15
415
Les navigateurs sont les moyens les plus courants pour visualiser les pages web, mais
s’ils représentent l’immense majorité des moyens mis en œuvre, ce ne sont pas les seuls.
Il est en effet possible d’afficher une page sur des médias très divers, aussi bien des termi-
naux portables ayant des écrans de petite taille que des médias dits « paginés ». Un navi-
gateur est en effet un média continu, car la page est unique et sa hauteur peut être très
grande (en réalité, il n’y a pas de limite à cette hauteur), et parce qu’il suffit à l’utilisateur
de la faire défiler, d’où l’introduction systématique des roulettes sur les souris ces derniè-
res années. Dans les médias paginés, le contenu de la page n’est plus visualisé de façon
continue mais sous forme de feuilles qui se succèdent. Il s’agit par exemple des impri-
mantes ou des rétroprojecteurs qui présentent un site sous forme de diapositives comme
le fait PowerPoint. Nous nous intéressons particulièrement ici à la manière de créer des
styles en vue d’imprimer le contenu d’un site. Compte tenu du peu de prise en charge par
les différents navigateurs de certaines possibilités que nous allons aborder, il conviendra
de se montrer circonspect dans leur utilisation. Le projet de recommandation CSS 3
devrait cependant reprendre et étendre les possibilités d’impression et il nous semble
utile de s’y préparer.
Les styles CSS
418 PARTIE II
}
</style>
</head>
<body>
<div id="tete">
<h1>[Link] Référence XHTML 1.1</h1>
</div>
<div id="menu">
<ul>
<li> !DOCTYPE</li>
<li><html></li>
<li><head></li>
<li><body></li>
<li><a></li>
<li><abbr></li>
Les médias écrits
CHAPITRE 16
421
<li><acronym></li>
<!-- Suite des éléments XHTML-->
</ul>
</div>
<div id="contenu">
<h2>Le langage XHTML</h2>
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et spiritus Dei ferebatur super aquas dixitque
➥ Deus fiat lux et facta est lux et vidit Deus lucem . . .</p>
</div>
</body>
</html>
Figure 16-1
La page d’origine dans un navigateur
La figure 16-2 montre l’aperçu avant impression obtenu dans Mozilla ou FireFox. Les
résultats obtenus dans les navigateurs Opera ou Internet Explorer sont équivalents, mais
chaque navigateur crée des marges différentes dans les paramètres d’impression, et nous
ne pouvons pas intervenir sur ces valeurs. Un texte donné n’occupe donc pas le même
espace quand il est imprimé, à partir de différents navigateurs, à moins de prévenir le
visiteur de mettre manuellement toutes les marges à la valeur 0.
Les styles CSS
422 PARTIE II
Figure 16-2
Adaptation des styles à l’impression
div#tete {position: fixed ; left: 0px; top: 0px; width: 100%; height: 15%;
➥ background-color: rgb(0,0,153); z-index: 5; margin:0; }
div#menu {position: fixed ; width: 20%; left: 0px; top: 15%; background-color:
➥ rgb(255,102,51); color: white;}
div#contenu {position: bsolute ; width: 80%; left: 20%; top: 17%;
➥ background-color: #FFA; color: black;}
p {margin-left: 20px;}
div h1 {font-size: 50px; font-style: italic; color: rgb(255,102,51); margin-top:
➥ 0px; margin-left: 200px;}
}
@media print{
body{margin-top: 20mm;}
div#tete {position: fixed; left: 0px; top: 0px; width: 100%; height: 20mm;
➥ background-color: #CCC; font-family: Arial; font-size: 16pt;}
div#menu {display: none;}
div#contenu {background-color: white; color: black; margin-left: 20mm;
➥ text-align: justify;}
p {margin-left: 15mm;}
h2{font-size: 30pt; font-family: Times; text-align: center; margin-bottom: 30mm;
➥ background-color: #EEE;}
}
</style>
</head>
<body>
<div id="tete">
<h1>[Link] Référence XHTML 1.1</h1>
</div>
<div id="menu">
<ul>
<li>DOCTYPE</li>
<li><html></li>
<li><head></li>
<li><body></li>
<li><a></li>
<!-- Suite des éléments -->
</ul>
</div>
<div id="contenu">
<h2>Le langage XHTML</h2>
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et . . .</p>
<h2>Les styles CSS 2.1 </h2>
<p>In principio creavit Deus caelum et terram terra autem erat inanis et vacua
➥ et tenebrae super faciem abyssi et . . .</p>
</div>
</body>
</html>
La page contenant plusieurs paragraphes inclus dans le troisième élément <div> (repères ,
et
), nous pouvons vérifier dans les aperçus avant impression des pages 1 et 2 présentées
aux figures 16-3 et 16-4 que chacune possède bien le même en-tête.
Les styles CSS
424 PARTIE II
Figure 16-3
La page 1 avec son en-tête
Figure 16-4
La page 2 avec son en-tête
Les médias écrits
CHAPITRE 16
425
Figure 16-5
La page affichée dans un navigateur
L’exemple 16-3 permet de tester ces propriétés en définissant une mise en page parti-
culière pour un document dans sa version imprimée. La figure 16-5 montre l’aspect de la
Les styles CSS
426 PARTIE II
page dans un navigateur afin de bien mettre en évidence, par contraste, les différences
avec la version imprimée (voir figure 16-6).
Pour la version imprimée, notre objectif est de faire apparaître le titre <h1> (repère
)
seul au milieu de la première page, le titre <h2> (repère ) et le contenu du paragraphe
<p> de la première section (repère ) sur une page impaire (la page 3), et chacune des
sections suivantes (les titres et les paragraphes) (repères
et , puis et ) sur une
nouvelle page. Pour y parvenir, nous créons des styles propres à l’impression dans un élé-
ment <style> spécialisé (repère ). Pour centrer verticalement le titre <h1>, nous lui attri-
buons une marge haute de 130 mm, et la propriété page-break-after permet d’insérer un
saut de page immédiatement après lui (repère ). La propriété page-break-before est
appliquée uniquement au premier titre <h2> à l’aide d’un sélecteur d’id (repère ) pour
créer le saut de page avant lui, afin qu’il apparaisse avec le premier paragraphe sur la
page 3. Pour tous les autres paragraphes, y compris le premier, nous créons un saut de
page avec la propriété page-break-after (repère ) pour que ce qui suit soit imprimé sur
une nouvelle page. Afin de ne pas obtenir une page blanche en fin d’impression, nous
annulons ce saut de page pour le dernier paragraphe (repère ) en définissant la pro-
priété page-break-after avec la valeur avoid (repère ). Notons que les résultats obtenus
présentés en figure 16-6 sont valables aussi bien dans Mozilla, Opera que Internet Explorer,
ce qui est assez rare pour être signalé.
<body>
<h1>XHTML et CSS</h1>
<h2 id="premier">XHTML 1.1</h2>
<p>In principio creavit Deus caelum et terram terra autem erat inanis
➥ et vacua et tenebrae super faciem abyssi et spiritus . . .</p>
<h2>CSS 2.1</h2>
<p> In principio creavit Deus caelum et terram terra autem erat inanis
➥ et vacua et tenebrae super faciem abyssi et spiritus . . . </p>
<h2>PHP 5</h2>
<p id="dernier">In principio creavit Deus caelum et terram terra autem erat
➥ inanis et vacua et tenebrae super faciem abyssi et spiritus . . .</p>
</body>
</html>
Figure 16-6
Réalisation des sauts de pages à l’impression
Les sauts de page effectués à l’intérieur d’un élément de bloc sont automatiques quand le
contenu est long, la suite du texte étant de fait imprimée sur la page suivante. Pour éviter
d’obtenir des coupures qui risquerait de ne faire apparaître que quelques lignes orpheli-
nes en haut de la dernière page, CSS2 offre la possibilité de placer des sauts de page à
l’intérieur d’un bloc. Cette possibilité reste assez théorique, car pour l’instant elle n’est
exploitée, et encore incomplètement, que par Opera 8. Nous la signalons cependant à
titre informatif, en espérant que tous les navigateurs la prendront en compte de manière
précise dans un avenir proche.
Pour gérer ces sauts de page, nous disposons de plusieurs propriétés qui doivent être uti-
lisées conjointement. Pour autoriser ce type de saut de page, il faut définir la propriété
page-break-inside dont la syntaxe est la suivante :
page-break-inside : auto | avoid |inherit
avec la valeur auto, la valeur avoid interdisant ces sauts.
En complément, la propriété widows, dont la valeur est un nombre entier (par défaut, elle
est de 2), permet d’indiquer le nombre minimal de lignes d’un bloc qui peuvent être placées
Les styles CSS
428 PARTIE II
en haut d’une page. Si la coupure automatique d’un texte contenu dans un élément <p> ou
<div>, par exemple, conduit à faire apparaître moins de lignes que la valeur fixée dans
widows, alors le paragraphe entier est placé dans la page suivante, créant ainsi un saut de
page forcé à la suite de l’élément.
De même, la propriété orphans permet de définir le nombre minimal de lignes d’un bloc
qui doivent apparaître en bas d’une page. Si la coupure automatique du texte conduit à
afficher un nombre inférieur de lignes, alors tout le paragraphe est imprimé sur la page
suivante.
Ces définitions sont celles qui figurent dans la recommandation CSS 2.1 du W3C, mais
elles restent pour l’instant lettre morte, et les tests effectués ne fournissent le résultat
espéré dans aucun navigateur.
Si nous définissons par exemple les styles suivants :
p {orphans: 15; widows: 10; page-break-inside: auto;}
et que nous visualisons le résultat de l’aperçu avant impression dans Opera 8, nous obtenons
le résultat présenté à la figure 16-7.
Nous remarquons que Opera gère ces propriétés exactement à l’inverse des définitions du
W3C. En effet, la propriété widows a la valeur 10 et 10 lignes apparaissent en bas de la pre-
mière page. De même, la propriété orphans a la valeur 15 et il apparaît 16 lignes sur la
deuxième page.
Figure 16-7
Les sauts de pages
internes
Les médias écrits
CHAPITRE 16
429
La figure 16-8 montre le résultat obtenu, qui correspond bien à l’objectif visé, mais seulement
dans Opera 8.
Figure 16-8
Utilisation des
pseudo-classes
d’impression
Les médias écrits
CHAPITRE 16
431
Exercices
Exercice 1 : Quelles sont les différentes méthodes permettant de créer des styles particuliers
pour un média donné ?
Exercice 2 : Créez des styles différents pour l’écran et l’impression en utilisant la direc-
tive @media, pour que le texte soit affiché en jaune sur fond bleu à l’écran, et en noir sur
fond blanc à l’impression.
Exercice 3 : Adaptez les polices de caractères et leur taille avec des valeurs différentes
pour l’écran et l’impression.
Exercice 4 : Créez un en-tête de page contenant votre nom et votre mail pour qu’il appa-
raisse en haut de chaque page imprimée mais pas dans un navigateur.
Exercice 5 : Créez un document dont le contenu est inclus dans plusieurs éléments <div>
et définissez les styles permettant d’obtenir des sauts de page à l’impression après chacun
de ces éléments.
Exercice 6 : Dimensionnez et positionnez une page et les paragraphes qu’elle contient
pour qu’ils soient imprimés en format paysage.
Partie III
Annexes
Annexe A
Référence
des éléments XHTML
Notations
Les attributs en gras souligné sont obligatoires
Le symbole |signifie "ou"
Le symbole ||signifie "et/ou"
(élément)* signifie 0 ou plusieurs fois l’élément
(élément)? signifie 0 ou une fois l’élément
(élément)+ signifie 1 ou plusieurs fois l’élément
Annexes
436 PARTIE III
Enfants Texte, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents abbr, acronym, address, b, bdo, big, caption, cite, code, dd, del, dfn, div, dt, em, fieldset, h1,
h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small, span, strong,
sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
coords Crée une zone sensible dans le lien (rectangle, cercle, polygone) en inqiquant des coor-
données.
target Indique le nom du cadre dans lequel doit s’afficher la cible du lien (avec la DTD frameset
seulement).
Définition Abréviation.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Référence des éléments XHTML
ANNEXE A
437
Définition Acronyme.
Enfants Texte a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins,
kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Définition
Enfants Texte a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Enfants Aucun.
Parents map.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Aucun.
Parents head.
Communs id.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label,
map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
dir Sens de lecture ltr (gauche à droite par défaut) ou rtl (doite à gauche).
Référence des éléments XHTML
ANNEXE A
439
Définition Texte dans une police plus grande (préférez un style CSS).
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, q, samp, small, span,
strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants address, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, noscript, ol, p,
pre, script, table, ul.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants address, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, noscript, ol, p,
pre, script, table, ul.
Parents html.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Vide.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Enfants Texte, abbr, acronym, address, b, bdo, big, blockquote, br, cite, code, del, dfn, div, dl, em, h1,
h2, h3, h4, h5, h6, hr, i, img, ins, kbd, map, noscript, object, ol, p, pre, q, samp, script, small,
span, strong, sub, sup, table, tt, ul, var.
Parents a, abbr, acronym, address, b, bdo, big, caption, cite, code, dd, del, dfn, div, dt, em, fieldset,
h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small, span, strong,
sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
disabled "disabled".
value Valeur associée au bouton qui sera transmise au serveur en cas de programmation dyna-
mique (PHP par exemple).
Référence des éléments XHTML
ANNEXE A
441
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label,
map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents table.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label,
map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label,
map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexes
442 PARTIE III
Enfants vide.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants (col)*.
Parents table.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl,
em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript, object,
ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul, var.
Parents dl.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Élément <del>…</del>
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul,
var.
Parents a, abbr, acronym, address, area, b, bdo, big, blockquote, body, button, cite, code, dd, del,
dfn, div, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, noscript,
object, p, pre, q, samp, small, span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexes
444 PARTIE III
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul,
var.
Parents blockquote, body, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents dl.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Référence des éléments XHTML
ANNEXE A
445
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div, dl,
em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, legend, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul, var.
Parents blockquote, body, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Référence des éléments XHTML
ANNEXE A
447
Parents html.
Enfants Vide.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexes
448 PARTIE III
Définition Image.
Enfants Vide.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, q, samp, small, span,
strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
alt Texte descriptif en cas de non affichage de l’image ou pour les navigateurs oraux.
usemap URL de la description de la carte des zones sensibles si elle est située coté serveur.
Enfants Vide.
Parents a, abbr, acronym, address, b, bdo, big, caption, cite, code, dd, del, dfn, div, dt, em, fieldset,
h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small, span, strong,
sub, sup, td, th, tt, var.
Parents id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
onselect Événement qui se produit quand un texte est sélectionné dans l’élément.
type= ( text | pass- Détermine le type du champ de formulaire. Respectivement zone de texte, mot de passe,
word | checkbox | case à cocher, bouton radio, bouton d’envoi, bouton de réinitialisation, zone de transfert de
radio| submit | reset fichier, champ caché, image et bouton personalise.
file | hidden | image |
button )
usemap Si le type est "image", désigne l’URL de la description de la carte des zones sensibles si elle
est située coté serveur.
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul,
var.
Parents a, abbr, acronym, address, area, b, bdo, big, blockquote, body, button, cite, code, dd, del,
dfn, div, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, noscript,
object, p, pre, q, samp, small, span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, caption, cite, code, dd, del, dfn, div, dt, em, fieldset,
h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small, span, strong,
sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents fieldset.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul,
var.
Parents ol | ul.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Définition Lie un document annexe au document principal (une feuille de style par exemple).
Enfants Vide.
Parents head.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants address, area, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, noscript,
ol, p, pre, script, table, ul.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Vide.
Parents head.
Définition Crée un contenu alternatif pour les navigateurs n’acceptant pas les cadres.
Enfants body.
Parents frameset.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Référence des éléments XHTML
ANNEXE A
453
Définition Crée un contenu alternatif pour les navigateurs n’acceptant pas les scripts.
Enfants address, blockquote, del, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ins, noscript, ol, p,
pre, script, table, ul.
Parents area, blockquote, body, button, dd, del, div, fieldset, form, ins, li, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, param, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea,
tt, ul, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, head, i, ins, kbd, label, legend, li, object, p, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
archive URL des fichiers contenant des ressources utiles à l’affichage de l’objet spécifié par classid
ou data.
codebase URL de base pour résoudre les adresses relatives des fichiers nécessaires à l’affichage de
l’objet.
data URL du fichier de données de l’objet. Pour une image c’est l’adresse du fichier image.
declare(declare) S’il est utilisé, cet attribut précise que l’élément ne fait que déclarer un objet sans l’instancier.
Il faut alors inclure un autre élément object dans le premier.
Enfants li.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants option.
Parents select.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Parents select.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
label Libellé de l’option (les navigateurs devraient utiliser cette valeur à la place du contenu de
l’élément, mais ce n’est pas encore le cas).
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Vide.
Parents object.
Communs id.
type Type MIME du fichier cible quand l’attribut valuetype vaut "ref".
Définition Crée un texte formaté dont la mise en page est conservée (espaces et sauts de ligne).
Enfants Texte, a, abbr, acronym, b, bdo, br, button, cite, code, dfn, em, i, input, kbd, label, map, q,
samp, script, select, span, strong, textarea, tt, var.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexes
456 PARTIE III
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Parents a, abbr, acronym, address, area, b, bdo, big, blockquote, body, button, cite, code, dd, del,
dfn, div, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, head, i, ins, kbd, label, legend, li, nos-
cript, object, p, pre, q, samp, small, span, strong, sub, sup, td, th, tt, var.
Enfants (optgroup|option)+.
Parents a, abbr, acronym, address, b, bdo, big, caption, cite, code, dd, del, dfn, div, dt, em, fieldset,
h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small, span, strong,
sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins,
kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt,
var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, q, samp, small, span,
strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexes
458 PARTIE III
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Parents head.
Enfants Texte, a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins,
kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt,
var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants tr.
Parents table.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte, a, abbr, acronym, address, b, bdo, big, blockquote, br, button, cite, code, del, dfn, div,
dl, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, i, img, input, ins, kbd, label, map, noscript,
object, ol, p, pre, q, samp, script, select, small, span, strong, sub, sup, table, textarea, tt, ul,
var.
Parents tr.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants (li)+.
Parents blockquote, body, button, dd, del, div, fieldset, form, ins, li, map, noscript, object, td, th.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Enfants Texte a, abbr, acronym, b, bdo, big, br, button, cite, code, del, dfn, em, i, img, input, ins, kbd,
label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var.
Parents a, abbr, acronym, address, b, bdo, big, button, caption, cite, code, dd, del, dfn, div, dt, em,
fieldset, h1, h2, h3, h4, h5, h6, i, ins, kbd, label, legend, li, object, p, pre, q, samp, small,
span, strong, sub, sup, td, th, tt, var.
Communs id, class, title, xml:lang, dir, onclick, ondblclick, onkeydown, onkeypress, onkeyup,
onmousedown, onmousemove, onmouseover, onmouseout, onmouseup.
Annexe B
Référence CSS 2
@media print {
h1 { page-break-before: always }
h1, h2, h3,
h4, h5, h6 { page-break-after: avoid }
ul, ol, dl { page-break-before: avoid }
}
Référence CSS 2
ANNEXE B
465
Propriété background-attachment
Propriété background-color
Propriété background-image
Propriété background-position
Définition Donne la position de l'image de fond par rapport aux bords gauche et haut de l'élément.
Appliquée à Tous les éléments.
Héritée Non.
Syntaxe background-position : [[N% | <longueur>] | [left | center | right] [NN% | <longueur>| top |
center | bottom] ?] | [left | center | right] [top | center | bottom]] | inherit.
Valeurs
<longueur> Nombre et unité de longueur.
N% Pourcentage de la taille de l’élément lui-même. La valeur par défaut est 0%.
top Image placée en haut.
center Image centrée verticalement.
bottom Image placée en bas.
left Image placée à gauche.
center Image centrée horizontalement.
right Image placée à droite.
Propriété background-repeat
Propriété background
Définition Raccourci pour définir en une fois les couleur et images de fond.
Héritée Non.
Valeurs
Propriété border-collapse
Définition Fusionne ou non les bordures adjacentes des cellules d’un tableau.
Appliquée à Éléments de tableau.
Héritée Oui.
Syntaxe border-collapse : collapse | separate | inherit.
Valeurs
collapse Les bordures des cellules adjacentes sont fusionnées.
separate Les bordures ne sont pas fusionnées (chaque cellule peut avoir une bordure différente.
Propriété border-color
Définition Raccourci pour définir la couleur des quatre bordures d’un élément.
Héritée Non.
Valeurs
Définition Définit individuellement la couleur d’une bordure haute, droite, basse ou gauche.
Appliquée à Tous les éléments.
Héritée Non.
Syntaxe border-top-color : <couleur> | transparent | inherit.
Valeurs
Paramètres Voir la propriété border-color.
Propriété border-spacing
Définition Espacement horizontal et vertical entre les bordures des cellules de tableau. Il faut que la
propriété border-collapse ait la valeur separate.
Héritée Oui.
Valeurs
<longueur> De une à deux longueurs, la seconde étant facultative. La valeur par défaut est 0.
Propriété border-style
Héritée Non.
Syntaxe border-style : [dashed | dotted | double | groove | inset | outset | ridge | solid | none] {1,4}.
Valeurs
double Trait continu double (si l’épaisseur le permet, sinon le trait est simple).
Définition Définit individuellement le style d’une bordure haute, droite, basse ou gauche.
Héritée Non.
Syntaxe border-top-style : dashed | dotted | double | groove | inset | outset | ridge | solid | none.
Valeurs
Propriété border-width
Définition Largeur des bordures d’un élément. On peut donner de une à quatre valeurs pour les bords
haut, droit, bas et gauche dans cet ordre.
Héritée Non.
Valeurs
Définition Définit individuellement la largeur d’une bordure haute, droite, basse ou gauche.
Héritée Non.
Valeurs
Propriété border
Définition Raccourci pour définir en une fois la largeur, le style et la couleur des quatre bordures.
Héritée Non.
Valeurs
Définition Raccourcis permettant de définir les caractéristiques (largeur, style et couleur) des bordures
haute, droite, basse ou gauche en une seule fois.
Héritée Non.
Valeurs
Propriété bottom
Héritée Non.
Valeurs
Propriété caption-side
Appliquée à L’élément <caption> et ceux pour lesquels la propr iété display vaut table-caption.
Héritée Oui.
Valeurs
Propriété clear
Définition Empêche le flottement des autres éléments sur le côté de celui pour lequel cette propriété
est définie.
Héritée Non.
Valeurs
Propriété clip
Héritée Non.
Valeurs
<rectangle> Le rectangle est défini par la fonction rect(Xh, Xb,Yb, Yh). Les paramètres définissent le rec-
tangle par rapport aux bords de la zone totale de l’élément.
Propriété color
Propriété content
Héritée Non.
Syntaxe content : normal | none | [chaine | <url> | <counter> | attr(attribut) | open-quote | close-quote
| no-open-quote | no-close-quote ]+ | inherit.
Valeurs
<url> Le contenu du fichier cible désigné par son adresse est ajouté.
open-quote Ajout des caractères choisis comme symbole d’ouverture de citation (par exemple “, ",
ou <<).
close-quote Ajout des caractères choisis comme symbole de fermeture de citation (par exemple ”, ",
ou >>).
Propriété counter-increment
Héritée Non.
Valeurs
<identifiant>N Incrémente le compteur identifié par son nom de la valeur N à chaque item.
Référence CSS 2
ANNEXE B
473
Propriété counter-reset
Héritée Non.
Valeurs
<identifiant> Initialise le compteur dont le nom est précisé par son identifi ant.
Propriété direction
Héritée Oui.
Valeurs
Propriété display
Définition Définit le type d’affichage d’un élément (bloc, en ligne, liste, etc.).
Appliquée à Tous les éléments.
Héritée Non.
Syntaxe display : inline | block | list-item | run-in | inline-block | table | inline-table | table-row-group |
table-header-group | table-footer-group | table-row | table-column-group | table-column |
table-cell | table-caption | none | inherit.
Valeurs
none Aucun affichage.
inline Type en ligne.
block Type bloc.
list-item Sous forme de liste.
inline-block Bloc en ligne.
table Tableau (comme l’élément <table>).
inline-table Tableau en ligne.
table-row-group Groupe de ligne.
table-header-group En tête de tableau (comme l’élément <thead>).
table-footer-group Pied de tableau (comme l’élément <tfoot>).
Annexes
474 PARTIE III
Valeurs
table-row Ligne de tableau (comme l’élément <tr>).
table-column-group Groupe de colonnes (comme l’élément <colgroup>).
table-column Colonne de tableau (comme l’élément <col />).
table-cell Cellule de tableau (comme les éléments <td> ou <th>).
table-caption Titre de tableau (comme l’élément <caption>).
Propriété empty-cells
Héritée Oui.
Valeurs
Propriété float
Propriété font-family
Valeurs
nom_de_police Un nom de police courant comme Arial ou Times ; les noms composés doivent être écrits
entre guillemets comme “Times New Roman”.
serif Police à empâtement du type Times.
sans-serif Police sans empâtement du type Arial.
cursive Police cursive du type Script.
fantasy Polices diverses fantaisie.
monospace Police à espacement fixe.
Propriété font-size
Définition Taille de la police donnée par un mot-clé ou un nombre et une unité (px, em, e x, mm, cm,
in, pt, pc).
Appliquée à Tous les éléments.
Héritée Oui.
Syntaxe font-size : xx-small | x-small | small | medium | large | x-large | xx-large | larger | smaller |
<longueur> | N% | inherit.
Valeurs
de xx-small Taille progressive de très très petite à très très grande, medium étant la taille par défaut.
xx-large
small Petite taille.
medium Taille moyenne.
larger Taille relative plus grande que le contexte.
smaller Taille relative plus petite que le contexte.
N% Valeur calculée en fonction de la taille de la police de l’élément parent.
Propriété font-style
Propriété font-variant
Définition Variantes apportées au texte dont les minuscules peuvent être écrites en petites majus-
cules.
Appliquée à Tous les éléments.
Héritée Oui.
Syntaxe font-variant : normal | small-caps | inherit.
Valeurs
normal N’applique aucun effet.
small-caps Transforme les minuscules en petites majuscules.
Propriété font-weight
Propriété font
Définition Raccourci pour définir toutes les caractéristiques d’une police en une seule fois.
Appliquée à Tous les éléments.
Héritée Oui.
Syntaxe font : [ [ font-style || font-variant || font-weight ]? font-size [ / line-height ]? font-family ] | cap-
tion | icon | menu | message-box | small-caption | status-bar | inherit.
Valeurs
font-style Paramètres de la propriété font-style.
font-variant Paramètres de la propriété font-variant.
font-weight Paramètres de la propriété font-weight.
font-size Paramètres de la propriété font-size.
line-height Paramètres de la propriété line-height.
font-family Paramètres de la propriété font-family.
Référence CSS 2
ANNEXE B
477
Valeurs
caption Police système des titres.
icon Police système des légendes des icônes.
menu Police système des menus.
message-box Police système des boites de dialogue.
small-caption Police système des titres.
status-bar Police système des la barre d’état.
Propriété height
Propriété left
Propriété letter-spacing
Propriété line-height
Héritée Oui.
Valeurs
Propriété list-style-image
Appliquée à Les éléments <ul> et <ol> et ceux dont la propriété display vaut list-item.
Héritée Oui.
Valeurs
Propriété list-style-position
Appliquée à Les éléments <ul> et <ol> et ceux dont la propriété display vaut list-item.
Héritée Oui.
Valeurs
inside Puce dans le même alignement vertical que le contenu des items de la liste.
Propriété list-style-type
Appliquée à Les éléments <ul> et <ol> et ceux dont la propriété display vaut list-item.
Héritée Oui.
Valeurs
Les mots clés sont significatifs, respectivement cercle, nombre décimal de 1 à N, disque plein, lettres minuscules,
chiffres romains minuscules, pas de numérotation, lettres majuscules, chiffres romains majuscules, carré plein.
Propriété list-style
Définition Raccourci pour définir en une seule fois le type, la position et la puce d’une liste.
Appliquée à Les éléments <ul> et <ol> et ceux dont la propriété display vaut list-item.
Héritée Oui.
Valeurs
Définition Définissent respectivement la marge basse, haute, gauche ou droite d’un élément.
Héritée Non.
Valeurs
N% Calculée par rapport à la hauteur (pour les marges haute et basse) ou à la largeur (pour les
marges gauche et droite) de l’élément de bloc parent le plus proche.
Annexes
480 PARTIE III
Propriété margin
Définition Raccourci pour définir les dimensions de toutes les marges en une seule propr iété. On peut
préciser de une à quatre valeurs.
Appliquée à Tous les éléments sauf les éléments de tableau.
Héritée Non.
Syntaxe margin : [<longueur> | N%] {1,4} | inherit.
Valeurs
N% Calculée par rapport à la largeur de l’élément parent.
Définition Définit respectivement une hauteur ou une largeur maximale pour la boîte d’un élément.
Appliquée à Tous sauf les éléments en lignes non remplacés et les éléments de tab leau.
Héritée Non.
Syntaxe max-height : <longueur> | N% | none | inherit.
Valeurs
none Le navigateur gère la hauteur en fonction du contenu.
N% Calculée en fonction de la dimension de l’élément parent.
Définition Définit respectivement une hauteur ou une largeur minimale pour la boîte d’un élément.
Appliquée à Tous sauf les éléments en lignes non remplacés et les éléments de tab leau.
Héritée Non.
Syntaxe min-height : <longueur> | N% | none | inherit.
Valeurs
none Le navigateur gère la hauteur en fonction du contenu.
N% Calculée en fonction de la dimension de l’élément parent.
Propriété outline-color
Propriété outline-style
Propriété outline-width
Propriété outline
Définition Raccourci pour définir en une seule fois toutes les caractéristiques d’un contour.
Appliquée à Tous les éléments.
Héritée Non.
Syntaxe outline : [ <outline-color> || <outline-style> || <outline-width>] | inher it.
Valeurs
Prend les mêmes valeurs que celles des propriétés outline-color, outline-style et outline-width.
Propriété overflow
Définition Crée un espacement respectivement sur la gauche, le haut, la droite ou le bas entre
le contenu et la bordure d’un élément.
Héritée Non.
Valeurs
Propriété padding
Définition Raccourci permettant de définir toutes les caractéristiques des contours. On peut définir de
une à quatre valeurs différentes.
Héritée Non.
Valeurs
Propriété page-break-after
Héritée Non.
Valeurs
Propriété page-break-before
Propriété page-break-inside
Propriété position
Propriété quotes
Définition Détermine le type des cotations (guillemets, apostrophes, …) d’un contenu textuel et parti-
culièrement les citations.
Appliquée à Tous les éléments.
Héritée Oui.
Syntaxe quotes : [<chaine> <chaine>]? | none | inherit.
Valeurs
<chaine> <chaine> Indique les chaînes de début et de fin.
Annexes
484 PARTIE III
Propriété right
Définition Position d’un élément par rapport au bord droit de son conteneur.
Appliquée à Les éléments positionnés.
Héritée Non.
Syntaxe right : <longueur> | N% | auto | inherit.
Valeurs
N% Valeur calculée par rapport à la largeur de l’élément parent.
Propriété table-layout
Propriété text-align
Propriété text-decoration
Propriété text-decoration
Valeurs
underline Texte souligné.
overline Texte surligné.
line-through Texte barré.
blink Texte clignotant.
Propriété text-indent
Propriété text-transform
Propriété top
Propriété vertical-align
Propriété visibility
Propriété width
Propriété white-space
Propriété word-spacing
Définition Définit l’espacement ajouté ou retiré entre les mots par rapport à la valeur normale issue de
la police utilisée.
Appliquée à Tous les éléments.
Héritée Oui.
Syntaxe word-spacing : normal | <longueur> | inherit.
Valeurs
normal Espacement normal de la police utilisée.
<longueur> Augmente ou diminue la valeur par défaut de l’unité précisée (la valeur peut être négative).
Propriété z-index
Définition Crée l’ordre d’empilement d’un élément par rapport aux autres en cas de positionnement.
Appliquée à Les éléments positionnés.
Héritée Non.
Syntaxe z-index : auto | N | inherit.
Valeurs
N Entier donnant l’ordre d’empilement, l’élément ayant le plus grand étant placé au dessus des
autres.
auto Le dernier apparu dans le code est placé au dessus.
Annexes
488 PARTIE III
Pseudo-classes
Pseudo-éléments
Pour visualiser le rendu réel des couleurs présentées ci-après, consulter le site :
[Link]
Les paramètres de la fonction rgb() peuvent être des pourcentages variant entre 0 et
100 % pour chaque couleur indiquée dans l’ordre RGB (Red, Green, Blue).
antiquewhite FA EB D7 rgb(250,235,215)
aqua 00 FF FF rgb(0,255,255)
aquamarine 7F FF D4 rgb(127,255,212)
azure F0 FF FF rgb(240,255,255)
beige F5 F5 DC rgb(245,245,220)
bisque FF E4 C4 rgb(255,228,196)
black 00 00 00 rgb(0,0,0)
blanchedalmond FF EB CD rgb(255,255,205)
blue 00 00 FF rgb(0,0,255)
blueviolet 8A 2B E2 rgb(138,43,226)
brown A5 2A 2A rgb(165,42,42)
burlywood DE B8 87 rgb(222,184,135)
cadetblue 5F 9E A0 rgb(95,158,160)
Annexes
490 PARTIE III
chocolate 7F FF 00 rgb(210,105,30)
coral FF 7F 50 rgb(255,127,80)
cornflowerblue 64 95 ED rgb(100,149,237)
cornsilk FF F8 DC rgb(255,248,220)
crimson DC 14 3C rgb(220,20,60)
cyan 00 FF FF rgb(0,255,255)
darkblue 00 00 8B rgb(0,0,139)
darkcyan 00 8B 8B rgb(0,139,139)
darkgoldenrod B8 86 0B rgb(184,134,11)
darkgray A9 A9 A9 rgb(169,169,169)
darkgreen 00 64 00 rgb(0,100,0)
darkkhaki BD B7 6B rgb(189,183,107)
darkmagenta 8B 00 8B rgb(139,0,139)
darkolivegreen 55 6B 2F rgb(85,107,47)
darkorange FF 8C 00 rgb(255,140,0)
darkorchid 99 32 CC rgb(153,50,204)
darkred 8B 00 00 rgb(139,0,0)
darksalmon E9 96 7A rgb(233,150,122)
darkseagreen 8F BC 8F rgb(143,188,143)
darkslateblue 48 3D 8B rgb(72,61,139)
darkslategray 2F 4F 4F rgb(47,79,79)
darkturquoise 00 CE D1 rgb(0,206,209)
darkviolet 94 00 D3 rgb(148,0,211)
deeppink FF 14 93 rgb(255,20,147)
deepskyblue 00 BF FF rgb(0,191,255)
dimgray 69 69 69 rgb(105,105,105)
dodgerblue 1E 90 FF rgb(30,144,255)
firebrick B2 22 22 rgb(178,34,34)
floralwhite FF FA F0 rgb(255,250,240)
forestgreen 22 8B 22 rgb(34,139,34)
fuchsia FF 00 FF rgb(255,0,255)
Codes des couleurs
ANNEXE C
491
ghostwhite F8 F8 FF rgb(248,248,255)
gold FF D7 00 rgb(255,215,0)
goldenrod DA A5 20 rgb(218,165,32)
gray 80 80 80 rgb(127,127,127)
green 00 80 00 rgb(0,128,0)
greenyellow AD FF 2F rgb(173,255,47)
honeydew F0 FF F0 rgb(240,255,240)
hotpink FF 69 B4 rgb(255,105,180)
indianred CD 5C 5C rgb(205,92,92)
ivory FF FF F0 rgb(255,255,240)
khaki F0 E6 8C rgb(240,230,140)
lavender E6 E6 FA rgb(230,230,250)
lavenderblush FF F0 F5 rgb(255,240,245)
lawngreen 7C FC 00 rgb(124,252,0)
lemonchiffon FF FA CD rgb(255,250,205)
lightblue AD D8 E6 rgb(173,216,230)
lightcora F0 80 80 rgb(240,128,128)
lightcyan E0 FF FF rgb(224,255,255)
lightgoldenrodyellow FA FA D2 rgb(250,250,210)
lightgreen 90 EE 90 rgb(144,238,144)
lightgrey D3 D3 D3 rgb(211,211,211)
lightpink FF B6 C1 rgb(255,1182,193)
lightsalmon FF A0 7A rgb(255,160,122)
lightseagreen 20 B2 AA rgb(32,178,170)
lightskyblue 87 CE FA rgb(135,206,250)
lightslategray 77 88 99 rgb(119,136,153)
lightsteelblue B0 C4 DE rgb(176,196,222)
lightyellow FF FF E0 rgb(255,255,224)
lime 00 FF 00 rgb(0,255,0)
limegreen 32 CD 32 rgb(50,205,50)
linen FA F0 E6 rgb(250,240,230)
Annexes
492 PARTIE III
maroon 80 00 00 rgb(128,0,0)
mediumaquamarine 66 CD AA rgb(102,205,170)
mediumblue 00 00 CD rgb(0,0,205)
mediumorchid BA 55 D3 rgb(186,85,211)
mediumpurple 93 70 DB rgb(147,112,219)
mediumseagreen 3C B3 71 rgb(60,179,113)
mediumslateblue 7B 68 EE rgb(123,104,238)
mediumspringgreen 00 FA 9A rgb(0,250,154)
mediumturquoise 48 D1 CC rgb(72,209,204)
mediumvioletred C7 15 85 rgb(199,21,133)
midnightblue 19 19 70 rgb(25,25,112)
mintcream F5 FF FA rgb(245,255,250)
mistyrose FF E4 E1 rgb(255,228,225)
moccasin FF E4 B5 rgb(255,228,181)
navajowhite FF DE AD rgb(255,222,173)
navy 00 00 80 rgb(0,0,128)
oldlace FD F5 E6 rgb(253,245,230)
olive 80 80 00 rgb(128,128,0)
olivedrab 6B 8E 23 rgb(107,142,35)
orange FF A5 00 rgb(255,165,0)
orangered FF 45 00 rgb(255,69,0)
orchid DA 70 D6 rgb(218,112,214)
palegoldenrod EE E8 AA rgb(238,232,170)
palegreen 98 FB 98 rgb(152,251,152)
paleturquoise AF EE EE rgb(175,238,238)
palevioletred DB 70 93 rgb(219,112,147)
papayawhip FF EF D5 rgb(255,239,213)
peachpuff FF DA B9 rgb(255,218,185)
peru CD 85 3F rgb(205,133,63)
pink FF C0 CB rgb(255,192,203)
plum DD A0 DD rgb(221,160,221)
Codes des couleurs
ANNEXE C
493
purple 80 00 80 rgb(128,0,128)
red FF 00 00 rgb(255,0,0)
rosybrown BC 8F 8F rgb(188,143,143)
royalblue 41 69 E1 rgb(65,105,225)
saddlebrown 8B 45 13 rgb(139,69,19)
salmon FA 80 72 rgb(250,128,114)
sandybrown F4 A4 60 rgb(244,164,96)
seagreen 2E 8B 57 rgb(46,139,87)
seashell FF F5 EE rgb(255,245,238)
sienna A0 52 2D rgb(160,82,45)
silver C0 C0 C0 rgb(192,192,192)
skyblue 87 CE EB rgb(135,206,235)
slateblue 6A 5A CD rgb(106,90,205)
slategray 70 80 90 rgb(112,128,144)
snow FF FA FA rgb(255,250,250)
springgreen 00 FF 7F rgb(0,255,127)
steelblue 46 82 B4 rgb(70,130,180)
tan D2 B4 8C rgb(210,180,140)
teal 00 80 80 rgb(0,128,128)
thistle D8 BF D8 rgb(216,191,216)
tomato FF 63 47 rgb(255,99,71)
turquoise 40 E0 D0 rgb(64,224,208)
violet EE 82 EE rgb(238,130,238)
wheat F5 DE B3 rgb(245,222,179)
white FF FF FF rgb(255,255,255)
whitesmoke F5 F5 F5 rgb(245,245,245)
yellow FF FF 00 rgb(255,255,0)
yellowgreen FF FF 00 rgb(139,205,50)
Annexe D
Les entités de caractères
# # $ $
‘ ' ( (
) ) * *
+ + , ,
- - . .
/ / 0 0
1 1 2 2
3 3 4 4
5 5 6 6
7 7 8 8
9 9 : :
? ? @ @
A A B B
C C D D
Annexes
496 PARTIE III
E E F F
G G H H
I I J J
K K L L
M M N N
O O P P
Q Q R R
S S T T
U U V V
W W X X
Y Y Z Z
[ [ \ \
] ] ^ ^
_ _ ` `
a a b b
c c d d
e e f f
g g h h
i i j j
k k l l
m m n n
o o p p
q q r r
s s t t
u u v v
w w x x
y y z z
{ { | |
} } ~ ~
ƒ ƒ „ „
… … † †
Les entités de caractères
ANNEXE D
497
‡ ‡ ˆ ˆ
‰ ‰ Š Š
 Ž Ž
‘ ‘ ’ ’
“ “ ” ”
• • – –
— — ~ ˜
™ ™ š š
 ž ž
U
ß ß ß à à à
Bibliographie
• Référencement sur le net de Sandrine Saporta aux Éditions d’Organisation.
• Créer du trafic sur son site web de Olivier Andrieu téléchargeable sur le site :
[Link]
• JavaScript - Les références du programmeur de Jean Engels aux Éditions OEM
• PHP 5 - Cours et exercices de Jean Engels aux Éditions Eyrolles
• CSS - La référence de Éric Meyer aux Éditions O’Reilly
Adresses utiles
• Les fichiers du livre : vous y trouverez les fichiers du livre à télécharger et à afficher
dans votre navigateur :
[Link]
• Spécifications XHTML du World Wide Web Consortium (W3C) :
[Link]
• Spécifications CSS 2.1 du World Wide Web Consortium (W3C) :
[Link]
Annexes
500 PARTIE III
Symboles <button> (élément) 94, 95, 123, <input /> (élément) 171
!important (déclaration) 245 172 type checkbox 184
:active (pseudo-classe) 243, 325 <caption> (élément) 136, 366, 370 type file 194
:after (pseudo-élément) 245, 397 <cite> (élément) 61 type hidden 192
:before (pseudo-élément) 245, 397 <code> (élément) 62 type image 173
:first (pseudo-classe) 429 <col /> (élément) 147, 160, 162 type password 179
:first-child (pseudo-classe) 244 <colgroup> (élément) 147, 160, type radio 183
:first-letter (pseudo-élément) 244 370 type reset 173
:first-line (pseudo-élément) 245 <dd> (élément) 78 type submit 172
:focus (pseudo-classe) 243, 325 <del> (élément) 57 type text 176
:hover (pseduo-classe) 360 <dfn> (élément) 62 <ins> (élément) 57
:hover (pseudo-classe) 243, 325 <div> (élément) 51 <kbd> (élément) 62
:lang (pseudo-classe) 244 <dl> (élément) 78 <label> (élément) 176, 182
:left (pseudo-classe) 429 <dt> (élément) 78 <legend> (élément) 58, 168
:link (pseudo-classe) 243, 325 <li> (élément) 71, 73, 389
<em> (élément) 68
:right (pseudo-classe) 429 <link /> (élément) 29, 418
<fieldset> (élément) 58, 167, 195
:visited (pseudo-classe) 243, 325 <link> (élément) 28
<form> (élément) 58, 167
<a> (élément) 107 <map> (élément) 126, 127, 173
<frame /> (élément) 207, 208
<abbr> (élément) 60 <meta /> (élément) 31
<frameset> (élément) 207 <meta> (élément) 28
<acronym> (élément) 61
<h1> (élément) 45 <noframes> (élément) 207, 208
<address> (élément) 57, 130
<area /> (élément) 89, 90, 126, <h2> (élément) 45 <noscript> (élément) 223
127, 173 <h3> (élément) 45 <object> (élément) 92, 96, 98,
<b> (élément) 68 <h4> (élément) 45 101, 102
<base /> (élément) 28 <h5> (élément) 45 enfants 92
<bdo> (élément) 61 <h6> (élément) 45 parents 92
<big> (élément) 68 <head> (élément) 23, 28 <ol> (élément) 71, 75, 389
<blockquote> (élément) 53 <html> (élément) 23, 27 <optgroup> (élément) 190
<body> (élément) 23, 39, 207 <i> (élément) 68 <option> (élément) 186
<br /> (élément) 69 <img /> (élement) 84, 124 <p> (élément) 49
XHTML et CSS2
502
<param /> (élément) 92, 103 attribut 8 onfocus 90, 177, 181, 183, 187
<pre> (élément) 55 accept 171, 194 onkeydown 10
<q> (élément) 63 accept-charset 171 onkeypress 10
<samp> (élément) 63 accesskey 89, 172 onkeyup 10
<script> (élément) 28, 34, 132 action 169, 190 onload 207
<select> (élément) 186 align 141, 145 onmousedown 11
<small> (élément) 68 alt 85, 89 onmousemove 11
<span> (élément) 63 border 138, 370 onmouseout 11
<strong> (élément) 68 cellpadding 138 onmouseover 11
<style> (élément) 28, 35, 246, 418 cellspacing 138 onmouseup 11
<sub> (élément) 69 char 141 onreset 171
<sup> (élément) 69 charoff 141 onselect 181, 184
<table> (élément) 135, 156, 159, charset 29, 34 onsubmit 171
160, 162 checked 183, 184 onunload 207
<tbody> (élément) 141, 145 class 10 profile 29
<td> (élément) 136 classid 99, 103 readonly 177, 181, 183
<textarea> (élément) 181 codebase 99 rel 29, 110
<tfoot> (élément) 141, 145 codetype 103 rev 29, 110
<th> (élément) 136 cols 181, 207 rows 181, 207
<thead> (élément) 140, 145 colspan 150 rowspan 150, 153
<title> (élément) 23, 28, 36 content 32 rules 138, 141, 147
<tr> (élément) 136 coords 89, 110, 126 scrolling 208
<tt> (élément) 69 d’internationalisation 10 selected 188
data 92 sélecteur de valeur 236
<ul> (élément) 73, 75
defer 34 shape 89, 110, 126
<var> (élément) 64
dir 10, 28 size 176, 179, 187, 194
@import (directive) 246
disabled 177, 181, 183, 184, span 147
@media (directive) 418
187 src 85, 208
@page (directive) 429
enctype 171, 194, 195 standby 93, 97
A frame 138, 141, 147 style 10, 247
frameborder 208, 214 summary 139
abréviation 60 height 85 tabindex 89, 172, 187
accept (attribut) 171, 194 href 29, 89, 112, 116, 129 target 129, 221
accept-charset (attribut) 171 hreflang 29, 110 title 10
accesskey (attribut) 89, 172 http-equiv 32 type 29, 35, 93, 95, 172
acronyme 61 id 10, 170 usemap 86, 127, 128
action (attribut) 169, 190 ismap 86 valign 141, 145
align (attribut) 141, 145 label 190 value 173, 176, 183, 192
alignement longdesc 85, 208 width 85, 138, 147, 160, 162
dans les tableaux 145 marginheight 208 xml
des symboles de numérotation marginwidth 208 lang 10, 27
395 maxlength 176, 179 preserve 36
alt (attribut) 85, 89 media 29, 30, 35, 418 space 35
ancre 116 method 170, 194 xmlns 28
navigation multiple 187 audio 100
dans une page 117 name 32, 172, 176, 181
entre plusieurs pages 119 nohref 89, 127 B
animation Flash 97 noresize 208 background (propriété) 273
inclusion 97 onblur 90, 177, 183, 187 background-attachement
applet 102 onchange 177, 181, 184, 187 (propriété) 271
insertion 102 onclick 10, 95 background-color (propriété) 260,
Java 96 ondblclick 10 366
Index
503