← Retour au programme
Module 02

HTML et CSS : construire le web

Découvrez comment structurer et styliser des pages web avec les deux piliers du développement front-end.

Ce deuxième module vous plonge dans la création de pages web. Vous apprendrez à structurer du contenu avec HTML5 sémantique, à le styliser avec CSS3, puis à créer des mises en page modernes et responsives avec Flexbox et Grid. À la fin du module, vous serez capable de construire un site web complet et adapté à tous les écrans.

Module suivant →

Philosophie

Le web est visuel et immédiat : chaque ligne de code que vous écrivez produit un résultat visible dans le navigateur. Profitez de ce retour instantané pour expérimenter sans crainte.

Prérequis & Outils

  • Avoir terminé le Module 1 ou avoir des bases en logique de programmation.
  • Un navigateur web moderne (Chrome, Firefox ou Edge).
  • Un éditeur de code (VS Code recommandé).
HTML5CSS3FlexboxGridResponsive

Objectifs du module

  • Structurer une page web avec des balises HTML5 sémantiques
  • Styliser du contenu avec les propriétés CSS fondamentales
  • Comprendre et maîtriser le modèle de boîte CSS
  • Créer des mises en page modernes avec Flexbox et Grid
  • Rendre un site responsive avec les media queries
Pourquoi ce module

Pourquoi apprendre HTML et CSS ?

HTML et CSS sont les deux langages fondamentaux du web. Chaque page web que vous visitez — de Google à Netflix en passant par Wikipedia — est construite avec du HTML pour la structure et du CSS pour l'apparence. Apprendre ces technologies, c'est comprendre le langage universel d'Internet. Contrairement à de nombreux frameworks qui apparaissent et disparaissent, HTML et CSS existent depuis plus de 30 ans et resteront la base du web pour les décennies à venir. Ce sont des investissements durables dans votre carrière.

Même si vous ne souhaitez pas devenir développeur front-end, comprendre HTML et CSS est un atout majeur. Les designers qui codent communiquent mieux avec les équipes techniques. Les marketeurs qui maîtrisent le HTML créent des emails et des landing pages plus performants. Les entrepreneurs qui comprennent le web prennent de meilleures décisions techniques. Quelle que soit votre orientation, ces compétences vous donnent un avantage concret et immédiat.

L'un des aspects les plus motivants de HTML et CSS est la gratification instantanée : vous écrivez du code et vous voyez immédiatement le résultat dans le navigateur. Pas besoin de compiler, pas de terminal obscur — juste un fichier texte et un navigateur. Cette boucle de feedback rapide rend l'apprentissage agréable et vous permet d'expérimenter librement. C'est aussi la porte d'entrée idéale vers le développement web complet : une fois que vous maîtrisez HTML et CSS, ajouter JavaScript pour l'interactivité devient naturel.

Compétence universelle et durable

HTML et CSS sont les standards du web depuis 1993. Tous les navigateurs, tous les appareils, toutes les plateformes les supportent. Contrairement aux frameworks JavaScript qui changent tous les 2 ans, HTML et CSS sont rétrocompatibles et évoluent sans casser l'existant. Ce que vous apprenez aujourd'hui sera encore valide dans 10 ans.

Autonomie créative immédiate

Dès la fin de ce module, vous serez capable de créer votre propre site web de A à Z : portfolio, blog, page personnelle, CV en ligne. Vous n'aurez plus besoin de dépendre d'un outil comme WordPress ou Wix pour mettre vos idées en ligne. Cette autonomie est libératrice et vous ouvre la porte à des projets freelance, des contributions open source ou simplement la fierté de dire « c'est moi qui l'ai construit ».

Fondation indispensable pour la suite

Chaque technologie front-end — React, Vue, Angular, Svelte — génère du HTML et utilise du CSS. Si vous ne comprenez pas la base, vous vous retrouverez à copier-coller du code sans comprendre pourquoi ça fonctionne (ou pourquoi ça ne fonctionne pas). Maîtriser HTML et CSS, c'est avoir des fondations solides sur lesquelles construire tout le reste de votre parcours de développeur.

