Document 4
Document 4
commencer ?
Vous allez vous initier à la programmation avec des langages accessibles,
faciles à apprendre, et incontournables du Web : HTML5 et CSS3.
C’est très souvent par ces langages qu’on commence quand on apprend à
programmer, car ils sont à la base de tous les sites que vous pouvez voir
lorsque vous naviguez sur internet !
Si vous pensez ne pas avoir le niveau pour suivre ce cours, ne vous inquiétez pas :
HTML et CSS sont des langages très abordables. Nous allons les découvrir pas à
pas : de toute façon, on vous explique tout et vous serez très vite capable d'ajouter
du texte à votre site, de construire un menu de navigation, d'insérer des images...
et bien plus encore !
Dans ce cours, vous allez commencer par apprendre à écrire en langage HTML !
Vous apprendrez à utiliser ce que l'on appelle des balises : elles vous permettront
de structurer les éléments qui constituent le contenu de votre site web. Ainsi, vous
verrez comment créer des titres, des paragraphes de texte, des liens hypertextes,
ou encore comment insérer des images sur vos pages web.
Ensuite, vous allez vous plonger dans le CSS ! Et là, vous vous demandez :
Mais pourquoi apprendre deux langages séparément ? Pourquoi ne pas avoir créé
un seul langage qui mixe HTML et CSS ? Pourquoi HTML n'est pas suffisant ?
Toutes ces questions sont de bonnes questions et il est totalement normal de se
les poser. Ce cours y répondra, mais si vous voulez une réponse en avant-
première, la voici : le HTML et le CSS sont deux langages qui se complètent, le
premier permet de créer et de structurer du contenu, le second permet de faire de
la mise en forme visuelle et dynamique. En bref, le CSS permet d'avoir la main sur
le style, autrement dit le look de votre site web. Sans lui, votre site ressemblerait à
ce que l'on faisait dans les années 90-2000. Bref, c'est le CSS qui rendra votre site
web moderne et créatif.
En basculant sur le langage CSS, vous découvrirez une nouvelle syntaxe, c'est-à-
dire, une nouvelle façon d'écrire du code. Mais vous verrez, elle ne sera pas
fondamentalement différente. Dites-vous déjà que :
1. en HTML, vous utiliserez des balises qui permettent de décrire votre contenu -
vous les écrirez entre chevrons < > ;
2. en CSS, vous utiliserez des propriétés qui permettent d'appliquer du style à des
éléments HTML - vous les écrirez entre accolades { }.
Mais comment appliquer un style CSS à des éléments HTML si ce sont deux
langages séparés ?
L'éditeur dans lequel vous écrirez du code permet d'écrire dans différents
langages, dont le HTML et le CSS. Ce que nous ferons, c'est tout simplement de
coder :
Ces deux fichiers seront enregistrés sur votre ordinateur. Pour les faire
communiquer, il suffira d'ajouter une seule ligne de code dans le fichier HTML !
Grâce à cette ligne de code, dès que vous cliquerez sur votre fichier HTML pour
l'ouvrir afin de regarder votre site web sur le navigateur, il appellera
automatiquement le fichier CSS. Cela vous permettra d'admirer la mise en style
que vous aurez appliquée et de la modifier à loisir sans toucher au contenu.
Et vous verrez que le langage CSS fait vraiment la différence sur un site web : vous
apprendrez à mettre en forme votre texte et notamment à utiliser la police de
caractères de votre choix. Vous apprendrez aussi à appliquer de la couleur sur
différents éléments HTML, comme le texte, mais également le fond d'une portion
de texte ou encore le fond de toute la page. Vous découvrirez comment créer des
bordures et des ombres sur des blocs pour faire une mise en page plus visuelle ;
mais aussi comment ajouter des effets d'interaction avec les futurs visiteurs de
votre site web, pour le rendre dynamique !
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 donc en HTML que vous écrirez ce qui doit être affiché sur la page : du texte,
des liens, des images… En “français”, cela consiste à dire par exemple : “Ceci est
mon titre”, “Ceci est mon menu”, “Voici une image à afficher”, etc.
Comprenez le rôle du 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
Les rôles du HTML et du CSS se complètent. Mais ensuite, c’est le navigateur web
qui fait le reste du travail : lire le code HTML et CSS pour afficher un résultat visuel
à l'écran. Si votre code CSS dit “Les titres sont en rouge”, alors le navigateur
affichera les titres en rouge.
Le rôle du navigateur est donc essentiel !
On ne dirait pas comme ça, mais un navigateur est un programme extrêmement
complexe. En effet, comprendre le code HTML et CSS n'est pas une mince affaire.
Les différents navigateurs n'affichent pas toujours le même site exactement de la
même façon ! Il faudra vous y faire, et prendre l'habitude de vérifier régulièrement que
votre site fonctionne correctement sur les navigateurs les plus utilisés.
Aujourd'hui, vous apprenez à développer dans un environnement quasi magique :
tous les navigateurs que vous utilisez embarquent des outils de développement
particulièrement sophistiqués, notamment l’outil d’inspection d’une page web.
En effet, l'inspection d'une page web permet très simplement d'accéder au HTML
et au CSS, et de faire des changements en temps réel. Pour cela, il vous suffit de
faire un clic droit sur n'importe quelle page, et de sélectionner l'inspecteur.
En résumé
Le langage HTML utilise ce qu'on appelle des balises. On les écrit entre chevrons
< et > :
On a donc :
Cela délimite ce qui sera traduit par un titre. Pour l'ordinateur, tout ce qui n'est pas
entre ces deux balises n'est pas un titre.
Ce sont des balises qui servent le plus souvent à insérer un élément à un endroit
précis (par exemple une image). Il n'est pas nécessaire de délimiter le début et la
fin de l'image, on veut juste dire à l'ordinateur “Insère une image ici”. Il n'y a donc
pas besoin de faire une balise ouvrante et une fermante, d'où l'appellation "balise
orpheline".
Une balise orpheline s'écrit comme ceci : <img>
A la suite, on utilisera, en plus des balises, des attributs. Les attributs sont un peu
les options des balises. Ils viennent les compléter pour donner des informations
supplémentaires.
Un attribut est situé dans la balise ouvrante d'une balise en paire, ou directement
dans une balise orpheline, comme c'est le cas ci dessous avec la balise <img> :
Utilisez la structure de base d'une page HTML
Pour écrire votre première vraie page web en HTML, ouvrez votre fichier
index.html sous Visual Studio Code et copiez-collez le code ci-dessous à la
place de ce que vous aviez juste avant.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
• La première ligne <!DOCTYPE html> est une balise orpheline indispensable : elle
indique qu'il s'agit d'une page HTML.
• La balise en paire <html> </html> englobe tout le contenu de la page web. A
l'intérieur, il y a les balises en paire <head> </head> et <body> </body>.
Pour rappel, c’est dans cette balise qu'on peut préciser la langue par défaut du site web
:
• La balise en paire <head> </head> contient deux balises qui donnent des
informations au navigateur : l’encodage et le titre de la page.
• La balise orpheline <meta charset="utf-8"> indique l'encodage utilisé dans le
fichier .html : cela détermine comment les caractères spéciaux s'affichent
(accents, idéogrammes chinois et japonais, etc.).
Si les accents s'affichent mal par la suite, c'est qu'il y a un problème avec l'encodage.
Vérifiez que la balise meta indique bien UTF-8, et que votre fichier est enregistré en
UTF-8.
• La balise en paire <body> </body> contient tout ce qui sera affiché à l'écran sur
la page web.
Avant de terminer, abordons une bonne pratique que tout développeur devrait
suivre : commenter son code.
Un commentaire en HTML est un texte qui sert simplement de mémo. Il n'est pas
affiché, il n'est pas lu par l'ordinateur, cela ne change rien à l'affichage de la page.
OK, ça ne sert à rien alors ?!
Si ! Cela sert à vous qui développez et aux personnes qui liront le code source de
votre page. Vous pouvez utiliser les commentaires pour laisser des indications sur
le fonctionnement de votre page. Cela vous permettra de vous rappeler comment
fonctionne votre page si vous revenez sur votre code source après un long moment
d'absence.
Et on fait comment pour écrire un commentaire ?
Un commentaire est une balise HTML avec une forme bien spéciale :
<!-- Ceci est un commentaire -->
Vous pouvez le mettre où vous voulez au sein de votre code source.
Attention, tout le monde peut voir le code HTML source de votre page, une fois celle-ci
mise en ligne sur le Web, avec l’outil d’inspection. Vos commentaires seront donc
également visibles en faisant “Afficher le code source de la page”. Par conséquent, ne
mettez pas d'informations sensibles comme des mots de passe dans les
commentaires… et soignez votre code source, car je pourrai venir vérifier si vous avez
bien suivi le cours à la lettre !
D'ailleurs, dans la plupart des éditeurs de code, il existe un raccourci pour commenter
une ligne de code très rapidement.
Sur Visual Studio Code, pour transformer une ligne (ou même plusieurs lignes) en
commentaire :
À vous de jouer !
• 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.
Le texte affiché sur une page web est compris entre les balises <body> </body>.
C'est donc dans <body> </body> que nous allons écrire du texte à afficher en
utilisant des balises HTML pour le structurer grâce à des paragraphes, des titres,
des listes ou encore mettre en avant du texte important.
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Ma page</title>
</head>
<body>
</html>
Oui, mais si je veux juste revenir à la ligne sans créer un paragraphe à chaque fois
?
Eh bien devinez quoi : il existe une balise pour cela !
Pour revenir à la ligne, on utilise la balise orpheline <br> (pour break), on n'a donc
pas besoin de la fermer :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Ma page</title>
</head>
<body>
<p>Ceci est le contenu de mon premier paragraphe, <br>dont le contenu est particulièrement
long.</p>
</body>
</html>
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 !
Ne confondez pas :
• 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.
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Ma page</title>
</head>
<body>
<h3>Une sous-partie</h3>
<p>Un paragraphe</p>
</body>
</html>
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.
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érez la liste dans des balises <ul> </ul> ou <ol> </ol>
<ul>
<li>Fraises</li>
<li>Framboises</li>
<li>Groseilles</li>
</ul>
<h1>Ma journée</h1>
<ol>
<li>Je me lève.</li>
</ol>
Dans le texte qui s'affiche sur une page web, vous aimeriez faire ressortir certains
mots en particulier.
La balise la plus utilisée pour cela est <strong> mais HTML vous propose
différents moyens de mettre en valeur le texte de votre page :
Balises Traduction par le
navigateur
<mark> Surligner le texte.
</mark>
<em> </em> Mettre le texte en
italique.
<strong> Mettre le texte en gras.
</strong>
Testez pour voir !
Ok ! Mais cette mise en forme ne me plaît pas trop, on peut la changer ?
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.
Soit, et si je n'ai pas envie de faire ressortir du texte important, c'est grave ?
Les robots de moteurs de recherche parcourent le Web en lisant le code HTML 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).
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"… Pensez-y !
À vous de jouer
La photographe Robbie Lens nous a demandé de lui faire un site web pour mettre
en avant son travail. Mais il va lui falloir également une page pour se présenter.
Pour l'occasion, nous avons donc ajouté du contenu dans le fichier index.html
et créé une nouvelle page :a-propos.html.
Vous allez :
En résumé
On reconnaît facilement un lien hypertexte (ou hyperlien) sur une page web : par
défaut, il est en bleu et souligné dans le navigateur et un curseur en forme de main
apparaît lorsqu'on pointe dessus ; mais on peut modifier ce style en CSS.
À partir de là, il y a des subtilités selon l'endroit où l'on veut rediriger l'utilisateur.
Créez un lien hypertexte vers l'URL d'une page disponible sur internet
Si vous voulez faire un lien vers un autre site existant en ligne, rien de plus simple,
il suffit d'utiliser la méthode de copier l'URL du site entre " "à la suite de l'attribut,
comme ceci :
<a href="https://openclassrooms.com/fr/">Accédez à OpenClassrooms</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.
Créez un lien hypertexte d'une page à une autre sur votre site
Souvenez-vous : 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 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>
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" 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 " " :
<h2 id="mon_ancre">Titre</h2>
L'attribut id sert à donner un nom “unique” à une balise, pour s'en servir de
repère. Et, croyez-moi, vous n'avez pas fini d'entendre parler de cet attribut. Ici, on
s'en sert pour faire un lien vers une ancre mais, en CSS, il pourra nous être utile
pour repérer une balise précise, vous verrez.
Évitez de créer des id avec des espaces ou des caractères spéciaux ; utilisez
simplement, dans la mesure du possible, des lettres et des chiffres pour que la valeur
soit reconnue par tous les navigateurs.
La seconde étape consiste à indiquer où se situe l'ancre. La méthode pour se faire
varie selon que :
Dans ce premier cas, on crée un lien avec l'attribut href (il contient un dièse #
suivi du nom de l'ancre) :
<a href="#mon_ancre">Aller vers l'ancre</a>
<p>
</p>
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>
</p>
Et voilà pour tout ce que vous devez savoir sur les liens !
Sachez qu'il est possible de configurer un lien pour qu'il ait un comportement un
peu particulier.
À vous de jouer
Vous allez maintenant pouvoir mettre en pratique ce que vous venez d'apprendre
sur les liens. Exceptionnellement pour cet exercice, la page a-propos.html a été
déplacée dans un dossier dossier-demo afin que vous puissiez tester votre
compréhension des liens relatifs.
Pour cet exercice, votre mission, si vous l'acceptez, est de :
• créer sur la page d'accueil un lien vers la page "À propos" (sans déplacer les
fichiers) ;
• créer sur la page a-propos.html un lien vers la page d'accueil (sans déplacer les
fichiers) ;
• ajouter les liens vers les réseaux sociaux (qui s'ouvrent dans un nouvel onglet) sur
la page d'accueil et la page "À propos" :
o pour Twitter, vous redirigerez vers "https://twitter.com/",
o pour Instagram, le lien pointe vers "https://www.instagram.com/".
Vous trouverez la base de code nécessaire pour débuter cet exercice sur la branche
P1C5-exercice. Pour vous aider si vous êtes bloqué, la solution se trouve sur la
branche P1C5-solution.
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://openclassrooms.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 :
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 :
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ébergé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>
</p>
Donner une decription alternative à une image est une bonne pratique !
C'est-à-dire ? Je ne comprends pas ce que c'est une description alternative.
Une description alternative est un court texte qui décrit ce que contient l'image. Ce
texte alternatif sera :
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 !
Prenez l'habitude d'enregistrer vos fichiers avec des noms en minuscules, sans espace
ni accent. C’est une bonne pratique à mettre en place dès le début. Vous pouvez
remplacer les espaces par le caractère underscore _. Par exemple : mon_image.png
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.
Si votre image est très grosse, il est conseillé d'en afficher la miniature cliquable
sur votre site. De cette manière vos pages web mettront moins de temps à
s'afficher. Si vos visiteurs souhaitent voir vos images en taille originale, ils n'auront
qu'à cliquer dessus.
Pour ce faire, il faut disposer de deux versions d’une photo : l'image d'origine, et
une version de cette image moins lourde (donc plus petite).
Voyons voir comment faire en sorte que la miniature soit cliquable :
1. placez vos deux images dans un dossier appelé par exemple images .
2. Faites afficher la version montagne_mini.jpg sur une page,
3. et faites un lien vers la version montagne.jpg.
</p>
Parfois, certains navigateurs choisissent d'afficher un cadre bleu (ou violet) pas très
esthétique autour de votre image cliquable. Nous pourrons retirer ce cadre dans peu de
temps grâce au CSS.
À vous de jouer
Vous allez maintenant pouvoir enrichir le portfolio de Robbie Lens. Pour cela, vous
devrez :
• remplacer les liens Twitter et Instagram en bas des pages "À propos" et "Accueil"
par les icônes correspondantes ;
• insérer l'image de Robbie Lens sur la page d'accueil (le fichier s'appelle robbie-
lens.png ) ;
• afficher tout en haut et tout en bas de la page le logo qui renvoie sur la page
d'accueil grâce à un lien.
Vous trouverez toutes les images nécessaires pour cet exercice directement dans
la base de code, dans le dossier /images .
Comme pour les chapitres précédents, vous trouverez la base de code pour démarrer
l'exercice sur la branche P1C6-exercice, et la solution sur la branche P1C6-solution
par ici !
En résumé
À partir du moment où vous créez un fichier .css pour appliquer du style à votre
page web (écrite dans un fichier .html), il vous faut lier ces deux fichiers. Ainsi, les
propriétés CSS que vous ajoutez vont pouvoir s'appliquer aux balises HTML
auxquelles vous souhaitez qu'elles s'appliquent.
Pour lier les fichiers .css et .html, vous allez rajouter une ligne dans le fichier .html
pour indiquer au navigateur d'aller chercher la feuille de style (stylesheet en anglais)
afin d'afficher la page web avec les propriétés de style qu'on lui a appliquées.
Cette ligne à rajouter dans le fichier .html s'ouvre avec la balise orpheline <link>
et on la place à l'intérieur de la balise <head> </head> :
<head>
<meta charset="utf-8">
<title>Ma page</title>
</head>
Lorsque vous cliquerez sur votre fichier HTML 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.
h1 {
color: blue;
Dans un code CSS comme celui-ci, on trouve en fait trois éléments différents :
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).
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.
On écrit le nom de la balise. Puis entre accolades { } on écrit les propriétés et leurs
valeurs. (On peut mettre autant de propriétés que l'on veut à l'intérieur des accolades).
Chaque propriété est suivie du symbole : puis de la valeur correspondante.
Chaque ligne se termine par ;.
Comment on fait des accolades sur le clavier français ?
Sur un PC, vous utilisez :
color: blue;
ajouter un commentaire
color: blue;
Ce code CSS signifie que nos titres de niveau 1 et nos paragraphes doivent
s'afficher en bleu :
h1 {
color: blue;
p {
color: blue;
Ok mais c'est un peu répétitif, non ? On va devoir tout écrire à la main comme ça ?
Heureusement, non. Si les deux balises ont la même style, il suffit de combiner la
déclaration en séparant les noms des balises par une virgule :
h1, p
color: blue;
Ce que l’on vient de voir implique que TOUS les paragraphes seront écrits en bleu.
Comment faire pour que certains paragraphes soient écrits d'une couleur
différente ?
Pour appliquer un style à un seul élément (par exemple à un seul paragraphe parmi
tous les paragraphes de notre code), on peut - en théorie - utiliser deux attributs :
1. l'attribut class ;
2. ou l'attribut id.
En CSS, on peut appliquer du style à un élément (ou plus) avec l'attribut class. Par
contre id ne peut s'utiliser que pour un seul élément, pas plus.
Voyons comment appliquer la méthode dans un exemple dont l'usage est
pertinent avec l'attribut class
class est un attribut que l'on peut mettre sur n'importe quelle balise HTML :
<h1 class="voici"> </h1>
<img class="classes">
<h1>Titre principal</h1>
</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.
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;
L'attribut id fonctionne selon la même méthode que class, mais il y a une différence
de taille : id ne peut être utilisé qu'une fois dans le code.
Quel intérêt alors ?
En CSS, il n'y en a pas vraiment ; cela vous sera surtout utile si vous faites du
JavaScript plus tard, pour reconnaître certaines balises.
En HTML, il y en a un car souvenez-vous on l'avait utilisé dans le chapitre sur le liens
hypertextes pour créer des ancres.
En pratique donc, on n'utilisera en CSS un id que sur un élément qui est unique dans la
page, comme le logo par exemple.
Exemple avec le logo, élément unique, que l'on va "marquer" grâce à l'attribut id
dans le fichier .html:
<img src="images/logo.png" alt="Logo du site" id="logo">
Avec l'attribut id , on définit les propriétés de style de cet élément unique dans le
fichier .css en l'appelant par un dièse#:
#logo {
• déclarer le style :
.ma-classe {
color: #663399;
.grand-texte {
font-size: 30px;
• et l'utiliser sur p (mais aussi sur vos autres éléments ; il est possible de cumuler
plusieurs classes au sein d'une même balise). Par exemple :
<body>
<h1>Titre principal</h1>
</body>
Ce qui donne :
De la même manière, on peut ajouter plusieurs propriétés sur un même sélecteur :
balise1
propriete1: valeur1;
propriete2: valeur2;
/* … */
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>.
<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”.
<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>.
Vous pouvez tester cela dans le CodePen P2C1.
À vous de jouer !
Vous allez exploiter ce que vous venez d'apprendre, et le mettre à profit dans le
projet de Robbie Lens.
Ici, vous allez :
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.
• Pour écrire le code CSS, on crée un fichier séparé portant l'extension .css comme
style.css.
• Pour lier les fichiers CSS et HTML, on rajoute une ligne dans la balise <head>
</head> du fichier HTML : <link href="style.css" rel="stylesheet">
• En CSS, on sélectionne les portions de la page HTML qu'on veut modifier, et on
change leur présentation avec des propriétés CSS :
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 ouid(.nom-classe ou #nom-id) ;
o uniquement les balises qui se trouvent à l'intérieur d'autres balises (h3,em).
Comme vous avez pu le voir dans la vidéo juste au-dessus, nous allons maintenant
en profiter pour mettre en forme le texte de nos pages.
Indiquer une taille absolue, c’est très précis, mais il est conseillé de n'utiliser cette
méthode que si on sait sur quelle taille d'écran ou dimension d'impression une
personne verra le contenu de la page, car on risque d'indiquer une taille trop petite pour
certains lecteurs.
Indiquer une taille relative a l'avantage d'être plus souple, elle s'adapte, selon les
tailles d'écrans, plus facilement aux préférences des visiteurs.
Donnez une taille au texte avec une valeur absolue en px
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;
Il y a plusieurs moyens d'indiquer une valeur relative. Une des plus fréquentes
consiste à indiquer la taille en em.
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 HTML :
<p class="elem1">Élément 1 : 1em</p>
<p class="elem2">Élément 2 : 1.3em</p>
font-size: 1em;
.elem2 {
font-size: 1.3em;
.elem3 {
font-size: 2em;
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.
C'est tout à fait possible d'utiliser n'importe quelle police sur son site, et ce sur la
plupart des navigateurs. Pour cela, il existe plusieurs méthodes, comme importer
une police depuis le site de Google Fonts.
D'ailleurs, comment fait-on pour intégrer une police de Google Fonts dans nos
fichiers HTML et CSS ?
Pour cela, rendez-vous sur Google Fonts pour sélectionner une police, puis :
Ici, on s'est contenté de suivre les étapes préconisées par Google Fonts. Mais il est
également possible de télécharger une police localement, et de la joindre à notre projet
HTML / CSS. Mais cette technique requiert quelques étapes de plus, et n'est pas
forcément nécessaire lorsque vous débutez. Néanmoins, vous trouverez un exemple
de ce genre de téléchargement de police au format spécifique et de son utilisation
en CSS juste ici.
En CSS, on donne une valeur à font-style pour dire si on veut que du texte soit
en italique ou non :
• italic : le texte sera mis en italique ;
• normal : le texte sera normal (par défaut). Cela vous permet d'annuler une mise
en italique. Par exemple, si vous voulez que les textes entre <em> ne soient plus en
italique, vous devrez écrire :
em
font-style: normal;
Différence entre du
texte normal et du texte italique
Mais il est également possible d'être plus précis et d'indiquer l'épaisseur du texte
avec une valeur numérique allant de 100 à 900, du moins épais au plus épais :
Les
différentes graisses (ou épaisseurs)
• underline: souligné ;
• line-through: barré ;
• none: normal (par défaut, sauf dans le cas des liens).
Le propriété CSS text-align permet d'aligner du texte selon la valeur qu'on lui
donne :
Les 3
options d'alignements classiques
Justifier le texte permet de faire en sorte qu'il prenne toute la largeur possible sans
laisser d'espace blanc à la fin des lignes. Les textes des journaux, par exemple,
sont toujours justifiés.
Jouez avec les différentes propriétés qu'on vient de voir grâce au CodePen P2C2c.
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.
À vous de jouer !
Maintenant que vous avez appris comment mettre du texte en forme, vous allez
pouvoir appliquer cela au projet de Robbie Lens. Pour cela, vous allez :
• Importer les deux polices principales du projet avec Google Font : Montserrat et
Manrope.
• Assigner les propriétés de polices suivantes :
o les titres H1 :
▪ 3.5em
▪ en couleur #A5B4FC
▪ police Montserrat
o les paragraphes :
▪ 1.1em
▪ police Manrope
o les listes :
▪ 1em
▪ police Manrope
o les liens :
▪ enlever le soulignement
▪ 1em
▪ police Manrope
• Remplacer les <span class="important"></span> par des éléments em tout
en gardant le même style.
Vous trouverez la base de code pour démarrer l’exercice sur la branche P2C2-
exercice.
Et comme d’habitude, on ne vous abandonne pas dans la nature, la solution se trouve
sur la branche P2C2-solution.
En résumé
color: blue;
De nombreux noms de couleurs sont supportés par les navigateurs mais il existe
d'autres manières d'indiquer une couleur en CSS :
Si vous voulez trouver une couleur, ou bien convertir une valeur en utilisant une autre
syntaxe, vous trouverez des outils en ligne, comme Coolors ou encore HTML Color
Picker.
Et on obtient :
h1 {
color: purple;
Une "image de fond" ne s'applique pas forcément à la page entière. On peut aussi
mettre une image de fond derrière des titres, ou des paragraphes uniquement.
<div class="banniere">
<h1>Mon blog</h1>
</div>
</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 :
C'est bien beau tout ça, mais l'image apparaît floue : elle n'est pas aux bonnes
dimensions. Pour corriger cela, on va voir ensemble comment changer le
comportement de l'image de fond.
1. background-attachment ;
2. background-size ;
3. background-position.
• background-image ;
• background-repeat ;
• background-attachment ;
• background-size ;
• et background-position .
• 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.
Il faut donc choisir une valeur comprise entre 0 et 1. Ainsi, avec une valeur de 0.6 ,
votre élément sera opaque à 60 %… et on verra donc à travers !
Jetez un œil à ce GIF auquel on applique 0.6 , puis 0.4 et enfin 0.2 :
L’opacité de l’image change en fonction des valeurs choisies.
À vous de jouer !
Maintenant que vous maîtrisez les couleurs et l'héritage en CSS, vous allez pouvoir
en tirer parti pour le projet de Robbie Lens ! Pour cela, vous devrez :
Vous trouverez également des liens hypertextes qui ont été ajoutés : "Un projet ?
Écrivez-moi" et "Voir mon portfolio". Vous devrez leur ajouter un dégradé qui passe
de la couleur #8E86B5 à la couleur #ACAEED et les mettre dans la police
Manrope, en blanc.
C'est normal si votre couleur de fond a une petite marge, nous corrigerons cela
dans quelques chapitres.
Sur la branche P2C3-exercice, vous trouverez le code nécessaire pour démarrer
l’exercice.
En cas de difficulté, vous pouvez consulter la solution sur la branche P2C3-solution.
En résumé
1. La largeur que l'on définit avec une valeur en pixels (comme 2px).
2. La couleur que l'on indique avec un nom de couleur, une valeur hexadécimale, ou
une valeur RGB.
3. Le type de bordure qui peut être solid (un trait simple), double (un double trait),
dotted (un trait en pointillés), dashed (un trait en tirets), ou autre. Vous avez un
large panel d'options :
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 :
Il existe aussi des équivalents pour paramétrer chaque détail de la bordure si vous
le désirez :
Ce sont aussi des super-propriétés, elles fonctionnent comme border mais elles
ne s'appliquent donc qu'à un seul côté.
On pourrait faire une compilation de nos éléments juste au-dessus.
On écrit dans le fichier HTML :
<p class="element">Élément</p>
Bon ce n'est pas forcément du plus bel effet, mais c'était pour la démonstration !
En tout cas, vous pouvez aller tester ces différentes propriétés et vous amuser à
recréer l'élément ci-dessus avec le CodePen P2C4a.
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é. Ici, on utilise uniquement la
propriété border-left :
.element {
font-size: 25px;
background-color: skyblue;
padding: 100px;
Ce qui donne :
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
padding: 100px;
Ce qui donne :
Tout comme pour les bordures, il n'y a aucune obligation d'avoir les mêmes arrondis
partout : on peut aussi préciser la forme de l'arrondi pour chaque coin. D'un point de
vue design, c'est très pratique lorsqu'on souhaite coller deux formes qui ont des border
radius, par exemple pour des "groupes de boutons". Vous trouverez plus d’infos sur
Bootstrap.
Dans ce cas, indiquez les quatre valeurs correspondant aux angles dans la
propriété border-radius , dans cet ordre :
1. En haut à gauche.
2. En haut à droite.
3. En bas à droite.
4. En bas à gauche.
.element {
font-size: 25px;
background-color: skyblue;
padding: 100px;
Ce qui donne :
Il est même possible de créer des courbes elliptiques avec border-radius .Pour
cela, il faut indiquer deux valeurs séparées par une barre oblique (slash) : /. Mais
le rendu est assez dur à anticiper. Il vaut mieux utiliser des outils de visualisation
comme Fancy Border Radius du rendu final :
Des courbes elliptiques sur un élément
Il ne reste plus qu'à cliquer sur "copy" pour reporter la valeur du border-radius
générée automatiquement (sans oublier le point virgule ; à la fin de la ligne) dans
notre code :
.element {
font-size: 25px;
background-color: skyblue;
padding: 100px;
Et voilà le résultat ! De quoi faire des éléments (boutons, encarts, blocs…) uniques
sur votre site web :
L'élément a des courbes elliptiques
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 :
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 :
font-size: 25px;
background-color: skyblue;
border-radius: 10px;
padding: 100px;
Ce qui donne :
L’effet d'ombre est plus esthétique
Il n'est pas toujours simple de trouver l’effet d’ombre désiré à tâtons. Pour vous aider,
vous pouvez :
text-shadow permet d'ajouter une ombre sur les lettres de votre texte. Effet
vintage garanti !
Les valeurs fonctionnent exactement de la même façon que box-shadow :
1. décalage horizontal,
2. décalage vertical,
3. adoucissement,
4. et couleur.
font-size: 50px;
padding: 100px;
Je vous invite maintenant à aller vous entraîner à maitriser toutes les propriétés
que l'on a vues dans ce chapitre avec le CodePen P2C4b.
À vous de jouer !
• ajouter des arrondis sur les liens "Un projet ? Écrivez-moi" et "Voir mon portfolio",
d'une valeur de 50px (le rendu n'est pas très beau, mais ne vous inquiétez pas,
nous allons l'améliorer au fil des chapitres) ;
• créer une div , sur la page À propos, qui englobe le paragraphe et la liste de
compétences de Robbie Lens ; lui ajouter une bordure à droite et en bas, de 1px
d'épaisseur et de la couleur #8e86b5 .
Comme pour les activités précédentes, vous avez accès au code nécessaire pour
débuter l’exercice sur la branche P2C4-exercice,
Passez-y un peu de temps avant de consulter la solution sur la branche P2C4-
solution.
En résumé
<div class="mon-element">
<p>Les pseudo-classes sont très importantes afin de créer des apparences dynamiques en fonction
des interactions avec les utilisateurs.</p>
</div>
</body>
background-color: #BEAEE2;
color: white;
h1:hover {
color: #CDF0EA;
p:hover {
color: #F9CEEE;
background-color: #C1FFD7;
On a alors :
Au clic de la souris
Vous remarquerez d'ailleurs que le navigateur applique ici aussi un style par défaut où
color du lien actif est rouge.
Stylisez un élément sélectionné par le visiteur avec :focus
background-color: #FCFFA6;
Ce qui nous permet d'obtenir, avec la sélection depuis la touche "tab" du clavier :
⇥
Il est possible d'appliquer un style à un lien hypertexte qui a déjà été "cliqué". Par
défaut, le navigateur colore un lien en violet. Mais grâce à la pseudo-classe
:visited , on peut changer ; même si, en pratique, sur les liens consultés, on ne
change souvent pas grand-chose à part la couleur.
Si vous ne souhaitez pas que les liens déjà visités soient colorés d'une façon
différente qu'un lien hypertexte non cliqués, il vous faudra leur appliquer la même
couleur qu'aux liens normaux. De nombreux sites web font cela (OpenClassrooms
y compris !).
Dans notre exemple, on ajoute au code CSS :
a:visited {
color: black;
}
La couleur est désormais la même, que le lien ait été visité ou non.
Tout cela semble un peu magique comme ça : il existe de nombreux sélecteurs,
une grande quantité de propriétés CSS, permettant d'obtenir des effets
particulièrement avancés (souvenez-vous du CSS Art).
Les navigateurs ne connaissent pas toutes les propriétés CSS qui existent. En fait plus
le navigateur est vieux, moins il connaît de fonctionnalités CSS.
Je vous recommande fortement de mettre dans vos favoris le site www.caniuse.com,
qui propose des tables de compatibilité des fonctionnalités de HTML et CSS sur
différents navigateurs (et sur leurs différentes versions).
En CSS, le plus dur est bien souvent de réussir à cibler l'élément dont on veut
changer le style. Vous avez appris tout un tas de manières d'appliquer du style à
des éléments, avec les sélecteurs et les pseudo-classes. Mais sachez que nous
n'avons pas tout couvert dans cette partie. Vous avez eu un aperçu de la
puissance des sélecteurs avec le combinateur de voisin direct (ou siblings) dans la
vidéo d'introduction, mais il en existe d'autres. En voici quelques-uns :
Le sélecteur universel *
Ce qui aura pour résultat de sélectionner la première balise <p> située après un
titre <h3>.
Exemple de code HTML associé :
<h3>Titre</h3>
<p>Paragraphe</p>
a[title] {
a[title="Cliquez ici"] {
C'est la même chose, mais l'attribut doit en plus avoir exactement pour valeur
“Cliquez ici”.
Exemple de code HTML associé :
<a href="http://site.com" title="Cliquez ici">
Idem, l'attribut doit cette fois contenir dans sa valeur le mot “ici” (peu importe sa
position).
Exemple de code HTML associé :
<a href="http://site.com" title="Quelque part par ici">
Il en existe beaucoup d'autres sélecteurs. Si vous voulez une liste complète, vous
pouvez vous renseigner directement à la source : sur le site du W3C !
À vous de jouer !
C'est le moment de mettre en pratique pour le site de Robbie Lens ce que vous
venez d'apprendre, en ajoutant des apparences dynamiques !
Pour cette étape, vous devrez :
Comme pour les autres chapitres, vous trouverez le code nécessaire pour réaliser
l’exercice sur la branche P2C5-exercice.
Vous avez trouvé comment faire ? Allez vérifier sur la branche P2C5-solution !
En résumé
12/05/2025
En HTML, la plupart des balises peuvent se ranger dans l'une ou l'autre de ces deux
catégories :
Il existe en fait plusieurs autres catégories très spécifiques, par exemple pour les
cellules de tableau (type table-cell ) ou les puces (type list-item ). Nous
n'allons pas nous y intéresser pour le moment, car ces balises sont minoritaires.
Pour bien visualiser le concept, voici un petit schéma :
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 :
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.
width: 50%;
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.
width: 350px;
background-color: #F1C864;
text-align: justify;
Comme vous pouvez le constater, il n'y a par défaut pas de marge intérieure
(padding ) dans le bloc du paragraphe, (on le voit bien car il a un fond jaune et que
les bordures sont collées au texte).
En revanche, il y a une marge extérieure (margin ), on la voit bien car elle espace
les paragraphe entre eux, avec une marge blanche (couleur du fond de la page par
défaut). C'est cette marge qui fait que deux paragraphes ne sont pas collés, et
qu'on a l'impression de “sauter une ligne”.
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
}
On obtient alors :
Maintenant, si on veut que nos paragraphes soient encore plus espacés entre eux,
on rajoute la propriété margin . Demandons par exemple 50px de marge entre
deux paragraphes :
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
margin: 50px;
On obtient :
Les paragraphes ont un margin de 50px et un padding de 16px
Mais ??? Une marge s'est rajoutée tout autour aussi, pas seulement entre les deux
paragraphes !?
Eh oui, margin (comme padding d'ailleurs) s'applique aux quatre côtés du bloc.
Si vous voulez spécifier des marges différentes en haut, en bas, à gauche et à
droite, il va falloir utiliser des propriétés plus précises… Le principe est le même
que pour la propriété border, vous allez voir !
• top: haut ;
• bottom: bas ;
• left: gauche ;
• right: droite.
Vous pouvez aussi utiliser seulement les propriétés raccourcies margin ou padding
en précisant quatre valeurs à la suite, dans le sens des aiguilles d'une montre (haut,
droite, bas, gauche).
Exemple : margin: 2px 0 3px 1px;.
Ce qui signifie :
“ 2 pixels de marge en haut, 0 pixel de marge à droite (le px est facultatif dans ce cas),
3 pixels de marge en bas et 1 pixel de marge à gauche”.
Essayons cette technique sur nos paragraphes, en ajoutant simplement une ligne
au CSS :
p {
width: 350px;
background-color: #F1C864;
text-align: justify;
padding: 16px;
margin: auto;
}
Et on obtient :
Il n'est cependant pas possible de centrer verticalement un bloc avec cette technique.
Seul le centrage horizontal est permis.
Je vous invite maintenant à tester ce que vous venez de découvrir avec le CodePen
P3C2.
À vous de jouer !
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 la branche 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 :
Vous trouverez sur GitHub la base de code nécessaire pour réaliser l’exercice sur la
branche P3C2-exercice. Voici la solution sur la branche P3C2-solution pour vérifier si
vous aviez vu juste.
En résumé
1. Définir un conteneur.
2. Et placer à l'intérieur plusieurs éléments.
Imaginez un carton dans lequel vous rangez plusieurs objets : c'est le principe !
Sur une même page web, vous pouvez avoir plusieurs conteneurs (plusieurs
cartons, si vous préférez). Vous pouvez en créer autant que nécessaire pour
obtenir la mise en page que vous voulez.
Commençons par étudier le fonctionnement d'un carton (euh pardon, d'un
conteneur).
Un conteneur (container en anglais) est une balise qui peut renfermer d'autres balises,
comme du texte ou encore des images. Les conteneurs les plus célèbres sont les
balises <div> et <span> .
<div class="container">
</div>
Mais si je fais ça, par défaut, mes éléments vont se mettre les uns en dessous des
autres, non ? Ce sont des blocs, après tout !
Oui, tout à fait, c'est le comportement normal dont nous avons l'habitude.
Découvrons donc maintenant l'intérêt de Flexbox !
Il suffit d'une seule propriété CSS, et tout change ! Cette propriété, c'est flex et
on l'applique au conteneur :
.container {
display: flex;
... alors les blocs se placent par défaut côte à côte. Magique !
Donnez leur une direction avec la propriété flex-direction
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 :
display: flex;
flex-direction: column;
Ce qui donne :
Les éléments du conteneur sont disposés en colonne
Mais mais... c'est pareil qu'au début, non ? On avait ce résultat sans Flexbox,
après tout !
C'est vrai. Mais maintenant que nos éléments sont flex, ils ont tout un tas d'autres
propriétés utiles que nous allons voir juste après, on va y revenir.
Essayez aussi de tester l'ordre inversé, pour voir :
.container {
display: flex;
flex-direction: column-reverse;
Regardez bien la différence : les blocs sont maintenant dans l'ordre inverse ! Je n'ai
pas du tout changé le code HTML, qui reste le même depuis le début.
Par défaut, les blocs essaient de rester sur la même ligne s'ils n'ont pas la place,
quitte à "s'écraser", et provoquer parfois des anomalies dans la mise en page
(certains éléments pouvant dépasser de leur conteneur). Si vous voulez, vous
pouvez demander à ce que les blocs aillent à la ligne lorsqu'ils n'ont plus la place,
avec flex-wrap.
Voilà les différentes valeurs de flex-wrap :
.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 :
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.
Les éléments sont organisés par défaut de manière horizontale. Mais ils peuvent
être organisés de manière verticale. Selon le choix que vous faîtes, ça va définir ce
qu'on appelle l'axe principal. Il y a aussi un axe secondaire :
• si vos éléments sont organisés horizontalement, l'axe secondaire est l'axe vertical ;
• si vos éléments sont organisés verticalement, l'axe secondaire est l'axe horizontal.
Pourquoi je vous raconte ça ? Parce que nous allons découvrir comment aligner
nos éléments sur l'axe principal et sur l'axe secondaire.
Pour faire simple, partons sur des éléments organisés horizontalement (c'est le cas par
défaut).
Pour changer leur alignement, on va utiliser justify-content, qui peut prendre
ces valeurs :
On écrit alors :
.container {
display: flex;
OU center
OU space-between
OU space-around; */
Le mieux est encore de tester toutes les valeurs possibles pour voir ce que ça
donne, vous ne pensez pas ?
Manipulez toutes les valeurs possibles de justify-content dans le CodePen
P3C3.
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 */
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;
.element {
margin: auto;
Si vous avez plusieurs lignes dans votre Flexbox, vous pouvez choisir comment
celles-ci seront réparties avec align-content.
Cette propriété n'a aucun effet s'il n'y a qu'une seule ligne dans la Flexbox.
Prenons donc un cas de figure où nous avons plusieurs lignes. J'autorise les
éléments à aller à la ligne avecflex-wrap.
Voyons voir comment les lignes se répartissent différemment avec la nouvelle
propriété align-content que je voulais vous présenter. Elle peut prendre ces
valeurs :
• stretch (par défaut) : les éléments s'étirent pour occuper tout l'espace ;
• flex-start : les éléments sont placés au début ;
• flex-end : les éléments sont placés à la fin ;
• center : les éléments sont placés au centre ;
• space-between : les éléments sont séparés avec de l'espace entre eux ;
• space-around : idem, mais il y a aussi de l'espace au début et à la fin.
Maintenant que vous maîtrisez les propriétés de Flexbox, nous allons en profiter
pour mettre en forme les pages du portfolio de Robbie Lens !
À partir de maintenant, la mise en page devient plus élaborée : vous pouvez donc, si
vous le voulez, vous référer à la maquette (le modèle) du site de Robbie Lens.
Pour y accéder, vous avez besoin de créer un compte sur Figma, c'est gratuit.
Des modifications ont été apportées au fichier de code pour que vous ayez
davantage d'éléments :
• utiliser flex pour avoir le logo en haut à gauche de la page, et les liens de
navigation à droite dans l’en-tête ;
• réagencer les éléments pour avoir le titre de la page d'accueil, le paragraphe, et le
lien ayant la classe "CTA" à gauche, et la photo à droite ;
• importer les images dans la page d'accueil, et créer une grille d'images avec deux
rangées de 3 images chacune.
Vous trouverez dans la base de code, pour démarrer l'exercice, des exercices qui vous
aideront à mettre en place votre code. Et une fois que vous aurez fini, vous pouvez
comparer ce que vous avez fait avec la solution sur la branche P3C3-solution.
En résumé
La balise en paire <table> </table> indique le début et la fin d'un tableau. Cette
balise est de type block , on va donc la placer en dehors d'un paragraphe ou
d'une div .
Indiquez les valeurs du tableau avec les balises HTML <tr> et <td>
Pour construire un tableau ligne par ligne, on indique pour chaque ligne, <tr> (pour
table row ou "rangée du tableau"), le contenu des différentes cellules,<td> (pour table
data ou "donnée" ou "entrée") :
<tr>
<td>Carmen</td>
<td>33 ans</td>
<td>Espagne</td>
</tr>
<tr>
<td>Michelle</td>
<td>26 ans</td>
<td>États-Unis</td>
</tr>
</table>
Hum, ce n'est pas encore aussi parfait que ce qu'on voudrait. En effet, on aimerait
qu'il n'y ait qu'une seule bordure entre deux cellules, or ce n'est pas le cas ici.
border-collapse est une propriété CSS qui permet de “coller les bordures entre
elles”. Elle peut prendre deux valeurs :
1. collapse : les bordures seront collées entre elles, c'est l'effet qu'on recherche ici
;
2. separate : les bordures seront dissociées (valeur par défaut).
On écrit :
table {
border-collapse: collapse;
td {
La ligne d'en-tête se crée avec un <tr> mais les cellules qu'elle contient sont, cette
fois, encadrées par des balises <th> (pour table header ou "en-tête de tableau" en
français) et non pas <td> !
<table>
<tr>
<th>Nom</th>
<th>Âge</th>
<th>Pays</th>
</tr>
<tr>
<td>Carmen</td>
<td>33 ans</td>
<td>Espagne</td>
</tr>
<tr>
<td>Michelle</td>
<td>26 ans</td>
<td>États-Unis</td>
</tr>
</table>
Comme le nom des cellules est un peu différent pour l'en-tête, il faut penser à
mettre à jour le CSS pour lui dire d'appliquer une bordure sur les cellules normales
et sur l'en-tête :
table {
border-collapse: collapse;
Ce qui donne :
Comme vous pouvez le constater, le navigateur a mis en gras le texte des cellules d'en-
tête. C'est ce que font en général les navigateurs mais, si vous le désirez, vous pouvez
changer cela à coups de CSS : modifier la couleur de fond des cellules d'en-tête, leur
police, leur bordure, etc. Pour cela, il vous suffit d'utiliser le sélecteur th dans le CSS !
<tr>
<th>Nom</th>
<th>Âge</th>
<th>Pays</th>
</tr>
<tr>
<td>Carmen</td>
<td>33 ans</td>
<td>Espagne</td>
</tr>
<tr>
<td>Michelle</td>
<td>26 ans</td>
<td>États-Unis</td>
</tr>
</table>
Et voilà le résultat :
Vous pouvez changer la position du titre avec la propriété CSS caption-side. Par
défaut, la valeur est top (au-dessus du tableau), mais vous pouvez aussi indiquer
bottom : le titre sera alors placé en dessous du tableau.
Bon mais on étouffe encore un peu avec ce tableau très compacte !
Oui d'ailleurs, comment on fait pour ajouter des marges dans un tableau, avec
du padding ?
Exactement, et ça se fait côté CSS avec la propriété padding!
Pour correctement ajouter des marges à toutes nos cellules, y compris celles de
l'en-tête, on va ajouter la propriété CSS padding sur les sélecteurs td et th à la
fois (comme on l'avait fait pour ajouter des bordures, souvenez-vous) :
td, th {
padding: 15px;
C'est mieux !
Et comment on fait pour centrer un tableau ? Par défaut il est à gauche…
C'est simple, et ça se passe une fois de plus dans le fichier CSS, cette fois, au
niveau du sélecteur table !
Un peu plus haut dans le chapitre avait utilisé le sélecteur table pour ajouter la
propriété CSS border-collapse qui nous permettait de "coller" les cellules
entre elles.
C'est également sous le sélecteur table qu'on va indiquer au navigateur de
centrer le tableau sur la page grâce à la propriété CSS margin , pour laquelle on
va préciser la valeur auto:
table {
border-collapse: collapse;
margin: auto;
Si votre tableau est assez gros, vous aurez tout intérêt à le découper en plusieurs
parties. Pour cela, il existe des balises HTML qui permettent de définir les trois
“zones” du tableau :
Vous vous servirez de ces balises, surtout si votre tableau est assez gros, et que vous
avez besoin de l'organiser plus clairement. Pour les “petits” tableaux, vous pouvez
garder sans problème l'organisation plus simple que nous avons vue au début.
Ok d'accord, mais en fait, je vois bien ce qu'on peut mettre en en-tête et à
l'intérieur du tableau, mais que mettre dans le pied de tableau ?
Vous pouvez par exemple y mettre un résumé, ou un total. Le pied de tableau se
mettra, comme l'en-tête, par défaut, en gras :
Le tableau a un pied de tableau
Dans cet exemple de tableau, ce n'est pas forcément très parlant de mettre le
même contenu dans l'en-tête et le pied du tableau. Mais cela peut être utile
lorsqu'un tableau est très long.
Entraînez-vous et manipulez le code de ce tableau sur le CodePen P4C1a.
Vous l'aurez sûrement remarqué dans le code HTML : c'est un peu déroutant, mais il
est conseillé d'écrire les balises dans l'ordre suivant :
1. <thead>
2. <tfoot>
3. <tbody>
Pour fusionner des cellules entre elles, il suffit d'ajouter un attribut dans la balise
HTML <td>. Cela permet d'indiquer le nombre de cellules à fusionner entre elles
(la balise des cellules).
II existe deux attributs pour deux types de fusions différentes :
1. l'attribut colspan permet de fusionner des colonnes : la fusion s'effectue
horizontalement, aussi bien sur les lignes d'en-tête que sur le contenu lui-même.
2. l'attribut rowspan permet de fusionner des lignes : là, deux lignes seront
groupées entre elles. La fusion s'effectuera verticalement.
Vous trouverez le code utilisé pour réaliser ce tableau dans le CodePen P4C1b.
Notez qu'on peut modifier l'alignement vertical du texte des cellules de tableaux avec la
propriétévertical-align qu'on a vue dans le chapitre "Abordez d'autres techniques
de mise en page".
À vous de jouer !
Vous allez maintenant pouvoir construire le tableau des tarifs de Robbie Lens !
Vous verrez que la base de code a été réorganisée :
• le fichier CSS a été découpé en 4 fichiers CSS différents qui se trouvent dans le
dossier style ;
• le fichier de base style.css est importé par chaque page ;
• chaque page possède son propre fichier CSS.
Vous ajouterez les tarifs à la suite de la page "À propos", après le lien Call to action
(appel à l’action).
Voilà à quoi le tableau devrait ressembler :
Le tableau des prix de Robbie Lens
Comme d'habitude, vous trouverez la base de code pour faire l’exercice sur la branche
P4C1-exercice, et vous pouvez consulter la solution sur la branche P4C1-solution
pour vérifier vos acquis.
En résumé
• Un tableau s'insère avec la balise HTML <table> et se définit ligne par ligne avec
<tr>.
• Chaque ligne comporte des cellules <td> (cellules normales) ou <th> (cellules
d'en-tête).
• Le titre du tableau se définit avec <caption>.
• On peut ajouter une bordure aux cellules du tableau HTML avec la propriété CSS
border . Pour coller les bordures entre elles, on utilise la propriété CSS border-
collapse.
• Un tableau peut être divisé en trois sections grâce aux balises HTML <thead> (en-
tête), <tbody> (corps) et <tfoot> (bas du tableau). L'utilisation de ces balises
n'est pas obligatoire.
• En HTML, on peut fusionner des cellules horizontalement avec l'attribut colspan,
ou verticalement avec rowspan. Il faut indiquer combien de cellules doivent être
fusionnées.
Créez des formulaires
Pour créer un formulaire, vous aurez besoin de la balise HTML <form> </form>, elle
permet d'indiquer le début et la fin du formulaire.
Voici les deux attributs indispensables pour construire un formulaire fonctionnel :
1. L'attribut method indique par quel moyen les données vont être envoyées. Ne vous
en préoccupez pas pour le moment. Sachez juste que les méthodes les plus
utilisées sont get et post.
2. L'attribut action indique l'adresse de la page ou du programme qui va traiter les
informations.
Tout cela va nous permettre de créer la structure de base d’un formulaire en HTML
:
<p>Texte avant le formulaire</p>
</form>
Je donne la valeur get à l'attribut method ; et je laisse un champ vide : " " pour
action.
Pourquoi est-ce qu'on le laisse un champ vide dans l'attribut action ?
Si notre projet comportait également du code en *backend, c'est là qu'on
indiquerait une URL qui pourrait traiter notre formulaire. Mais ici, en laissant un
champ vide, on indique à notre formulaire qu'on restera sur la même URL, ce qui
nous permettra plus tard d'inspecter ce qu'on obtient, assez simplement.
*En règle générale, un site internet est composé de deux parties :
1. une partie frontend, c’est la partie visible de notre site internet, celle qui
s’affiche dans votre navigateur grâce à HTML, CSS et JavaScript ;
2. une partie backend, qui se trouve hébergée et qui s’exécute sur un serveur web.
Elle permet de faire des tâches plus complexes, comme traiter un formulaire,
envoyer un mail, sauvegarder des informations dans une base de données, etc.
Voyons maintenant quelle balise HTML utiliser pour saisir du texte dans un
formulaire.
Insérez des champs de texte avec la balise HTML <input>
Une zone de texte monoligne est une zone de texte d’une seule ligne. On l'utilise
pour des champs de texte qui ne requièrent que quelques mots, comme un nom
ou un prénom, par exemple.
On ouvre avec la balise <input> et on précise la valeur de l'attribut (type="text"
) pour indiquer qu'il s'agit d'une zone de texte d'une seule ligne :
<input type="text">
Ensuite, il faut donner un nom à votre zone de texte ; pour cela on utilise l'attribut
name.
Ce nom n'apparaît pas sur la page, mais il est indispensable parce qu’il permettra plus
tard d'identifier le champ d'où viennent les informations.
Commençons par demander au visiteur de renseigner son prénom. On écrit alors :
<input type="text" name="prenom">
Voici ce que cela donne pour un formulaire très basique avec uniquement notre
champ de texte monoligne qui demande son prénom au visiteur du site :
<form method="get" action="">
</form>
Comment le visiteur saura qu'il faut renseigner son prénom si l'attribut name ne
s'affiche pas ?
Bien vu ! Lorsqu’un visiteur tombe sur un champ de texte à saisir, il ne sait pas
toujours ce qu'il doit y écrire. C'est justement le rôle du champ libellé !
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 HTML<label>
</label> :
<form method="get" action="">
<label>Votre prénom</label> : <input type="text" name="prenom">
</form>
• L'attribut id est utilisé pour identifier l'élément HTML afin d’y accéder et de le
manipuler. Il est donc unique pour cet élément.
• L'attribut name, lui, réfère à la variable du formulaire que l’élément concerne. Ici, il
n’y a qu’un seul élément qui pourra référer à la variable prenom ; name et id
auront donc la même valeur. Mais lorsque nous utiliserons des checkbox ou des
radio, plusieurs éléments correspondront à la même variable. Mais nous verrons
cela un peu plus tard, et vous comprendrez mieux.
Pour lier le label au champ, il faut lui donner un attribut for qui a la même valeur
que l' id du champ :
<form method="get" action="">
<p>
</p>
</form>
</p>
</form>
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.
Pour créer une zone de texte multiligne, on utilise :<textarea> </textarea> .
Comme pour tout autre élément du formulaire, il faut lui donner un nom avec
name et utiliser un label qui explique de quoi il s'agit :
<form method="get" action="">
<p>
</p>
</form>
Grâce à la poignée située en bas à droite de la zone de texte, le visiteur peut étirer
le champ pour mieux visualiser ce qu'il écrit (ce qui n'est pas possible avec un
champ de texte monoligne) :
Une zone de texte multiligne agrandie avec la poignée
Mais on peut modifier la taille par défaut du <textarea>, et ce, de deux façons
différentes :
Vous pouvez pré-remplir le <textarea> avec une valeur par défaut. Dans ce cas, on
n'utilise pas l'attribut value : on écrit tout simplement le texte par défaut entre la
balise ouvrante et la balise fermante !
Ok mais on n'avait pas parlé plus haut de la balise input ? Et expliqué que ce
serait l'attribut type qui changerait selon le type de champ ? Or on a déjà vu deux
autres champs (libellé et multiligne qui ont des balises spécifique, je ne
comprends pas.
Vous avez raison, les balises libellé et zone de texte multiligne sont spécifiques :
libellé n'est pas un champ de saisie (le visiteur ne rempli pas un libellé, c'est juste
une indication pour lui) ; et le textearea permet de spécifier un champs étirable.
Cela dit, en dehors du champs de texte monoligne, il existe d'autres type de saisie.
On utilisera alors a balise input et l'attribut type (pour lequel on indiquera un
type de champ en particulier).
Un champ de curseur
une date Différents types de champs de sélection de date existent,
comme
<input type="date"> pour sélectionner une date :
HTML offre plusieurs manières de choisir une ou des option(s) dans un formulaire.
Ce sont des éléments qui demandent au visiteur de faire un choix parmi une liste
de possibilités, comme :
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">
<p>
</p>
</form>
Ce qui donne, une liste d'aliments (le visiteur a la possibilité d'en cocher plusieurs)
:
N'oubliez pas de donner un nom différent à chaque case à cocher, cela vous permettra
d'identifier plus tard lesquelles ont été cochées par le visiteur.
Vous pouvez faire en sorte qu'une case soit cochée par défaut, avec l'attribut checked
: <input type="checkbox" name="choix" checked>.
Normalement, tout attribut possède une valeur. Dans le cas présent, en revanche,
ajouter une valeur n'est pas obligatoire : la présence de l'attribut suffit à faire
comprendre à l'ordinateur que la case doit être cochée. Si cela vous perturbe,
sachez que vous pouvez donner n'importe quelle valeur à l'attribut (certains
développeurs écrivent parfois checked="checked" mais c'est un peu redondant).
Dans tous les cas, la case sera cochée.
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 :
<form method="get" action="">
<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>
</p>
</form>
Ce qui donne :
<p>
Veuillez indiquer la tranche d'âge dans laquelle vous vous situez :<br>
</p>
<p>
Sur quel continent habitez-vous ?<br>
</p>
</form>
Ce qui donne :
<p>
<label for="pays">Dans quel pays habitez-vous ?</label><br>
<option value="espagne">Espagne</option>
<option value="royaume-uni">Royaume-Uni</option>
<option value="canada">Canada</option>
<option value="japon">Japon</option>
</select>
</p>
</form>
Si vous voulez qu'une option soit sélectionnée par défaut, utilisez l'attribut
selected :
<option value="canada" selected>Canada</option>
En résumé
<fieldset>
</fieldset>
<fieldset>
<p>
</p>
<p>
</p>
</fieldset>
</form>
On ajoute un peu de CSS pour avoir un style sur notre fieldset et voilà le résultat
:
Vous voyez : chaque groupe est comme "encadré". Cela vous permet d'ajouter du
style, et de visuellement séparer vos éléments entre eux.
Manipulez le résultat obtenu avec le CodePen P4C3.
Vous pouvez également placer automatiquement le curseur dans l'un des champs
de votre formulaire, avec l'attribut autofocus. Dès que le visiteur chargera la
page, le curseur se placera dans ce champ. C'est très pratique d'un point de vue
de l'expérience utilisateur.
Par exemple, pour que le curseur soit par défaut dans le champ prenom, on écrit :
<input type="text" name="prenom" id="prenom" autofocus>
Vous pouvez également faire en sorte qu'un champ soit obligatoire, en lui donnant
l'attributrequired.
<input type="text" name="prenom" id="prenom" required>
background-color:#F2A3BB;
Pour créer le bouton d'envoi, c'est encore la balise <input> qu'on utilise.
Elle existe en quatre versions :
1. type="submit" : c'est celui que vous utiliserez le plus souvent. Le visiteur sera
conduit à la page indiquée dans l'attribut action du formulaire.
2. type="reset" : remise à zéro du formulaire (testez pour voir).
3. type="image" : équivalent du bouton submit, présenté cette fois sous forme
d'image. Rajoutez l'attribut src pour indiquer l'URL de l'image.
4. type="button" : bouton générique, qui n'aura (par défaut) aucun effet. En
général, ce bouton est géré en JavaScript pour exécuter des actions sur la page,
mais nous n'apprendrons pas à le faire dans le cadre de ce cours.
On peut changer le texte affiché à l'intérieur des boutons avec l'attribut value :
<input type="submit" value="Envoyer">
Cela ne fonctionne pas sur CodePen, c'est normal. Essayez de créer cela en code local
si vous voulez voir ce qui se passe.
Lorsque vous cliquez sur le bouton Envoyer, le formulaire vous amène alors à la
page indiquée dans l'attribut action. Le seul petit souci, c'est que nous n'avons
pas de page à indiquer en backend ici.
Comme je vous l'avais dit au chapitre précédent, puisque nous avons gardé
l'attribut action vide dans la balise <form> , le navigateur comprend qu'il doit
rester sur la même page. En revanche, si vous observez bien la barre URL de votre
navigateur, vous verrez le contenu de votre formulaire apparaître à la suite :
index.html?nom=nebra&prenom=mathieu&email=coucou%40mathieu.com&s
ouhait=autre&precisions=Apprendre+le+machine+learning
Donc, il se passe bien quelque chose !
Mais comme je l'avais dit au chapitre précédent, le HTML et CSS ne sont pas suffisants
pour traiter ces informations. Il est nécessaire d'apprendre un nouveau langage,
comme le PHP, pour pouvoir “récupérer” les informations saisies et décider quoi en
faire.
Cela tombe bien, j'ai aussi rédigé un cours sur le langage PHP pour ceux que cela
intéresse !
À vous de jouer !
Le formulaire aura une méthode get et restera vide pour l'attribut action .
Pour ce qui est du style du formulaire, vous trouverez le résultat final du site de
Robbie Lens.
Alors, qu’est-ce que ça donne de votre côté ? Voici la solution sur la branche P4C3-
solution.
En résumé
• Il est possible de regrouper les champs au sein d'une balise <fieldset> qui
comporte une légende, avec la balise <legend>.
• On peut sélectionner automatiquement un champ en précisant l'attribut
autofocus.
• Il est également possible de rendre un champ obligatoire avec l'attribut required.
• Le bouton qui permet de valider le formulaire est créé à partir d'une balise input en
faisant : <input type="submit" value="Envoyer">