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. Le moteur — avant de rouler.

Km 1 20 km

C'est quoi HTML ?

HTML, c'est le squelette d'une page web. Il décrit le contenu : titres, paragraphes, images, liens. Pas de style, pas de couleur — juste la structure.

Dans ton éditeur, pas à pas
  1. Crée un dossier mon-rallye sur ton bureau.
  2. Ouvre VS Code et crée un fichier index.html dans ce dossier.
  3. Tape <h1>Ferrari</h1> (ou la marque de ton choix) et sauvegarde.
  4. Double-clique sur le fichier pour l'ouvrir dans le 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 ?
Km 225 km

Les balises essentielles

Titres h1→h6, paragraphe p, image img, lien a. Ces quatre types constituent 80% de ce qu'on trouve dans une page HTML.

♿ 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.
Dans ton éditeur, pas à pas
  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 (clic droit → copier l'adresse de l'image).
  3. Ajoute-la avec <img src="ADRESSE" alt="Ferrari F40 rouge"> — rends l'alt descriptif.
  4. Ajoute un lien vers 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 ?
Km 330 km⚠ Virage

La structure complète d'une page

Une page HTML correcte a toujours la même ossature : DOCTYPE, <html>, <head>, <body>. Beaucoup confondent head et body au départ — et ça cause des bugs bizarres.

Dans ton éditeur, pas à pas
  1. Tout en haut, ajoute <!DOCTYPE html> sur la première ligne.
  2. Entoure tout avec <html> ... </html>.
  3. Ajoute un <head></head> vide avant le contenu, entoure 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 — elle évite les problèmes d'accents.
Valide tes connaissances
Où place-t-on le contenu visible par l'utilisateur ?
Km 430 km

Relier un fichier CSS au HTML

HTML et CSS sont deux fichiers séparés. On les relie avec une balise <link> dans le <head>. À partir de là, tout ce qu'on écrit dans le CSS s'applique à la page.

Dans ton éditeur, pas à pas
  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 style.css, écris : h1 { color: red; } et sauvegarde.
  4. Recharge — ton titre est en rouge ? 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 ?
Km 540 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.

Dans ton éditeur, pas à pas
  1. Sur p, ajoute : border: 1px solid black;. Recharge et observe.
  2. Ajoute padding: 16px; — l'espace intérieur s'agrandit.
  3. Ajoute margin: 20px 0; — l'espace 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. La carrosserie de ta page.

Km 640 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.
Dans ton éditeur, pas à pas
  1. Cherche "code couleur [ta marque]" sur Google — tu trouveras le hex exact.
  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.
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 ?
Km 750 km

Typographie et Google Fonts

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

Dans ton éditeur, pas à pas
  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;. Compare avant/après.
Valide tes connaissances
Quelle propriété CSS contrôle la taille du texte ?
Km 860 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.

Dans ton éditeur, pas à pas
  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" ?
Km 955 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 !

Dans ton éditeur, pas à pas
  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 — tout se met à jour d'un 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 ?
Km 1060 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>.
Dans ton éditeur, pas à pas
  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. Le châssis qui tient tout ensemble.

Km 1160 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.

Dans ton éditeur, pas à pas
  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; — 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 ?
Km 1270 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.

Dans ton éditeur, pas à pas
  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 — 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) ?
Km 1365 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.

Dans ton navigateur, pas à pas
  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.
  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 ?
Km 1470 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.

Dans ton éditeur, pas à pas
  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 absolute par rapport au parent relative.
  5. Essaie position: fixed; sur une barre de navigation — elle reste en place au scroll.
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 ?
Km 1580 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.

Dans ton éditeur, pas à pas
  1. Réduis la fenêtre progressivement — 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.

Km 1680 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.
Dans ton éditeur, pas à pas
  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; ?
Km 1785 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.
Dans ton éditeur, pas à pas
  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 ?
Km 1890 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.

Dans ton éditeur, pas à pas
  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) ?
Km 19100 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.
Dans ton éditeur, pas à pas
  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 ?
Km 2090 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.
Dans ton éditeur, pas à pas
  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 ta vraie page automobile. Pas de contrainte — juste ce que tu veux montrer, comme tu veux le montrer.

Km 2190 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 vrais développeurs avant de toucher au clavier.

Sur papier d'abord
  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 ?
Km 22100 km

Construire le HTML

Remplis la structure avec le vrai contenu. Pas de CSS pour l'instant. Une page laide mais complète vaut mieux qu'une page belle et vide.

Dans ton éditeur, pas à pas
  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 ?
Km 23110 km

Appliquer le style

Le CSS en couches successives : variables d'abord, couleurs, polices, espacements, mise en page, responsive. Un chantier organisé.

Dans ton éditeur, pas à pas
  1. Variables dans :root — toutes tes couleurs et ta police.
  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 ?
Km 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 aura une vraie adresse URL, visible par tout le monde.

Pas à pas
  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.