Parcours HTML / CSS

Bienvenue au départ du Rallye.

Chaque trajet = une notion à comprendre, des exercices concrets à effectuer dans ton éditeur de code, et un QCM pour valider. C'est le QCM réussi qui valide les kilomètres et fait tourner le compteur. Avance à ton rythme — pas de chrono.

Km standard
Virage — notion qui demande plus d'attention
Étape 1

Les fondations

Comprendre ce qu'est HTML, écrire ta première page, faire le lien avec CSS.

Tronçon 1 20 km

C'est quoi HTML ?

HTML signifie HyperText Markup Language, un système de balises qui organise et hiérarchise le contenu d'une page Web. Il dit QUOI afficher : titres, paragraphes, images, liens… mais pas COMMENT. Pas de choix typographiques, pas de couleur, pas de mise en page ; uniquement le contenu structuré.
Ci-dessous, un lien qui mène vers des ressources permettant d'apprendre les bases du html (sans ces bases, rien n'est possible).

Exercice
  1. Crée un dossier mon-rallye sur ton bureau.
  2. Ouvre VS Code (ou n'importe quel éditeur de code) et crée un fichier index.html dans ce dossier.
  3. Entre les balises <body> et </body>, tape <h1>Ferrari</h1> (ou la marque de ton choix) et sauvegarde.
  4. Ouvre ce fichier dans un navigateur. Tu vois ton titre ? C'est du HTML.
Défi
Ajoute sous le titre un paragraphe <p> qui décrit ta voiture préférée en deux phrases.
Valide tes connaissances
À quoi sert le HTML ?
Quelle balise crée un titre principal ?
Tronçon 2 25 km

Les balises essentielles

Titres h1→h6, paragraphe p, image img, lien a. Ces quatre balises constituent 80% de ce qu'on trouve dans une page HTML, mais il en existe d'autres.

♿ Accessibilité : l'attribut alt sur les images n'est pas optionnel — c'est ce que les lecteurs d'écran lisent à la place de l'image pour les personnes malvoyantes.
Exercice
  1. Sous ton <h1>, ajoute un <h2> avec le modèle exact de ta voiture.
  2. Trouve une image sur le Web, copie son adresse URL (Uniform Ressource Locator) : clic droit → copier l'adresse de l'image.
  3. Ajoute-la avec <img src="URL" alt="Ferrari F40 rouge"> (la balise ‘alt’ permet de donner un descriptif de l'image).
  4. Ajoute un lien (URL) vers la page Wikipedia de la marque : <a href="URL">En savoir plus</a>.
Défi
Ajoute une liste <ul> avec 3 caractéristiques de ta voiture (puissance, vitesse max, année…).
Valide tes connaissances
Quelle balise permet d'afficher une image ?
Tronçon 3 30 km ⚠ Virage

La structure complète d'une page

Une page HTML correcte a toujours la même ossature : DOCTYPE, <html>, <head>, <body>. Ne pas confondre head (qui contient des informations non affichées dans le corps de page) et body (qui contient les éléments affichés).

Exercice
  1. Tout en haut, ajoute <!DOCTYPE html> sur la première ligne.
  2. Entoure tout avec <html lang="fr"> ... </html>.
  3. Ajoute un <head>...</head> avant le contenu, encadre le contenu avec <body> ... </body>.
  4. Dans le <head>, ajoute <title>Ma page Ferrari</title>. Tu vois le titre dans l'onglet ?
Défi
Ajoute <meta charset="UTF-8"> dans le head. Cette instruction évite les problèmes d'affichage des caractères avec accents, comme ceux de la langue française.
Valide tes connaissances
Où place-t-on le contenu visible par l'utilisateur ?
Tronçon 4 30 km

Relier un fichier CSS au HTML

Le HTML décrit le contenu et la structure, le CSS (Cascading Style Sheets = feuilles de style en cascade) est un langage de mise en forme.
Le code CSS peut être situé dans le <head>, mais HTML et CSS sont de préférence situés dans des fichiers séparés. On les relie avec une balise <link> dans le <head>. À partir de là, tout ce qu'on écrit dans le fichier CSS s'applique aux pages HTML qui lui sont liées.

Exercice
  1. Crée un fichier style.css dans le même dossier que ton index.html
  2. Dans le <head>, ajoute : <link rel="stylesheet" href="style.css">
  3. Dans le fichier style.css, écris h1 { color: red; } et enregistre
  4. Dans le navigateur, recharge la page HTML. Si ton titre est en rouge c'est que la liaison fonctionne.
Défi
Change le fond avec body { background-color: #111; }. Adapte la couleur du texte pour qu'il reste lisible.
Valide tes connaissances
Où place-t-on la balise <link> pour relier un fichier CSS ?
Tronçon 5 40 km ⚠ Virage

Le modèle de boîte

En CSS, chaque élément est une boîte : contenu, padding (espace intérieur), border, margin (espace extérieur). Comprendre ça, c'est comprendre 80% des problèmes de mise en page.

Exercice
  1. Sur p { } ajoute : border: 1px solid black; puis recharge la pag HTML et observe.
  2. Ajoute padding: 16px; (la marge intérieure s'agrandit)
  3. Ajoute margin: 20px 0; (la marge extérieur haut/bas s'agrandit)
  4. Ouvre l'inspecteur (clic droit → Inspecter) et survole ton paragraphe : tu vois le schéma de boîte en couleurs ?
Défi
Crée une carte pour ta voiture : un <div> avec fond coloré, padding et bordure fine.
Valide tes connaissances
Quelle propriété CSS crée de l'espace à l'intérieur d'un élément (entre contenu et bordure) ?
Étape 2

Mettre en forme

Couleurs, typographie, sélecteurs, variables.

Tronçon 6 40 km

Couleurs et fonds

color pour le texte, background-color pour le fond. Noms (red), codes hex (#CE1126) ou RGB.

♿ Accessibilité : vérifie que le contraste entre ton texte et ton fond est suffisant avec WebAIM Contrast Checker.
Exercice
  1. Sur l'Internet, cherche le code couleur de ta marque de voiture préféré (avec un peu de chance, tu trouveras le code hex précis).
  2. Applique-le à ton h1 : color: #CE1126; (exemple Ferrari).
  3. Change le fond de la page. Essaie un noir ou gris très sombre.
  4. Vérifie la lisibilité avec WebAIM Contrast Checker (lien ci‑dessus).
Défi
Construis une palette de 3 couleurs cohérente avec ta marque et applique-la à toute ta page.
Valide tes connaissances
Quel format est un code couleur hexadécimal valide ?
Tronçon 7 50 km

Typographie et Google Fonts

font-size, font-weight, font-family, line-height. Google Fonts donne accès à des centaines de polices gratuites.

Exercice
  1. Sur Google Fonts, cherche une police qui correspond à l'image de ta marque.
  2. Clique "Get font" → "Get embed code" copie la balise <link> dans ton <head>
  3. Applique : h1, h2 { font-family: 'NomPolice', sans-serif; }
  4. Passe le h1 à font-size: 3em; et font-weight: 800;
Défi
Augmente l'interligne des paragraphes à line-height: 1.8; puis compare avant/après.
Valide tes connaissances
Quelle propriété CSS contrôle la taille du texte ?
Tronçon 8 60 km ⚠ Virage

Les sélecteurs CSS

Balise (h1), classe (.titre), identifiant (#header). Les classes sont les plus utiles — et les plus utilisées dans tous les projets.

Exercice
  1. Joue aux 10 premiers niveaux de CSS Diner.
  2. Ajoute class="fiche" sur le div qui contient ta voiture.
  3. Dans ton CSS : .fiche { background: #f0f0f0; padding: 20px; }
  4. Crée une deuxième carte avec la même classe, le style s'applique automatiquement.
Défi
Crée une classe .vedette pour mettre en avant ta voiture préférée — bordure plus épaisse, fond différent.
Valide tes connaissances
Comment cible-t-on une classe CSS appelée "voiture" ?
Tronçon 9 55 km

Variables CSS

Définis une couleur une seule fois dans :root, utilise-la partout avec var(). Change la variable — tout change d'un coup. C'est exactement ce qui est utilisé dans ce fichier de parcours !

Exercice
  1. En haut de ton CSS, crée :root { }
  2. Définis : --couleur-principale: #CE1126; et --fond: #111111;
  3. Remplace toutes les occurrences de ces couleurs par var(--couleur-principale)
  4. Change la valeur dans :root pour que tout se mette à jour d'un seul coup.
Défi
Ajoute une variable --police-titre avec le nom de ta Google Font et utilise-la partout.
Valide tes connaissances
Comment utilise-t-on une variable CSS --ma-couleur ?
Tronçon 10 60 km

Balises sémantiques

<header>, <nav>, <main>, <section>, <article>, <footer> — ces balises décrivent la fonction de chaque zone. Les moteurs de recherche et lecteurs d'écran les adorent.

♿ Accessibilité : les balises sémantiques permettent aux lecteurs d'écran de naviguer directement d'une zone à l'autre — exactement comme le menu de gauche de cette page utilise <nav>.
Exercice
  1. Remplace les <div> génériques de ta page par les bonnes balises sémantiques.
  2. Le titre et le logo : <header>
  3. Chaque grande partie de contenu : <section>
  4. Le bas de page : <footer>
  5. Vérifie dans l'inspecteur que la structure est claire.
Défi
Ajoute un <nav> avec des liens vers les différentes sections de ta page (les ancres <a href="#section-id">).
Valide tes connaissances
Quelle balise sémantique convient le mieux pour la zone de navigation principale ?
Étape 3

Mise en page

Flexbox, Grid, positionnement, responsive.

Tronçon 11 60 km ⚠ Virage

Flexbox — les bases

Flexbox organise les éléments en ligne ou en colonne. Le système de mise en page le plus utilisé aujourd'hui. Un peu de pratique et ça devient naturel.

Exercice
  1. Joue à Flexbox Froggy jusqu'au niveau 15 minimum.
  2. Crée un <div class="grille"> qui contient 3 fiches de voitures.
  3. Dans ton CSS : .grille { display: flex; gap: 20px; }
  4. Essaie justify-content: space-between; puis center; et observe.
Défi
Ajoute flex: 1; sur les fiches pour qu'elles occupent la même largeur.
Valide tes connaissances
Quelle propriété active Flexbox sur un conteneur ?
Tronçon 12 70 km ⚠ Virage

CSS Grid — la mise en page en tableau

Là où Flexbox organise en une dimension (ligne OU colonne), Grid organise en deux dimensions (lignes ET colonnes). Parfait pour une grille de voitures bien alignées.

Exercice
  1. Joue aux 10 premiers niveaux de Grid Garden.
  2. Crée un conteneur .galerie avec 6 fiches voitures.
  3. Dans ton CSS : .galerie { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
  4. Résultat : 3 colonnes automatiques, égales, avec espace entre elles.
  5. Essaie repeat(2, 1fr) pour passer à 2 colonnes, et observe.
Défi
Fais qu'une fiche "vedette" s'étale sur 2 colonnes avec grid-column: span 2;.
Valide tes connaissances
Que fait grid-template-columns: repeat(3, 1fr) ?
Tronçon 13 65 km

L'inspecteur du navigateur

Clic droit → Inspecter. L'outil le plus puissant du développeur Web. Il montre le HTML et CSS de n'importe quelle page, et permet de modifier les valeurs en temps réel.

Exercice
  1. Va sur le site officiel de Ferrari, BMW ou Porsche.
  2. Clic droit sur le titre principal → Inspecter.
  3. Dans le panneau CSS, trouve font-family (c'est leur police de caractères).
  4. Double-clique sur la valeur de color et change-la en direct.
  5. Fais la même chose sur ton propre fichier.
Défi
Trouve le code hex exact de la couleur du bouton principal du site automobile de ton choix.
Valide tes connaissances
Comment ouvrir l'inspecteur sur un élément précis ?
Tronçon 14 70 km ⚠ Virage

Le positionnement CSS

position: relative, absolute, fixed, sticky — ces valeurs permettent de placer un élément précisément dans la page, en dehors du flux normal.

Exercice
  1. Ajoute sur une fiche : position: relative; (rien ne change visuellement encore).
  2. Ajoute un badge "Nouveau" : <span class="badge">Nouveau</span> dans la fiche.
  3. Dans ton CSS : .badge { position: absolute; top: 10px; right: 10px; background: red; color: white; padding: 4px 8px; }
  4. Le badge se place dans le coin, c'est l'instruction absolute. Par rapport au parent : relative
  5. Essaie position: fixed; Ça reste en place quand tu scrolles.
Défi
Crée un header fixe en haut de page avec position: fixed; qui reste visible quand on fait défiler la page.
Valide tes connaissances
Quelle valeur de position permet de placer un élément par rapport à son parent ?
Tronçon 15 80 km ⚠ Virage

Le responsive — s'adapter à l'écran

Un site responsive s'adapte à la taille de l'écran avec des @media queries. Indispensable : la moitié du Web se consulte sur mobile.

Exercice
  1. Réduis la fenêtre progressivement et observe comment ta page se comporte.
  2. Dans l'inspecteur, clique sur l'icône mobile pour simuler un smartphone.
  3. Ajoute tout en bas : @media (max-width: 600px) { .grille { flex-direction: column; } }
  4. Réduis la fenêtre : les fiches passent en colonne unique sur mobile.
Défi
Réduis aussi le h1 de 3em à 2em sur mobile dans la media query.
Valide tes connaissances
Que signifie @media (max-width: 600px) ?
Étape 4

CSS avancé

Transitions, formulaires, pseudo-classes, pseudo-éléments. Les finitions qui font la différence entre un site amateur et un site pro.

Tronçon 16 80 km

Transitions CSS

Une transition rend un changement progressif plutôt que brutal. Quand la couleur d'un bouton change au survol en douceur — c'est une transition. Une seule ligne suffit : transition: all 0.3s ease;.

♿ Accessibilité : certaines personnes ont des troubles vestibulaires — les animations peuvent les gêner. Utilise @media (prefers-reduced-motion: reduce) pour les désactiver si l'utilisateur l'a demandé dans ses réglages.
Exercice
  1. Sur tes fiches voiture, ajoute : transition: all 0.3s ease;
  2. Ajoute un état hover : .fiche:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0,0,0,0.15); }
  3. Passe la souris sur une fiche, elle se soulève doucement.
  4. Joue avec la durée (0.1s vs 0.8s) et l'accélération (ease, linear, ease-in-out)
Défi
Ajoute aussi une transition sur la couleur de tes liens — ils changent progressivement au survol.
Valide tes connaissances
Que fait transition: background 0.3s ease; ?
Tronçon 17 85 km

Formulaires HTML

<form>, <input>, <label>, <textarea>, <button> — les formulaires permettent de collecter des informations. Un formulaire de contact, une recherche, un vote pour la meilleure voiture…

♿ Accessibilité : chaque champ doit avoir un <label for="id-du-champ"> associé — sans ça, les lecteurs d'écran ne savent pas à quoi sert le champ.
Exercice
  1. Crée un formulaire "Vote pour ta voiture préférée" avec <form>
  2. Ajoute un champ texte avec son label : <label for="nom">Ton prénom</label><input id="nom" type="text">
  3. Ajoute un champ de sélection <select> avec plusieurs marques en options.
  4. Ajoute un bouton : <button type="submit">Voter</button>
  5. Stylise le formulaire en CSS — padding sur les inputs, bordure, couleur au focus.
Défi
Ajoute un style spécial quand un champ est actif : input:focus { border-color: red; outline: none; }.
Valide tes connaissances
Pourquoi faut-il un <label> associé à chaque champ de formulaire ?
Tronçon 18 90 km ⚠ Virage

Pseudo-classes avancées

:hover tu connais déjà. Il en existe plein d'autres : :focus (champ actif), :nth-child() (le 2e élément d'une liste), :not() (tous sauf…). Très puissant pour éviter d'ajouter des classes partout.

Exercice
  1. Colore les lignes paires de ta liste en alternance : li:nth-child(even) { background: #f5f5f5; }
  2. Cible uniquement le premier élément : li:first-child { font-weight: bold; }
  3. Cible tous les éléments sauf le dernier : li:not(:last-child) { border-bottom: 1px solid #ddd; }
  4. Applique un style au champ de formulaire actif : input:focus { box-shadow: 0 0 0 3px rgba(1,240,184,0.3); }
Défi
Mets en avant automatiquement la première fiche voiture de ta grille avec :first-child — sans ajouter de classe dans le HTML.
Valide tes connaissances
Que cible li:nth-child(2) ?
Tronçon 19 100 km ⚠ Virage

Pseudo-éléments ::before et ::after

Avec ::before et ::after, tu crées du contenu décoratif uniquement en CSS — sans toucher au HTML. Un trait sous un titre, un badge en coin de carte, un guillemet géant. La magie du CSS.

♿ Accessibilité : ne mets jamais d'information importante dans ::before ou ::after — ce contenu peut être ignoré par les lecteurs d'écran. Uniquement de la décoration.
Exercice
  1. Ajoute un trait décoratif sous tes titres de section :
    h2::after { content: ''; display: block; width: 40px; height: 3px; background: red; margin-top: 8px; }
  2. Observe dans l'inspecteur — le pseudo-élément apparaît dans le DOM mais n'est pas dans ton HTML.
  3. Ajoute un badge "🏎" automatique avant chaque nom de marque :
    .marque::before { content: '🏎 '; }
  4. Crée un badge positionné en coin de fiche voiture (combine ::before avec position: absolute)
Défi
Crée un soulignement animé sur tes liens de navigation avec ::after et une transition — le trait glisse de gauche à droite au survol.
Valide tes connaissances
Quelle propriété est obligatoire pour qu'un pseudo-élément ::before ou ::after s'affiche ?
Tronçon 20 90 km

Animations CSS — bonus

Avec @keyframes, on définit des étapes d'animation. Plus puissant que les transitions — un élément peut pulser, glisser, tourner en boucle, sans JavaScript.

♿ Accessibilité : ajoute toujours @media (prefers-reduced-motion: reduce) { * { animation: none; } } en bas de ton CSS pour respecter les utilisateurs sensibles aux mouvements.
Exercice
  1. Crée une animation de pulsation :
    @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } }
  2. Applique-la à ta fiche vedette : .vedette { animation: pulse 2s ease-in-out infinite; }
  3. Crée une animation d'entrée qui fait glisser les fiches depuis le bas :
    @keyframes entree { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
  4. Ajoute en bas de ton CSS la règle prefers-reduced-motion pour l'accessibilité.
Défi
Crée une animation de rotation pour un logo ou une icône sur ta page — un volant qui tourne lentement au chargement.
Valide tes connaissances
Quelle règle CSS permet de définir les étapes d'une animation ?
Étape 5

Le projet

Tu as tous les outils. Il est temps d'assembler et de publier les pages que tu veux partager. Pas de contrainte ; seulement ce que tu veux montrer, comme tu veux le montrer.
Ci-dessous, pour réviser et/ou approfondir, un cours complet en vidéo pour apprendre à faire un site internet en html + css.


Tronçon 21 90 km

Choisir le sujet et la structure

Avant de coder, décide ce que contiendra ta page. Dessine la structure à la main sur papier. C'est ce que font les développeurs, avant de toucher au clavier.

Exercice
  1. Décide du sujet : une marque, un modèle, un comparatif, un palmarès ?
  2. Dessine les grandes zones : header, sections, footer.
  3. Liste les 3 couleurs et la police.
  4. Crée un nouveau dossier propre et un index.html vierge.
Défi
Écris en haut de ton HTML, en commentaire, le titre du projet et les 3 couleurs choisies.
Valide tes connaissances
Comment écrit-on un commentaire en HTML ?
Tronçon 22 100 km

Construire le HTML

Remplis la structure avec le vrai contenu. Pas de CSS pour l'instant.

Exercice
  1. Structure complète : DOCTYPE, html, head (title + charset + meta viewport), body.
  2. Un <header> avec titre et navigation.
  3. Des <section> pour chaque partie de contenu.
  4. De vrais textes, images avec alt, liens.
  5. Un <footer> avec ton prénom et l'année.
Défi
Vérifie que ta page a du sens et est lisible, même sans aucun CSS.
Valide tes connaissances
Quelle balise est la plus adaptée pour l'en-tête d'une page ?
Tronçon 23 110 km

Appliquer le style

Applique le CSS en couches successives : variables d'abord, puis couleurs, polices, espacements, mise en page, responsive. Travaille de façon bien organisée.

Exercice
  1. Toutes tes couleurs et polices en variables dans :root
  2. Couleurs et polices globales sur body.
  3. Style des titres, liens, textes.
  4. Flexbox ou Grid pour la grille de contenu.
  5. Transitions sur les cartes et boutons.
  6. Media query pour le mobile.
Défi
Ajoute au moins un pseudo-élément décoratif : trait sous un titre, badge automatique…
Valide tes connaissances
Dans quel ordre vaut-il mieux travailler le CSS ?
Tronçon 24 — Arrivée 🏁 120 km

Publier sa page en ligne

GitHub Pages permet d'héberger gratuitement une page HTML en quelques minutes. Ta page disposera d'une adresse URL, elle sera consultable sur le Web.

Exercice
  1. Crée un compte sur GitHub (github.com).
  2. Crée un nouveau dépôt nommé exactement ton-pseudo.github.io
  3. Upload tes fichiers HTML et CSS
  4. Settings → Pages → active 'GitHub Pages' sur la branche main.
  5. Attends 2 minutes puis ouvre https://ton-pseudo.github.io
Défi final
Partage le lien de ta page.
Valide l'arrivée
Ta page est-elle bien accessible en ligne via son adresse GitHub Pages ?
Référence

Ressources utiles

Les liens essentiels — à garder dans tes favoris pour toute la suite.