Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 115 minDébutant

C'est quoi HTML et CSS ? Comment marche une page web

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • expliquer ce qui se passe entre la saisie d'une adresse et l'affichage d'une page ;
  • distinguer les rôles de HTML, CSS et JavaScript ;
  • installer ton éditeur et créer ta première page ;
  • inspecter une page avec les outils de développement et valider ton code.

4 exercices corrigés1 schéma

HTML (HyperText Markup Language) est le langage de balisage qui décrit le contenu d'une page web et sa structure ; CSS (Cascading Style Sheets, « feuilles de style en cascade ») est le langage qui décrit sa présentation. Ce chapitre montre ce qui se passe quand ton navigateur affiche une page, le rôle de chacun des deux langages, et comment préparer ton poste pour écrire ta première page.

Ce qui se passe quand tu ouvres une page web

Tu tapes l'adresse https://www.mediatheque-tilleuls.fr/agenda.html dans ton navigateur. En une fraction de seconde, il se passe ceci :

  1. Résolution du nom. Le navigateur demande à un serveur DNS l'adresse IP qui correspond à www.mediatheque-tilleuls.fr.
  2. Connexion. Il ouvre une connexion chiffrée (HTTPS, port 443) avec le serveur web qui héberge le site.
  3. Requête. Il envoie une requête HTTP : « donne-moi /agenda.html ».
  4. Réponse. Le serveur renvoie le fichier HTML, un simple fichier texte.
  5. Ressources. En lisant le HTML, le navigateur découvre qu'il lui faut aussi une feuille de style (style.css), des images, peut-être un script JavaScript. Il envoie une requête par fichier.
  6. Affichage. Il construit l'arbre des éléments de la page (le DOM), lui applique les règles CSS, calcule la position de chaque boîte et peint le résultat à l'écran.
Serveur DNSannuaire des noms1. adresse IP ?203.0.113.10NavigateurFirefox, Chrome…Serveur webchez l'hébergeuragenda.htmlcss/style.cssimages/…js/menu.js2. connexion HTTPS (port 443)3. GET /agenda.html4. le fichier HTML5. GET style.css, images, scriptles fichiers demandés6. AffichageDOM construit, CSS appliqué, page peinte à l'écran
Une page web, c'est un fichier HTML puis les fichiers qu'il cite, demandés un par un au serveur

Retiens l'idée principale : le serveur envoie du texte, c'est le navigateur qui fabrique l'affichage. Le même fichier HTML peut donc s'afficher différemment selon l'écran, le navigateur ou les réglages de la personne (taille de texte agrandie, mode sombre, lecteur d'écran qui lit la page à voix haute). Écrire du HTML, ce n'est pas dessiner une page : c'est décrire un contenu pour que n'importe quel navigateur puisse l'afficher.

HTML, CSS et JavaScript : trois rôles différents

Une page web moderne s'appuie sur trois langages, chacun avec un rôle bien séparé.

LangageRôleIl répond à la questionExemple
HTMLContenu et structure« Qu'est-ce que c'est ? »« Ceci est un titre, ceci est un lien, ceci est un champ de formulaire. »
CSSPrésentation« À quoi ça ressemble ? »« Les titres sont bleus, le menu est en haut, sur deux colonnes à partir de 768 pixels. »
JavaScriptComportement« Que se passe-t-il quand… ? »« Quand on clique sur ce bouton, le menu s'ouvre. »

L'analogie classique est celle de la maison : HTML, ce sont les murs et les pièces ; CSS, la décoration et l'aménagement ; JavaScript, l'électricité qui fait fonctionner les volets roulants. Tu peux repeindre tous les murs sans déplacer une cloison : de la même façon, tu peux changer toute l'apparence d'un site en ne touchant qu'au CSS.