Accessibilité et impact social

Écrire du HTML sémantique, c'est rendre le web utilisable par tout le monde, y compris les personnes en situation de handicap qui utilisent des lecteurs d'écran. En apprenant les bonnes pratiques dès le départ — balises sémantiques, attributs alt, structure logique — vous contribuez à un web plus inclusif. C'est une responsabilité et un savoir-faire que les entreprises valorisent de plus en plus.

SEO et visibilité en ligne

Les moteurs de recherche comme Google analysent la structure HTML de vos pages pour déterminer leur pertinence. Un HTML bien structuré avec des balises sémantiques, des titres hiérarchisés et des métadonnées correctes améliore directement le référencement naturel de votre site. Maîtriser HTML, c'est aussi maîtriser la visibilité de vos projets sur Internet.

Marché de l'emploi et polyvalence

HTML et CSS figurent parmi les compétences les plus demandées dans les offres d'emploi tech, mais aussi dans des postes non strictement techniques : chef de projet digital, UX designer, rédacteur web, growth marketer. Maîtriser ces langages élargit considérablement votre champ de possibilités professionnelles et vous rend plus polyvalent dans n'importe quelle équipe.

Ressource complémentaire

HTML et CSS pour les débutants — Cours complet

Ressource complémentaire pour découvrir HTML et CSS à votre rythme.

Contenu du module

Progression pas à pas.

Chaque leçon s'appuie sur la précédente avec un rythme pensé pour laisser de l'espace à la compréhension, à la pratique et à la révision.

Leçon 1

Les fondamentaux HTML

Comprendre la structure d’un document HTML et utiliser les balises sémantiques pour organiser le contenu de manière logique et accessible.

HTML (HyperText Markup Language) est le langage de balisage qui structure le contenu de toutes les pages web. Contrairement à Python qui est un langage de programmation, HTML ne contient pas de logique : il décrit la structure et le sens du contenu. Chaque page HTML commence par <!DOCTYPE html> qui indique au navigateur qu’il s’agit d’un document HTML5. Ensuite, la balise <html> englobe tout le contenu, divisé en deux parties : <head> (métadonnées invisibles comme le titre et l’encodage) et <body> (contenu visible de la page). Les balises fonctionnent généralement par paires : une balise ouvrante <p> et une balise fermante </p>.

Le HTML5 sémantique signifie que chaque balise a un sens précis qui décrit le rôle du contenu. Au lieu d’utiliser des <div> partout, on utilise <header> pour l’en-tête, <nav> pour la navigation, <main> pour le contenu principal, <section> pour les sections thématiques, <article> pour un contenu autonome, et <footer> pour le pied de page. Cette approche améliore l’accessibilité (les lecteurs d’écran comprennent la structure), le référencement (Google analyse mieux le contenu), et la maintenabilité (un développeur comprend immédiatement le rôle de chaque section).

Les éléments de texte forment l’ossature du contenu : les titres <h1> à <h6> créent une hiérarchie (un seul <h1> par page), <p> définit un paragraphe, <a href="..."> crée un lien hypertexte, <strong> met en gras (avec importance sémantique), <em> met en italique (emphase). Les listes s’écrivent avec <ul> (non ordonnée) ou <ol> (ordonnée) contenant des <li>. Les images s’insèrent avec <img src="..." alt="..."> où l’attribut alt est obligatoire pour l’accessibilité. Maîtriser ces éléments vous permettra de structurer n’importe quel contenu textuel.

