Comment créer un tableau HTML efficace : exemple et conseils pratiques

Tutoriel HTML · pas à pas

Créer un tableau HTML reste l’une des compétences de base pour structurer des données sur une page web : grilles tarifaires, plannings, comparatifs ou listings de produits. La logique tient en quelques balises, mais un tableau réellement propre demande un peu de méthode côté sémantique, accessibilité et style. Ce guide montre comment faire un tableau HTML de zéro, puis comment le mettre en forme avec du CSS et le rendre interactif.

L’essentiel en une phrase
Un tableau HTML se construit avec quatre balises : <table> (le conteneur), <tr> (une ligne), <th> (une cellule d’en-tête) et <td> (une cellule de données). On les organise en sections <thead> / <tbody> / <tfoot>, puis on stylise avec du CSS.

Qu’est-ce qu’un tableau HTML et comment fonctionne-t-il ? #

Le tableau HTML existe depuis les toutes premières versions du langage. Sa force est d’organiser de l’information en lignes et en colonnes au sein d’un conteneur unique. C’est l’outil adapté pour des données réellement tabulaires (un tableau ne doit pas servir à mettre en page une grille décorative : on réserve cela au CSS).

Les balises HTML de tableau indispensables :

À lire Design d’Interface : Comprendre sa définition, son importance et les meilleures pratiques

<table>
Délimite l’ensemble du tableau. C’est le conteneur racine.
<tr>
Définit une ligne (table row). Chaque ligne contient des cellules.
<td>
Une cellule de données standard (table data).
<th>
Une cellule d’en-tête, pour les titres de colonnes ou de lignes.

Au-dessus de ces briques, trois balises structurent le tableau en zones logiques, ce qui améliore la lisibilité du code, la sémantique pour les robots des moteurs de recherche et la restitution par les technologies d’assistance :

  • <thead> : regroupe les cellules d’en-tête.
  • <tbody> : encapsule le contenu principal, distinguant clairement données et titres.
  • <tfoot> : réservé à la synthèse ou à la totalisation des colonnes.

Pour des données plus complexes, on fusionne des cellules avec les attributs colspan (horizontal) et rowspan (vertical). L’attribut scope (valeur col ou row) précise la portée d’un en-tête, ce qui aide les lecteurs d’écran — un point devenu central avec le RGAA (Référentiel Général d’Amélioration de l’Accessibilité) en France.

Faire un tableau HTML : la structure pas à pas #

Voici la marche à suivre pour écrire un code de tableau HTML correct, du conteneur jusqu’au pied de page.

  1. Ouvrir le conteneur <table>
    Tout part de la balise <table>, fermée par </table>. Tout le reste vit à l’intérieur.
  2. Déclarer une légende avec <caption>
    Juste après l’ouverture, <caption> donne un titre lu en priorité par les lecteurs d’écran.
  3. Construire l’en-tête dans <thead>
    Une ligne <tr> contenant des cellules <th scope="col"> pour les titres de colonnes.
  4. Remplir le corps avec <tbody> et les paires tr / td
    Chaque ligne <tr> regroupe autant de <td> qu’il y a de colonnes.
  5. Ajouter un pied avec <tfoot> si besoin
    Idéal pour une source ou un total, souvent avec un colspan couvrant toute la largeur.

Le squelette minimal d’un tableau à deux colonnes ressemble à ceci :

À lire CPL (courant porteur en ligne) : internet par les prises électriques

<table>
  <caption>Ma légende</caption>
  <thead>
    <tr>
      <th scope="col">Colonne 1</th>
      <th scope="col">Colonne 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Donnée A</td>
      <td>Donnée B</td>
    </tr>
  </tbody>
</table>

Exemples de tableaux appliqués à des cas concrets #

Passons à des illustrations tangibles combinant plusieurs techniques. Premier cas : une grille tarifaire avec en-tête coloré, source en pied de page et fusion de cellules via colspan.

