Essayer de coder ← Retour aux sujets

Les zones de la page

landmarks

Les balises sémantiques disent à quoi sert chaque zone. Navigateurs, moteurs de recherche et lecteurs d'écran s'en servent pour comprendre et parcourir la page.

<header>
En-tête de la page ou d'une section (logo, titre)
<nav>
Bloc de liens de navigation principaux
<main>
Contenu principal : un seul par page
<article>
Contenu autonome (article, fiche, commentaire)
<section>
Regroupement thématique, avec un titre
<aside>
Contenu annexe (encadré, liens connexes)
<footer>
Pied de page ou de section (mentions, contact)
page.html
<body>
  <header>
    <h1>Cours NSI</h1>
    <nav>
      <a href="index.html">Accueil</a>
      <a href="cours.html">Cours</a>
    </nav>
  </header>
  <main>
    <article>
      <h2>Le tri par sélection</h2>
      <p>Principe de l'algorithme…</p>
    </article>
    <aside>
      <h2>À savoir</h2>
      <p>Complexité quadratique.</p>
    </aside>
  </main>
  <footer>
    <p>&copy; 2026 Cours NSI</p>
  </footer>
</body>

Sens du détail et conteneurs neutres

figure · time

D'autres balises précisent le sens d'un contenu. <div> et <span> n'en ont aucun : à réserver aux cas où rien d'autre ne convient.

<figure> / <figcaption>
Illustration et sa légende
<time datetime="2026-10-03">
Date lisible par la machine
<address>
Coordonnées de l'auteur de la page ou de l'article
<mark> <cite> <small>
Passage mis en évidence / titre d'œuvre / mention légale
<div class="carte">
Conteneur de bloc neutre (pour le CSS, le JavaScript)
<span class="prix">
Conteneur en ligne neutre
sens.html
<article>
  <h2>Concours de robotique</h2>
  <p>Publié le <time datetime="2026-10-03">3 octobre 2026</time></p>
  <figure>
    <img src="robot.jpg" alt="Robot suiveur de ligne" width="320" height="200">
    <figcaption>Le robot de l'équipe NSI.</figcaption>
  </figure>
  <address>Contact : <a href="mailto:club@exemple.fr">club@exemple.fr</a></address>
</article>

🗂️ Le cours : donner du sens à la structure

Avant HTML5, on construisait les pages avec des <div> partout. Pour le navigateur, une page n'était alors qu'un empilement de boîtes dont il ignorait le rôle. Les balises sémantiques (*semantic* : « qui a un sens ») nomment ces rôles : en-tête, menu, contenu, pied de page.

Pourquoi s'en soucier ?

  • Accessibilité : un lecteur d'écran propose de sauter directement au menu (<nav>) ou au contenu (<main>) ; avec des <div>, il lit tout dans l'ordre.
  • Référencement : les moteurs de recherche repèrent le contenu principal et les titres.
  • Lisibilité du code : <footer> se comprend, <div class="bas"> demande une explication.
  • Maintenance : on retrouve plus vite la bonne zone à modifier.

La structure d'une page

body
├── header        logo, titre du site, <nav> principal
├── main          contenu propre à CETTE page (un seul <main>)
│   ├── article   contenu autonome
│   ├── section   regroupement thématique avec un titre
│   └── aside     encadré, informations annexes
└── footer        mentions légales, contact

article ou section ?

Un <article> a un sens complet hors de son contexte : on pourrait le publier ailleurs tel quel (un article de blog, une fiche de cours, un commentaire). Une <section> est un regroupement thématique à l'intérieur d'un document, et doit presque toujours commencer par un titre. S'il n'y a pas de titre naturel et que tu n'as besoin que de style, c'est un <div>.

articles.html
<main>
  <h1>Derniers articles</h1>
  <article>
    <h2><a href="tri.html">Comprendre le tri</a></h2>
    <p>Publié le <time datetime="2026-09-20">20 septembre 2026</time></p>
    <p>Résumé de l'article…</p>
  </article>
  <article>
    <h2><a href="reseau.html">Le modèle TCP/IP</a></h2>
    <p>Publié le <time datetime="2026-09-12">12 septembre 2026</time></p>
    <p>Résumé de l'article…</p>
  </article>
</main>

header et footer ne servent pas qu'à la page

Un <header> ou un <footer> peut aussi apparaître dans un <article> ou une <section> (titre et auteur en haut, sources en bas). Dans ce cas ils concernent seulement leur bloc.

nav : la navigation principale

<nav> est réservé aux blocs de liens de navigation importants (menu principal, sommaire, fil d'Ariane), pas à chaque groupe de liens. S'il y en a plusieurs, distingue-les avec aria-label="Menu principal", aria-label="Pied de page".

Quand utiliser div et span

Quand aucune balise ne convient : regrouper des éléments pour les aligner avec Flexbox, entourer un mot pour lui donner une couleur (<span class="prix">), cibler un élément avec JavaScript. Ils ne sont pas à éviter à tout prix, mais à choisir en dernier.

Les attributs globaux

Certains attributs fonctionnent sur tous les éléments.

AttributUsage
ididentifiant unique dans la page (ancres, CSS, JavaScript)
classun ou plusieurs noms de classes séparés par des espaces, pour le CSS
langlangue d'un passage (<span lang="en">cheat sheet</span>)
titleinfo-bulle au survol (ne pas y mettre d'information essentielle)
hiddenmasque l'élément
data-*données personnalisées lues par JavaScript (data-niveau="3")
attributs-globaux.html
<p id="avertissement" class="note important" data-niveau="3">Attention au piège.</p>
<p>Le mot <span lang="en">cheat sheet</span> est anglais.</p>
<p hidden>Ce paragraphe n'est pas affiché.</p>
Rendu
Deux lignes seulement : « Attention au piège. » puis la phrase sur le mot anglais. Le troisième paragraphe est masqué.

⚠️ Erreurs fréquentes

Des div partout

À éviter
faux.html
<div class="header">
  <div class="menu">…</div>
</div>
<div class="contenu">…</div>
<div class="footer">…</div>
Correct
correct.html
<header>
  <nav>…</nav>
</header>
<main>…</main>
<footer>…</footer>

Plusieurs main dans la page

<main> désigne le contenu principal et unique de la page. Deux <main> brouillent les repères des lecteurs d'écran. Le contenu qui se répète d'une page à l'autre (menu, pied de page) reste en dehors.

Une section sans titre

Une <section> sans titre ne sert à rien pour le plan du document : si c'est seulement un conteneur de style, utilise <div>.

Mettre un nav autour de tous les liens

Un groupe de liens dans un paragraphe ou un encadré n'est pas de la navigation principale. Réserve <nav> aux menus et sommaires.

Choisir une balise pour son aspect

<blockquote> pour indenter, <h3> pour grossir, <address> pour mettre en italique : le sens doit primer. L'apparence se règle en CSS.

Dupliquer un id

Un id doit être unique dans la page. Pour appliquer le même style à plusieurs éléments, utilise une class.

📋 Aide-mémoire

  • <header>, <nav>, <main> (un seul), <article>, <section> (avec titre), <aside>, <footer>.
  • <article> : autonome ; <section> : thématique ; <div> / <span> : neutres, en dernier recours.
  • <figure> + <figcaption>, <time datetime>, <address> : précisent le sens d'un contenu.
  • header et footer peuvent aussi apparaître dans un article ou une section.
  • Attributs globaux : id (unique), class, lang, title, hidden, data-*.
  • La sémantique aide lecteurs d'écran, moteurs de recherche et relecture du code ; l'apparence reste l'affaire du CSS.