Page personnelle structurée avec des balises sémantiques HTML5.html
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Marie Dupont - Développeuse Web</title>
</head>
<body>
  <header>
    <h1>Marie Dupont</h1>
    <p>Développeuse web passionnée</p>
  </header>

  <nav>
    <ul>
      <li><a href="#about">À propos</a></li>
      <li><a href="#projects">Projets</a></li>
      <li><a href="#contact">Contact</a></li>
    </ul>
  </nav>

  <main>
    <section id="about">
      <h2>À propos de moi</h2>
      <p>Passionnée par le <strong>développement web</strong>,
         je crée des sites <em>accessibles</em> et modernes.</p>
    </section>

    <section id="projects">
      <h2>Mes projets</h2>
      <article>
        <h3>Portfolio en ligne</h3>
        <p>Un site responsive présentant mes réalisations.</p>
        <img src="portfolio.jpg" alt="Capture d'écran du portfolio">
      </article>
    </section>
  </main>

  <footer>
    <p>&copy; 2024 Marie Dupont. Tous droits réservés.</p>
  </footer>
</body>
</html>

Exercice pratique

Page d’article de blog

Créez une page HTML complète représentant un article de blog sur le thème de votre choix. La page doit utiliser les balises sémantiques et contenir un en-tête, une navigation, l’article avec titre, sous-titres, paragraphes, une image et une liste, et un pied de page.

  1. Créez la structure de base du document HTML5 (doctype, html, head avec charset et title, body).
  2. Ajoutez un header avec le nom du blog et un nav avec 3 liens de navigation.
  3. Dans main, créez un article avec un h2 pour le titre, deux sections avec des h3, des paragraphes, une image avec alt, et une liste à puces.
  4. Ajoutez un footer avec le copyright et un lien de contact.

Ouvrez le fichier dans un navigateur : la page doit afficher un en-tête, une navigation, un article structuré avec image et liste, et un pied de page. Validez votre HTML sur validator.w3.org pour vérifier l’absence d’erreurs.

Leçon 2

Les fondamentaux CSS

Comprendre comment CSS stylise le HTML et maîtriser le modèle de boîte, les sélecteurs et les propriétés essentielles.