Aperçu rendu
Grille tarifaire (exemple)
Offre Data Appels/SMS Prix mensuel
Série Spéciale 100 Go 100 Go Illimités 12,99 €
Forfait 150 Go 150 Go Illimités 19,99 €
Forfait 5G illimité Illimité Illimités 29,99 €
Tarifs fictifs fournis à titre d’exemple pédagogique.

Ce tableau utilise <caption> pour la légende, <th> pour les en-têtes, <tfoot> pour la source, et colspan="4" fusionne les quatre cellules du pied de page en une seule. Le code correspondant :

<table>
  <caption>Grille tarifaire (exemple)</caption>
  <thead>
    <tr><th scope="col">Offre</th><th scope="col">Data</th><th scope="col">Appels/SMS</th><th scope="col">Prix mensuel</th></tr>
  </thead>
  <tbody>
    <tr><td>Série Spéciale 100 Go</td><td>100 Go</td><td>Illimités</td><td>12,99 €</td></tr>
  </tbody>
  <tfoot>
    <tr><td colspan="4">Source / note de bas de tableau</td></tr>
  </tfoot>
</table>

Second cas : un planning hebdomadaire, où colspan permet de représenter un événement couvrant plusieurs jours.

Aperçu rendu
Planning hebdomadaire (extrait)
Lundi Mardi Mercredi Jeudi Vendredi
Réunion 9h Conf call 11h Démo client
Suivi Projet A 14h Atelier UX 15h Débrief semaine

Ici, colspan="2" étale la cellule « Suivi Projet A » sur le lundi et le mardi. Dans les deux exemples, la légende et la structure rendent chaque tableau immédiatement compréhensible, tout en restant propre pour le référencement grâce à des balises sémantiques précises.

À lire Comment convertir BPM en millisecondes : méthode précise pour musiciens

Mettre en forme un tableau en HTML avec du CSS #

Le passage d’un tableau brut à une version professionnelle se joue côté CSS. Quelques propriétés suffisent à transformer la présentation tout en préservant l’accessibilité :

  • Bordures épurées via border-collapse: collapse (fusionne les bordures) et éventuellement border-radius sur le conteneur.
  • Zebra striping : l’alternance colorée des lignes avec tr:nth-child(even) améliore nettement la lisibilité.
  • Surlignage interactif : tr:hover met en valeur la ligne survolée.
  • En-tête contrasté : une couleur de fond sur th distingue clairement les titres des données.
  • Réactivité mobile : overflow-x: auto sur un conteneur évite que le tableau ne casse la mise en page sur petit écran, le trafic web étant aujourd’hui majoritairement mobile.

Un exemple de feuille de style complète appliquée à un tableau ciblé par sa classe :

