XHTML-CSS-JAVASCRIPT - Cours
XHTML-CSS-JAVASCRIPT - Cours
JAVASCRIPT
i
6.4. Créer une miniature cliquable ................................................................................................................ 24
6.5. Exercice P1C6 ............................................................................................................................................... 24
6.6. En résumé ...................................................................................................................................................... 24
Chapitre 7 Autres balises XHTML ................................................................................................................... 26
7.1. Insérer une adresse avec la balise <address> .................................................................................. 26
7.2. Insérer des citations longues avec la balise <blockquote> .......................................................... 26
7.3. Insérer une ligne horizontale avec la balise vide <hr /> ............................................................... 26
7.4. Insérer une liste de définitions avec la balise <dl>.......................................................................... 26
7.5. Créer un tableau avec la balise <table> ............................................................................................. 26
7.6. Insérer une citation courte ou une référence la balise <cite> .................................................... 27
7.7. Insérer des métadonnées avec la balise <meta> ou des liens externes avec la
balise <link> ..................................................................................................................................................... 27
PARTIE II : MISE EN FORME DES PAGES WEB AVEC CSS .................................................. 28
Chapitre 8 Intégrer le CSS dans la page XHTML ..................................................................................... 28
8.1. Lier le fichier CSS au fichier XHTML .................................................................................................... 28
8.2. Appliquer une propriété CSS à une balise XHTML .......................................................................... 28
8.3. Appliquer une propriété CSS à plusieurs balises XHTML à la fois ............................................. 30
8.4. Appliquer un style à un élément isolé avec l'attribut class ......................................................... 30
8.5. Appliquer une propriété CSS à un élément unique avec l'attribut id ......................................... 31
8.6. Appliquer plusieurs propriétés CSS d'un coup à un élément....................................................... 32
8.7. Exploiter les balises universelles <span> </span> et <div> </div> ................................... 33
8.8. Exercice P2C1 ............................................................................................................................................... 33
8.9. En résumé ...................................................................................................................................................... 33
Chapitre 9 Changer l'apparence du texte .................................................................................................... 35
9.1. Changer la taille du texte avec la propriété CSS font-size ........................................................ 35
9.2. Choix d’une police avec la propriété CSS font-family ................................................................. 37
9.3. Mettre du texte en italique avec la propriété CSS font-style ................................................... 38
9.4. Mettre du texte en gras avec la propriété CSS font-weight ....................................................... 38
9.5. Souligner du texte avec la propriété CSS text-decoration ....................................................... 40
9.6. Alignez du texte avec la propriété CSS text-align ........................................................................ 40
9.7. Exercice P2C2 ............................................................................................................................................... 42
9.8. En résumé ...................................................................................................................................................... 43
Chapitre 10 Ajouter de la couleur et un fond............................................................................................ 44
10.1. Changez la couleur du texte avec la propriété CSS color .......................................................... 44
10.2. Appliquer une couleur d'arrière-plan avec la propriété CSS background-color ............... 44
10.3. Ajouter une image de fond avec la propriété CSS background-image ................................... 45
10.4. Exercice P2C3............................................................................................................................................. 48
10.5. En résumé ................................................................................................................................................... 48
Chapitre 11 Créer des bordures et des ombres ......................................................................................... 49
ii
11.1. Créer des bordures avec la propriété CSS border ......................................................................... 49
11.2. Arrondir les angles avec la propriété CSS border-radius ........................................................ 51
11.3. Ajouter une ombre portée avec la propriété CSS box-shadow................................................... 53
11.4. Ajouter une ombre à un texte avec text-shadow .......................................................................... 54
11.5. Exercice P2C4............................................................................................................................................. 56
11.6. En résumé ................................................................................................................................................... 56
Chapitre 12 Le modèle des boîtes .................................................................................................................. 57
12.1. Différencier les balises de type block et de type inline ............................................................ 57
12.2. Faire bon usage des balises universelles <span> et <div> ......................................................... 57
12.3. Dimensionner les éléments avec les propriétés CSS width et height ................................... 57
12.4. Définir des marges avec les propriétés CSS margin et padding............................................... 58
12.5. Ajouter une marge intérieure avec la propriété CSS padding ................................................... 59
12.6. Ajouter une marge extérieure avec la propriété CSS margin ..................................................... 60
12.7. Spécifier les propriétés margin et padding ...................................................................................... 60
12.8. Centrer les blocs avec width et margin: auto;............................................................................ 61
12.9. Exercice P3C2............................................................................................................................................. 62
12.10. En résumé ................................................................................................................................................. 62
Chapitre 13 Faire la mise en page avec Flexbox ...................................................................................... 64
13.1. Comprendre la logique : un conteneur, des éléments .................................................................. 64
13.2. Alignez les éléments d'un conteneur avec display: flex; ...................................................... 64
13.3. Donner une direction aux éléments avec la propriété flex-direction................................ 64
13.4. Retourner à la ligne avec la propriété flex-wrap .......................................................................... 65
13.5. Aligner les éléments sur un axe principal et secondaire .............................................................. 66
13.6. Répartir les blocs sur plusieurs lignes avec align-content .................................................... 76
13.7. Exercice P3C3............................................................................................................................................. 78
13.8. En résumé ................................................................................................................................................... 78
Chapitre 14 Créer des formulaires ................................................................................................................. 80
14.1. Créer un formulaire avec la balise en paires <form> </form> ................................................. 80
14.2. Insérer des champs de texte avec la balise HTML <input>........................................................ 80
14.3. Utiliser <input> pour des formats de saisie particuliers ............................................................ 82
14.4. Laisser le visiteur choisir une option.................................................................................................. 84
14.5. En résumé ................................................................................................................................................... 88
PARTIE III : RENDRE UNE PAGE WEB DYNAMIQUE AVEC JAVASCRIPT ............................. 89
Introduction ............................................................................................................................................................. 89
Chapitre 15 Comment intégrer un script dans vos pages XHTML .................................................. 89
15.1 Position du code JavaScript dans une page XHTML ...................................................................... 89
15.2. Les commentaires en JavaScript ......................................................................................................... 91
15.3. La balise <noscript> .............................................................................................................................. 91
15.4. Exercice P3C1 : Création d'un JavaScript externe ........................................................................ 91
iii
15.5. En résumé ................................................................................................................................................... 92
Chapitre 16 Le modèle d'objet de document ou DOM ........................................................................... 93
(Document Object Model en Anglais) ............................................................................................................ 93
16.1. Le DOM, qu’est-ce que c’est ? ............................................................................................................... 93
16.2. Accès aux valeurs à l'aide de la notation par points (.) ou Dot Notation en Anglais ......... 94
16.3. L'objet document ....................................................................................................................................... 95
16.4. La collection de formulaires (<form>) ................................................................................................. 96
16.5. Éléments de formulaire ........................................................................................................................... 97
16.6. Exercice P3C2 : Collecte de données de formulaire ....................................................................... 98
16.7. Collection d'images ................................................................................................................................. 100
16.8. Exercice P3C2 : Un survol d'image simple...................................................................................... 100
16.9. Différents types d'objets ........................................................................................................................ 102
16.10. En résumé ............................................................................................................................................... 102
Chapitre 17 Commencer à programmer avec JavaScript .................................................................. 103
17.1. Les Variables JavaScript ...................................................................................................................... 103
17.2. Les opérateurs JavaScript .................................................................................................................... 104
17.3. Les fonctions JavaScript ....................................................................................................................... 106
17.4. Les expressions conditionnelles ......................................................................................................... 107
17.5. Les boucles ................................................................................................................................................ 110
17.6. Les événements ........................................................................................................................................ 112
17.7. Les objets intégrés .................................................................................................................................. 113
17.7.1. L’objet string ........................................................................................................................................... 113
Exercice P3C3 : Utilisation de l'objet string ........................................................................................... 114
17.7.2. L’objet date ................................................................................................................................................ 115
17.7.3. L’objet math ................................................................................................................................................ 117
17.7.4. L’objet array (tableau) .............................................................................................................................. 118
17.7.5. L’objet window (fenêtre) ............................................................................................................................ 119
17.8. Écrire du JavaScript .............................................................................................................................. 120
17.8.1. Un mot sur les types de données ................................................................................................................. 121
17.8.2. Mots clés ...................................................................................................................................................... 122
17.9. En résumé ................................................................................................................................................. 122
17.10. Exercices.................................................................................................................................................. 122
Chapitre 18 Travailler avec JavaScript ...................................................................................................... 124
18.1. Conseils pratiques pour écrire des scripts ..................................................................................... 124
18.1.1. Quelqu'un a-t-il déjà écrit ce script ? ........................................................................................................... 124
18.1.2. Fonctions réutilisables.................................................................................................................................. 124
18.1.3. Utilisez des fichiers JavaScript externes ....................................................................................................... 124
18.1.4. Placez les scripts dans un dossier de scripts ................................................................................................ 125
18.2. Validation du formulaire ....................................................................................................................... 125
iv
18.2.1. Quand valider ............................................................................................................................................... 125
18.2.2. Ce que vous pouvez vérifier ......................................................................................................................... 125
18.2.3. Comment vérifier un formulaire .................................................................................................................. 126
18.3. La méthode replace() ......................................................................................................................... 133
Fiche résumée de ce cours ............................................................................................... 135
AIDE MEMOIRE
Liste des balises HTML :
https://course.oc-static.com/courses/1603881/Glossaire+des+balises+HTML.pdf
Liste des propriétés CSS :
https://course.oc-static.com/courses/1603881/Glossaire+des+propri%C3%A9t%C3%A9s+CSS.pdf
Spécificité de toutes les balises HTML :
https://developer.mozilla.org/fr/docs/Web/HTML
Spécificités de toutes les propriétés CSS :
https://developer.mozilla.org/fr/docs/Web/CSS
v
Chapitre 1 Historique
1.1. Introduction
À ses débuts, le Web n’était guère plus qu’un amas de documents de recherche, reliés les uns aux autres
par du code HTML servant à les mettre en forme et à les structurer simplement. Cependant, quand sa
popularité s’est accrue, il a été utilisé par les développeurs à des fins de présentation. Au lieu de se servir
des éléments de titre pour les titres des pages, ils ont voulu recourir à des combinaisons de balises de police
et de style pour créer différentes sortes d’effets visuels. Les tableaux, d’abord employés pour l’affichage des
données, sont rapidement devenus des outils de mise en page tandis que les instructions blockquote
(L'élément HTML <blockquote> (qui signifie bloc de citation) indique que le texte contenu dans l'élément est
une citation longue.) ont servi à insérer des espaces blancs au lieu de signaler la présence de citations. Très
vite, le Web a perdu tout son sens et s’est transformé en un véritable mélange de balises de polices et de
tableaux. Les concepteurs web ont même forgé une expression pour désigner ce type de balisage : la "soupe
à balises" cf. figure ci-après :
Figure :
Le balisage de l’article à la une
d’abcnews.com, le 14 août 2000,
utilise des tableaux pour la mise
en forme et du texte en gras et
très grand pour les titres. Le code
manque de structure et est
difficile à comprendre.
À force d’être orienté sur la présentation, le code des pages web est devenu de plus en plus difficile à
comprendre et à gérer.
Au lieu d’être considéré comme un simple langage de balisage, le HTML a acquis la réputation d’un langage
compliqué, déroutant et très facilement sujet aux erreurs. De nombreuses personnes craignaient de toucher
au code. Cette tendance a favorisé une dépendance excessive vis-à-vis des éditeurs visuels et contribué à
forger une génération de concepteurs peu aguerris aux techniques de programmation.
À l’orée du nouveau millénaire, le secteur de la conception web se trouvait dans un état de délabrement
avancé. Il fallait faire quelque chose.
C’est dans cet état de marasme complet que sont arrivées les feuilles de styles CSS. Elles offraient aux
utilisateurs la possibilité de contrôler l’apparence des pages avec des feuilles de styles externes et donc de
séparer le contenu de la présentation. Des changements portant sur tout le site pouvaient ainsi s’effectuer à
un seul et unique endroit et se trouver propagés dans tout le système. Les balises de présentation comme
les balises de police furent abandonnées et la mise en page fut contrôlée avec des CSS et non des tableaux.
Le balisage put alors retrouver sa simplicité d’origine et l’on commença à retrouver de l’intérêt au code sous-
jacent.
La signification des éléments a pu naturellement retrouver sa place au sein des documents. Les styles par
défaut des navigateurs pouvant être redéfinis, il était possible de baliser un élément afin d’indiquer qu’il
s’agissait d’un titre, sans nécessairement avoir à le rendre gros, gras et très moche. On put créer des listes
sans se retrouver avec des puces et des balises de citation et être instantanément punis par leur habituel
effet de mise en forme. Les développeurs commencèrent alors à utiliser les éléments HTML pour ce qu’ils
signifiaient et non pour l’apparence qu’ils permettaient d’obtenir.
se présenter ;
mettre son travail en valeur grâce à un portfolio ;
être contactée plus simplement, en ligne.
Chaque connaissance acquise dans un chapitre permettra d'ajouter une nouvelle pierre à l'édifice : vous
pourrez ajouter des fonctionnalités et améliorer le style du portfolio de Robbie Lens progressivement.
2.1. Le HTML
Le HTML (HyperText Markup Language) a fait son apparition dès 1991 lors du lancement du Web. Son rôle
est de gérer et d’organiser le contenu. C’est-à-dire de décrire, de structurer le contenu de la page. On
l’utilise pour ajouter à la page du texte, des liens ou des images… En “français”, cela consiste à dire par
exemple : “Ceci est mon titre”, “Ceci est mon menu”, “Voici une image à afficher”, etc. Un site web 100%
HTML n’est pas agréable à voir. Et c’est là que le CSS entre en jeu.
2.2. Le CSS
Le CSS (Cascading Style Sheets, aussi appelées feuilles de style) a pour rôle de gérer l'apparence de la page
web (agencement, positionnement, décoration, couleurs, taille du texte…). Ce langage est venu compléter le
HTML en 1996, et il est toujours au fondement même du style du Web de nos jours.
On peut facilement changer ces propriétés en faisant un clic droit sur un élément de la page et en
sélectionnant l’option inspecter. On a le code HTML d’un côté (onglet Éléments) et le code CSS de l’autre
(onglet Styles). Ces changements n’affectent en rien le code original de la page et ne sont visibles que par
vous. La coexistence de ces deux langages est faite pour faciliter le développement des sites web.
2.4. En résumé
Le HTML permet de mettre en place la structure d'une page web.
Le CSS permet d'ajouter du style à une page web.
Les deux langages se complètent avec un rôle bien défini pour chacun.
Le navigateur est un logiciel qui permet de lire les langages du Web : HTML et CSS. Il permet
également d’exécuter les scripts JAVASCRIPT.
Tous les navigateurs embarquent des outils de développement, dont l'outil d'inspection qui permet
d'accéder au HTML et au CSS d'une page.
<body>
...Contenu de la page web ici...
</body>
</html>
La syntaxe suivante montre la manière correcte d'écrire les balises ci-dessus en XHTML. La différence est
que, ici, nous avons correctement fermé les deux balises.
<!-- Ceci est valide en XHTML -->
<p>Ce paragraphe respecte la syntaxe XHTML.</p>
D. Valeurs d'attribut
Toutes les valeurs des attributs XHTML doivent être entre guillemets. Sinon, votre document XHTML est
considéré comme un document non valide. Voici un exemple montrant la syntaxe :
<!-- Ceci est invalide en XHTML -->
<img src="/images/xhtml.gif" width=250 height=50 />
compact compact="compact"
checked checked="checked"
declare declare="declare"
readonly readonly="readonly"
disabled disabled="disabled"
selected selected="selected"
defer defer="defer"
ismap ismap="ismap"
nohref nohref="nohref"
noshade noshade="noshade"
nowrap nowrap="nowrap"
multiple multiple="multiple"
noresize noresize="noresize"
F. L'attribut id
L'attribut id remplace l'attribut name. Au lieu d'utiliser name = "name", XHTML préfère utiliser id = "id".
L'exemple suivant montre comment le faire :
<!-- Ceci est invalide en XHTML -->
<img src="/images/xhtml.gif" name="xhtml_logo" />
G. L'attribut de langue
L'attribut de langue de la balise de script est obsolète. L'exemple suivant montre cette différence :
<!-- Ceci est invalide en XHTML -->
<script type="text/JavaScript">
document.write("Bonjour XHTML!");
</script>
H. Balises imbriquées
Page 10 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
Vous devez imbriquer correctement toutes les balises XHTML. Sinon, votre document est considéré comme
un document XHTML incorrect. L'exemple suivant montre la syntaxe :
<!-- Ceci est invalide en XHTML -->
<b><i>Ce texte est en gras et en italique</b></i>
I. Interdictions d'élément
Les éléments suivants ne peuvent contenir aucun autre élément à l'intérieur. Cette interdiction s'applique à
toutes les profondeurs de nidification. Cela signifie qu'il comprend tous les éléments descendants.
Element Prohibition
<pre> Must not contain the <img>, <object>, <big>, <small>, <sub>, or <sup> elements.
<button> Must not contain the <input>, <select>, <textarea>, <label>, <button>, <form>, <fieldset>, <iframe>
or <isindex> elements.
<body>
Les oiseaux du monde
Il existe plus de 990 espèces d’oiseaux répertoriées dans toute l’Europe.
</body>
</html>
Rappel : L’attribut lang permet de préciser la langue du site web que l'on va créer : lang=”fr” signifie que la
langue par défaut du site est le français. Ce n’est pas obligatoire (la balise <html> seule n’empêche pas le
code de fonctionner), c’est simplement que si vous codez un site web en langue française, cela vous évite de
potentiels soucis d’affichage. En outre, cela permet de mettre la langue par défaut de votre site web sur le
français.
L’ordre des balises est important dans cette structure de base. En effet les balises s'ouvrent puis se ferment,
et elles s'emboitent les unes dans les autres dans un ordre précis.
La syntaxe <html><body></html></body> est incorrecte : les balises s'entremêlent.
La syntaxe <html><body></body></html> est correcte : une balise qui est ouverte à l'intérieur d'une
autre balise doit aussi être fermée à l'intérieur de celle-ci.
On a ainsi des éléments dits "parents", qui vont contenir d'autres éléments dits "enfants".
Cela fonctionne un peu comme des poupées russes :
Avant de terminer ce chapitre, abordons une bonne pratique que tout développeur devrait suivre :
commenter son code.
3.6. En résumé
Pour créer une page web, on crée un fichier ayant l’extension .html, qui pourra être ouvert dans le
navigateur web simplement en faisant un double-clic dessus.
Chaque fichier HTML est constitué de balises.
Les balises peuvent avoir plusieurs formes :
o <balise> </balise> : balises en paires, elles s'ouvrent et se ferment pour délimiter le contenu
(début et fin d'un titre, par exemple) ;
o <balise /> : balises orphelines (on ne les insère qu'en un seul exemplaire), elles permettent
d'insérer un élément à un endroit précis (par exemple une image).
Les balises sont parfois accompagnées d'attributs pour donner des indications supplémentaires, ou
paramétrer un élément (exemple : <img src="photo.jpg">).
Une page web est constituée de deux sections principales : l'en-tête <head> </head> dont le contenu
n'apparaît pas dans l'affichage de la page et le corps <body> </body> qui, lui, apparaît.
…
<head>
<title>Ma page</title>
</head>
<body>
<p>Ceci est le contenu de mon premier paragraphe</p>
<p>Ceci est le contenu de mon deuxième paragraphe</p>
</body>
…
Il existe une autre balise pour revenir à la ligne sans créer un nouveau paragraphe.
…
<head>
<title>Ma page</title>
</head>
<body>
<p>Ceci est le contenu de mon premier paragraphe, <br>dont le contenu est
particulièrement long.</p>
<p>Ceci est le contenu de mon deuxième paragraphe</p>
</body>
…
Vous pouvez théoriquement mettre plusieurs balises <br /> d'affilée pour faire plusieurs sauts de lignes,
mais on considère que c'est une mauvaise pratique qui rend le code délicat à maintenir. Pour décaler un
texte avec plus de précision, on utilisera le CSS, ce langage qui vient compléter le XHTML pour lui ajouter
du style, et dont nous parlerons un peu plus loin.
Maintenant que vous savez créer des paragraphes et sauter des lignes, voyons comment créer des titres.
4.3. Créer des titres avec les balises <h1>, <h2>, <h3>, …
Les balises de titres vont de <h1> </h1> jusqu'à <h6> </h6>, ce qui permet de hiérarchiser et structurer le
texte dans différentes sections, du niveau le plus grand, au niveau le plus petit.
Il faut toujours structurer sa page en commençant par un titre de niveau 1 <h1>, puis structurer l'intérieur
avec des titres de niveau 2 <h2>, puis, si besoin de structurer l'intérieur, utiliser des titres de niveau 3, etc.
Il ne devrait pas y avoir de sous-titre sans titre principal !
Attention !!! Ne confondez pas les balises <h1> et <title> :
La balise <h1> sert à créer un titre de niveau 1 qui sera affiché sur la page web.
La balise <title> n'affiche rien sur la page web, elle affiche le titre de la page dans l'onglet du
navigateur.
Ajoutons donc des balises de titre dans le code :
…
<head>
Page 14 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
<title>Ma page</title>
</head>
<body>
<h1>Bienvenue sur ma page</h1>
<p>Ceci est le contenu de mon premier paragraphe</p>
<p>Ceci est le contenu de mon deuxième paragraphe</p>
<h2>Voilà mon sous-titre 1</h2>
<h3>Une sous-partie</h3>
<p>Un paragraphe</p>
<h3>Une autre sous-partie</h3>
<p>Tiens encore un paragraphe</p>
<h2>Voilà mon sous-titre 2</h2>
…
</body>
…
Votre navigateur affiche par défaut des tailles différentes de texte en fonction des titres, mais si vous voulez
modifier la taille du texte, sachez que nous apprendrons à faire cela en CSS un peu plus tard.
4.4. Créer des listes avec les balises <li> et <ul> ou <ol>
Pour créer une liste d’éléments (non ordonnés c’est-à-dire une liste à puce ou bien numérotés) on procède
en deux étapes :
Étape 1 : baliser les éléments de la liste avec <li> </li>
Pour baliser les éléments qu'on veut mettre dans une liste, on utilise <li> </li> (pour "listed item" ou
"élément de la liste" en français). Puis on les insère tous à l'intérieur d'une autre balise pour indiquer s'il
s'agit d'une liste à puces ou d'une liste numérotée.
Étape 2 : insérer la liste dans des balises <ul> </ul> ou <ol> </ol>
Les balises <ul> </ul> (pour "unordered list") permettent d'indiquer qu'on démarre une liste non ordonnée,
c'est-à-dire, ce que l'on appelle en français une liste à puces.
Les balises <ol> </ol> (pour "ordered list") permettent d'indiquer qu'on démarre une liste ordonnée,
autrement dit en français une liste numérotée.
Exemple :
<h1>Ma journée</h1>
<ol>
<li>Je me lève.</li>
<li>Je mange et je bois de l'eau.</li>
<li>Je retourne me coucher.</li>
</ol>
4.5. Mettre en valeur du texte important
Dans le texte qui s'affiche sur une page web, on aimerait parfois faire ressortir certains mots en particulier.
C’est-à-dire les mettre en évidence sur la page.
La balise la plus utilisée pour cela est <strong> mais XHTML propose différents moyens de mettre en valeur
le texte d’une page :
Il peut arriver que la mise en forme proposer par le navigateur ne nous plaise pas. Car en fait, c'est le
navigateur qui choisit comment afficher les mots qu'on lui indique comme étant plus ou moins importants
(en gras, en italique, …).
Les balises <em> et <strong> ne signifient pas respectivement “mettre en italique" ou "mettre en gras” mais
seulement que le texte est “important”. On pourra décider plus tard, en CSS, d'afficher les mots
“importants” d'une autre façon que le gras, si on le souhaite.
Pourquoi faire ressortir du texte important sur un site web ?
Les robots de moteurs de recherche parcourent le Web en lisant le code XHTML de tous les sites. Les mots-
clés “importants”, mais aussi les titres (headings) hiérarchisés auront tendance à avoir plus de valeur à
leurs yeux ; donc si quelqu'un fait une recherche sur ces mots, il a plus de chances de tomber sur votre site
(votre site aura un meilleur référencement). Mais attention tout de même : abuser de ces balises n’aura pas
l’effet escompté sur votre référencement.
Une nuance tout de même : abuser de ces balises n’aura pas l’effet escompté sur votre référencement. Si
quasiment tout le texte est signalé comme étant important, rien en particulier ne va vraiment pouvoir
"ressortir"… Il vaut donc mieux marquer un mot comme important plutôt que tout un texte.
4.7. En résumé
Le XHTML comporte de nombreuses balises qui nous permettent d'organiser le texte de notre page.
Ces balises donnent des indications comme “Ceci est un paragraphe”, “Ceci est un titre”, etc.
Les paragraphes sont définis par la balise <p> </p>, et les sauts de ligne par la balise orpheline
<br>.
Il existe six niveaux de titre, de <h1> </h1> à <h6> </h6>, à utiliser selon l'importance du titre.
On peut mettre en valeur certains mots avec les balises <strong>, <em> et <mark>.
Pour créer des listes, on doit utiliser la balise <ul> (liste à puces, non ordonnée) ou <ol> (liste
ordonnée). À l'intérieur, on insère les éléments avec une balise <li> pour chaque item.
5.2. Créer un lien hypertexte vers l'URL d'une page disponible sur internet (lien absolu)
Si vous voulez faire un lien vers un autre site existant en ligne, rien de plus simple, il suffit de copier l'URL
du site et le coller entre " "à la suite de l'attribut href, comme ceci :
<a href="https://www.google.fr/?gws_rd=ssl/">Faire une recherche sur Google</a>
Ce type de lien hypertexte s'appelle un lien absolu : il indique une adresse complète.
Nous allons maintenant voir que l'on peut écrire les liens d'une façon un peu différente, ce qui va nous être
utile pour faire des liens entre les pages de notre site.
5.3. Créer un lien hypertexte d'une page à une autre sur le même site (lien relatif)
Pour l’instant nous n’avons pas d’URL disponible car le site n’est pas encore en ligne. On va donc créer des
liens entre nos pages en utilisant leur nom, et en indiquant leur arborescence dans notre dossier en local.
Ce type de lien hypertexte s'appelle un lien relatif : il indique où trouver notre fichier HTML.
Cas n°1 : les deux pages sont situées dans un même dossier en local
Si les pages sont dans le même dossier, il suffit d'écrire comme cible du lien hypertexte le nom du fichier
vers lequel on veut amener, par exemple le fichier nommé page2.html.
Si on veut aller de la page 1 à la page 2, voici ce que nous écrirons dans le fichier de page1.html :
<a href="page2.html">Page 2</a>
Si on veut créer un fichier page 3 et le déplacer dans un dossier ‘/contenu’ il faut indiquer le chemin relatif.
Cas n°2 : les deux pages sont situées dans deux dossiers différents en local
Si on veut créer un fichier page 3 et le déplacer dans un autre dossier, par exemple un dossier /contenu, on
va donc indiquer le chemin à suivre pour trouver ce fichier :
<a href="contenu/page3.html">Page 3</a>
Et s'il y a plusieurs sous-dossiers, on écrira ceci :
<a href="contenu/autredossier/page3.html">Page 3</a>
Si le fichier cible est placé dans un dossier qui se trouve “plus haut” dans l'arborescence (dans un dossier
parent), il faut utiliser deux points .. , comme ceci :
<a href="../page3.html">Page 3</a>
5.4. Créer une ancre avec les attributs id et href
Une ancre est un repère que l'on peut mettre dans une page HTML si elle est très longue, cela aide à la
navigation et rend un contenu plus facile à parcourir. Cela permet par exemple aux visiteurs d'un site web
d'aller directement à la partie qui les intéresse.
Ce comportement est typique d'un site web "one page" comme le site https://zyro.com/fr.blog1:site-
one-page-exemple où tout se situe sur la même page.
Pour créer une ancre, il suffit de rajouter l'attribut id à une balise qui va alors servir de repère. Ce peut être
n'importe quelle balise, une balise de titre par exemple. Voyons comment faire :
La première étape consiste à ajouter l'attribut id suivi de = pour donner un nom à l'ancre entre double
quote " " :
<h2 id="mon_ancre">Titre</h2>
Vous avez peut-être remarqué que l’on a commencé à utiliser du latin pour remplir des zones de texte dans
notre code. C'est normal, pas de panique ! Il s'agit du «lorem ipsum»
https://fr.wikipedia.org/wiki/Lorem_ipsum , un “faux texte” qu'on peut ajouter provisoirement, de manière
à calibrer une mise en page avant la validation d’un texte définitif.
Cas n°2 : l'ancre est située dans une autre page
Dans ce cas-là, on tape le nom de la page cible avant le dièse # et enfin le nom de l'ancre :
<a href="index.html#jardin">Le jardin</a>
Voici une nouvelle page qui contient trois liens, chacun amenant vers une des ancres de la page de
l'exemple précédent :
<h1>Le Mégamix</h1>
<p>
Rendez-vous quelque part sur la page :<br>
<a href="index.html#cuisine">La cuisine</a><br>
<a href="index.html#jardin">Le jardin</a><br>
<a href="index.html#salon">Le salon</a><br>
</p>
Remarque : il est possible de configurer un lien pour qu'il ait un comportement un peu particulier. Par
exemple :
target="_blank" fait en sorte que lien hypertexte ouvre un nouvel onglet :
<p>Bonjour. Souhaitez-vous faire une recherche sur <a href="
https://www.google.fr/?gws_rd=ssl/" target="_blank">Google</a> ?</p>
href="mailto:[email protected]" crée un lien hypertexte qui ouvre la boîte mail avec un
nouveau message vide.
href="NOMDEFICHIER.EXTENSION" crée un lien hypertexte qui permet de télécharger un fichier que
vous avez placé au préalable dans le même dossier que votre page web.
5.6. En résumé
Un lien hypertexte (ou hyperlien) permet de changer de page. Par défaut, il est en bleu et souligné
dans le navigateur mais on peut modifier ce style en CSS.
Pour faire un lien hypertexte vers un site web existant, on utilise la balise <a> avec l'attribut href
pour indiquer l'adresse de la page web cible. Il s'agit d'un lien absolu. Exemple : <a
href="https://youtube.com">.
Pour faire un lien hypertexte vers une autre page de son site, on utilise la balise <a> avec l'attribut
href pour indiquer le nom du fichier en local. Il s'agit d'un lien relatif. Exemple : <a
href="page2.html">.
Un lien hypertexte peut aussi permettre d'amener vers un endroit précis d'une page. Il faut créer une
ancre avec l'attribut id pour “marquer” cet endroit dans la page, puis faire un lien vers l'ancre
comme ceci : <a href="#ancre">.
La balise qui permet d'insérer une image est une balise orpheline : <img>
Pour fonctionner correctement, la balise <img> doit être accompagnée de deux attributs :
1. src : cet attribut permet d'indiquer la source de l'image.
2. alt : cet attribut permet de donner à l'image une description alternative.
6.1.1. Ajouter l'attribut src pour indiquer la source de l'image
La source de l'image est précisée avec l'attribut src pour indiquer au navigateur comment récupérer l'image
que l'on veut insérer. De la même manière qu'un lien hypertexte, on peut indiquer la source d'une image :
…avec un chemin absolu si l'image vient d'internet
On utilise un chemin absolu pour indiquer la source d'une image lorsque celle-ci est en ligne, sur un site,
ou qu'elle est hérbergée sur le web. On copie colle donc simplement l'URL de l'image.
Lorsque vous utilisez cette technique, faites attention à ce que l'URL corresponde bien à l'image
uniquement, et pas à une page web qui contient une image. Pour vous en assurer, vous pouvez faire un clic
droit sur l'image de votre choix, et choisir "Copier l'adresse de l'image".
…ou avec un chemin relatif si l'image est en local sur votre ordinateur
C'est ce que l'on fait si l'image est sur notre ordinateur : on utilise alors le nom et l'arborescence du fichier
de l'image en local pour indiquer sa source.
Si l'image est dans un sous-dossier nommé images, on précise : src="images/logo.png"
Évitez à tout prix les accents, majuscules et espaces dans vos noms de fichiers et de dossiers. Par exemple,
voici un chemin qui va poser problème : Images du site/Image toute bête.jpg
Il faut idéalement :
supprimer les espaces (ou les remplacer par le symbole_) et les accents ;
tout mettre en minuscules, comme ceci : images_du_site/image_toute_bete.jpg.
Si votre image ne s'affiche pas, c'est très certainement parce que le chemin est incorrect ! Simplifiez au
maximum vos noms de fichiers et de dossiers, et tout ira bien.
Voici un exemple d'insertion d'image :
<p>
Voici une très belle photo que j'ai trouvée sur Unsplash :<br>
<img src="images/paysage.jpg" alt="Photo de plage vue du dessus" />
</p>
6.1.2. Ajouter l'attribut alt pour donner à l'image une description alternative
Donner une decription alternative à une image est une bonne pratique !
Une description alternative est un court texte qui décrit ce que contient l'image. Ce texte alternatif sera :
inscrit à la place de l'image si elle ne peut pas être affichée au moment du chargement de la page
web (cela arrive) ;
audio-décrit par les navigateurs de personnes présentant un handicap (trouble de la vue, non-
voyants).
Cela contribue donc à améliorer ce que l'on appelle l'accessibilité d'un site web. En plus, cela aide les robots
des moteurs de recherche pour trouver des images.
D'ailleurs, j'en profite pour faire une petite parenthèse sur les formats d'image !
Afin d'afficher une bulle d'aide sur vos images, vous pouvez utiliser l'attribut title ; (à ne pas confondre avec
la balise title qui permet d'indiquer au navigateur le titre d'une page web).
L'attribut title est facultatif, contrairement à alt.
Voici ce que cela peut donner :
<img src="montagnes.png" title="Alors, envie de vous balader n'est-ce pas ?" alt="Chemin de
randonnée au milieu des montagnes">
Le visiteur du site, n'aura qu'à survoler la photo avec la souris pour voir l'infobulle "Alors, envie de vous
balader n'est-ce pas ?" apparaître par-dessus l'image.
6.6. En résumé
Il existe plusieurs formats d'images adaptés au Web : PNG, JPG…
On insère une image avec la balise <img>.
<img> doit obligatoirement comporter au moins ces deux attributs : src (source de l'image) et alt
(courte description de l'image).
Il est possible d'afficher une autre version d'une image grâce à un lien qui entoure l’image.
Les balises <ul> et <ol> sont des balises de type "block" c’est-à-dire qu’elles entourent un bloc de texte. Les
balises <p>, <h1>, etc., sont de la même famille. Ces balises ont quelque chose en commun : elles créent un
nouveau “bloc”, dans la page, et provoquent donc obligatoirement un retour à la ligne.
La balise <addresse> permet d’insérer une adresse dans une page XHTML.
Exemple : <address>ANDEME Christophe, ESGIS Gabon</address>.
N.B. : L’addresse n’a pas besoin de respecter une forme spécifique.
La balise <blockquote> est utilisée pour des citations longues. Elle permet de présenter le texte avec un
retrait par rapport aux paragraphes avoisinants. Cette balise ne peut pas directement contenir du texte. On
doit par exemple l’utiliser avec une balise <p>.
Exemple : <blockquote><p>La vie ne vaut rien, mais rien ne vaut la vie !</p> </blockquote>.
7.3. Insérer une ligne horizontale avec la balise vide <hr />
La balise <hr /> (horizontal rule) permet d’insérer une ligne horizontale dans une page XHTML. C’est un
élément qui est toujours vide.
La balise <dl> (definition list) s’utilise avec les balises <dt> (intitulé du terme défini) et <dd> (définition du
terme) de façon alternative, pour insérer une liste de définitions.
Exemple :
<dl>
<dt>SGML</dt>
<dd>Standard Generalized Markup Language</dd>
<dt>XML</dt>
<dd>Extensible Markup Language</dd>
</dl>
Tableaux imbriqués
Un élément <table> peut se retrouver comme contenu d’un élément <td>. Le résultat est un tableau
entièrement imbriqué dans une seule cellule d’un autre tableau.
7.7. Insérer des métadonnées avec la balise <meta> ou des liens externes avec la
balise <link>
Dans l’entête (head) d’un fichier XHTML on retrouve la balise <title> qui est obligatoire. Mais on peut y
retrouver également un ou des éléments <meta> (métadonnée) ; ces éléments sont facultatifs.
On peut également y inscrire un ou des éléments. <link> (lien), au besoin. Ce sont des références à des
fichiers externes, notamment une feuille de styles externe.
Les informations inscrites dans ces éléments sont ignorées par les navigateurs, mais utilisées par certains
outils de recherche Web.
Exemple d’entête avec les balises <meta> et <link> :
<head>
<title>Information documentaire</title>
<meta name="author" content="Monsieur Dupond" />
<meta name="description" content="Site du cours sur XHTML" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<head>
<meta charset="utf-8">
<title>Ma page</title>
<link href="style.css" rel="stylesheet">
</head>
Lorsque vous cliquerez sur votre fichier XHTML pour l'ouvrir dans le navigateur, ce dernier aura
l'instruction d'appeler le fichier CSS associé pour afficher les propriétés de style de la page web.
Sélecteur
C’est une définition de l’élément XHTML qui sera affecté par l’ensemble de règles contenu entre les
accolades { } suivants le sélecteur. Le sélecteur peut être défini par le nom de la balise (h1, h2, p, div, …) ou
par une annotation spécifique à un attribut renseigné dans l’élément XHTML tel que les attributs class ou
id.
N’oubliez pas après votre sélecteur de créer 2 accolades (une ouvrante et une fermante) et de définir vos
règles de style (propriété + valeur) entre ces accolades.
Propriété
À chaque élément XHTML, il existe différentes propriétés CSS possiblement redéfinissable ainsi que de
multiples valeurs (au moins 2) pour chaque propriété.
Valeur
La valeur suit la propriété après deux points :, c’est la nouvelle mise en forme qui sera attribué à la
propriété de l’élément XHTML. Pour chaque propriété il existe plusieurs valeurs définies possibles. Parfois
une propriété pourra avoir une valeur variable non définie.
Exemples :
La propriété text-align qui détermine l’alignement d’un texte peut prendre les valeurs définies suivantes :
left, right, center ou justify.
Alors que la propriété font-size permettant de définir la taille de police d’un texte peut avoir une valeur
variable en pixel sans limite de taille (théoriquement).
font-size: 10px;
font-size : 99999px;
Règle
La règle (ou déclaration) est l’association d’une propriété et de sa valeur. Elle cible un ou plusieurs éléments
HTML à travers un sélecteur et se termine tout le temps par un ;.
Vous pouvez ajouter plusieurs règles à la suite (toujours entre les accolades d’un sélecteur) pour créer un
ensemble de règles et chaque règle devra être définie comme ceci propriété: valeur;.
h1 {
color: blue;
}
Dans ce code CSS on trouve les trois différents éléments énumérés plus haut :
1. Le sélecteur : ici on écrit les noms des balises HTML dont on veut modifier l'apparence. Par
exemple, si je veux modifier l'apparence de tous les paragraphes <p>, je dois écrire p (sans les
chevrons). Dans cet exemple on aciblé les titre de premier niveau (h1).
2. La ou les propriétés CSS : les effets de style sont listés via des propriétés. Par exemple, color permet
d'indiquer la couleur du texte, font-size permet d'indiquer la taille du texte, etc. Il existe BEAUCOUP
de propriétés CSS ! Mais rassurez-vous, vous n’avez pas besoin de les connaître toutes par cœur.
3. …et leurs valeurs : pour chaque propriété CSS, on doit indiquer une valeur. Par exemple, pour la
propriété color, il faut indiquer le nom de la couleur. Pour font-size, il faut indiquer quelle taille on
veut, etc.
h1 {
color: blue;
}
p {
color: blue;
}
Si les balises ont le même style, il suffit de combiner la déclaration en séparant les noms des balises par
une virgule :
h1, p
{
color: blue;
}
Et voilà ce que ça donne :
<body>
<h1>Titre principal</h1>
<p>Ceci est le contenu de mon premier paragraphe</p>
<p class="ma-classe">Ceci est le contenu de mon deuxième paragraphe</p>
<h2>Voilà mon sous-titre h2</h2>
</body>
On vient de créer un attribut class nommé ma-classe dans le fichier.html pour marquer un élément auquel
on veut appliquer un style en particulier. Maintenant, il faut appeler l'élément que l'on a marqué dans le
fichier .css pour pouvoir lui appliquer un style.
Étape 2 : appeler le nom de l'attribut class via un point (.) dans le fichier .css
Pour faire cela, on va indiquer dans le fichier .css le nom de notre classe précédée d'un point . :
.ma-classe {
color: #663399;
}
D'ailleurs, on en profite pour utiliser la notation hexadécimale pour indiquer la couleur, ce qui nous permet
d'être plus précis (pas de panique, on verra cela plus en détail dans le prochain chapitre).
Testez le résultat : seul votre paragraphe appelé ma-classe va prendre la couleur qu'on lui a attribué dans
le fichier .css :
.ma-classe {
color: #663399;
}
.grand-texte {
font-size: 30px;
}
et l'utiliser sur p (mais aussi sur d’autres éléments ; il est possible de cumuler plusieurs classes au sein
d'une même balise). Par exemple :
<body>
<h1>Titre principal</h1>
<p>Ceci est le contenu de mon premier paragraphe</p>
<p class="ma-classe grand-texte">Ceci est le contenu de mon deuxième paragraphe</p>
<h2 class="grand-texte">Voilà mon sous-titre h2</h2>
</body>
Ce qui donne :
balise1
{
propriete1: valeur1;
propriete2: valeur2;
/* … */
}
Comment faire si on veut appliquer un style à quelque chose qui n'est pas entouré par une balise, par
exemple un mot ou un groupe de mots qu'il y a dans une phrase ?
Si vous avez besoin de donner un attribut à certains mots pour leur donner un style mais que ces derniers
ne sont pas entourés par des balises (un attribut s'applique à une balise en entier, pas juste une partie),
alors vous allez utiliser des balises universelles !
Imaginons, je veux modifier uniquement 990 espèces d'oiseaux dans le paragraphe suivant :
<p>Il existe plus de 990 espèces d'oiseaux répertoriées dans toute l'Europe.</p>
Cela serait facile à faire s'il y avait une balise autour de “990 espèces d'oiseaux”, mais malheureusement, il
n'y en a pas. Par chance, on a inventé… la balise-qui-ne-sert-à-rien.
En fait, on a inventé deux balises dites "universelles", qui n'ont aucune signification particulière (elles
n'indiquent pas que le mot est important, par exemple). Il y a une petite différence (mais significative) entre
ces deux balises :
1. <span> </span>;
2. <div> </div>.
8.7.1. La balise <span> </span>
C'est une balise de type "inline", c'est-à-dire une balise que l'on place au sein d'un paragraphe de texte pour
sélectionner certains mots uniquement. Les balises <strong> et <em> sont de la même famille. Cette balise
s'utilise donc au milieu d'un paragraphe, et c'est celle dont nous allons nous servir pour colorer “990
espèces d'oiseaux”.
8.7.2. La balise <div> </div>
C'est une balise de type "block", qui entoure un bloc de texte. Les balises <p>, <h1>, etc., sont de la même
famille. Ces balises ont quelque chose en commun : elles créent un nouveau “bloc”, dans la page, et
provoquent donc obligatoirement un retour à la ligne. <div> est une balise fréquemment utilisée dans la
construction d'une mise en page, comme nous le verrons plus tard.
Pour le moment donc, nous allons plutôt utiliser la balise <span>.
Exemple :
<body>
<h1>Les oiseaux du monde </h1>
<h2>Les oiseaux d'Europe</h2>
<p>Il existe plus de <span>990 espèces d'oiseaux</span> répertoriées dans toute
l'Europe.</p>
<img src="https://images.unsplash.com/photo-1544647564-b361c54da412?ixlib=rb-
1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2073&q=80"
alt="Des mouettes alignées sur des poteaux" height="500">
<p class="ma-classe contenu-texte">Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Donec commodo, lectus et congue finibus, erat nibh dictum sapien, a rutrum nisl dui a
lacus. In quis consectetur nisi. Fusce laoreet mauris a augue facilisis ornare. </p>
</body>
8.8. Exercice P2C1
Vous allez exploiter ce que vous venez d'apprendre, et le mettre à profit dans le projet de Robbie Lens.
Ici, vous allez :
créer un fichier CSS commun style.css;
appliquer la couleur black à l'ensemble des liens ;
mettre le logo et les liens de navigation en haut des pages «Accueil» et «À propos» dans une balise
div ;
mettre les différents logos en bas des deux pages dans une autre div ;
sur la page d'accueil, dans le paragraphe d'introduction, vous allez appliquer le style suivant : color:
#A5B4FC; au mot «professionnalisme» et au mot «passion». Pour l'instant, vous utiliserez un <span>,
mais nous le modifierons dans le prochain chapitre pour utiliser <em>.
8.9. En résumé
CSS est un autre langage qui vient compléter le HTML. Son rôle est de mettre en forme votre page
web.
balise1
{
propriete1: valeur1;
propriete2: valeur2;
/* … */
}
Il existe plusieurs façons de sélectionner la portion de page que l'on veut mettre en forme. Par
exemple, on peut viser :
o toutes les balises d'un même type, en écrivant simplement leur nom (h1par exemple) ;
o certaines balises spécifiques, auxquelles on a donné des noms à l'aide des attributs class ou
id (.nom-classe ou #nom-id) ;
o uniquement les balises qui se trouvent à l'intérieur d'autres balises (h3, em).
Pour indiquer une taille absolue, on utilise généralement les pixels. Pour avoir un texte de 16 pixels de
hauteur, vous devez donc écrire :
font-size: 16px;
Les lettres auront une taille de 16 pixels :
Exemple :
HTML :
<p class="elem1">Élément 1 : 8px</p>
<p class="elem2">Élément 2 : 16px</p>
<p class="elem3">Élément 3 : 24px</p>
<p class="elem4">Élément 4 : 32px</p>
<p class="elem5">Élément 5 : 40px</p>
<p class="elem6">Élément 6 : 48px</p>
<p class="elem7">Élément 7 : 56px</p>
<p class="elem8">Élément 8 : 64px</p>
<p class="elem9">Élément 9 : 72px</p>
CSS :
.elem1 {
Page 35 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
font-size: 8px;
}
.elem2 {
font-size: 16px;
}
.elem3 {
font-size: 24px;
}
.elem4 {
font-size: 32px;
}
.elem5 {
font-size: 40px;
}
.elem6 {
font-size: 48px;
}
.elem7 {
font-size: 56px;
}
.elem8 {
font-size: 64px;
}
.elem9 {
font-size: 72px;
}
9.1.2. Donner une taille au texte avec une valeur relative en em (recommandé)
Il y a plusieurs moyens d'indiquer une valeur relative. Une des plus fréquentes consiste à indiquer la taille
en em.
Le texte a une taille normale avec 1em.
Le texte est plus grand avec une valeur supérieure à 1, comme 1.3em.
Le texte est plus petit avec une valeur inférieure à 1, comme 0.8em.
Attention tout de même à la syntaxe : pour les nombres décimaux, il faut mettre un point et non une
virgule. Vous devez donc écrire 1.4em et non pas 1,4em !
Si on le fait en XHTML :
.elem1 {
font-size: 1em;
}
.elem3 {
font-size: 2em;
}
… on obtient alors le résultat suivant :
La propriété CSS qui permet d'indiquer la police à utiliser est font-family. Sa syntaxe est la suivante :
balise
{
font-family: nom-police;
}
Voici une liste de polices sans sérif qui fonctionnent nativement sur la plupart des navigateurs :
Arial Black ;
Futura ;
Helvetica ;
Impact ;
Trebuchet MS ;
Verdana.
Le sérif désigne l’empattement situé à l’extrémité des caractères. Choisir une police de caractères sans sérif
est plus judicieux en termes d’accessibilité, car c’est plus facile à lire.
em
{
font-style: normal;
}
CSS :
.thin {
font-weight: 100;
}
.extra-light {
font-weight: 200;
}
.light {
font-weight: 300;
}
.normal {
font-weight: 400;
}
.medium {
font-weight: 500;
}
.semi-bold {
font-weight: 600;
}
.bold {
font-weight: 700;
}
.extra-bold {
font-weight: 800;
}
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@1,700&display=swap"
rel="stylesheet">
9.5. Souligner du texte avec la propriété CSS text-decoration
La propriété CSS text-decoration permet, entre autres, de souligner le texte, mais pas seulement. Voici
quelques-unes des différentes valeurs qu'elle peut prendre :
underline : souligné ;
line-through : barré ;
none : normal (par défaut, sauf dans le cas des liens).
Ce CSS va vous permettre de tester les effets de text-decoration :
La propriété CSS text-align permet d'aligner du texte selon la valeur qu'on lui donne :
left : le texte sera aligné à gauche (c'est le réglage par défaut) ;
center : le texte sera centré ;
right : le texte sera aligné à droite ;
Jouez avec les différentes propriétés qu'on vient de voir grâce au code suivant :
HTML :
<br>
<p class="thin">100-Thin</p>
<p class="extra-light">200-Extra light</p>
<p class="light">200-Light</p>
<p class="normal">400-Normal</p>
<p class="medium">500-Medium</p>
CSS :
.gauche {
text-align: left;
}
.centre {
text-align: center;
}
.droite {
text-align: right;
}
.thin {
font-weight: 100;
}
.extra-light {
font-weight: 200;
}
.light {
font-weight: 300;
}
.normal {
font-weight: 400;
}
.medium {
font-weight: 500;
}
.semi-bold {
font-weight: 600;
}
.bold {
font-weight: 700;
}
Page 41 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
.extra-bold {
font-weight: 800;
}
.black {
font-weight: 900;
}
.underline {
text-decoration: underline;
}
.line-through {
text-decoration: line-through;
}
.overline {
text-decoration: overline;
}
.normal {
text-decoration: none;
}
.italic {
font-style: italic;
}
body {
padding: 16px;
}
L'alignement ne fonctionne que sur des balises de type block : <p>, <div>, <h1>…
Aligner le texte d'une balise inline, comme <span>, <a>, <em>, <strong> n'est pas possible. Et c'est logique
quand on y pense : on ne peut pas modifier l'alignement de quelques mots au milieu d'un paragraphe.
9.8. En résumé
On modifie la taille du texte avec la propriété CSS font-size.
On peut indiquer la taille en pixels, comme 16px ; ou encore en “em”, comme 1.3em.
On indique la police du texte avec la propriété CSS font-family.
De nombreuses propriétés de mise en forme du texte existent : font-style pour l'italique, font-
weight pour la mise en gras, text-decoration pour le soulignement.
Le texte peut être aligné avec la propriété CSS text-align.
h1 {
color: blue;
}
De nombreux noms de couleurs dont voici un site où trouver leurs mots clés :
https://developer.mozilla.org/fr/docs/Web/CSS/color_value#les_mots-cl%C3%A9s sont supportés par les
navigateurs mais il existe d'autres manières d'indiquer une couleur en CSS :
1. Sous forme hexadécimale (6 chiffres précédés d'un #). Exemple : color : #FFC8D3;
2. En notation RGB (pour Red Green Blue en anglais). Exemple : color: rgb(250,25,118);. Notez
qu'on peut ajouter la notion d'opacité (ou de transparence) avec la notation RGBA, où la dernière
valeur correspond à l'opacité dont la valeur est comprise entre 0 et 1. Exemple : color:
rgba(250,25,118, 0.5);
Si vous voulez trouver une couleur, ou bien convertir une valeur en utilisant une autre syntaxe, vous
trouverez des outils en ligne, comme Coolors https://coolors.co/ ou encore HTML Color Picker
https://www.w3schools.com/colors/colors_picker.asp .
Pour indiquer une couleur de fond, on utilise la propriété CSS background-color. Elle s'utilise de la même
manière que la propriété color, c'est-à-dire que vous pouvez taper le nom d'une couleur, l'écrire en notation
hexadécimale ou encore utiliser la méthode RGB.
Pour indiquer la couleur de fond de la page web, il vaut mieux l'appliquer à la balise <body>. Eh oui, <body>
correspond à l'ensemble de la page web. C'est donc en modifiant sa couleur de fond que l'on changera la
couleur d'arrière-plan de la page :
body {
background-color: black; /* Le fond de la page sera noir */
color: white; /* Le texte de la page sera blanc */
}
Et on obtient :
On voit ici qu’on a demandé à ce que le texte de la balise <body> soit écrit en blanc, et tous les paragraphes
<p> et titres <h1> ont pris cette couleur. Comment ça se fait ?
La balise <body> contient, entre autres, les balises de paragraphe <p> et de titre <h1>. Si on applique à la
balise <body> une couleur de fond noire et une couleur de texte blanche, tous les titres et paragraphes
seront eux aussi en blanc sur fond noir.
body {
background-color: black; /* Le fond de la page sera noir */
color: white; /* Le texte de la page sera blanc */
}
h1 {
color: purple;
}
Vous pouvez tester cela en jouant avec le code suivant :
HTML :
<body>
<h1>Bienvenue sur ma page</h1>
<p>Ceci est le contenu de mon premier paragraphe</p>
<p>Ceci est le contenu de mon deuxième paragraphe</p>
<h2>Voilà mon sous-titre</h2>
</body>
CSS :
body {
background-color: black; /* Le fond de la page sera noir */
color: white; /* Le texte de la page sera blanc */
}
h1 {
color: purple;
}
body {
font-family: sans-serif;
margin: 0; /* Vous ne connaissez pas encore cette propriété mais elle permet de
s'assurer que nos éléments prennent bien toute la largeur de la page */
}
.banniere {
padding: 100px; /* Vous ne connaissez pas encore cette propriété mais elle permet
d'ajouter de l'espace dans notre élément*/
background-image: url('paysage.jpg');
}
h1 {
color: white;
text-align: center;
}
Et on obtient :
Si vous utilisez beaucoup de propriétés en rapport avec le fond, vous pouvez utiliser une sorte de “super-
propriété” appelée background dont la valeur peut combiner plusieurs des propriétés :
background-image ;
background-repeat ;
background-attachment ;
background-size ;
et background-position.
C'est la première “super-propriété” que je vous montre, il y en aura d'autres.
On peut donc tout simplement écrire :
.banniere
{
background: url("paysage.jpg") cover center;
}
Il faut savoir que :
l'ordre des valeurs n'a pas d'importance : vous pouvez combiner les valeurs dans n'importe quel
ordre ;
vous n'êtes pas obligé de mettre toutes les valeurs.
10.3.4. Créer des dégradés avec linear-gradient
La propriété CSS opacity permet d'indiquer le niveau d'opacité (c'est l'inverse de la transparence).
Avec une valeur de 1, l'élément sera totalement opaque : c'est le comportement par défaut.
10.5. En résumé
On change la couleur du texte avec la propriété color et la couleur de fond avec la propriété
background-color.
On peut indiquer une couleur en écrivant son nom en anglais, black par exemple, sous forme
hexadécimale, comme #FFC8D3, ou en notation RGB, comme rgb(250,25,118).
On peut ajouter une image de fond avec la propriété background-image. On peut choisir de fixer
l'image de fond, ou encore de la positionner où on veut sur la page.
On peut rendre une portion de la page transparente avec la propriété opacity ou avec la notation
RGBA (une extension de la notation RGB, où la quatrième valeur indique le niveau de transparence).
Si vous voulez mettre des bordures différentes en fonction du côté (haut, bas, gauche ou droite), vous
pouvez le faire sans problème. Dans ce cas, vous devrez utiliser ces quatre propriétés :
1. border-top : bordure du haut.
2. border-bottom : bordure du bas.
3. border-left : bordure de gauche.
4. border-right : bordure de droite.
Il existe aussi des équivalents pour paramétrer chaque détail de la bordure si vous le désirez :
<p class="element">Élément</p>
Puis dans le CSS :
.element {
border-top: 3px #EB5353 dotted;
border-right: 3px #F9D923 double;
border-bottom: 3px #36AE7C dashed;
border-left: 3px #187498 solid;
}
Ce qui nous donnerait :
HTML :
<div class="solid box">Solid</div>
<div class="double box">Double</div>
<div class="dotted box">Dotted</div>
<div class="dashed box">Dashed</div>
CSS :
.solid {
border: 1px #EB5353 solid;
}
.double {
border: 4px #187498 double;
}
.dashed {
border: 2px #36AE7C dashed;
}
.dotted {
border: 3px #F9D923 dotted;
}
body {
/* Vous ne connaissez pas encore ces propriétés : pas de panique, il s'agit juste de
propriétés permettant d'avoir nos carrés bien alignés */
display: flex;
flex-direction: row;
font-family: sans-serif;
gap: 10px;
}
.box {
/* Même chose ici */
height: 100px;
width: 100px;
display: flex;
justify-content: center;
align-items: center;
On pourrait très bien avoir un élément qui n'aurait un bord que d'un seul côté. Pour cela, il suffit de ne
déclarer qu'une seule propriété. Dans l’exemple ci-dessous, on utilise uniquement la propriété border-left
:
.element {
font-size: 25px;
background-color: skyblue;
border-left: 5px #187498 solid;
padding: 100px;
}
Ce qui donne :
.element {
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
padding: 100px;
}
Ce qui donne :
.element {
font-size: 25px;
background-color: skyblue;
border-radius: 10px 30px 0px 90px;
padding: 100px;
}
Ce qui donne :
.element {
font-size: 25px;
background-color: skyblue;
border-radius: 30% 70% 70% 30% / 30% 58% 42% 70%;
padding: 100px;
}
Et voilà le résultat ! De quoi faire des éléments (boutons, encarts, blocs…) uniques sur votre site web :
Les ombres donnent des effets de profondeur intéressants sur une page web. C'est particulièrement utile
sur les boutons d'un site par exemple. Du fait de l'impression de relief, un bouton avec une ombre portée
indique visuellement aux visiteurs du site qu'il est "cliquable".
La propriété CSS box-shadow s'applique à tout le bloc, et prend quatre valeurs dans l'ordre suivant :
1. Le décalage horizontal de l'ombre.
2. Le décalage vertical de l'ombre.
3. L'adoucissement du dégradé.
4. La couleur de l'ombre.
L'adoucissement peut être :
Faible (si on lui donne une valeur inférieure à celle du décalage),
Normal (si on lui donne une valeur égale à celle du décalage)
Ou élevé (si on lui donne une valeur supérieure à celle du décalage).
Par exemple :
.element {
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
box-shadow: 6px 6px 0px rgba(0, 0, 0);
padding: 100px;
}
Ce qui donne :
.element {
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
box-shadow: 6px 6px 25px rgba(0, 0, 0, 0.5);
padding: 100px;
}
Ce qui donne :
h1 {
font-size: 50px;
text-shadow: 3px 3px 0px rgba(0,0,0,0.2);
padding: 100px;
}
Et voyez ce que ça nous donne :
HTML :
<div class="element1">Élément</div>
<div class="element2">Élément</div>
<div class="element3">Élément</div>
<div class="element4">Élément</div>
<div class="element5">Élément</div>
<div class="element6">Élément</div>
<div class="element7">Élément</div>
<div class="element8">Élément</div>
CSS :
.element1 {
font-size: 25px;
border-top: 3px #EB5353 dotted;
.element2 {
font-size: 25px;
background-color: skyblue;
border-left: 5px #187498 solid;
padding: 100px;
}
.element3 {
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
padding: 100px;
}
.element4 {
font-size: 25px;
background-color: skyblue;
border-radius: 10px 30px 0px 90px;
padding: 100px;
}
.element5 {
font-size: 25px;
background-color: skyblue;
border-radius: 30% 70% 70% 30% / 30% 58% 42% 70%;
padding: 100px;
}
.element6 {
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
box-shadow: 6px 6px 0px rgba(0, 0, 0);
padding: 100px;
}
.element7 {
font-size: 25px;
background-color: skyblue;
border-radius: 10% ;
box-shadow: 6px 6px 25px rgba(0, 0, 0, 0.5);
padding: 100px;
}
.element8 {
font-size: 50px;
body {
/* Vous ne connaissez pas encore ces propriétés : pas de panique, il s'agit juste de
propriétés permettant d'avoir nos carrés bien alignés */
display: flex;
flex-direction: row;
font-family: sans-serif;
gap: 100px;
}
.box {
/* Même chose ici */
height: 100px;
width: 100px;
display: flex;
justify-content: center;
align-items: center;
}
11.6. En résumé
On peut appliquer une bordure à un élément avec la super-propriété CSS border. Il faut indiquer la
largeur de la bordure, sa couleur et son type (simple, double, pointillés, tirets).
On peut arrondir les bordures avec la propriété CSS border-radius.
On peut ajouter une ombre aux blocs de texte avec box-shadow. On doit indiquer le décalage vertical
et horizontal de l'ombre, son niveau d'adoucissement et sa couleur.
Le texte peut lui aussi avoir une ombre avec text-shadow.
Comme vous pouvez le voir, les blocs sont les uns en dessous des autres. On peut aussi les imbriquer les
uns à l'intérieur des autres : souvenez-vous, un bloc <main> contient par exemple des blocs <section>, qui
eux-mêmes peuvent contenir des <div>.
Quant à la balise <a></a> (qui est de type inline), elle se trouve à l'intérieur d'une balise block, et le texte
vient s'insérer sur la même ligne.
J'en profite pour vous parler à nouveau des balises universelles. Vous les connaissez déjà car je vous les ai
présentées à plusieurs reprises. Ce sont des balises qui n'ont aucun sens particulier. Le principal intérêt de
ces balises est que l'on peut leur appliquer une class (ou un id) pour le CSS quand aucune autre balise ne
convient.
Il existe deux balises génériques et, comme par hasard, la seule différence entre les deux est que l'une
d'elles est inline et l'autre est block :
1. La balise <span> (qui est de type inline).
2. La balise <div> (qui est de type block).
N’abusez pas des balises universelles, même si elles sont utiles dans certains cas : beaucoup de
développeurs mettent des <div> et des <span> trop souvent, et oublient que d'autres balises plus adaptées
existent.
Par exemple :
<span class="important"> : ici, il ne s'agit pas d'une bonne pratique, alors qu'il existe les balises
<strong> ou <em> qui servent à indiquer l'importance !
<div class="titre"> : idem, cela ne convient pas, puisqu'il existe des balises faites spécialement
pour les titres ( <h1> , <h2> …).
Le résultat visuel est le même, mais les balises génériques n'apportent aucun sens à la page, et ne peuvent
pas être comprises par l'ordinateur. Utilisez toujours d'autres balises plus adaptées quand c'est possible.
Maintenant que vous comprenez la différence entre inline et block, nous allons apprendre à dimensionner
des éléments en CSS ! Nous allons ici travailler uniquement sur des balises de type block.
Pour commencer, intéressons-nous à la taille des blocs.
12.3. Dimensionner les éléments avec les propriétés CSS width et height
Contrairement à un inline, un block peut avoir une largeur et une hauteur précises grâce à ces deux
propriétés CSS :
p {
width: 50%;
}
Le résultat est visible juste en dessous :
p {
width: 250px;
}
Les images sont un cas un peu particulier : elles se mettent les unes à la suite des autres, sans prendre
toute la largeur, mais on peut malgré tout leur donner une dimension exacte.
12.4. Définir des marges avec les propriétés CSS margin et padding
Tous les blocs possèdent des marges (intérieures et extérieures) :
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
}
Voilà ce qu'on obtient avec ce code :
Pour ajouter aux paragraphes une marge intérieure (padding) de 16px par exemple, on écrit :
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
}
On obtient alors :
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
margin: 50px;
}
On obtient :
Pour spécifier des marges différentes en haut, en bas, à gauche et à droite il faudra utiliser le vocabulaire
anglais suivant :
top: haut ;
bottom: bas ;
left: gauche ;
right: droite.
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
margin: auto;
}
Et on obtient :
HTML :
CSS :
body {
font-family: Arial;
color: black;
}
p {
background-color: #F1C864;
width: 350px;
text-align: justify;
padding: 16px;
margin: auto;
}
12.9. Exercice P3C2
Vous allez maintenant pouvoir vous faire la main sur le site de Robbie Lens, et mettre en pratique ce que
vous venez d'apprendre ! Dans le code de départ de l'exercice, vous trouverez un bout de CSS qui indique :
* {
margin: 0;
}
Cela sert à réinitialiser les marges par défaut des navigateurs.
À partir de là, vous allez :
ajouter un padding au header et au footer de 20px en haut et en bas, et de 50px à gauche et à
droite ;
ajouter une section autour du contenu de la page d'accueil ;
ajouter une section autour du contenu de la page A-propos ;
donner à vos sections (pour les futures sections à venir) un padding de 80px ;
créer un padding de 50px pour carre-contenu ;
centrer le contenu de la page A-propos ;
aérer le contenu de la page A-propos : mettre de la marge au-dessus du sous-titre «Services» et de la
liste des compétences.
12.10. En résumé
On distingue deux principaux types de balises en XHTML :
o les balises de type block comme <p> ou <h1> créent un retour à la ligne et occupent par
défaut toute la largeur disponible. Elles se suivent de haut en bas ;
<div class="container">
<div class="element element1">Élément 1</div>
<div class="element element2">Élément 2</div>
<div class="element element3">Élément 3</div>
</div>
Mais si on fait ça les éléments vont se mettre les uns en dessous des autres puisque ce sont tous des blocs.
Oui, tout à fait, c'est le comportement normal dont nous avons l'habitude. Découvrons donc maintenant
l'intérêt de Flexbox !
.container {
display: flex;
}
... alors les blocs se placent par défaut côte à côte. Magique !
Flexbox permet d'agencer ces éléments dans le sens que l'on veut. Avec flex-direction, on peut les
positionner verticalement ou encore les inverser. Cette propriété CSS peut prendre les valeurs suivantes :
row : organisés sur une ligne (par défaut) ;
column : organisés sur une colonne ;
row-reverse : organisés sur une ligne, mais en ordre inversé ;
column-reverse : organisés sur une colonne, mais en ordre inversé.
Ici, on fait simplement :
.container {
display: flex;
flex-direction: column;
}
Ce qui donne :
.container {
display: flex;
flex-direction: column-reverse;
}
Et voilà ce que ça donne :
.container {
display: flex;
flex-wrap: nowrap;
/* OU wrap;
OU wrap-reverse; */
}
Dans les illustrations suivantes, vous pouvez voir les différents comportements de nos blocs en fonction de
la valeur que l'on attribue à flex-wrap :
Avec flex-wrap: nowrap; :
Les éléments passent à la ligne s'ils ne rentrent pas tous sur la même ligne
Cette propriété sera particulièrement utile quand nous aurons besoin d'adapter nos pages aux plus petits
écrans. Nous verrons ça dans la prochaine partie de ce cours.
Avec flex-wrap: wrap-reverse; :
Pour faire simple, partons sur des éléments organisés horizontalement (c'est le cas par défaut).
.container {
display: flex;
justify-content: flex-start /* OU flex-end
OU center
OU space-between
OU space-around; */
}
Le mieux est encore de tester toutes les valeurs possibles pour voir ce que ça donne. Pour cela, je vous
invite à manipuler toutes les valeurs possibles de justify-content avec le code suivant :
HTML :
<h2>Start</h2>
<div class="container start">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>End</h2>
<div class="container end">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Between</h2>
<div class="container spaceBetween">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Around</h2>
<div class="container spaceAround">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Stretch</h2>
<div class="container stretch">
<div class="element element1"></div>
<div class="element element2"></div>
CSS :
.container {
display: flex;
width: 650px;
flex-wrap: wrap;
height: 400px;
border: solid 2px #000
}
.start {
justify-content: flex-start
}
.end {
justify-content:flex-end;
}
.center {
justify-content: center;
}
.spaceBetween {
justify-content: space-between;
}
.spaceAround {
justify-content: space-around;
}
.stretch {
justify-content: stretch;
}
.element {
width: 150px;
min-height: 100px;
}
.element1 {
background-color : orange;
}
.element2 {
background-color : blue;
}
Page 69 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
.element3 {
background-color : lightgreen;
}
Vous voyez comment les éléments s'alignent différemment selon les cas ? Avec une simple propriété, on peut
intelligemment agencer nos éléments comme on veut !
Maintenant, voici ce qu'il faut bien comprendre : ça marche aussi si vos éléments sont dans une
direction verticale. Dans ce cas, l'axe vertical devient l'axe principal, et justify-content s'applique aussi
:
.container {
display: flex;
flex-direction: column;
justify-content: center;
height: 350px; /* Un peu de hauteur pour que les éléments aient la place de bouger */
}
Avec une direction verticale ("column"), le centrage fonctionne de la même façon, mais cette fois en hauteur.
Ajoutez flex-direction: column; dans le code suivant pour voir la différence :
HTML :
<h2>Start</h2>
<div class="container start">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>End</h2>
<div class="container end">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Center</h2>
Page 70 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
<div class="container center">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Between</h2>
<div class="container spaceBetween">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Around</h2>
<div class="container spaceAround">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Stretch</h2>
<div class="container stretch">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
CSS :
.container {
display: flex;
width: 650px;
flex-wrap: wrap;
height: 400px;
border: solid 2px #000
}
.start {
justify-content: flex-start
}
.end {
justify-content:flex-end;
}
.center {
justify-content: center;
}
.spaceBetween {
justify-content: space-between;
}
.spaceAround {
justify-content: space-around;
}
.stretch {
justify-content: stretch;
}
.element {
width: 150px;
min-height: 100px;
}
.element1 {
background-color : orange;
}
.element2 {
background-color : blue;
}
.element3 {
Si nos éléments sont placés dans une direction horizontale (ligne), l'axe secondaire est... vertical. Et
inversement : si nos éléments sont dans une direction verticale (colonne), l'axe secondaire est horizontal.
La propriété align-items permet de changer leur alignement sur l'axe secondaire, grâce aux valeurs :
stretch: les éléments sont étirés sur tout l'axe (valeur par défaut) ;
flex-start: alignés au début ;
flex-end: alignés à la fin ;
center: alignés au centre ;
baseline: alignés sur la ligne de base (semblable à flex-start).
Pour ces exemples, nous allons partir du principe que nos éléments sont dans une direction horizontale
(mais n'hésitez pas à tester aussi dans la direction verticale !).
.container {
display: flex;
justify-content: center;
align-items: center;
}
Ajoutez align-items: center; dans le code suivant pour voir le résultat :
HTML :
<h2>Start</h2>
<div class="container start">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>End</h2>
<div class="container end">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
Page 73 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
</div>
<h2>Center</h2>
<div class="container center">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Between</h2>
<div class="container spaceBetween">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Around</h2>
<div class="container spaceAround">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Stretch</h2>
<div class="container stretch">
CSS :
.container {
display: flex;
width: 650px;
flex-wrap: wrap;
height: 400px;
border: solid 2px #000
}
.start {
justify-content: flex-start
}
.end {
justify-content:flex-end;
}
.center {
justify-content: center;
}
.spaceBetween {
justify-content: space-between;
}
.spaceAround {
justify-content: space-around;
}
.stretch {
justify-content: stretch;
}
.element {
width: 150px;
min-height: 100px;
}
.element1 {
background-color : orange;
}
.element2 {
Le centrage vertical et horizontal peut d'ailleurs être obtenu encore plus facilement. Dites-vous que votre
conteneur est une Flexbox, et établissez des marges automatiques sur les éléments à l'intérieur. C'est tout !
Essayez :
.container {
display: flex;
}
.element {
margin: auto;
}
HTML :
<h2>Start</h2>
<div class="container start">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>End</h2>
<div class="container end">
Page 76 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Center</h2>
<div class="container center">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Between</h2>
<div class="container spaceBetween">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
<h2>Space Around</h2>
<div class="container spaceAround">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<h2>Stretch</h2>
<div class="container stretch">
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
<div class="element element1"></div>
<div class="element element2"></div>
<div class="element element3"></div>
<div class="element element2"></div>
<div class="element element1"></div>
<div class="element element3"></div>
</div>
Et si vous voulez vous entraîner pour vous assurer que vous maîtrisez bien les propriétés de Flexbox, je
vous recommande le jeu Flexbox Froggy https://flexboxfroggy.com/#fr . Avec les différentes propriétés,
vous devrez replacer les grenouilles sur les nénuphars.
13.8. En résumé
Le principe de Flexbox est d'avoir un conteneur avec plusieurs éléments à l'intérieur. Avec display:
flex; sur le conteneur, les éléments à l'intérieur sont agencés en mode Flexbox (horizontalement,
par défaut).
Un libellé est un champ de texte prérempli avec une indication pour guider le visiteur du site sur ce qu’il
doit écrire. On crée un champ de libellé avec la balise XHTML <label> </label> :
Une zone de texte multiligne est une zone de texte de plusieurs lignes. C’est utilisé dans le cas où le visiteur
d’un site aurait besoin d’écrire un paragraphe de texte dans un formulaire.
Un champ de curseur
Pour les types de champs nombre, date et curseur, vous pouvez personnaliser le fonctionnement du champ
avec les attributs suivants :
min : valeur minimale autorisée ;
max : valeur maximale autorisée ;
step : c'est un “pas” de déplacement. Si vous indiquez un pas de 2, le champ n'acceptera que des
valeurs de 2 en 2 (par exemple 0, 2, 4, 6…).
On crée une case à cocher avec la balise <input> en spécifiant le type checkbox qui signifie "case à cocher"
en français :
<input type="checkbox" name="choix">
Rajoutez un <label> et le tour est joué :
Les boutons radio permettent au visiteur de faire un choix (et un seul) parmi une liste de possibilités. Il y a
une petite difficulté supplémentaire par rapport aux cases à cocher : il faut organiser les boutons radio en
groupes.
Les options d'un même groupe possèdent le même nom, name, mais chaque option doit avoir une valeur
(value) différente.
La balise à utiliser est toujours <input>, avec cette fois la valeur radio pour l'attribut type :
HTML :
<form method="get" action="">
<p>
<label for="prenom">Votre prénom :</label>
<input type="text" name="prenom" id="prenom" placeholder="Ex. : Mathieu" size="30"
maxlength="20">
</p>
<p>
<label for="ameliorer">Des conseils pour améliorer mon site ?</label><br>
<textarea name="ameliorer" id="ameliorer"></textarea>
</p>
<p>
Cochez les aliments que vous aimez manger :<br>
<input type="checkbox" name="frites" id="frites"> <label
for="frites">Frites</label><br>
<input type="checkbox" name="steak" id="steak"> <label for="steak">Steak</label><br>
<input type="checkbox" name="epinards" id="epinards"> <label
for="epinards">Épinards</label><br>
<input type="checkbox" name="huitres" id="huitres"> <label
for="huitres">Huîtres</label>
</p>
<p>
Veuillez indiquer la tranche d'âge dans laquelle vous vous situez :<br>
<input type="radio" name="age" value="moins15" id="moins15"> <label
for="moins15">Moins de 15 ans</label><br>
<input type="radio" name="age" value="medium15-25" id="medium15-25"> <label
for="medium15-25">15-25 ans</label><br>
<input type="radio" name="age" value="medium25-40" id="medium25-40"> <label
for="medium25-40">25-40 ans</label><br>
<input type="radio" name="age" value="plus40" id="plus40"> <label for="plus40">Plus de
40 ans</label>
</p>
<p>
<label for="pays">Dans quel pays habitez-vous ?</label><br>
<select name="pays" id="pays">
<option value="espagne">Espagne</option>
<option value="royaume-uni">Royaume-Uni</option>
<option value="canada" selected>Canada</option>
<option value="japon">Japon</option>
</select>
</p>
</form>
CSS :
* {
Un formulaire est englobé par la balise XHTML <form></form> à laquelle on ajoute les attributs
method et action.
On utilise ensuite d'autres balises XHTML pour permettre au visiteur du site de saisir des
informations :
o la balise orpheline <input> pour un champ de saisie monoligne ;
o la balise en paire <textarea> </textarea> pour un champ de saisie multiligne ;
o la balise en paire <select> </select> suivi d'options avec la balise en paire <option>
</option> pour une liste déroulante.
Le champ <input> peut également être configuré pour saisir d'autres types de données : e-mail,
URL, numéro de téléphone, date, etc.
Un label peut être relié à n'importe quel input avec l'attribut for correspondant à l'attribut name
pour le champ utilisé.
Figure 3.1 : Résultat d’un JavaScript simple sur une page web
L'endroit où vous mettez votre JavaScript dans une page est très important. Si vous le mettez dans le corps
d'une page — comme dans cet exemple, il se déclenchera (ou s'exécutera) au chargement de la page. Parfois,
cependant, vous voudrez un script prêt à être utilisé dès que la page est chargée, ou vous pouvez utiliser le
même script dans plusieurs parties de la page, auquel cas il faut le placer à l'intérieur de l'élément <head>
sur la page (parce que les scripts dans l'en-tête se chargent avant l'affichage de la page). Les scripts qui
vivent dans l'en-tête d'une page sont déclenché (ou appelé) par un événement tel que la fin du chargement
de la page ou lorsqu'un visiteur appuie sur le bouton Soumettre sur un formulaire.
Vous pouvez également écrire du JavaScript dans des documents externes portant l'extension de fichier .js
(de la même manière que nous avons créé des feuilles de style externes). C'est une option particulièrement
intéressante car :
Si votre script est utilisé par plus d'une page, vous n'avez pas besoin de répéter le script dans
chaque page qui l'utilise.
Si vous souhaitez mettre à jour votre script, vous n'avez qu'à le modifier à un seul endroit.
Cela rend la page XHTML plus propre et plus facile à lire.
Lorsque vous placez votre JavaScript dans un fichier externe, vous devez utiliser l'attribut src sur la balise
<script> ; la valeur de l'attribut src doit être une URL absolue ou relative pointant vers le fichier
contenant le JavaScript. Par exemple :
<script type="JavaScript" src="scripts/validation.js"></script>
Il y a donc trois endroits où vous pouvez mettre vos JavaScripts, et un seul document XHTML peut utiliser
tous les trois parce qu'il n'y a pas de limite au nombre de scripts qu'un document peut contenir :
Dans le <head> d'une page : Ces scripts seront appelés lorsqu'un événement les déclenchera.
Dans le <body> d'une page : ces scripts s'exécuteront au fur et à mesure du chargement de la page.
Dans un fichier externe : si le lien est placé à l'intérieur de l'élément <head>, le script est traité de
la même manière que lorsque le script vit dans l'en-tête du document en attendant qu'un événement
le déclenche, alors que s'il est placé dans l'élément <body> il agira comme un script dans la section
body et s’exécutera au chargement de la page.
Parfois, vous verrez des exemples de JavaScript écrits dans un commentaire XHTML comme ceci :
<script type="text/javascript">
<!--
document.write("Mon premier JavaScript")
//-->
</script>
Cela a été fait parce que certains anciens navigateurs ne prennent pas en charge JavaScript, et donc le
commentaire leur cache le script. Tous les navigateurs prenant en charge JavaScript ignorent simplement
ces commentaires dans la balise <script>. Notez comment deux barres obliques (//) qui précèdent les
caractères de fermeture du commentaire XHTML. Il s'agit en fait d'un commentaire JavaScript qui empêche
le JavaScript d'essayer de traiter le caractère de fin de commentaire -->.
En XHTML, vous ne devez pas utiliser de caractères tels que les crochets angulaires ([ ])pour autre chose
que des balises. Si vous le faites, ils sont censés aller dans quelque chose appelé une section CDATA (qui
indique au navigateur que le contenu n'est pas un balisage et ne doit pas être traité comme un balisage).
Parce que JavaScript utilise les crochets angulaires, même si cela ne posera pas de problème dans les
principaux navigateurs, vous pouvez placer vos scripts dans un Section CDATA comme celle-ci pour une
précision technique (et pour s'assurer que votre page est validée) :
<script type="text/javascript">
//<![CDATA[
Page 90 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
...
]]>
</script>
Enfin, si vous deviez écrire un site qui devrait fonctionner sur de très vieux navigateurs, une bonne
alternative pour vous soucier des navigateurs qui ne supportent pas les scripts est d'utiliser des scripts
externes car si le navigateur ne peut pas traiter la balise <script>, il n'essaiera même pas de charger le
document contenant le script.
L'élément <noscript> offre un contenu alternatif pour les utilisateurs qui ont désactivé JavaScript sur leur
navigateur. Cette balise peut contenir tout code XHTML que l'auteur veut voir dans le navigateur si
l'utilisateur n'a pas JavaScript activé.
Pour être plus précis, les recommandations du W3C disent que le contenu de cet élément doit être affiché
uniquement lorsque le navigateur ne prend pas en charge le langage de script requis ; cependant, les
fabricants de navigateurs ont décidé que cela devrait également fonctionner lorsque les scripts sont
désactivés.
Figure 3.2 : Résultat d’un JavaScript issu d’un fichier externe sur une page web
Vous pouvez utiliser cette approche pour inclure des JavaScripts externes dans le <head> ou le <body> d'un
document. Si vous les placez dans le <body> du document, comme dans cet exemple, ils sont exécutés
comme au chargement de la page - comme si le script était réellement dans la page à cet endroit précis. Si
vous les placez dans le <head>, alors ils se chargeront lors du chargement de la page et seront déclenchés
par un événement.
Retenez enfin que prendre l’habitude d’utiliser fichiers JavaScript externes pour les fonctions et les placer
dans l'élément <script> dans le <head> du document permet de réutiliser ces scripts sur différents sites que
vous développez et assure que vos documents XHTML se concentrent sur le contenu plutôt que d'être
jonchés de scripts.
15.5. En résumé
Un document XHTML peut comporter plusieurs scripts. Les JavaScripts peuvent se mettre à trois
endroits différents dans un document XHTML :
o Dans le <head> d'une page : Ces scripts seront appelés lorsqu'un événement les
déclenchera.
o Dans le <body> d'une page : ces scripts s'exécuteront au fur et à mesure du chargement de
la page.
o Dans un fichier externe : si le lien est placé à l'intérieur de l'élément <head>, le script est
traité de la même manière que lorsque le script vit dans l'en-tête du document en attendant
qu'un événement le déclenche, alors que s'il est placé dans l'élément <body> il agira comme
un script dans la section body et s’exécutera au chargement de la page.
En javaScript, il y a deux façons différentes de commenter les codes :
o Après les doubles slash (//) pour les commentaires sur une seule ligne ;
o Entre /* et */ pour les commentaires qui tiennent sur plusieurs lignes.
On utilise l'élément <noscript> pour offrir un contenu alternatif pour les utilisateurs qui ont
désactivé JavaScript sur leur navigateur.
Figure 3-4
Le DOM permettrait à un script, comme le script ci-dessus, d'accéder :
au contenu du formulaire dans le cadre de la collection de formulaires (form) ;
aux deux liens dans le cadre de la collection de liens (link).
16.2. Accès aux valeurs à l'aide de la notation par points (.) ou Dot Notation en Anglais
Afin d'accéder aux différents objets du DOM, vous listez les objets dans l'arborescence illustrée à la Figure
3-3, en commençant par l'objet document, en descendant jusqu'à l'objet qui contient les données que vous
recherchez. Chaque objet est séparé par un point (.) ; par conséquent, cela s'appelle une notation par
points.
Par exemple, pour accéder au premier lien dans le document, vous devez accéder à l'objet link, qui est un
enfant de l'objet document, vous pouvez donc utiliser quelque chose comme ceci :
document.links[0].href
Il y a quatre parties dans cette déclaration, dont trois sont séparées par des points, pour accéder au premier
lien :
Le mot document indique que j'accède à l'objet document.
Le mot links correspond à la collection de liens (après tout, cet exemple consiste à récupérer la
valeur du premier lien dans le document).
Le [0] indique que je veux le premier lien du document. Plutôt déroutant, les éléments d'une
collection sont numérotés à partir de 0 plutôt que 1, ce qui signifie le deuxième lien dans la
collection de liens est représenté par [1], le troisième par [2], etc.
Enfin, j'ai indiqué que je souhaitais récupérer la propriété href pour ce lien.
Chaque objet a des propriétés différentes qui correspondent à ce type d'élément ; par exemple, les liens ont
des propriétés telles que la propriété href qui accède à la valeur de l'attribut href sur cet élément <a>. De
même, un objet <textarea> a des propriétés telles que cols, disabled, readOnly et rows, qui
correspondent aux attributs de cet élément.
Plutôt que d'utiliser les noms du type d'objet (tels que des formulaires et des liens), vous pouvez utiliser la
valeur des attributs name sur les éléments pour naviguer dans le document. Par exemple, la ligne suivante
demande la valeur de la case mot de passe : document.frmLogin.pwdPassword.value
Encore une fois, il y a quatre parties dans cette déclaration :
La collection de formulaires contient des références correspondant à chacun des éléments <form> de la
page. Ça peut sembler un peu compliqué, mais vous pouvez probablement imaginer une page Web qui a
plus d'une balise <form> — un formulaire de connexion, un formulaire d'inscription pour les nouveaux
utilisateurs et un champ de recherche sur la même page — le DOM traite cela en ayant un objet de
formulaire séparé pour représenter chacun des formulaires individuels.
Imaginez que vous souhaitiez utiliser un script pouvant accéder à l'adresse de la page à laquelle le
formulaire de connexion envoie ses données. Dans le document XHTML, vous regarderiez l'attribut action
sur la balise <form> d'ouverture. Il existe une propriété action correspondante sur l'objet de formulaire
form du DOM, qui contient la valeur de cet attribut. Ainsi, vous auriez besoin d'accéder à l'objet de
formulaire qui représente le formulaire de connexion, puis de récupérer la valeur de la propriété appelée
action.
Si le formulaire de connexion est le premier formulaire du document, vous pouvez utiliser le numéro d'index
suivant pour sélectionner le formulaire approprié et accéder à la valeur de son attribut action (rappelez-
Figure 3-6
16.10. En résumé
Le DOM explique quelles propriétés d'un document un script peut récupérer et lesquelles il peut
modifier ; il définit aussi certaines méthodes qui peuvent être appelées pour effectuer une action sur
le document.
L’objet de premier niveau du DOM est l’objet document. Il représente la page Web entière.
En-dessous de l’objet document on retrouve tous les autres objets qui se trouvent sur la page. Et
chacun a ses objets fils.
On accède à un objet à travers ses propriétés.
Un objet dispose de méthodes qui lui permettent d’effectuer des actions. Certaines de ces actions
peuvent être déclenchées suite à des événements.
Par exemple, vous pouvez commencer votre page d'accueil par le texte "Bonjour" si l'heure est en matinée.
Vous pouvez y parvenir en utilisant le script suivant (P3C3_EX02.html) :
<script type="text/JavaScript">
date = new Date();
time = date.getHours();
if (time < 12) {
document.write('Bonjour!');
}
</script>
Si vous n'exécutez qu'une seule instruction (comme c’est le cas dans cet exemple), les accolades ne sont pas
strictement nécessaires, donc le code suivant ferait exactement le même travail (bien qu'il soit de bonne
pratique de les inclure de toute façon comme nous l'avons fait précédemment).
<script type="text/JavaScript">
date = new Date();
time = date.getHours();
if (time < 12)
document.write('Bonjour!');
</script>
Cet exemple crée d'abord un objet date (que vous découvrirez plus loin dans le chapitre) puis appelle la
méthode getHours() de l'objet date pour trouver le temps en heures (en utilisant l'horloge de 24 heures).
Si le temps en heures est inférieur à 12, alors le script écrit Bonjour ! sur la page (s'il est supérieur à 12,
vous verrez une page blanche car rien n'y est écrit).
17.4.2. Les instructions if… else
Lorsque vous avez deux situations possibles et que vous souhaitez réagir différemment pour chacune, vous
pouvez utiliser un if... else. Cela signifie : « Si les conditions spécifiées sont remplies, exécutez le
premier bloc de code ; sinon exécutez le deuxième bloc. La syntaxe est la suivante :
if (condition)
{
//code à exécuter si la condition est vraie
}
else
{
//code à exécuter si la condition est fausse
}
En revenant à l'exemple précédent, vous pouvez écrire Bonjour ! si l'heure est avant midi, et Bonsoir ! si
c'est après midi (P3C3_EX03.html)
<script type="text/JavaScript">
date = new Date();
time = date.getHours();
if (time < 12) {
document.write('Bonjour!');
}
else {
document.write('Bonsoir!');
}
</script>
Vous utilisez l’instruction break pour empêcher le code de s'exécuter automatiquement dans le cas suivant.
Par exemple, vous pouvez vérifier quel type d'animal un utilisateur a entré dans une zone de texte, et vous
voulez écrire différentes choses à l'écran selon le type d'animal dans la zone de saisie de texte. Voici un
formulaire qui apparaît sur la page. Lorsque l'utilisateur a saisi un animal et cliqué sur le bouton, la
fonction checkAnimal() contenue dans l'entête du document est appelée (P3C3_EX04.html) :
<p>Entrez le nom de votre animal de dessin animé favori:</p>
<form name="frmAnimal">
<input type="text" name="txtAnimal" /><br />
<input type="button" value="Check animal" onclick="checkAnimal()" />
</form>
Voici la fonction qui contient l'instruction switch :
function checkAnimal() {
switch (document.frmAnimal.txtAnimal.value){
case "lièvre":
alert("Attention, c'est Elmer Fudd!")
break;
case "coyote":
alert("Pas d'équivalent' pour le road runner - meep meep!")
break;
case "souris":
alert("Attention Jerry, voici Tom!")
break;
default : alert("Êtes-vous sûr d'avoir choisi un animal dans un dessin animé?");
}
}
Notez que si l'utilisateur saisit du texte dans une casse différente, il ne correspondra pas aux options du
switch. Étant donné que JavaScript est sensible à la casse, si la casse de la lettre ne correspond pas à la
valeur de la casse dans l'instruction switch, ce ne sera pas une correspondance. Vous pouvez résoudre ce
Dans l'exemple suivant, vous pouvez voir une boucle while qui affiche la table de multiplication par 3 de 1
jusqu’à 10.
Cela fonctionne sur la base d'un compteur appelé i ; chaque fois que le script while boucle, le compteur
incrémente d'un (cela utilise l'opérateur arithmétique ++, comme vous pouvez le voir sur la ligne qui dit
i++). Ainsi, la première fois que le script s’exécute, le compteur vaut 1, et la boucle écrit la ligne 1x3 = 3 ;
la prochaine fois qu'il boucle le compteur vaut 2, donc la boucle écrit 2x3 = 6. Cela continue jusqu'à ce que
la condition — que i ne soit plus inférieur à 11 — soit vraie (P3C3_EX05.html) :
<script type="text/JavaScript">
i = 1;
while (i < 11) {
document.write(i + " x 3 = " + (i * 3) + "<br />" );
i ++;
}
</script>
Vous pouvez voir le résultat de cet exemple dans la Figure suivante.
Avant de passer au type de boucle suivant (la boucle do ... while), il convient de noter qu'il peut arriver
qu’une boucle while ne s'exécute jamais (car la condition peut ne pas être vraie lorsqu'elle est appelée).
17.5.1. La boucle do … while
Une boucle do ... while exécute un bloc de code une fois, puis vérifie une condition. Tant que la
condition est vraie, elle continue à boucler. Ainsi, quelle que soit la condition, la boucle s'exécute au moins
une fois (comme vous pouvez voir la condition est après les instructions). Voici la syntaxe :
do
Page 110 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
{
//code à exécuter
}
while (condition)
Par exemple, voici à nouveau l'exemple avec la table de multiplication par 3. Le compteur est réglé avec une
valeur initiale de 12, qui est supérieur à ce qui est requis dans la condition, vous verrez donc la somme
12x3 = 36 une fois, mais rien après cela, car en ce qui concerne la condition, elle a été remplie
(P3C3_EX06.html) :
<script type="text/JavaScript">
i = 12;
do {
document.write(i + " x 3 = " + (i * 3) + "<br />" );
i ++;
} while (i < 11)
</script>
Maintenant, si vous changez la valeur du compteur initial en 1, vous verrez que le script parcourt la table de
multiplication comme dans le dernier exemple jusqu'à ce qu'il arrive à 11.
17.5.2. La boucle for
L'instruction for exécute un bloc de code un nombre de fois spécifié. Vous l'utilisez quand vous voulez
spécifier combien de fois vous voulez que le code soit exécuté (plutôt que de s'exécuter pendant qu'une
certaine condition soit vrai ou fausse). Il convient de noter ici que le nombre de fois que la boucle for
s'exécute peut être spécifié par une autre partie du code. Tout d'abord, voici la syntaxe (qui prend toujours
trois arguments) :
for (a; b; c)
{
//Code à exécuter
}
Figure 3-9
Le résultat semble assez simple, mais si l'on considère que la chaîne d'origine était 'Apprendre les
Objets Intégrés est facile, ils ont maintenant un aspect sensiblement différent.
17.7.2. L’objet date
L'objet date vous aide à travailler avec les dates et les heures. Vous créez un nouvel objet date en utilisant
le constructeur de date comme ceci : new Date()
17.9. En résumé
17.10. Exercices
Exercice 17.10.1. Créez un script pour écrire la table de multiplication du nombre 5 de 1 à 20 à l'aide d'une
boucle while.
Exercice 17.10.2. Modifiez P3C3_EX03.html afin qu'il puisse dire l'une des trois choses suivantes :
❑ "Bonjour" aux visiteurs venant sur la page avant 12h. (en utilisant une instruction if).
❑ "Bon après-midi" aux visiteurs venant sur la page entre 12h et 18h. — à nouveau en utilisant une
instruction if. (Astuce : vous devrez peut-être utiliser un opérateur logique.)
Page 122 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
❑ "Bonsoir" aux visiteurs qui arrivent sur la page après 18h jusqu'à minuit (à nouveau en utilisant
une instruction if).
Examinons le code de ce formulaire et comment il appelle le JavaScript qui validera ce que l'utilisateur est
entré (P3C4_EX01.html).
<form name="frmRegister" method="post" action="register.aspx"
onsubmit="return validate(this);">
<div>
<label for="txtUserName">
Utilisateur:
</label>
<input type="text" name="txtUserName" id="txtUserName" size="12" />
</div>
<div>
<label for="txtPassword">Mot de passe: </label>
<input type="password" name="txtPassword" id="txtPassword" size="12" />
</div>
<div>
<label for="txtPassword2">Confirmez mdp:</label>
<input type="password" name="txtPassword2" id="txtPassword2" size="12"/>
Dans ce cas, s'il contient moins de six caractères, vous ferez trois choses :
Affecter la valeur false à la variable returnValue, afin que le formulaire ne soit pas soumis.
Dire à l'utilisateur ce qui s'est passé afin qu'il puisse corriger l'erreur. Pour cet exemple, nous allons
utiliser la fonction JavaScript alert() pour créer une boîte d'alerte (comme celles que vous avez
rencontrées dans le dernier chapitre) contenant un message pour l'utilisateur.
Renvoyer le focus à cet élément (à l'aide de la méthode JavaScript focus()) sur le formulaire afin
que l'utilisateur puisse modifier ce qu'il a mis dans ce formulaire.
Ici, vous pouvez voir l'instruction if avec toutes ces actions :
if(username.length < 6) {
returnValue = false;
alert("Votre nom utilisateur doit avoir au minimum\n6 caractères.\n
Veuillez reessayer svp.");
frmRegister.txtUserName.focus();
}
La boîte d'alerte était autrefois un moyen très populaire d'afficher les erreurs des utilisateurs sur leurs
formulaires (car il s'agit d'un moyen très simple de rétroaction). De nos jours, il est plus courant d'écrire un
message d'erreur dans la page elle-même ; cependant, c'est plus compliqué, donc vous verrez comment faire
cela plus tard dans le chapitre.
Remarque : Vous avez peut-être remarqué \n au milieu du message d'erreur ; cela crée un saut de ligne en
JavaScript.
Ensuite, vous voulez vérifier la longueur du premier mot de passe. Pour ce faire, vous pouvez utiliser la
même approche. Mais si le mot de passe n'est pas assez long, vous viderez les deux contrôles de mot de
passe et donnerez le focus à la première zone de saisie de mot de passe :
if (password1.length < 6) {
returnValue = false;
alert("Votre mot de passe doit avoir au moins\n6 caractères.\n
Veuillez reessayer svp.") ;
frmRegister.txtPassword.value = "" ;
frmRegister.txtPassword2.value = “” ;
frmRegister.txtPassword.focus();
}
Supposons que le code est arrivé aussi loin et que le nom d'utilisateur et le premier mot de passe sont
suffisamment longs. Maintenant, vous devez vérifier si la valeur de la première case de mot de passe est la
même que la seconde, comme indiqué ici.
N'oubliez pas que l'opérateur != utilisé dans cette condition signifie "pas égal", donc l'instruction de la
condition if s’exécutera si la valeur de password1 n'est pas égale à celle de password2.
if (password1.value != password2.value) {
returnValue = false;
alert("Vos mots de passe ne sont pas identiques.\n
Veuillez reessayer svp.") ;
Page 128 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
frmRegister.txtPassword.value = "" ;
frmRegister.txtPassword2.value = "" ;
frmRegister.txtPassword.focus();
}
Vous pouvez voir ici que lorsque l'utilisateur a saisi des mots de passe qui ne correspondent pas,
l'utilisateur reçoit une boîte d’alerte avec un message d'erreur signalant que les entrées de mot de passe ne
correspondent pas. De plus, le contenu des deux zones de saisie de mot de passe sont effacées et le focus
est renvoyé à la première zone de mot de passe.
Parce qu'une entrée de mot de passe affichera des points ou des astérisques plutôt que des caractères,
lorsqu'un utilisateur fait une erreur avec une saisie de mot de passe, il ne pourra pas voir où se trouve
l'erreur. C'est pourquoi il faut effacer les zones de saisie de mot de passe lorsqu'un utilisateur s'y est
trompé.
La seule chose qu'il reste à faire dans cette fonction est de renvoyer la valeur de la variable returnValue —
qui doit être true si toutes les conditions sont remplies ou false sinon.
return returnValue;
}
Voici la fonction dans son intégralité (P3C4_EX01.html) :
function validate(form) {
var returnValue = true;
var username = form.txtUserName.value;
var password1 = form.txtPassword.value;
var password2 = form.txtPassword2.value;
if(username.length < 6) {
returnValue = false;
alert("Votre mot de passe doit avoir au moins\n6 caractères.\n
Veuillez reessayer svp.");
document.frmRegister.txtUserName.focus();
}
if (password1.length < 6) {
returnValue = false;
alert("Votre mot de passe doit avoir au moins\n6 caractères.\n
Veuillez reessayer svp.");
document.frmRegister.txtPassword.value = "";
document.frmRegister.txtPassword2.value = "";
document.frmRegister.txtPassword.focus();
}
if (password1 != password2) {
returnValue = false;
alert("Vos mots de passe ne sont pas identiques.\n
Veuillez reessayer svp.");
document.frmRegister.txtPassword.value = "";
document.frmRegister.txtPassword2.value = "";
document.frmRegister.txtPassword.focus();
}
return returnValue;
}
Dans la Figure ci-dessous, vous pouvez voir le résultat si le mot de passe de l'utilisateur n'est pas assez
long.
Regardons cela de plus près ; il commence par le nom de la fonction. La fonction prend un paramètre, le
formulaire qu'il doit valider, qui est donné entre parenthèses.
function validate(form) {
Ensuite, une variable appelée returnValue est déclarée ; cette fois, plutôt que d'être initialisée à true, elle
est initialisée à une chaîne vide en utilisant des guillemets vides : var returnValue = "";
Vous effectuez ensuite trois appels à des fonctions, chacune vérifiant un aspect différent du formulaire.
Nous allons regarder chacune d'lles à son tour en un instant. Si ces fonctions rencontrent un problème
(parce que l'utilisateur n'a pas entré ce que vous vouliez), les fonctions renverront une erreur. Vous vous
souvenez peut-être du dernier chapitre que += ajoute une valeur à une variable existante, donc si la fonction
renvoie une erreur, le message d'erreur est ajouté à la variable returnValue ; s'il n'y a pas d'erreur, rien ne
sera ajouté à la variable.
D'abord, vous pouvez voir que nous appelons la fonction validateConfirmPassword(). Nous lui passons
les deux contrôles de mots de passe que nous voulons qu'elle vérifie en utilisant la notation par points, ainsi
que le message d'erreur que nous voulons afficher si les champs ne correspondent pas.
returnValue += validateConfirmPassword(form.txtPassword, form.txtPassword2, 'Vos mots de
passe ne correspondent pas');
Parce que la fonction validateConfirmPassword() renverra le message d'erreur si les mots de passe ne ne
correspondent pas, nous saurons s'il y a un problème car l'attribut returnValue contiendra ce message
d’erreur ; il ne sera plus vide.
Nous appelons ensuite la fonction validateMinimumLength() pour vérifier la longueur du premier contrôle
de mot de passe. Ici nous lui passons en paramètre dans le contrôle du formulaire à vérifier, le nombre
minimum de caractères que l'utilisateur peut saisir pour ce contrôle de formulaire et le message d'erreur
indiquant si le contrôle de formulaire n'a pas cette longueur.
returnValue += validateMinimumLength(form.txtPassword, 6, 'Votre mot de passe doit avoir au
moins 6 caractères');
Nous vérifions ensuite que le nom d'utilisateur saisi comporte plus de six caractères. Pour ce faire, nous
appelons la fonction validerMinimumLength() une deuxième fois. Ici, vous pouvez déjà commencer à voir
les avantages de la réutilisation du code ; plutôt que de répéter à nouveau la fonction entière, nous utilisons
la même fonction que nous venons d'utiliser une deuxième fois, mais cette fois nous lui disons de vérifier un
contrôle de formulaire différent et d'afficher un message d’erreur différente en cas de problème.
returnValue += validateMinimumLength(form.txtUserName, 6, "Votre nom d'utilisateur doit
avoir au moins 6 caractères");
Après avoir vérifié ces trois aspects du formulaire, en cas de problème returnValue ne sera plus vide.
L'instruction if suivante indique que si returnValue n'est pas vide, la fonction validate() doit retourner
false pour dire que le formulaire ne doit pas être soumis. Sinon, s'il est vide, on peut retourner true, qui
permettra de soumettre le formulaire.
if (returnValue != "") {
Page 131 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
return false;
}
return true;
Vous remarquerez peut-être que nous commençons par les règles qui s'appliquent aux derniers éléments du
formulaire, et ensuite aux règles qui s'appliquent aux premiers contrôles de formulaire. Nous faisons cela
parce que, lorsqu'il y a une erreur, nous voulons remettre le focus sur le champ de formulaire avec l'erreur
(comme nous l'avons fait dans le premier exemple). S'il y a plus d'une erreur, nous voulons que l'utilisateur
commence en haut du formulaire et corrige tous les erreurs, nous voulons donc que la dernière erreur
traitée par le script soit la première que l'utilisateur verra.
Comme vous le verrez dans un instant, lorsque ces fonctions trouvent une erreur, non seulement elles se
concentrent sur cet élément de formulaire, ils écrivent également le message d'erreur dans la page, ce qui
signifie que nous devons changer le formulaire dans la page XHTML légèrement. Regardons à nouveau le
formulaire ; cette fois, il y a des éléments <span> vides après les contrôles du formulaire. Ceux-ci
contiendront tous les messages d'erreur renvoyés. Lors de la conception de votre formulaire, il est important
de laisser suffisamment d'espace dans la page pour ces messages d'erreur. Il est également très important
qu'il n’y ait pas d'espace entre la fermeture de la balise <input /> et le début de la balise <span> ; sinon, le
formulaire ne fonctionnera pas.
<form name="frmRegister" method="post" action="register.aspx"
onsubmit="return validate(this);">
<div>
<label for="txtUserName">Utilisateur:</label>
<input type="text" id="txtUserName" size="12" /><span
class="message"></span>
</div>
<div>
<label for="txtPassword">Mot de passe: </label>
<input type="password" id="txtPassword" size="12" /><span
class="message"></span>
</div>
<div>
<label for="txtPassword2">Confirmer mdp:</label>
<input type="password" id="txtPassword2" size="12" /><span
class="message"></span>
</div>
<div>
<input type="submit" value="Se connecter" />
</div>
</form>
Voyons maintenant la fonction qui va vérifier qu'un utilisateur a entré un nombre minimum de caractères
dans un champ de formulaire spécifié.
function validateMinimumLength (control, length, errormessage) {
var error="";
document.getElementById(control.id).nextSibling.innerHTML="";
if (control.value.length < length) {
error = errormessage;
document.getElementById(control.id).nextSibling.innerHTML=errormessage;
document.getElementById(control.id).focus();
}
return error;
}
Nous passons trois choses dans la fonction afin qu'elle puisse effectuer son calcul :
Le contrôle de formulaire que nous voulons vérifier
La longueur du texte que nous nous attendons à ce que l'utilisateur ait saisi
Un message d'erreur que nous montrerons à l'utilisateur si le contrôle n'est pas assez long
Page 132 sur 140
XHTML, CSS, JAVASCRIPT – © Février 2023 – Mise à jour : 24 Avril 2024
function validateMinimumLength (control, length, errormessage) {
Vous pouvez voir entre parenthèses les mots control, length et errormessage. A l'intérieur de la fonction,
nous pouvons utiliser ces mots pour faire référence aux valeurs transmises à la fonction lorsqu'elle a été
appelée. Par exemple, regardez sur cette ligne :
if (control.value.length < length) {
Nous avons une instruction if vérifiant si la longueur du contrôle passé dans le paramètre control est
inférieure au nombre minimum de caractères que nous autorisons (length).
Si l'utilisateur n'a pas entré suffisamment de caractères, nous définissons la valeur d'une variable appelée
error (qui était déclaré dans la deuxième ligne de la fonction) pour contenir le message d'erreur.
error = errormessage;
Nous écrivons ensuite le message d'erreur dans l'élément supplémentaire <span> que nous avons ajouté
après chaque contrôle de formulaire pour afficher le problème.
document.getElementById(control.id).nextSibling.innerHTML=errormessage;
Il se passe beaucoup de choses dans cette ligne, alors décomposons-la :
control.id vous donne la valeur de l'attribut id du contrôle de formulaire avec lequel vous êtes en train de
travailler.
document.getElementById(control.id) vous donne le contrôle de formulaire avec lequel vous travaillez
(la méthode getElementById() renvoie un élément dont l’attribut id est donné, et vous venez de voir
comment obtenir la valeur de l'attribut id pour le contrôle de formulaire avec lequel vous travaillez en
utilisant contrôle.id).
nextSibling renvoie l'élément suivant après ce contrôle de formulaire, qui est l'élément <span> suivant qui
contiendra le message d'erreur.
innerHTML=errormessage ajoute le message d'erreur à l'intérieur de cet élément <span>.
S'il y a un problème, nous donnons également le focus au contrôle du formulaire contenant le problème :
document.getElementById(control.id).focus();
Nous renvoyons ensuite l'erreur à la fonction validate() dans la page contenant le formulaire (afin qu'elle
puisse empêcher la soumission du formulaire). Avant de voir comment nous transmettons l'erreur, vous
avez peut-être remarqué cette ligne de code, qui apparaît avant l'instruction if qui vérifie la longueur de la
valeur entrée dans le champ de formulaire :
document.getElementById(control.id).nextSibling.innerHTML=””;
Son but est de s'assurer que l'élément <span> à côté du contrôle de formulaire est vide. Nous devons le faire
parce que, une fois qu'un formulaire a été soumis et que des erreurs ont été repérées, l'utilisateur peut
soumettre à nouveau le formulaire — auquel cas nous devons effacer tous les messages d'erreur, puis
vérifier à nouveau le contrôle du formulaire, et seulement si le problème persiste, affichez à nouveau le
message d'erreur.
Comme vous pouvez l'imaginer, si vous créez beaucoup de sites, avec de nombreux formulaires, la
possibilité de réutiliser les fonctions de validation vous évite d'avoir à coder chaque formulaire encore et
encore.
La figure suivante montre le message d'erreur généré lorsque l'utilisateur n'a pas saisi de mot de passe avec
la bonne taille et que les 2 mots de passe ne correspondent pas.
Il y a quelque chose d'intéressant à noter ici. La fonction replace() remplace la première instance de la
mauvaise chaîne. Si vous appuyiez à nouveau sur le bouton, vous verriez un autre problème : le mot
"badge" deviendrait en « goodge ». Nous pouvons résoudre ces deux problèmes en utilisant quelque chose
connu sous le nom d'expression régulière dans la fonction replace().