Cette séparation du fond et de la forme est un principe que tu retrouveras partout : le contenu reste lisible même si le CSS ne se charge pas (connexion lente, lecteur d'écran, moteur de recherche qui analyse la page), et la charte graphique d'une organisation tient dans une seule feuille de style partagée par toutes les pages.

Qui définit HTML et CSS, et quelle version utiliser

Tu croiseras encore les mots « HTML5 » et « CSS3 » dans les offres de stage et les manuels. Ils datent des années 2010 et ne désignent plus vraiment une version :

  • HTML est un standard « vivant » (HTML Living Standard), tenu à jour en continu par le WHATWG, le groupe qui réunit les éditeurs de navigateurs. Depuis un accord de 2019 avec le W3C, c'est la seule spécification de HTML. Quand on dit « HTML5 » aujourd'hui, on veut simplement dire « HTML moderne ».
  • CSS est découpé en modules (sélecteurs, couleurs, Flexbox, Grid…) qui évoluent chacun à leur rythme au sein du W3C. Il n'y aura pas de « CSS4 » : chaque module a ses propres niveaux.

La vraie question n'est donc pas « quelle version ? », mais « cette fonctionnalité marche-t-elle dans les navigateurs de mes utilisateurs ? ». Deux outils y répondent :

  • MDN Web Docs (developer.mozilla.org, en partie traduit en français) : la documentation de référence de chaque balise et propriété, avec un tableau de compatibilité en bas de page.
  • Can I use (caniuse.com) : le pourcentage d'utilisateurs dont le navigateur gère une fonctionnalité.

Sur MDN, tu verras aussi un badge Baseline. Il signale qu'une fonctionnalité marche dans les versions actuelles de Chrome, Edge, Firefox et Safari (newly available), puis, trente mois plus tard, qu'elle est utilisable sans précaution (widely available). C'est un bon repère pour décider si tu peux utiliser une nouveauté dans un projet.

Installer ton environnement

Pour écrire du HTML et du CSS, un éditeur de texte suffit. Prends Visual Studio Code (VS Code), gratuit, celui que tu utiliseras aussi pour PHP, JavaScript ou Python. Deux réglages rendent le travail plus confortable :

  • l'extension Live Server : clic droit sur un fichier HTML, Open with Live Server, et la page se recharge toute seule à chaque enregistrement ;
  • l'enregistrement automatique (Fichier > Enregistrement automatique), pour ne plus oublier Ctrl+S.

VS Code intègre Emmet, un raccourci qui fait gagner beaucoup de temps : dans un fichier .html vide, tape ! puis Tab, et le squelette complet d'une page apparaît. Tape ul>li*3 puis Tab, et tu obtiens une liste de trois éléments.

Crée un dossier pour ton site et range-le dès le départ :

text
mediatheque/
├── index.html        ← la page d'accueil
├── agenda.html
├── css/
│   └── style.css
└── images/
    └── facade.jpg

Le fichier index.html a un nom particulier : c'est la page qu'un serveur web renvoie quand on demande un dossier sans préciser de fichier. https://www.mediatheque-tilleuls.fr/ affiche donc index.html.

Ta première page

Crée index.html et tape :

html
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Médiathèque des Tilleuls</title>
    <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <h1>Médiathèque des Tilleuls</h1>
    <p>Ouverte du mardi au samedi, entrée libre et gratuite.</p>
  </body>
</html>

Puis crée css/style.css :

css
body {
  font-family: system-ui, sans-serif;
  color: #1f2937;
}

h1 {
  color: #0f766e;
}

Ouvre index.html dans le navigateur (double-clic ou Live Server). Le titre s'affiche en vert foncé, le paragraphe en gris très foncé. Tu viens d'utiliser les deux langages : le HTML dit « ceci est le titre principal, ceci est un paragraphe », le CSS dit « le titre principal est vert ». Le chapitre 2 explique chaque ligne du squelette.

Une page ouverte par double-clic a une adresse qui commence par file:// : le navigateur lit le fichier sur ton disque, sans serveur. Ça suffit pour HTML et CSS. Live Server, lui, démarre un petit serveur web local (http://127.0.0.1:5500), plus proche des conditions réelles : certaines fonctions, comme les modules JavaScript, ne marchent qu'avec une adresse en http://.

Les outils de développement du navigateur

Chaque navigateur embarque des outils de développement : appuie sur F12 (ou clic droit sur un élément, Inspecter). Tu t'en serviras tous les jours.

Onglet (Firefox / Chrome)À quoi il sert
Inspecteur / ElementsVoir l'arbre HTML tel que le navigateur l'a compris, et à droite les règles CSS appliquées à l'élément sélectionné, celles qui gagnent et celles qui sont barrées
ConsoleLire les erreurs (fichier introuvable, erreur JavaScript)
Réseau / NetworkVoir chaque fichier demandé, son code de réponse (200, 404), son poids et son temps de chargement
Mode responsive (Ctrl+Maj+M)Afficher la page à la taille d'un téléphone ou d'une tablette
Lighthouse (Chrome, Edge)Auditer performances, accessibilité, bonnes pratiques et référencement

Le réflexe à prendre : quand une règle CSS « ne marche pas », inspecte l'élément avant de modifier quoi que ce soit. Tu verras tout de suite si la règle est appliquée, barrée par une autre plus forte (chapitre 7) ou absente parce que le fichier CSS n'est pas chargé (onglet Réseau : style.css en 404).

Valider ton code

Un navigateur est très tolérant : il affiche quelque chose même si ton HTML est faux, en devinant ce que tu voulais dire. Le problème, c'est que chaque navigateur peut deviner différemment, et qu'un lecteur d'écran ou un moteur de recherche peut mal comprendre la page. Le validateur du W3C (validator.w3.org) vérifie ton HTML et liste les erreurs :

text
Error: End tag "p" seen, but there were open elements.
From line 12, column 5; to line 12, column 8
Error: Element "li" not allowed as child of element "body" in this context.
Warning: Consider adding a "lang" attribute to the "html" start tag.

Chaque erreur donne la ligne et la colonne. Corrige toujours la première erreur d'abord : une balise mal fermée en provoque souvent dix autres plus bas, qui disparaissent avec elle. Le W3C propose aussi un validateur CSS (jigsaw.w3.org/css-validator).

Exercices

Exercice 1 sur 4 Le bon langage Réussi À revoir

Pour chaque besoin, indique s'il relève de HTML, de CSS ou de JavaScript.

  1. Le texte « Horaires d'ouverture » est un titre de section.
  2. Les titres de section sont en majuscules et soulignés d'un trait vert.
  3. Un clic sur « Afficher les horaires d'été » fait apparaître un tableau caché.
  4. Le logo est une image qui mène à la page d'accueil.
  5. Sur téléphone, le menu passe sous le logo au lieu d'être à côté.
  6. Le formulaire refuse un envoi tant que le champ e-mail est vide.
Voir la réponseMasquer la réponse de l'exercice 1
  1. HTML : c'est la nature du contenu (un titre, <h2>).
  2. CSS : c'est de la présentation (text-transform: uppercase, une bordure).
  3. JavaScript : c'est un comportement déclenché par un événement (un clic). Note qu'une balise HTML, <details>, sait aussi afficher et masquer un contenu sans script (chapitre 4).
  4. HTML : une image (<img>) placée dans un lien (<a>).
  5. CSS : une règle de mise en page qui dépend de la largeur de l'écran (une media query, chapitre 10).
  6. HTML suffit : l'attribut required sur le champ (chapitre 5). JavaScript permet d'aller plus loin, et le serveur doit de toute façon revérifier.

Tu avais trouvé ?

Exercice 2 sur 4 Le trajet d'une page Réussi À revoir

La page https://www.mediatheque-tilleuls.fr/agenda.html cite une feuille de style, trois images et un script.

  1. Combien de fichiers le navigateur demande-t-il au serveur au minimum pour afficher la page complète ?
  2. Le fichier style.css est introuvable (erreur 404). Que voit l'utilisateur ?
  3. Où vérifies-tu, dans les outils de développement, que style.css est bien arrivé ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Six : le fichier HTML d'abord, puis la feuille de style, les trois images et le script (1 + 1 + 3 + 1). N'oublie pas le HTML lui-même. Le navigateur peut ensuite en demander d'autres, que le CSS cite à son tour (polices, images de fond).
  2. La page s'affiche quand même, avec tout son contenu, mais sans mise en forme : polices et couleurs par défaut du navigateur, éléments empilés les uns sous les autres. C'est la séparation du fond et de la forme en action : le contenu reste lisible.
  3. Dans l'onglet Réseau (Network) : la ligne style.css doit afficher le code 200. Un 404 signifie que le chemin est faux ou que le fichier n'a pas été envoyé sur le serveur.

Tu avais trouvé ?

Exercice 3 sur 4 Noms de fichiers Réussi À revoir

Parmi ces noms, lesquels poseront problème sur un serveur web, et pourquoi ? Propose un nom correct pour chacun.

Accueil.html, mentions légales.html, agenda-2026.html, Photo Façade.JPG, style.css, index.htm

Voir la réponseMasquer la réponse de l'exercice 3
  • Accueil.html : la majuscule n'est pas interdite, mais un lien écrit accueil.html ne le trouvera pas sur un serveur Linux. Renomme-le accueil.html (ou index.html si c'est la page d'accueil).
  • mentions légales.html : l'espace devient %20 dans l'adresse et l'accent est encodé (%C3%A9). Écris mentions-legales.html.
  • agenda-2026.html : correct.
  • Photo Façade.JPG : espace, cédille et majuscules. Écris photo-facade.jpg.
  • style.css : correct.
  • index.htm : l'extension .htm fonctionne (les serveurs la reconnaissent), mais mélanger .htm et .html dans un même site crée des liens cassés. Garde .html partout.

Tu avais trouvé ?

Exercice 4 sur 4 Lire le validateur Réussi À revoir

Le validateur renvoie ces trois messages pour une page. Dans quel ordre les traites-tu, et que signifie chacun ?

text
Error: Stray end tag "div". From line 40, column 3
Error: Unclosed element "section". From line 18, column 5
Warning: The "type" attribute is unnecessary for JavaScript resources. From line 52, column 5
Voir la réponseMasquer la réponse de l'exercice 4

Traite-les dans l'ordre des lignes, en commençant par la ligne 18 : une balise <section> ouverte à la ligne 18 n'est jamais fermée. C'est très probablement la cause de l'erreur de la ligne 40 : un </div> « orphelin » (stray), qui ne correspond plus à rien parce que les ouvertures et fermetures sont décalées. Ajoute le </section> manquant, revalide, et l'erreur de la ligne 40 disparaîtra sans doute.

Le dernier message est un avertissement, pas une erreur : <script type="text/javascript"> est inutile, JavaScript étant le type par défaut. Supprime l'attribut pour un code plus propre.

Tu avais trouvé ?

Chapitre terminé !

Fais les 4 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Structure d'une page HTML : balises, squelette et texteRevoir le sommaire du cours