Plan d'enseignement - Cours 113
Version de travail
Ce plan 2026-2027 est en cours d'élaboration. La progression et les exercices Nuxy associés seront précisés au fil du semestre.
Vue d'ensemble des 15 séances
| Séance | Date | Thème | Contenu | Exercices Nuxy |
|---|---|---|---|---|
| 1 | 19.08 | Démarrage | Histoire du web + premières lignes de HTML sur Nuxy | HTML 1-2 |
| 2 | 26.08 | Git & GitHub | Installation WebStorm + premier dépôt + « Hello World » en ligne | Devoirs : modules 1 à 3 |
| 3 | 02.09 | Git & WebStorm | Cloner, modifier en local, republier + CV structuré | Kahoot de révision 1-3 |
| 4 | 09.09 | CSS | Feuille de style, sélecteurs et couleurs sur le CV — WebStorm et Git consolidés | CSS en classe · M4-M5 en devoir |
| 5 | 16.09 | Projet | CV terminé — lancement du projet : dépôt c113-projet-nomprenom créé, partagé et publié | M4-M5 acquis |
| 6 | 23.09 | Projet | Palette et style.css du projet en place | M6 acquis |
| 7 | 30.09 | Projet | Variables CSS + typographie — 📦 Jalon 1 | M7 acquis |
| 8 | 21.10 | Projet | Espacements et cartes (box model) | M8 acquis + Kahoot 5-8 |
| 9 | 28.10 | Projet | La barre de navigation (Flexbox) | M10 acquis |
| 10 | 04.11 | Projet | Mise en page de toutes les pages — 📦 Jalon 2 | M11 acquis |
| 11 | 11.11 | Responsive | Mobile-first : site testé à 375 px | M12 acquis |
| 12 | 18.11 | Performance | Atelier images + Lighthouse | M9 acquis |
| 13 | 25.11 | Qualité | Accessibilité + validation W3C | - |
| 14 | 16.12 | Révisions | EXAMEN BLANC (sur papier) | Examens X.99 refaits |
| 15 | 23.12 | Finalisation | Checklist finale du projet | - |
| 08.01.2027 | 📦 | Rendu du projet personnel (20 pts) | ||
| 13.01.2027 | 📝 | Épreuve de module M11 — 08:30-11:50 (partie C113 : 20 pts) |
Semaines sans cours
- 7 et 14 octobre (vacances d'automne)
- 2 et 9 décembre (selon planning WebUntis)
Séance 1 - 19 août 2026
Thème : Bienvenue, histoire du web et premières lignes de HTML
Objectifs :
- Comprendre le fonctionnement du web (client, serveur, navigateur, HTML/CSS)
- Connaître les grandes étapes de l'histoire du web et des navigateurs
- Connaître la règle d'or du cours sur l'IA : comprendre 100 % de son code
- Écrire ses premières lignes de HTML sur Nuxy
Contenu :
- Présentation du cours, du projet personnel, de l'évaluation et du site devjs.ch
- Slides « Histoire du web et des navigateurs » + cadre d'utilisation de l'IA
- Anatomie d'un élément HTML et démonstration live dans le navigateur
- Pratique : création du compte Nuxy, inscription à la classe (nuxy.ch/join/8a0326eb), modules HTML 1 et 2
Zéro installation aujourd'hui
On code dès la première séance, directement dans le navigateur grâce à Nuxy. La création des comptes se fait à la maison (voir devoirs) et l'installation de WebStorm se fera ensemble en séance 2 : le temps de classe sert à coder, pas à installer.
Devoirs : Créer ses comptes GitHub et JetBrains avant la séance 2 — la validation étudiante peut prendre jusqu'à 72 h, commencez dès ce soir
Séance 2 - 26 août 2026
Thème : Git, GitHub et première page en ligne
Objectifs :
- Installer WebStorm et le connecter à son compte GitHub
- Comprendre à quoi sert le versionnement (scénario : le travail perdu)
- Maîtriser le cycle modifier → commit → push, via l'interface de WebStorm
- Publier une première page « Hello World » avec GitHub Pages
Contenu :
- Première période — Installation guidée : WebStorm (licence JetBrains créée en devoir) + connexion GitHub
- Deuxième période — Premier dépôt, cycle commit → push, publication GitHub Pages
- Vocabulaire minimal : dépôt, commit, push — rien de plus
- Démo : cycle modification → commit → push → site en ligne, pas à pas
- Pratique : chaque élève publie sa première page en ligne — marche à suivre : Premier dépôt et mise en ligne
Licence JetBrains pas encore validée ?
La vérification étudiante peut prendre jusqu'à 72 h. Ce n'est pas bloquant : WebStorm est gratuit pour un usage non commercial (l'apprentissage en fait explicitement partie). Au premier lancement, choisir Non-commercial use et se connecter avec un compte JetBrains.
Portée volontairement réduite
Pas de terminal, pas de branches, pas de pull requests : le cycle commit → push via WebStorm suffit pour tout le semestre. Les branches viendront quand le besoin existera (cours 122 et suivants).
Le rituel des 5 dernières minutes
Dès la séance 3, chaque séance se termine par commit + push. Antisèche : Git en 4 gestes.
Devoirs : terminer le module 3 de Nuxy (HTML sémantique) pour le 2 septembre — donc rattraper les modules 1 et 2 au passage. Chaque module se termine par son examen (1.99, 2.99, 3.99), rejouable autant de fois que nécessaire.
Séance 3 - 2 septembre 2026
Thème : WebStorm, clonage et cycle complet
Objectifs :
- Faire le point sur les modules Nuxy 1 à 3 (Kahoot de révision, 20 questions)
- Cloner son dépôt dans WebStorm
- Maîtriser le cycle complet : modifier en local → commit → push → vérifier en ligne
- Structurer son CV : hiérarchie de titres, listes, deux sections distinctes
Contenu :
- Kahoot d'ouverture (~12 min)
- Clonage du dépôt du CV dans WebStorm, première modification locale, commit, push
- Démarrage du CV en classe, avec le prof à côté pour débloquer — Mon premier CV, palier 1
- Marche à suivre du clonage : Premier dépôt et mise en ligne
Le Kahoot ne compte pas pour la note
Il ouvre la séance et sert à repérer ce qui n'est pas encore acquis avant d'aller plus loin : fonctionnement du web, structure d'une page, titres et listes, liens, images, tableaux et balises sémantiques.
Le HTML n'est pas réexpliqué, il est appliqué
doctype, lang, charset, titres et listes ont été travaillés sur les modules Nuxy 1 à 3. La séance sert à les employer sur son propre contenu, pas à les redécouvrir.
Devoirs pour le 9 septembre : terminer tout le HTML du CV (paliers 1 et 2 : structure, liens, images, tableau, sémantique). Pas de module Nuxy cette semaine — tout ton temps va au CV.
Une seule chose à faire : le CV
Le HTML du CV n'est que de l'application : les modules Nuxy 1 à 3 l'ont déjà couvert, et la séance du 2 sert à démarrer avec de l'aide. Si tu es en retard sur les modules 1 à 3, préviens le prof plutôt que de tout empiler.
Séance 4 - 9 septembre 2026
Thème : CSS - Feuille de style, sélecteurs et couleurs
Objectifs :
- Maîtriser le quotidien WebStorm + Git : aperçu local, alertes de l'éditeur, fichiers suivis ou non, Update vs Clone
- Lier une feuille de style externe (
style.css) à sa page - Utiliser les sélecteurs de balise, groupés (
h1, h2) et de classe — et savoir que l'idsert aux ancres, pas au style - Appliquer des couleurs au texte et aux fonds, et choisir une palette lisible
Contenu :
- Première partie — WebStorm et Git dans la pratique, sur les questions de la classe : les menus Git et GitHub (Open on GitHub), Update vs Clone, Merge plutôt que Rebase, l'aperçu intégré (
localhost) et le test dans un vrai navigateur, le panneau d'alertes qui bloque un commit, les fichiers rouges jamais ajoutés à Git, le dossierimg/, les noms de fichiers en minuscules sans espace et Refactor → Rename, activer et désactiver GitHub Pages - Deuxième partie — Découverte du CSS depuis zéro, à partir du HTML d'Homer : créer
style.css, le lier (glisser-déposer dans WebStorm), anatomie d'une règle (sélecteur { propriété: valeur; }), couleur de fond et de texte surbody,border, sélecteur groupéh1, h2, héritage et cascade, classe vsid, commentaires, kebab-case, contraste - Application au CV — les 4 objectifs minimum du palier 3 — puis Nuxy modules 4 et 5 en autonomie
Le CSS se découvre en classe
Pas de module Nuxy en devoir cette semaine : la séance enseigne le CSS depuis le début, démo à l'appui, puis chacun l'applique directement à son CV. Les modules 4 et 5 de Nuxy viennent ensuite consolider — commencés en classe, terminés en devoir. Le code écrit ensemble est repris dans l'exercice du CV, et la démo complète est à revoir dans l'enregistrement Teams du canal de la classe.
Le CSS est un langage silencieux
Un point-virgule oublié et toutes les déclarations qui suivent dans la règle sont ignorées — sans le moindre message. HTML et CSS pardonnent tout et ne disent rien : c'est à toi d'être précis, et à WebStorm de souligner. Quand tu demandes de l'aide à une IA, demande-lui « aide-moi à trouver l'erreur », pas « donne-moi le bon code ».
Chacun à son rythme
Le temps Nuxy en classe est de l'entraînement encadré, pas un devoir imposé : les élèves qui avancent vite peuvent enchaîner les modules suivants, c'est encouragé. Les objectifs de la semaine sont les modules 4 et 5 pour le 16 — au minimum le module 4 si tu es en retard.
Un tableau, c'est pour des données
table sert à présenter des données (horaires, tarifs, comparatifs), jamais à faire une mise en page. La mise en page se fait en CSS, plus tard dans le semestre.
Devoirs pour le 16 septembre : terminer le palier 3 du CV et faire les modules 4 (Premiers pas en CSS) et 5 (Les couleurs) de Nuxy — au minimum le module 4 si tu es en retard sur le HTML
Séance 5 - 16 septembre 2026
Thème : CV terminé et lancement du projet personnel
Objectifs :
- Tirer les leçons des CV publiés : ce qui marche en local et casse en ligne
- Boucler son CV : passer la checklist et publier la version finale
- Choisir le sujet de son projet personnel
- Créer, partager et publier le dépôt du projet — vide de contenu, mais en ligne
- Connaître les contraintes du projet dès le départ
Contenu :
- Retour sur les CV en ligne (reporté de la séance 4) : images invisibles à cause d'un espace ou d'une majuscule dans le nom, fichiers restés rouges dans WebStorm et jamais pushés,
style.csslié mais sans effet,idutilisés là où une classe suffit - Checklist du CV, chacun sur sa page, puis publication finale
- Lancement du projet personnel : présentation des consignes, des jalons et des interdits, puis mise en place du dépôt
Les tâches du jour
Même marche à suivre que pour le CV — Premier dépôt et mise en ligne — avec un nouveau nom. Dans l'ordre :
Créer le dépôt sur github.com, sur ton compte, public, nommé
c113-projet-nomprenom(par exemplec113-projet-fallet-steve), avec le README activéLe partager avec le prof : onglet Settings → Collaborators → Add people, invite l'utilisateur
fallinov(le prof), puis Add fallinov to this repository. C'est ce qui permet le suivi et la correction — sans ça, le projet n'existe pas pour l'évaluationVidéo (10 s, sans son) — tâche 2, inviter le prof : Settings → Collaborators → Add people, taper fallinov, choisir l'utilisateur, confirmer. L'invitation apparaît en attente jusqu'à ce que le prof l'accepte.Cloner le dépôt dans WebStorm, dans un dossier local hors OneDrive/iCloud
Créer
index.htmlavec le squelette HTML, unh1au nom de ton site et un paragraphe qui dit de quoi il parlera. Le minimum à copier, puis à personnaliser :html<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Nom de ton site</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>Nom de ton site</h1> <p>Une phrase qui dit de quoi parlera ce site.</p> </body> </html>Créer
style.css(déjà lié par la lignelinkci-dessus) et poser une couleur de fond et une couleur de texte surbody— juste assez pour prouver que le lien fonctionne :cssbody { background-color: whitesmoke; color: darkslategray; }Si la page reste blanche avec du texte noir, le lien n'est pas bon : vérifie le nom du fichier et son emplacement (même dossier qu'
index.html)Commit + push, puis activer GitHub Pages (Settings → Pages → Deploy from a branch,
main,/ (root))Vérifier : ton adresse
https://ton-compte.github.io/c113-projet-nomprenom/affiche ta pageRemplacer le README par le modèle de mini-portfolio : télécharger le modèle de README (aussi sur le site des consignes, bouton « Télécharge le portfolio »). Remplis dès aujourd'hui la section Concept et note l'adresse de ton site en haut — le reste se complète au fil du semestre
Commit + push, puis vérifier sur github.com : la page d'accueil de ton dépôt affiche le nouveau README, avec ta section Concept remplie. Si tu vois encore « c113-projet-… » tout seul, le push n'a pas eu lieu
Le dépôt du CV reste, celui du projet est nouveau
Ne recycle pas le dépôt du CV : le projet a son propre dépôt, son propre historique et sa propre adresse. C'est cette adresse-là que tu rendras le 8 janvier.
🎯 Objectif du jour : le dépôt c113-projet-nomprenom existe, fallinov y est invité, index.html, style.css et le README-portfolio sont en ligne à l'adresse GitHub Pages du projet.
Le CV se termine avant que le projet commence
La première partie de la séance clôt l'exercice du CV — chacun passe la checklist et publie. Le projet personnel démarre ensuite, sur une base saine : dépôt, publication et cycle Git sont acquis.
Interdictions du projet (à connaître dès maintenant)
Pas de template, pas de framework CSS, pas de CDN (polices et images en local), pas de JavaScript. Ces contraintes ont coûté des points aux volées précédentes.
Ressources :
Devoirs Nuxy : module 6 — La cascade et les conflits — pour le 23 septembre. C'est le module de l'inspecteur (F12) : l'outil pour comprendre pourquoi un style ne s'applique pas.
Le rythme des séances 6 à 11
La théorie se travaille sur Nuxy, avant la séance : chaque semaine a son module en devoir. La séance applique au projet : 10 min de questions et de blocages — on règle d'abord ce qui coince, avant que ça ne coûte une heure de travail —, une démo ciblée, puis du temps de travail avec un objectif du jour, quelque chose de concret, poussé en ligne avant de partir. Le rituel des 5 dernières minutes reste : commit + push.
Les questions se posent au début, pas quand on est bloqué depuis vingt minutes.
Séance 6 - 23 septembre 2026
Thème : la page d'accueil du projet et sa palette
Objectifs :
- Structurer
index.htmlet mettre en placestyle.csssur le projet - Choisir une palette en sachant à quoi chaque couleur va servir
- Vérifier que ces couleurs se lisent (contraste)
- Savoir où va le
h1dans un site à plusieurs pages
Au programme :
- Contrôle des dépôts :
fallinovbien invité comme collaborateur, revue des deux projets non vus le 16 - Démo : palette, rôle de chaque couleur, contrôle du contraste avec F12
- Travail sur le projet, avec le prof à côté
Le h1 du CV n'était pas une faute — le projet a une autre règle
Sur le CV, un h1 dans le header est correct : une page unique, un h1 qui la décrit. Le projet, lui, a plusieurs pages et le header y est le bandeau commun : si le h1 y était, toutes les pages porteraient le même titre. Donc :
- un seul
h1par page, dansmain, qui décrit cette page (« Galerie », « Contact »…) ; - le nom du site dans le
headeren logo : unedivou unaavec une classe (.logo { font-size: 2rem; font-weight: bold; }), comme montré le 16.
Si tu as masqué un h1 en CSS (display: none) : supprime-le. Un titre invisible reste lu par les lecteurs d'écran, et la page se retrouve avec deux h1.
Régler WebStorm une fois pour toutes
Indentation à 4 espaces et Reformat Code (Ctrl + Alt + L) avant chaque commit : marche à suivre dans Premier dépôt et mise en ligne.
Choisir sa palette
Deux ou trois couleurs suffisent : une dominante, une secondaire, une d'accentuation. Une couleur sans rôle n'a pas sa place dans la palette : avant de la choisir, sache où elle va atterrir.
Exemple — la palette de Pizza Mario
| Couleur | Code | Usage | Où ça s'écrit |
|---|---|---|---|
| Crème | #FFF8E1 | Fond principal | background-color sur body |
| Brun foncé | #3E2723 | Texte — plus doux que le noir pur | color sur body |
| Vert basilic | #2E7D32 | En-tête, navigation | background-color sur header |
| Rouge tomate | #D32F2F | Liens, prix, accents | color sur a |
| Jaune fromage | #FFC107 | Badges, étoiles | plus tard |
Visualise cette palette en ligne : Coolors · Realtime Colors · Contrast Checker
La palette complète, la règle 60-30-10 et les harmonies de couleurs sont détaillées dans Préparer un projet web — Design.
Aujourd'hui : le fond de la page, le texte courant, les titres, les liens — et le fond du header ou du footer si tu les as déjà. Plus tard : les bordures et le fond des cartes (séance 8, box model), les ombres, le survol des liens.
Note tes codes hexadécimaux en commentaire en haut de style.css : la semaine prochaine, ils deviendront des variables CSS.
Vérifier le contraste — F12
Tu l'as travaillé sur Nuxy 5.4 « Mission lisibilité » : 4,5:1 minimum entre un texte et son fond. Dans Brave ou Chrome, ouvre l'inspecteur (F12), clique le carré de couleur d'une règle color : le navigateur affiche le rapport et dit s'il passe. Le piège habituel : la couleur d'accentuation, faite pour les détails, utilisée sur des paragraphes.
Ce qui se teste, c'est chaque combinaison texte/fond, pas les couleurs une par une : une palette peut être jolie et contenir deux couleurs qui, superposées, ne se lisent pas.
C'est noté — 4 points « Design & accessibilité » au projet, dont « contrastes conformes ».
Pour composer la tienne :
- Coolors — génère et verrouille des couleurs, copie directe des codes hexadécimaux
- Realtime Colors — applique ta palette sur une vraie maquette de site, en direct : le meilleur moyen de voir si elle tient en contexte
- Colour Contrast Checker — deux codes, un verdict
Ces outils servent à choisir, pas à charger : on recopie les codes (#1F2937…) dans son CSS. La règle « pas de CDN » du projet n'est donc pas concernée.
Les tâches du jour
-
index.htmlcomplété :titleexplicite, unh1dansmain, au moins unh2, un paragraphe de présentation contenant un lien -
style.csscréé, lié par<link>dans lehead, et son effet visible dans le navigateur - Palette choisie : 2 ou 3 codes hexadécimaux, notés en commentaire en haut de
style.css - Couleur de fond et couleur du texte appliquées sur
body - Couleur des titres et couleur des liens appliquées
- Contraste vérifié (F12) : au moins 4,5:1 pour le texte comme pour les liens
- Commit + push, puis vérification de la page en ligne sur GitHub Pages
🎯 Objectif du jour : la page d'accueil du projet, structurée et aux couleurs de ta palette, en ligne.
Devoirs Nuxy : module 7 — Texte et variables — pour le 30 septembre. Il prépare la séance suivante : polices, tailles de texte et centralisation de la palette en variables CSS.
Séance 7 - 30 septembre 2026
Thème : Variables CSS et typographie, sur le projet
Objectifs :
- Centraliser sa palette dans des variables CSS (
:root,var()) - Mettre en forme le texte du projet (
font-family,font-size,font-weight,line-height) - Intégrer des polices locales (pas de CDN)
Au programme :
- Questions et blocages (10 min) : ce qui coince depuis la semaine dernière, avant de lancer quoi que ce soit
- Démo : la palette rangée dans des variables CSS, puis la typographie
- Travail sur le projet, avec le formateur à côté
📦 Jalon 1 : structure HTML du projet complète — toutes les pages existent et sont en ligne
Les tailles ne s'écrivent pas en pixels
rem pour le texte. font-size: 1.2rem s'adapte quand un visiteur agrandit le texte de son navigateur ; font-size: 19px reste bloqué à 19 px, même pour quelqu'un qui voit mal. 1rem vaut la taille de base du navigateur, en général 16 px — donc 1.5rem fait 24 px, toujours, quelle que soit la profondeur dans la page.
em pour les espacements d'un bloc. padding: 1.5em suit la taille du texte de ce bloc : une carte au texte plus grand s'aère d'elle-même. em se réfère au parent, donc il se multiplie en cascade — c'est utile ici, et c'est exactement pourquoi on ne l'utilise pas pour le texte.
L'interligne se règle sans unité : line-height: 1.6, entre 1.5 et 1.7 pour du texte courant. Plus serré, les lignes se collent ; plus large, l'œil perd le fil.
Et donne toujours une police de secours : font-family: 'Montserrat', sans-serif. Si le fichier de police ne charge pas, le navigateur prend la seconde plutôt que sa police par défaut.
Les tâches du jour
- Jalon 1 : toutes les pages du site existent et sont en ligne
- Palette déplacée dans
:rootet appelée partout avecvar(--nom) - Une police choisie et appliquée avec
font-family— le fichier de police téléchargé dans le projet, jamais chargé depuis un serveur extérieur : Installer une police dans son projet -
font-sizeenrem,font-weightetline-heightentre 1.5 et 1.7 posés sur le texte courant — aucune taille de texte en pixels - La famille de police rangée elle aussi dans une variable (
--police-titre,--police-texte) - Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : les couleurs de la séance passée migrées en variables, la typographie posée.
Devoirs pour le 21 octobre (trois semaines, vacances comprises) : module Nuxy 8 — Le modèle de boîte, examen compris.
Les devoirs des vacances, annoncés aujourd'hui
Un module sur trois semaines : de quoi le faire sans se presser. À la rentrée, la séance démarre par un Kahoot sur les modules 5 à 8 — mieux vaut les avoir vraiment faits.
Séance 8 - 21 octobre 2026
Thème : Box model, sur le projet
Objectifs :
- Faire le point après les vacances (Kahoot, modules 5 à 8)
- Appliquer le modèle de boîte au projet :
padding,margin,border,box-sizing - Construire des cartes et des sections correctement espacées
- Régler définitivement les comptes GitHub Education
Au programme :
- Questions et blocages (10 min) : trois semaines ont passé, on repart d'une classe au clair
- GitHub Education (10 min) : chacun vérifie l'état de sa demande sur education.github.com. Un refus se retraite en classe avec la checklist du tuto (email @edu.jura.ch confirmé, vrai nom dans le profil, preuve datée) ; les demandes jamais envoyées partent aujourd'hui. Le pack conditionne la licence JetBrains et GitHub Pro : deux mois après la rentrée, une demande bloquée ne se débloquera pas seule.
Ce que ton site doit déjà avoir au retour des vacances
Trois semaines se sont écoulées depuis la séance 7 : la séance d'aujourd'hui part du principe que ton site a déjà toutes ses pages en ligne, son HTML structuré (header, main, footer), sa palette rangée dans des variables CSS, sa typographie posée et ses polices comme ses images stockées dans le dépôt — rien qui vienne d'un serveur extérieur.
S'il te manque quelque chose, dis-le pendant les 10 minutes de questions : on rattrape aujourd'hui, pas en décembre.
Trois erreurs classiques que le box model fait disparaître
<br> pour écarter deux blocs. Un <br> sert à passer à la ligne dans un texte — une adresse, un vers. Pour éloigner deux éléments, c'est margin ; pour aérer l'intérieur d'un bloc, c'est padding. Trois <br> d'affilée, c'est trois fois la même erreur.
Une image qui déborde. Une photo de 2000 px reste large de 2000 px et fait défiler la page de côté sur un téléphone. La règle qui règle le problème pour tout le site :
img {
max-width: 100%;
height: auto;
}Un chemin d'image absolu. url("https://exemple.com/fond.jpg") charge l'image depuis un serveur extérieur : c'est la règle « pas de CDN » qui saute, et l'image disparaît le jour où ce serveur ferme. Toujours un chemin relatif vers ton dossier : url("img/fond.jpg").
Les tâches du jour
- État de ta demande GitHub Education vérifié : pack actif, ou demande renvoyée aujourd'hui
-
box-sizing: border-boxposé au début de la feuille de style -
paddingsur les sections,marginentre les blocs - Au moins une carte construite : bordure, fond, espacement intérieur
- La règle
img { max-width: 100%; height: auto; }posée une fois pour tout le site - Plus aucun
<br>utilisé pour espacer des blocs - Plus aucun texte collé à un bord, sur aucune page
- Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : plus aucun texte collé à un bord — sections et cartes espacées proprement.
Devoirs Nuxy : module 10 — Flexbox — pour le 28 octobre
Séance 9 - 28 octobre 2026
Thème : CSS - Flexbox
Objectifs :
- Appliquer Flexbox au projet :
justify-content,align-items,gap - Construire la barre de navigation du site
Les tâches du jour
- Barre de navigation passée en
display: flex -
justify-content,align-itemsetgapréglés - La même navigation présente sur toutes les pages
- Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : la navigation horizontale du site, en ligne sur toutes les pages.
Ressources :
- Démo à refaire en classe : c113-demo-nav-flex. Sur GitHub, clique Use this template → Create a new repository, choisis ton compte comme propriétaire et laisse Include all branches décoché : tu obtiens ta propre copie, sur laquelle tu peux faire commit et push. Clone ensuite ta copie dans WebStorm (File → New → Project from Version Control) : elle contient le code de départ, la liste de liens brute. La solution, une étape par commit, est sur la branche
solutiondu dépôt d'origine. Ce modèle ne sert que pour cette démo : ton projet personnel reste écrit sans template. - Flexbox Froggy — pour s'entraîner en s'amusant
Devoirs Nuxy : module 11 — Mise en page et positionnement — pour le 4 novembre
Séance 10 - 4 novembre 2026
Thème : CSS - Mise en page complète et positionnement
Objectifs :
- Assembler une mise en page complète :
header,nav,main,footer - Centrer et limiter la largeur du contenu
- Styliser les liens et leurs états (
:hover, transition) - Signaler la page en cours dans la navigation avec
aria-current="page" - Comprendre le positionnement :
position: relative,absolute,fixedetsticky - Superposer des éléments (bandeau fixe, badge sur une image) avec
z-index
Positionnement : à utiliser avec parcimonie
Flexbox suffit pour la très grande majorité des mises en page. position sert aux cas particuliers : un menu qui reste collé en haut (sticky), un badge posé sur une image (absolute), un bouton de retour en haut de page (fixed).
📦 Jalon 2 : toutes les pages mises en page — contenu centré, navigation, états :hover, page en cours marquée avec aria-current="page"
Les tâches du jour
-
header,nav,mainetfooteren place sur toutes les pages - Contenu centré et sa largeur limitée (
max-width+margin: 0 auto) - Liens stylés avec
:hoveret unetransition - Sur chaque page, le lien de la page en cours porte
aria-current="page"et se distingue des autres en CSS - Si — et seulement si — ton site en a besoin : un élément positionné (
sticky,absoluteoufixed) - Jalon 2 : toutes les pages mises en page
- Dépôt partagé avec
fallinov(Settings → Collaborators) et GitHub Pages activé - Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : la page la plus complexe du site entièrement mise en page.
Ressources :
- Démo de la séance 9, trois ajouts : c113-demo-nav-flex, branche
solution-etape-9. Ouvre ses commits et clique sur chacun d'eux : GitHub montre les lignes ajoutées pouraria-current="page", le centrage et latransition. Rien à cloner : applique-les directement à ton projet. - Nuxy, module 11 : 11.1 Réagis au survol, 11.2 Tu es ici, 11.3 Une page bien centrée
Devoirs Nuxy : module 12 — Grille et responsive — pour le 11 novembre
Séance 11 - 11 novembre 2026
Thème : Grille de cartes et responsive design mobile-first
Objectifs :
- Comprendre l'approche mobile-first : les règles sans media query sont celles du téléphone
- Passer le menu en mobile d'abord : logo et liens en colonne sur téléphone, en ligne dès 768 px avec
flex-directionet une media query - Créer une galerie de cartes avec CSS Grid :
display: gridetgap - Rendre cette galerie responsive avec des media queries (
min-width768 px et 1024 px), puis sans media query grâce àrepeat(auto-fill, minmax(250px, 1fr)) - Tester son site avec le mode responsive des DevTools
La démo : une grille de cartes, en trois étapes
Même logique que Flexbox : la propriété se met sur le parent, ici la <section class="galerie">, et ce sont ses enfants directs, les <article class="carte">, qui deviennent les cases.
Une grille sans colonnes. Rien ne change à l'écran, sauf l'espace entre les cartes : une grille sans colonnes définies n'en a qu'une. C'est la règle du téléphone.
css.galerie { display: grid; gap: 1rem; }Mobile d'abord, avec media queries. Deux colonnes dès 768 px, trois dès 1024 px.
1frest une fraction de la place libre :repeat(2, 1fr)vaut1fr 1fr.css@media (min-width: 768px) { .galerie { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1024px) { .galerie { grid-template-columns: repeat(3, 1fr); } }Le raccourci. Une seule règle, et le navigateur choisit le nombre de colonnes :
minmax(250px, 1fr)donne au moins 250 px à chaque colonne,auto-fillen place autant que la largeur le permet. Une colonne à 375 px, deux à 600 px, trois à 960 px.css.galerie { grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); }
Adaptatif avant les media queries
repeat(auto-fill, minmax(250px, 1fr)) fait passer la galerie de plusieurs colonnes à une seule selon la largeur de l'écran, sans écrire une seule media query. C'est la démonstration que le responsive n'est pas qu'une affaire de points de rupture.
Pas de transition entre deux nombres de colonnes
Une transition interpole deux valeurs de même forme. Passer de deux à trois colonnes est un saut : le navigateur bascule d'un coup, et transition: all n'y change rien, il animerait juste tout le reste. La transition a sa place sur le background-color des liens du menu.
Grid ou Flexbox ? Lequel choisir
| Flexbox | Grid | |
|---|---|---|
| Dimensions | une seule : une rangée ou une colonne | deux : lignes et colonnes à la fois |
| Qui commande | le contenu : chaque enfant prend la place de son contenu, le parent répartit le reste | le parent : il dessine les colonnes, les enfants s'y rangent |
| Alignement | sur un axe ; au passage à la ligne, les rangées ne s'alignent pas entre elles | tout s'aligne : les cartes de la deuxième rangée sont sous celles de la première |
| Avantages | simple, idéal pour quelques éléments de tailles différentes sur une ligne | colonnes de largeur égale, grille adaptée à la fenêtre en une ligne de CSS |
| Inconvénients | avec flex-wrap, la dernière rangée fait des cases de largeur différente | trop lourd pour aligner trois éléments sur une ligne |
- Flexbox : des éléments en ligne, dont le nombre ou la largeur varient. Barre de navigation, logo à gauche et menu à droite, boutons, icône plus texte.
- Grid : des éléments de même forme à ranger en lignes et en colonnes. Galerie de cartes, de photos, de produits, et la mise en page générale d'une page.
- Les deux ensemble : Grid pour la galerie, Flexbox à l'intérieur d'une carte pour aligner un prix et un bouton. Une carte peut être enfant d'une grille et elle-même conteneur flex.
Une question suffit
Je range sur une seule ligne, ou je range en lignes et en colonnes ? Une ligne, Flexbox. Lignes et colonnes, Grid. Si tu hésites, commence par Flexbox, c'est le plus simple.
Le piège de la galerie en Flexbox
Avec display: flex et flex-wrap: wrap, sept cartes de flex: 1 1 250px passent bien à la ligne, mais la septième, seule sur la dernière rangée, s'étire sur toute la largeur et plus rien n'est aligné en colonnes. Avec Grid, elle garde la largeur des autres et la rangée laisse des cases vides.
Mobile-first, vraiment
L'an dernier, seuls 4 projets sur 16 étaient réellement mobile-first. On commence par le mobile, on élargit ensuite — pas l'inverse.
Sans cette ligne, rien de tout ça ne marche sur un téléphone
<meta name="viewport" content="width=device-width, initial-scale=1.0">Elle se place dans le <head> de chaque page. Sans elle, un smartphone fait semblant d'avoir un écran de 980 px et dézoome toute la page : ton site responsive s'affiche en miniature, texte illisible. Tu l'as vue dans l'exercice Nuxy 1.3 — vérifie qu'elle est bien dans toutes tes pages avant de tester quoi que ce soit.
La routine pour avancer ton projet
Fixe-toi un objectif simple : la version smartphone d'abord. Ne réfléchis pas encore à la version grand écran.
- Prépare : imagine ton site ou trouve un site de référence, liste les contenus de chaque page, puis fais une maquette rapide de ta page d'accueil, version téléphone. Un croquis sur papier suffit.
- Rassemble : palette de couleurs, polices téléchargées dans
fonts/, textes et images de moins de 300 Ko, avec des noms de fichiers en minuscules, sans espaces et sans caractères spéciaux (me contacter.html→me-contacter.html). - Crée une page modèle : doctype,
lang,charset,viewport,titleet lien vers le CSS, puisheader,nav,mainavec sonh1, etfooter. - Écris le CSS de base : variables,
@font-face,body, titres, puisheaderetfooter, testés à 375 px. - Duplique la page modèle : adapte
title,h1etaria-currentsur chaque page. Vérifie que la navigation fonctionne et que le CSS s'applique partout. - Remplis une page à la fois : le HTML, puis le CSS, testé à 375 px. Passe ensuite à la suivante.
- Élargis : ajoute les media queries
min-width, à 768 px puis à 1024 px. - Contrôle : commit et push à chaque étape, validation W3C, puis vérification du site en ligne.
Termine la page modèle avant de la dupliquer
Le header et le footer sont copiés dans chaque fichier. Si tu les finis après, chaque correction se répète sur toutes tes pages.
Deux questions de projet
Un lien pour écrire ou appeler. Un href peut ouvrir un e-mail avec mailto: et lancer un appel avec tel:. Le numéro s'écrit +41 sans le 0 du début et sans espaces dans le href, et reste lisible dans le texte du lien :
<a href="mailto:contact@example.com">contact@example.com</a>
<a href="tel:+41320000000">032 000 00 00</a>Ton site est public : dans ton projet, utilise une adresse fictive en example.com et n'y mets pas ton numéro personnel.
Un style différent sur une seule page. Pose une classe sur le body de cette page, puis vise ce que tu veux à travers elle. Les autres pages partagent le même CSS, sans être touchées :
<body class="page-contact">.page-contact main {
background-color: #f0f9ff;
}Évite l'id : rien ne pèse plus lourd, et une règle écrite avec un id ne se corrige plus sans !important.
Les tâches du jour
- Styles écrits en mobile-first : le mobile d'abord, puis on élargit
- Menu en colonne sur téléphone, en ligne dès 768 px (
flex-directiondans une media query) - Galerie de cartes en
display: gridavec ungap -
repeat(auto-fill, minmax(250px, 1fr)): la galerie s'adapte sans media query - Au moins une media query
min-width: 768px -
<meta name="viewport">présent dans le<head>de chaque page - Site testé à 375 px aux DevTools : aucun défilement horizontal
- Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : le site tient à 375 px sans défilement horizontal — testé aux DevTools.
Ressources :
- Démo à reprendre en classe : la barre de navigation de la séance 9 passe en mobile-first, puis la page
projets.htmlreçoit sa grille de cartes. Point de départ : la branchegrid-departdu dépôt c113-demo-nav-flex, résultat surgrid-solution. Sur GitHub, clique Use this template → Create a new repository, choisis ton compte comme propriétaire et laisse Include all branches décoché : tu obtiens ta propre copie du point de départ, sur laquelle tu peux faire commit et push. Clone ensuite ta copie dans WebStorm (File → New → Project from Version Control). Ce modèle ne sert que pour cette démo : ton projet personnel reste écrit sans template. - Nuxy, module 12 — Grille et responsive, à refaire si besoin : 12.1 Ta première grille, 12.2 La grille qui s'adapte toute seule, 12.3 Des styles selon l'écran, 12.4 Mobile d'abord, 12.5 Le menu qui s'empile, 12.6 Défi : la galerie responsive
- Nuxy, deux exercices ajoutés dans des modules déjà faits : 2.6 Écris-moi, appelle-moi, 11.7 Une page, son style
Devoirs pour le 18 novembre : finir de rendre le site responsive, et terminer toute la formation HTML/CSS de Nuxy : les modules 1 à 12, examens de module compris. Le module 9 — Les images de fond est le dernier qui n'a pas encore été donné : il prépare la séance 12.
Séance 12 - 18 novembre 2026
Thème : Atelier images et performance
Objectifs :
- Mesurer ce que pèse une image et ce qu'elle coûte au chargement, dans l'onglet Réseau des DevTools
- Redimensionner et compresser ses images en WebP avec Squoosh
- Poser une photo en fond d'une bannière et garder le texte lisible par-dessus (module Nuxy 9)
- Savoir quand une image est un contenu (
<img>avecalt) et quand elle est un décor (fond CSS)
La démo : une bannière avec photo, en quatre étapes
Sur index.html et style.css du site de démo, DevTools ouverts sur l'onglet Réseau. Tu tapes en même temps, et tu regardes le résultat après chaque étape.
La photo brute. Une
<img>de 3,9 Mo dans la bannière. Réseau, en « 3G lente » : plusieurs secondes avant que la photo apparaisse. C'est ce que vit un visiteur sur son téléphone.html<section class="banniere"> <img src="img/creux-du-van.jpg" alt="Les falaises du Creux du Van sous un ciel bleu"> <h1>Bienvenue</h1> </section>Squoosh. squoosh.app : redimensionner à 1600 px de large, format WebP, qualité 65 à 75. Résultat : 217 Ko au lieu de 3,9 Mo, la même photo à l'œil. Remplacer le fichier, recharger, comparer dans Réseau.
La photo passe en fond. Une photo qui décore la bannière n'est pas un contenu : elle va en CSS, sans
alt. La<img>disparaît du HTML.css.banniere { background-color: #1f2937; /* de secours, visible tant que la photo charge */ background-image: url("img/creux-du-van.webp"); background-size: cover; /* la photo remplit la boîte, quitte à être rognée */ background-position: center; padding: 4rem 1.5rem; /* la hauteur vient du padding, pas d'une height */ color: white; text-align: center; }Un voile sombre. Du blanc sur un ciel bleu clair ne se lit pas. Un dégradé uniforme posé devant la photo, dans la même propriété : le premier fond est au-dessus.
css.banniere { background-image: linear-gradient(rgba(31, 41, 55, 0.6), rgba(31, 41, 55, 0.6)), url("img/creux-du-van.webp"); }
Contenu ou décor ?
Contenu : la photo d'un projet, le portrait de la page À propos, un schéma. Elle informe, elle va dans une <img> avec un alt qui décrit ce qu'on voit. Décor : la photo derrière un titre, un motif de fond. On pourrait la retirer sans rien perdre : elle va en CSS, et un lecteur d'écran n'en parle pas.
Le piège classique
L'an dernier, la moitié des projets avaient des images de plus de 1 Mo (record : 16.5 Mo pour un fond d'écran). Objectif : aucune image au-dessus de 300 Ko.
Les tâches du jour
- Poids de chaque image relevé dans l'onglet Réseau
- Chaque image redimensionnée à la taille où elle s'affiche vraiment
- Images converties en WebP avec Squoosh
- Aucune image au-dessus de 300 Ko — vérifie le poids des fichiers
- Si ton site a une image de fond : une
background-colorde secours, et le texte posé dessus reste lisible - Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : toutes les images du site sous 300 Ko, en ligne.
Ressources :
- Démo à reprendre en classe : branche
seance-12-departdu dépôt de démo (la photo brute est dansimg/), résultat surseance-12-solution. Si tu as ta copie du dépôt depuis la séance 11, continue dedans : ajoute juste la photo. - Squoosh, dans le navigateur, sans compte
- Nuxy, module 9 — Les images de fond : 9.1 Une image derrière le texte, 9.4 Toute la photo, ou toute la boîte ?, 9.5 Un titre lisible sur une photo, 9.6 Défi : la bannière d'accueil
Devoirs pour le 25 novembre : les quatre critères du Jalon 3 (voir séance 13) tenus sur la page d'accueil, et les images de toutes les pages sous 300 Ko
Séance 13 - 25 novembre 2026
Thème : Contrôler son site et Jalon 3
Objectifs :
- Lire un message d'erreur du validateur W3C et le corriger
- Vérifier l'accessibilité avec WAVE :
alt, ordre des titres, contrastes - Rédiger le README du projet (mini-portfolio)
📦 Jalon 3 : un site rendable. Quatre critères vérifiables, sur chaque page :
<meta name="viewport">présent, et aucun défilement horizontal à 375 px- Zéro erreur au validateur W3C
- WAVE : aucun
altmanquant, titres dans l'ordre - Toutes les images sous 300 Ko, et un README à la racine du dépôt
Le responsive complet sur grand écran, les contrastes à 4,5:1 et le polish passent en finalisation, séances 14 et 15. Un site qui tient ces quatre critères peut être rendu.
La démo : casser, lire, réparer
Sur le site de démo, branche seance-13-depart : trois pages propres, et une page À propos qui contient les fautes classiques d'un projet d'élève, une pour chaque outil.
- Un site propre d'abord. Le HTML de
index.htmlcollé dans le validateur W3C : zéro erreur. C'est à ça que ça ressemble quand c'est bon. a-propos.htmldans le validateur : huit messages pour cinq fautes. On les lit un par un, on corrige la première, on revalide. Une balise<a>jamais fermée fait apparaître trois erreurs à elle seule, et un<h2>posé dans un<p>en fait une sur le</p>qui suit.- WAVE (wave.webaim.org) sur la page en ligne : icônes rouges = à corriger (
altmanquant, langue absente), panneau Structure pour l'ordre des titres, onglet Contraste pour la légende en gris clair. - Le téléphone : DevTools en mode appareil, 375 px. Sans viewport, la page est dézoomée ; la photo brute de 5488 px fait défiler la page sur le côté, et l'onglet Réseau affiche 3,9 Mo.
- Le README : le gabarit ci-dessous, à recopier et à adapter.
Le résultat, chaque faute commentée dans le code, est sur seance-13-solution.
Ce que le validateur va te reprocher
- Un attribut
altmanquant sur une image. - Un titre qui saute un niveau : un
<h3>juste après le<h1>. Les titres descendent un niveau à la fois. - Un titre ou une
<div>dans un<p>: un paragraphe ne contient que des balises de texte —<strong>,<em>,<a>,<span>,<br>. - Du texte sans balise dans une liste : dans un
<ul>, tout vit dans un<li>. Dans<body>ou<div>, un texte nu passe le validateur, mais il n'a pas sa place pour autant. - Une balise jamais fermée ou fermée dans le désordre : une seule suffit à faire apparaître trois ou quatre erreurs plus bas.
Et ce que WAVE ajoute : la langue (<html lang="fr">), et un texte trop clair sur fond clair, en dessous de 4,5:1.
Deux détails qui ne sont pas des erreurs mais qui font la différence en revue : écrire © plutôt que de coller un © dans le code, et laisser une ligne vide à la fin de chaque fichier.
# Nom du site
Une phrase : de quoi parle le site, pour qui.
**En ligne** : https://ton-compte.github.io/c113-projet-nomprenom/
## Pages
- Accueil : ...
- Projets : ...
## Ce que j'ai appris
Deux ou trois lignes, avec tes mots.Les tâches du jour
- HTML validé au W3C : zéro erreur, sur chaque page
- WAVE passé : tous les
altprésents, titres dans l'ordre - Viewport présent et aucun défilement horizontal à 375 px, sur chaque page
- README du projet rédigé (le mini-portfolio)
- Jalon 3 : les quatre critères tenus sur chaque page
- Commit + push, puis vérification de la page en ligne
🎯 Objectif du jour : zéro erreur W3C sur chaque page, README rédigé, Jalon 3 tenu.
Ressources :
- Démo à reprendre en classe : branche
seance-13-departdu dépôt de démo (la page À propos à réparer, le README liste les fautes et l'outil qui les voit), résultat surseance-13-solution. - Validateur W3C, onglet « Validate by direct input » : coller le HTML
- WAVE : l'adresse de la page en ligne, ou l'extension du navigateur
Devoirs pour le 16 décembre : les quatre critères du Jalon 3 sur toutes les pages si ce n'est pas encore fait, et refaire les examens de module Nuxy (1.99 à 12.99) — rejouables à volonté, c'est la meilleure préparation à l'examen blanc. Je repasse sur tous les dépôts autour du 9 décembre.
Séance 14 - 16 décembre 2026
Thème : Examen blanc
Déroulement :
- Examen blanc sur papier, dans les conditions réelles de l'épreuve de module : même durée, même format, sans ordinateur, sans documentation et sans aucun support de cours
- Correction et debriefing collectif des questions
- Identification des lacunes à travailler pendant les vacances
À faire avant de venir
- Examens de module Nuxy
1.99à12.99refaits — ils sont rejouables autant de fois que nécessaire - Relire ses propres erreurs : ce qui a été corrigé sur le projet depuis septembre est exactement ce qui tombera
- Prévoir de quoi écrire : l'examen se fait sur papier
Conditions d'examen
Rien sur la table : ni ordinateur, ni téléphone, ni notes, ni aide-mémoire. Il faut savoir écrire du HTML et du CSS de tête, sans l'auto-complétion de l'éditeur. L'examen blanc reproduit exactement les conditions de l'épreuve de module M11 du 13 janvier 2027.
Séance 15 - 23 décembre 2026
Thème : Finalisation du projet
Objectifs :
- Passer la checklist finale du projet (validation, images, responsive, README)
- Lancer un audit Lighthouse (DevTools, onglet Lighthouse) et lire les quatre scores : performance, accessibilité, bonnes pratiques, SEO
- Vérifier les contrastes : au moins 4,5:1 pour les textes et les liens
- Derniers réglages avant le rendu du vendredi 8 janvier 2027
- Savoir que Git ne s'arrête pas à
commitetpush: à quoi servent les branches - Questions de préparation à l'épreuve de module M11 du 13 janvier 2027
Les tâches du jour
- Checklist finale du projet passée : validation W3C, images, responsive, README
- Audit Lighthouse lancé sur la page en ligne, les quatre scores relevés, le point le plus bas corrigé
- Contrastes vérifiés : au moins 4,5:1 pour les textes et les liens
- Dernières corrections commitées et en ligne
- Adresse GitHub Pages ouverte une dernière fois, sur un autre appareil si possible
- README-portfolio complété
- Questions notées pour l'épreuve de module du 13 janvier
🎯 Objectif du jour : un projet qu'on pourrait rendre ce soir — les vacances ne servent qu'au polish.
Git : la suite, en cinq minutes
Tout le semestre a tenu sur une seule branche, main — et c'est tout ce dont un projet personnel a besoin. Dès qu'on travaille à plusieurs sur le même dépôt, deux notions arrivent : la branche, pour avancer sans gêner les autres, et la pull request, pour faire relire son travail avant de l'intégrer.
Vous les pratiquerez en cours 122, puis pour de bon en 822, quand plusieurs d'entre vous modifieront le même projet. Les apprendre aujourd'hui, sans ce besoin, n'apprendrait rien.
Dernière ligne droite
Le rendu (8 janvier) et l'épreuve de module (13 janvier) tombent tous les deux après les vacances. Ce qui n'est pas terminé le 23 décembre devra l'être pendant les vacances : prévoyez votre travail en conséquence.
Récapitulatif des objectifs
| Objectif du cours | Séances |
|---|---|
| Structurer une page avec des balises HTML sémantiques | 3, 4, 5 |
| Présenter des données dans un tableau | 4 |
| Mettre en forme avec CSS (couleurs, typographie, box model) | 4, 6, 7, 8 |
| Créer des mises en page modernes avec Flexbox et Grid | 9, 10, 11 |
Positionner des éléments (relative, absolute, fixed, sticky) | 10 |
| Rendre un site adaptatif (mobile-first, media queries) | 11, puis 12 à 15 |
| Versionner avec Git et publier avec GitHub Pages | 2, 3, puis en continu |
| Valider, optimiser et auditer un site | 12, 13, 15 |