CSS (Cascading Style Sheets) est le langage qui contrôle l’apparence visuelle des pages web. Si le HTML est le squelette, le CSS est la peau, les vêtements et le maquillage. Une règle CSS se compose de trois parties : un sélecteur (qui cible les éléments à styliser), des propriétés (quels aspects visuels modifier) et des valeurs (comment les modifier). Par exemple : h1 { color: blue; font-size: 2rem; } cible tous les h1 et leur applique une couleur bleue et une taille de 2rem. Les trois types de sélecteurs fondamentaux sont : par balise (p), par classe (.ma-classe), et par identifiant (#mon-id). Les classes sont les plus utilisées car elles sont réutilisables.

Le modèle de boîte (box model) est LE concept central du CSS. Chaque élément HTML est une boîte rectangulaire composée de quatre couches, de l’intérieur vers l’extérieur : le contenu (content), le rembourrage (padding — espace entre le contenu et la bordure), la bordure (border), et la marge (margin — espace entre la boîte et les éléments voisins). Par défaut, width et height ne s’appliquent qu’au contenu (ce qui est contre-intuitif). La déclaration box-sizing: border-box fait que width inclut padding et border, ce qui simplifie énormément les calculs. C’est pourquoi la plupart des projets utilisent * { box-sizing: border-box; }.

Pour styliser du texte et des arrière-plans, CSS offre une multitude de propriétés. Les couleurs s’expriment en noms (red), hexadécimal (#ff0000), RGB (rgb(255, 0, 0)) ou HSL (hsl(0, 100%, 50%)). Les polices se contrôlent avec font-family (famille de police), font-size (taille), font-weight (graisse), et line-height (interligne). Les arrière-plans se définissent avec background-color, background-image, et des dégradés comme linear-gradient(). Enfin, border-radius arrondit les coins des boîtes et box-shadow ajoute des ombres portées. Ces propriétés combinées permettent de créer des interfaces visuellement riches et professionnelles.

Styliser un composant carte avec ombre, bordure arrondie et typographie soignée.css
/* Reset de base */
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.card {
  max-width: 400px;
  margin: 2rem auto;
  padding: 1.5rem;
  background-color: #ffffff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  font-family: "Segoe UI", Arial, sans-serif;
}

.card h2 {
  color: #1f2937;
  font-size: 1.5rem;
  margin-bottom: 0.75rem;
}

.card p {
  color: #6b7280;
  font-size: 1rem;
  line-height: 1.6;
}

.card .tag {
  display: inline-block;
  margin-top: 1rem;
  padding: 0.25rem 0.75rem;
  background-color: #dbeafe;
  color: #1d4ed8;
  border-radius: 9999px;
  font-size: 0.875rem;
  font-weight: 600;
}

Exercice pratique

Styliser une barre de navigation

À partir du HTML fourni, créez un fichier CSS qui stylise une barre de navigation horizontale avec un fond sombre, des liens clairs qui changent de couleur au survol, et un espacement équilibré.

  1. Appliquez un reset de base avec box-sizing: border-box et supprimez les marges par défaut.
  2. Stylisez le nav avec un fond sombre (#1f2937), un padding, et supprimez les puces de la liste (list-style: none).
  3. Mettez les éléments li en display: inline-block avec un espacement horizontal (margin-right).
  4. Stylisez les liens (a) en blanc sans soulignement, avec un changement de couleur au survol (:hover).

La barre de navigation doit avoir un fond sombre, des liens blancs alignés horizontalement, et le lien survolé doit changer de couleur. Testez dans le navigateur et vérifiez le rendu sur différentes tailles d’écran.

Leçon 3

Layouts avec Flexbox, Grid et responsive

Créer des mises en page modernes et adaptatives avec Flexbox pour les dispositions unidimensionnelles, Grid pour les grilles bidimensionnelles, et les media queries pour le responsive.

Flexbox (Flexible Box Layout) est un système de mise en page unidimensionnel : il aligne et distribue l’espace entre les éléments le long d’un seul axe (horizontal ou vertical). On l’active sur le conteneur parent avec display: flex. Les propriétés clés du conteneur sont : flex-direction (row ou column pour choisir l’axe), justify-content (alignement sur l’axe principal : center, space-between, space-around), align-items (alignement sur l’axe secondaire : center, stretch, flex-start), et gap (espacement entre les éléments). Flexbox est idéal pour les barres de navigation, les cartes alignées, ou tout alignement le long d’un seul axe.

CSS Grid est un système de mise en page bidimensionnel : il gère à la fois les lignes et les colonnes simultanément. On l’active avec display: grid puis on définit la structure avec grid-template-columns et grid-template-rows. La notation repeat(3, 1fr) crée 3 colonnes de taille égale, où fr (fraction) distribue l’espace disponible. On peut aussi nommer les zones avec grid-template-areas pour un contrôle visuel intuitif. grid-gap (ou gap) définit l’espace entre les cellules. Grid est idéal pour les mises en page complètes (header, sidebar, main, footer) et les grilles de cartes.

Le responsive design signifie que votre site s’adapte à toutes les tailles d’écran, du smartphone au grand moniteur. Les media queries (@media) permettent d’appliquer des styles conditionnellement selon la largeur de l’écran. L’approche “mobile-first” consiste à écrire d’abord les styles pour mobile, puis à ajouter des media queries pour les écrans plus larges avec @media (min-width: 768px). Combinez cela avec des unités relatives (rem, %, vh/vw) plutôt qu’absolues (px) et la méta-balise viewport (<meta name="viewport" content="width=device-width, initial-scale=1.0">) pour garantir un rendu optimal partout.

Grille de cartes responsive : 1 colonne sur mobile, 2 sur tablette, 3 sur desktop.css
/* Mobile first : 1 colonne par défaut */
.card-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
  padding: 1rem;
}

.card-grid .card {
  background: #ffffff;
  border-radius: 12px;
  padding: 1.5rem;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  font-family: "Segoe UI", Arial, sans-serif;
}

/* Tablette : 2 colonnes */
@media (min-width: 768px) {
  .card-grid {
    grid-template-columns: repeat(2, 1fr);
    padding: 2rem;
  }
}

/* Desktop : 3 colonnes */
@media (min-width: 1024px) {
  .card-grid {
    grid-template-columns: repeat(3, 1fr);
    max-width: 1200px;
    margin: 0 auto;
  }
}

Exercice pratique

Landing page responsive

Créez la mise en page d’une landing page responsive complète avec : un header avec navigation Flexbox, une section héro en pleine largeur, une grille de 3 cartes “services” en Grid, et un footer. Le tout doit s’adapter du mobile au desktop.

  1. Créez le HTML avec les sections : header (nav), section héro, section services (3 cartes), footer.
  2. Stylisez le header avec Flexbox : logo à gauche, navigation à droite (justify-content: space-between).
  3. Créez la grille de services en Grid : 1 colonne sur mobile, 3 colonnes sur desktop avec repeat(3, 1fr).
  4. Ajoutez les media queries pour adapter la navigation (hamburger en colonne sur mobile) et la grille.

Testez dans le navigateur avec les outils de développement (F12) : la page doit s’afficher en 1 colonne sur mobile (< 768px), 2 colonnes sur tablette, et 3 colonnes sur desktop. La navigation passe de verticale à horizontale.

Leçon 4

Tailwind CSS : le CSS utilitaire moderne

Découvrir l'approche utility-first de Tailwind CSS, comprendre pourquoi elle a conquis l'industrie, et construire des interfaces rapidement sans écrire de CSS personnalisé.

Tailwind CSS est un framework CSS utilitaire (utility-first) qui change radicalement la façon d'écrire du CSS. Au lieu de créer des classes personnalisées comme .card-title { font-size: 1.5rem; font-weight: bold; color: #1f2937; }, vous composez directement des classes utilitaires dans votre HTML : <h2 class="text-2xl font-bold text-gray-800">. Chaque classe fait une seule chose : text-2xl fixe la taille, font-bold met en gras, text-gray-800 définit la couleur. Cette approche peut sembler verbeuse au premier regard, mais elle élimine un problème majeur du CSS traditionnel : vous n'avez plus besoin d'inventer des noms de classes, de naviguer entre fichiers HTML et CSS, ni de gérer des feuilles de style qui grossissent indéfiniment.

L'un des avantages les plus puissants de Tailwind est son système de design intégré. Au lieu de choisir des valeurs arbitraires (padding: 17px), vous utilisez une échelle cohérente : p-1 (4px), p-2 (8px), p-4 (16px), p-8 (32px). Les couleurs suivent une palette prédéfinie avec des nuances de 50 à 950 : bg-blue-500, text-gray-700, border-red-300. La typographie, les ombres, les bordures arrondies — tout suit un système de valeurs harmonieuses. Résultat : votre interface a un aspect professionnel et cohérent sans effort de design. Le responsive se gère avec des préfixes de breakpoint : md:grid-cols-2 s'applique à partir de 768px, lg:grid-cols-3 à partir de 1024px. Les états interactifs utilisent des préfixes similaires : hover:bg-blue-600, focus:ring-2, dark:bg-gray-800.

Tailwind CSS est devenu le standard de l'industrie pour de bonnes raisons. Premièrement, la productivité : vous construisez des interfaces 2 à 3 fois plus vite qu'avec du CSS classique car tout se fait dans le même fichier, sans aller-retour entre HTML et CSS. Deuxièmement, la maintenabilité : supprimer un composant supprime automatiquement son style (pas de CSS orphelin). Troisièmement, la taille du bundle : Tailwind scanne votre code et ne génère que les classes que vous utilisez réellement, produisant un fichier CSS final minuscule. Quatrièmement, la personnalisation : le fichier tailwind.config permet d'adapter les couleurs, les polices et les espacements à votre charte graphique. Tailwind s'intègre parfaitement avec React, Next.js et tous les frameworks modernes que vous apprendrez dans les modules suivants.

Carte de profil construite entièrement avec des classes Tailwind — aucun CSS personnalisé nécessaire.html
<div class="mx-auto max-w-sm overflow-hidden rounded-2xl bg-white shadow-lg">
  <img
    class="h-48 w-full object-cover"
    src="profile.jpg"
    alt="Photo de profil"
  />
  <div class="space-y-4 p-6">
    <div>
      <h2 class="text-xl font-bold text-gray-900">Marie Dupont</h2>
      <p class="text-sm text-gray-500">Développeuse web junior</p>
    </div>
    <p class="text-sm leading-relaxed text-gray-600">
      Passionnée par le front-end, je crée des interfaces
      accessibles et modernes avec HTML, CSS et React.
    </p>
    <div class="flex flex-wrap gap-2">
      <span class="rounded-full bg-blue-100 px-3 py-1 text-xs font-semibold text-blue-700">
        HTML
      </span>
      <span class="rounded-full bg-green-100 px-3 py-1 text-xs font-semibold text-green-700">
        CSS
      </span>
      <span class="rounded-full bg-purple-100 px-3 py-1 text-xs font-semibold text-purple-700">
        Tailwind
      </span>
    </div>
    <a
      href="#contact"
      class="block rounded-lg bg-blue-600 px-4 py-2.5 text-center text-sm font-semibold text-white transition-colors hover:bg-blue-700"
    >
      Me contacter
    </a>
  </div>
</div>

Exercice pratique

Section héro responsive en Tailwind

Créez une section héro responsive avec Tailwind CSS : un titre en gros, un sous-titre, un bouton d'appel à l'action, et un dégradé en arrière-plan. La mise en page doit s'adapter du mobile au desktop.

  1. Créez une section avec un fond en dégradé en utilisant les classes bg-gradient-to-r, from-blue-600 et to-purple-600.
  2. Ajoutez un titre h1 avec les classes text-3xl md:text-5xl lg:text-6xl font-extrabold text-white pour le rendre responsive.
  3. Ajoutez un paragraphe sous-titre avec max-w-2xl mx-auto text-lg text-white/80 pour le centrer et le limiter en largeur.
  4. Créez un bouton avec des classes de padding, couleur, arrondi et un hover:bg-white/90 pour l'effet au survol.

La section affiche un dégradé bleu-violet avec un titre blanc centré qui grandit sur les écrans larges. Les deux boutons sont empilés sur mobile et côte à côte sur tablette+. Le bouton principal a un fond blanc, le secondaire est transparent avec une bordure.

Projet final

Portfolio personnel responsive

Concevez et construisez votre propre site portfolio responsive en HTML et CSS. Le site doit présenter qui vous êtes, vos compétences, vos projets, et un moyen de vous contacter. Il doit être entièrement responsive (mobile, tablette, desktop).

Critères de réussite

  • Le HTML utilise des balises sémantiques (header, nav, main, section, footer).
  • Le site contient au minimum 4 sections : héro/accueil, à propos, projets, contact.
  • Le CSS utilise Flexbox ET Grid pour la mise en page.
  • Le site est responsive avec au moins 2 breakpoints (tablette et desktop).
  • Le design est soigné avec couleurs harmonieuses, typographie lisible et espacements cohérents.

Guide de réalisation

  • 1Commencez par dessiner la maquette sur papier avant de coder : définissez les sections et leur contenu.
  • 2Utilisez l’approche mobile-first : codez d’abord le CSS pour mobile, puis ajoutez les media queries.
  • 3Utilisez Flexbox pour le header/nav et Grid pour la grille de projets.
  • 4Choisissez une palette de 3-4 couleurs maximum et utilisez des variables CSS (--couleur-primaire) pour la cohérence.
  • 5Testez régulièrement dans le navigateur avec F12 pour vérifier le responsive.

Version Tailwind CSS

Consolidez vos acquis avant de poursuivre.

Prenez le temps de revoir les concepts difficiles et de refaire les exercices qui méritent une seconde passe.