RM

RM Partie 3 : Structure sémantique et organisation

Partie 3 — Structure sémantique et organisation

1) Objectifs pédagogiques


2) <div> vs balises sémantiques : quand utiliser quoi ?

2.1 <div> : conteneur générique

<div class="carte-produit">
  <h3>Stagiaire HTML – Promo 2025</h3>
  <p>Description…</p>
</div>

2.2 Les balises sémantiques HTML5 (landmarks et sections)

Règle d’or : si une balise sémantique décrit le rôle du contenu, préfère-la à <div>.


3) Accessibilité & SEO : pourquoi la sémantique compte

3.1 Landmarks ARIA implicites

Les balises sémantiques exposent des repères (landmarks) aux technologies d’assistance :

Conséquence : un lecteur d’écran peut lister et sauter directement aux repères, comme nous le faisons visuellement.

3.2 Bonnes pratiques d’accessibilité

3.3 SEO (référencement)


4) Imbrication et hiérarchie

4.1 Principes d’imbrication

4.2 Hiérarchie de titres

4.3 Quand utiliser <section> ?


5) Patrons (patterns) utiles

5.1 Squelette de page sémantique

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <title>Titre de la page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>

    <a href="#main" class="skip">Aller au contenu</a>

    <header>
      <h1>Nom du site</h1>
      <p>Sous-titre / slogan</p>
      <nav aria-label="Navigation principale">
        <ul>
          <li><a href="/">Accueil</a></li>
          <li><a href="/articles">Articles</a></li>
          <li><a href="/contact">Contact</a></li>
        </ul>
      </nav>
    </header>

    <main id="main">
      <!-- Contenu principal de la page -->
      <article>
        <header>
          <h2>Titre de l’article</h2>
          <p>Publié le <time datetime="2025-09-06">6 septembre 2025</time></p>
        </header>

        <section>
          <h3>Contexte</h3>
          <p>Texte d’introduction…</p>
        </section>

        <section>
          <h3>Développement</h3>
          <p>Texte…</p>
        </section>

        <footer>
          <p>Auteur : <a href="/auteurs/manuel">Manuel</a></p>
        </footer>
      </article>

      <aside aria-labelledby="encadre">
        <h2 id="encadre">À retenir</h2>
        <p>Résumé, glossaire, lien connexe…</p>
      </aside>
    </main>

    <footer>
      <p>© 2025 — Mon site. <a href="/mentions-legales">Mentions légales</a></p>
    </footer>
  </body>
</html>

5.2 Liste d’articles (page d’index)

<main id="main">
  <h1>Actualités</h1>

  <article>
    <header>
      <h2>Nouvelle version</h2>
      <p>Le <time datetime="2025-08-30">30/08/2025</time></p>
    </header>
    <p>Résumé… <a href="/article/nouvelle-version">Lire la suite</a></p>
  </article>

  <article>
    <header>
      <h2>Entretien avec…</h2>
      <p>Le <time datetime="2025-08-20">20/08/2025</time></p>
    </header>
    <p>Résumé… <a href="/article/entretien">Lire la suite</a></p>
  </article>
</main>
<nav aria-label="Pagination">
  <ul>
    <li><a href="?page=1">1</a></li>
    <li><a href="?page=2" aria-current="page">2</a></li>
    <li><a href="?page=3">3</a></li>
  </ul>
</nav>

6) Pièges fréquents


7) Exercice (avec énoncé clair)

But : Structurer un mini-article avec <header>, <nav>, <article>, <footer>.

Consignes

  1. Crée un fichier mini-article.html avec la structure HTML de base (doctype, html lang, head avec charset + viewport, body).

  2. En haut de page, ajoute un <header> contenant :

    • un <h1> pour le nom du site ;
    • un <nav aria-label="Navigation principale"> avec une liste de liens (Accueil, Articles, Contact).
  3. Dans <main id="contenu">, ajoute un unique <article> avec :

    • un <header> d’article (un <h2> titre d’article + date avec <time>),
    • deux sections (<section>), chacune avec un <h3> et un paragraphe,
    • un <footer> d’article avec l’auteur.
  4. Après l’article, ajoute un <aside> avec un titre (via <h2> ou aria-label) contenant une astuce ou un résumé.

  5. Termine par un <footer> global de page (© + lien vers mentions légales).

  6. Tu peux ajouter un lien d’évitement en tout début de body : <a href="#contenu">Aller au contenu</a>.

Contraintes : un seul <main>, des titres hiérarchiques cohérents, aria-label si nécessaire, pas de rôles ARIA redondants.


8) Corrigé possible (référence)

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8">
    <title>Mon site — Mini-article</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>

    <a href="#contenu" class="skip">Aller au contenu</a>

    <header>
      <h1>Mon site</h1>
      <nav aria-label="Navigation principale">
        <ul>
          <li><a href="/">Accueil</a></li>
          <li><a href="/articles">Articles</a></li>
          <li><a href="/contact">Contact</a></li>
        </ul>
      </nav>
    </header>

    <main id="contenu">
      <article>
        <header>
          <h2>Structurer avec HTML5</h2>
          <p>Publié le <time datetime="2025-09-06">6 septembre 2025</time></p>
        </header>

        <section>
          <h3>Pourquoi la sémantique ?</h3>
          <p>Les balises sémantiques décrivent le rôle du contenu, ce qui améliore l’accessibilité,
             la navigation par repères et la compréhension par les moteurs de recherche.</p>
        </section>

        <section>
          <h3>Div vs balises sémantiques</h3>
          <p>Utilise <code><div></code> si aucune balise sémantique ne convient.
             Préfère <code><article></code>, <code><section></code>, <code><nav></code>, etc.
             lorsque le rôle est identifiable.</p>
        </section>

        <footer>
          <p>Auteur : <a href="/auteurs/manuel">Manuel Regamey</a></p>
        </footer>
      </article>

      <aside aria-labelledby="note">
        <h2 id="note">À noter</h2>
        <p>Chaque section devrait avoir un titre ; <code><main></code> est unique ; évite les rôles ARIA redondants.</p>
      </aside>
    </main>

    <footer>
      <p>© 2025 — Mon site. <a href="/mentions-legales">Mentions légales</a></p>
    </footer>

  </body>
</html>

9) Mini-quiz

  1. Quand utiliser <article> plutôt que <section> ?
  2. Peut-on avoir plusieurs <header> dans une page ? Et plusieurs <main> ?
  3. Un <section> sans titre est-il approprié ? Pourquoi ?
  4. Quel attribut d’accessibilité donner à une <section> sans titre visible pour qu’elle soit un repère nommé ?
  5. Faut-il ajouter role="navigation" sur un <nav> ?
  6. Donne un exemple de lien d’évitement.
  7. Pourquoi les balises sémantiques sont-elles utiles pour l’accessibilité et le SEO ?

Corrigé (bref)

  1. <article> pour un contenu autonome partageable (billet, carte, fiche) ; <section> pour un groupement thématique d’une plus grande unité.
  2. Autant de <header> que de sections ; un seul <main> par page, non imbriqué.
  3. Non : <section> doit avoir un titre ; sinon, utiliser <div>.
  4. aria-label="Nom de la section" ou aria-labelledby="id-d-un-titre".
  5. Non, <nav> a déjà un rôle implicite ; inutile de le redéclarer.
  6. <a href="#contenu">Aller au contenu</a> placé tout au début du body.
  7. Elles exposent des repères et une structure claire (meilleure navigation pour les lecteurs d’écran ; meilleure compréhension de la page par les moteurs).

10) Fiche-mémo