table.tarifs { border-collapse: collapse; width: 100%; }
table.tarifs th,
table.tarifs td { border: 1px solid #B6B6B6; padding: 9px; }
table.tarifs tr:nth-child(even) { background-color: #f2f2f2; }
table.tarifs tr:hover { background-color: #FFF7D6; }
table.tarifs th { background-color: #5B72F2; color: #fff; }
@media (max-width: 640px) {
  table.tarifs { font-size: 12px; display: block; overflow-x: auto; }
}

Cibler le tableau par une class dédiée (plutôt qu’un sélecteur global table) évite les collisions de style avec le reste de la page ou un framework CSS.

Dynamiser vos tableaux avec JavaScript #

Quand l’utilisateur attend de l’interactivité, JavaScript et des librairies dédiées (DataTables.js, Tabulator, Grid.js) transforment un simple tableau en module dynamique. Les fonctionnalités les plus utiles :

À lire La révolution méconnue qui a créé le premier navigateur graphique et changé notre façon d’explorer le web

  • Tri dynamique des colonnes au clic sur l’en-tête.
  • Filtrage en temps réel par mot-clé.
  • Pagination automatique pour les tableaux volumineux.
  • Ajout interactif de données sans recharger la page.

Le point d’entrée d’un tri « maison » consiste à écouter le clic sur chaque <th> :

document.querySelectorAll('th').forEach(header => {
  header.addEventListener('click', () => {
    // Tri basique pour démo - à adapter selon les projets
    // Voir DataTables.js ou Vanilla JS pour l'implémentation complète
  });
});

Toute fonctionnalité ajoutée doit rester accessible : annonce vocale du tri en cours, gestion du focus clavier et navigation au clavier. Une interactivité qui casse l’accessibilité est un recul, pas un progrès.

Garantir l’accessibilité de ses tableaux HTML #

L’accessibilité s’impose à la fois pour des raisons réglementaires (RGAA en France, directive européenne 2016/2102) et pour le confort de lecture de tous. Les bons réflexes :

  • Utiliser systématiquement <caption> pour fournir une description globale du tableau.
  • Renseigner scope="col" et scope="row" pour préciser la portée des en-têtes aux lecteurs d’écran (JAWS, NVDA, VoiceOver).
  • Respecter un ratio de contraste suffisant (au moins 4,5:1 selon le WCAG) entre le texte et l’arrière-plan.
  • Éviter les fusions arbitraires qui nuisent à la lecture linéaire d’une cellule à l’autre.

Erreurs fréquentes à éviter #

À éviter
  • Cellules désalignées : un nombre de <td> incohérent d’une ligne à l’autre.
  • Sémantique absente : pas de <thead> ni de <caption>.
  • Sélecteurs CSS trop génériques qui entrent en collision avec un framework.
  • Aucune gestion mobile : le tableau déborde de l’écran.
À faire
  • Vérifier que chaque <tr> a le bon nombre de cellules (en tenant compte des colspan).
  • Structurer avec <thead> / <tbody> / <tfoot>.
  • Cibler le tableau par class ou id dédié.
  • Tester le rendu sur mobile avec overflow-x: auto.
À retenir
  • Quatre balises de base : <table>, <tr>, <th>, <td>.
  • Trois sections structurantes : <thead>, <tbody>, <tfoot>.
  • colspan et rowspan fusionnent les cellules ; scope et caption servent l’accessibilité.
  • Le CSS (border-collapse, zebra striping, hover) habille le tableau ; overflow-x: auto le rend mobile.

FAQ : créer un tableau HTML #

Comment créer un tableau sur HTML ?
On ouvre une balise <table>, puis on ajoute des lignes avec <tr>. À l’intérieur de chaque ligne, on place des cellules d’en-tête <th> (pour les titres) et des cellules de données <td>. Pour un code propre, on regroupe l’en-tête dans <thead> et le contenu dans <tbody>.
Comment mettre en forme un tableau en HTML ?
La mise en forme se fait en CSS, pas en HTML. Les propriétés les plus utiles sont border-collapse: collapse pour les bordures, tr:nth-child(even) pour alterner la couleur des lignes (zebra striping), tr:hover pour le survol et une couleur de fond sur th pour distinguer l’en-tête. On évite l’ancien attribut border sur la balise au profit du CSS.
Comment faire un tableau à deux colonnes en HTML ?
Il suffit de mettre deux cellules par ligne. Dans <thead>, une ligne avec deux <th> ; dans <tbody>, chaque ligne <tr> contient deux <td>. Le nombre de colonnes correspond simplement au nombre de cellules présentes dans chaque ligne.
Quelle différence entre <th> et <td> ?
<th> est une cellule d’en-tête (table header) : son contenu est mis en gras et centré par défaut, et elle est annoncée comme en-tête par les lecteurs d’écran. <td> est une cellule de données ordinaire (table data). On ajoute scope="col" ou scope="row" sur les <th> pour préciser ce qu’ils titrent.

Boutique Connectique est édité de façon indépendante. Soutenez la rédaction en nous ajoutant dans vos favoris sur Google Actualités :