Séminaire
Objectifs
- Estimer son temps de travail.
- Créer un site en HTML.
Rendu
- GitHub Classroom : https://classroom.github.com/a/Fqy_JiLa
- Délai : 1 semaine
Mise en place
- Cloner le nouveau dépôt GitHub Classroom de cette semaine à côté de celui de la semaine précédente.
git clone {url_du_depot}depuis le répertoire du cours.-
inf5/
├── sem01-environment-{pseudo}/
└── sem02-html-{pseudo}/
- Ouvrir le dossier du dépôt dans Visual Studio Code.
- Avec le terminal :
code sem02-html-{pseudo} - Avec Visual Studio Code :
Fichier>Ouvrir dossier> sélectionner le dossier du dépôt
- Avec le terminal :
- Créer un fichier
.gitignoreà la racine du dépôt avec le contenu suivant :# macOS
.DS_Store
Estimation
- Créer un ficher
report.mddans le dossier du dépôt. - Estimer le temps nécessaire pour réaliser ce travail dans le rapport.
- Découper le travail en tâches pour faciliter l'estimation.
- Une fois terminé, comparer le temps estimé avec le temps réellement passé.
- Le but n'est pas d'estimer correctement, mais de comprendre comment améliorer ses estimations.
| Tâche | Temps estimé | Temps passé | Commentaire |
|---|---|---|---|
| Estimation | 10m | 15m | ... |
| ... | ... | ... | ... |
| Total | 2h | 1h30 | ... |
Aventure d'exemple
On va créer un jeu interactif semblable au livre dont vous êtes le héros sur une page Web avec des liens pour naviguer entre les différentes étapes.
Voici un scénario d'exemple à réaliser dans un premier temps :
- Installer l'extension Live Server sur Visual Studio Code.
- Créer un fichier
index.htmlà la racine du dépôt avec le contenu suivant :index.html<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Page Web</title>
</head>
<body>
<h1>Titre de la page</h1>
<p>Contenu de la page</p>
</body>
</html> - Ouvrir le fichier
index.htmlavec Live Server.- Clic droit sur le fichier
index.html> Ouvrir avec Live Server. - Ou cliquer sur
Go Liveen bas à droite dans Visual Studio Code qui va ouvrir le fichier courant.
- Clic droit sur le fichier
- Modifier la page Web et observer les changements.
- Modifier le titre de l'onglet (
title). - Modifier le titre de la page (
h1). - Modifier le contenu de la page (
p).
- Modifier le titre de l'onglet (
- Modifier le contenu du fichier
index.htmlavec le contenu suivant :index.html<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Aventure</title>
</head>
<body>
<h1>Rangement</h1>
<p>
Vous décidez de faire du rangement dans votre maison. Par où commencer ?
</p>
<ul>
<li>Descendre à la cave.</li>
<li>Monter au grenier.</li>
</ul>
</body>
</html> - Créer un fichier
cave.htmlà la racine du dépôt avec le contenu suivant :cave.html<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Aventure</title>
</head>
<body>
<h1>Cave</h1>
<p>Vous êtes à la cave. Que voulez-vous faire ?</p>
<ul>
<li>Dépoussiérer.</li>
<li>Trier les affaires.</li>
</ul>
</body>
</html> - Un clic sur
Descendre à la cave.dansindex.htmldevrait rediriger verscave.html. Modifier le fichierindex.htmlpour ajouter un lien verscave.html:index.html<li><a href="cave.html">Descendre à la cave.</a></li> - De manière similaire, lorsqu'on choisit de dépoussiérer la cave, on aimerait être redirigé vers
passage.htmldont le contenu est :passage.html<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Aventure</title>
</head>
<body>
<h1>Passage</h1>
<p>
En dépoussiérant, vous découvrez une petite trappe. En l'ouvrant, vous
trouvez un passage secret qui vous mènera vers d'autres aventures...
</p>
</body>
</html> - Créer les pages
tresor.html,grenier.html,souvenirs.htmletlecture.htmlen suivant le même principe.- tresor.html :
En triant les affaires, vous trouvez un vieux coffre rempli de pièces d'or ! - grenier.html :
Vous êtes dans le grenier. Que voulez-vous faire ?avec les liens :Trier les affaires.verstresor.htmlRegarder les cartons.verssouvenirs.htmlLire les livres.verslecture.html.
- souvenirs.html :
En regardant les cartons, vous tombez sur de vieux souvenirs d'enfance qui vous rendent nostalgique. - lecture.html :
En lisant un des livres, vous découvrez une carte au trésor !
- tresor.html :
- Le jeu doit être jouable et l'arborescence du projet doit ressembler à ceci :
./
├── cave.html
├── grenier.html
├── index.html
├── lecture.html
├── passage.html
├── souvenirs.html
└── tresor.html - Créer un commit nommé
Ajouter l'aventure d'exempleavec les changements.
Aventure personnalisée
Reprendre l'aventure d'exemple pour créer sa propre aventure personnalisée.
- Prendre le temps pour réfléchir à un scénario pour son jeu :
- Une histoire simple, courte et cohérente.
- Des choix intéressants à faire.
- Des conséquences différentes (et réutilisables).
- Viser une petite histoire dans un premier temps (environ 7 étapes).
- Commencer par dessiner l'organigramme pour avoir une idée claire des différentes étapes et des liens entre elles.
- Outils possibles : draw.io, Mermaid Live Editor, Word, …
- Ajouter l'organigramme dans le rapport sous forme d'image.
- Modifier les fichiers HTML pour créer son propre jeu.
- Renommer les fichiers HTML avec des mots-clefs (pas d'accents ni d'espaces).
- Garder le fichier
index.htmlcomme page d'accueil.
- Garder le fichier
- Choisir un titre pour son histoire, l'indiquer dans le
<title>et dans le rapport.
- Renommer les fichiers HTML avec des mots-clefs (pas d'accents ni d'espaces).
- Créer un commit nommé
Ajouter l'aventure personnaliséeavec les changements.
Aventure améliorée
Une fois l'aventure personnalisée terminée, l'améliorer avec les éléments suivants :
- Ajouter un lien pour recommencer le jeu à chacune des pages de fin.
- Ajouter un lien comme pour les autres pages, mais redirigeant vers
index.html.
- Ajouter un lien comme pour les autres pages, mais redirigeant vers
- Modifier les liens pour recommencer le jeu pour qu'ils s'ouvrent dans un nouvel onglet.
- Ajouter l'attribut
target="_blank"aux balises<a>pour recommencer.
- Ajouter l'attribut
- Ajouter des images.
- Créer un dossier
imagesdans le dossier à la racine du dépôt. - Télécharger une image depuis Internet (clic droit > Enregistrer l'image sous…), la placer dans le dossier
imageset la renommer avec un mot-clef (p. ex.carte.png) :./
├── images/
│ └── carte.png
├── ???.html
├── index.html
└── ???.html - Ajouter la balise
<img>dans un body.- Par exemple :
<img src="images/carte.png" alt="Carte de l'île" /> - L'attribut
srcindique le chemin vers l'image. - L'attribut
altindique un texte alternatif qui s'affiche si l'image ne peut pas être chargée.
- Par exemple :
- Forcer la taille de l'image avec les attributs
heightouwidth.- Par exemple :
<img src="images/carte.png" alt="Carte de l'île" width="256" />
- Par exemple :
- Créer un dossier
- Ajouter une icône à toutes les pages.
- Créer une icône pour le site web (favicon) sur favicon.cc.
- Télécharger l'icône nommée
favicon.icoet la placer dans la racine du dépôt. - Ajouter la ligne suivante dans le
headde chaque fichier HTML pour indiquer l'icône du site web :<!doctype html>
<html lang="fr">
<head>
...
<link rel="icon" href="favicon.ico" />
</head>
<body>
...
</body>
</html> - Dans un navigateur privé, vérifier que l'icône s'affiche dans l'onglet du navigateur pour toutes les pages.
- Mettre plusieurs paragraphes dans une même page.
- Ajouter plusieurs balises
<p>dans un body.
- Ajouter plusieurs balises
- Forcer un retour à la ligne dans le même paragraphe.
- Ajouter la balise
<br />à l'endroit où on veut forcer le retour à la ligne.
- Ajouter la balise
- Ajouter des titres de différentes tailles.
- Utiliser les balises
<h1>,<h2>,<h3>, … pour ajouter des titres de différentes tailles.
- Utiliser les balises
- Commenter le code HTML.
- Ajouter quelques commentaires pour expliquer ce qui a été fait.
- Formatter le fichier avec Visual Studio Code.
- Vérifier que le code HTML est valide avec le validateur W3C
- Créer un commit nommé
Ajouter l'aventure amélioréeavec les changements et pousser les commits sur GitHub.
Hébergement
Utiliser GitHub Pages pour héberger son site en ligne.
- Ajouter un fichier vide
.nojekyllà la racine du dépôt pour indiquer à GitHub Pages de ne pas utiliser Jekyll. - Configurer GitHub Pages.
- Aller sur le site du dépôt GitHub du projet.
- Cliquer sur
Settings.
- Cliquer sur
Pagesdans la barre latérale gauche (dans la sectionCode and automation). - Sous
Branch, sélectionnermainet/ (root), puis cliquer surSave.
- Rafraîchir la page et attendre quelques secondes pour que le site soit publié.
- Cliquer sur le lien qui s'affiche
Your site is live at https://hepl-bs1inf5.github.io/sem02-html-{pseudo}/pour accéder au site web. - Ajouter le lien dans le rapport.
- Ajouter le lien sur la page d'accueil du dépôt GitHub du projet.
- Revenir sur la page d'accueil du dépôt GitHub du projet.
- Cliquer sur à droite de
About.
- Cocher
Use your GitHub Pages websiteet cliquer surSave changes. - Observer que le lien s'affiche maintenant dans la section
Aboutdu dépôt GitHub du projet.
Test
Créer un fichier test.js à la racine du dépôt avec le contenu suivant :
import test from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import { execSync } from "child_process";
test("présence des fichiers", () => {
// Liste des fichiers ou dossiers attendus dans le projet.
const expectedPaths = [
".git",
".gitignore",
".nojekyll",
"index.html",
"report.md",
"test.js",
];
// Vérifie que chaque fichier ou dossier existe dans le projet.
expectedPaths.forEach((path) => {
assert.ok(
fs.existsSync(path),
`Le fichier ou dossier ${path} doit exister.`,
);
});
});
test("validation des fichiers html", () => {
// Exécute la validation HTML en utilisant https://html-validate.org/
try {
const output = execSync(
"npx -y html-validate -p=recommended,prettier **/*.html",
).toString();
console.log(output);
} catch (error) {
assert.fail(error.output);
}
});
Vérifier que les tests passent avec la commande node --test et corriger le code si cela n'est pas le cas.
Exemple d'erreur de validation HTML :
C:\git\sem02-html-blueur\bleu.html
8:6 error Element <p> is implicitly closed by parent </body> no-implicit-close
10:21 error Trailing whitespace no-trailing-whitespace
Elle signifie que le fichier bleu.html contient deux erreurs :
- Ligne 8, colonne 6 (6ème caractère) : l'élément
<p>n'est pas fermé. - Ligne 10, colonne 21 (21ème caractère) : il y a des espaces à la fin de la ligne.
Pour exécuter la validation HTML manuellement en ligne de commande :
npx -y html-validate "-p=recommended,prettier" "**/*.html"
DOM
- Choisir une page de son aventure et dessiner son DOM.
- Comparer avec DOM|CSS Visualizer.
Outils de développement
- Découvrir les outils de développement. Plusieurs façons d'y accéder depuis une page web :
- Clic-droit >
Inspecter. - ou appuyer sur la touche F12.
- Clic-droit >
- Utiliser les outils de développement pour :
- Observer les éléments de la page :
- Survoler les éléments HTML dans le panneau
Inspecteur/Élémentspour les mettre en surbrillance.
- Survoler les éléments HTML dans le panneau
- Modifier le contenu d'un élément :
- Supprimer un élément HTML de la page.
- Rafraîchir la page (F5) pour réinitialiser le contenu.
- Observer les éléments de la page :
Rapport
- Expliquer brièvement les principales difficultés rencontrées et comment les résoudre.
- Compléter les estimations.
Ne pas oublier de pousser tous les commits sur le dépôt Git distant (et de vérifier sur GitHub).
Exercices supplémentaires
- https://www.w3schools.com/html/html_exercises.asp
- https://mcoilhac.forge.apps.education.fr/site-nsi/html_css/3_exos_HTML_CSS/
- https://www.tresfacile.net/exercices-html-avec-solutions/
- https://aymeric-auberton.fr/academie/html/exercices/
- https://pages.up.pt/~up353972/page/exercises/html/
- https://app.edublocks.org/