Tableaux

Index général
Introduction au Web Page Web de base Introduction à HTML Introduction à CSS Les tableaux
Les images Les listes Les hyperliens Les couleurs Les attributs ID et CLASS
Les éléments DIV et SPAN Éléments structurants Mise en page en colonnes Éléments de types block et inline Le modèle de boîte CSS
Les unités de mesures CSS Les sélecteurs CSS Les grilles CSS Introduction aux formulaires Suppléments pour PFI

Dernière mise à jour le 18 septembre 2022

Qu'est-ce qu'un tableau?

Un tableau en HTML sert à organiser des éléments dans un tableau à deux dimensions.

Il peut contenir n'importe quoi :

Lorem ipsum dolor sit amet 666
Je suis une cellule Bonjour!

Il pourrait même contenir un autre tableau!

Un tableau est constitué d’une ou plusieurs rangées qui, à leur tour, sont constituées d’une ou plusieurs cellules.

AVERTISSEMENT : Les tableau ne doivent pas être utilisés pour la mise en page, mais seulement pour présenter de l'information sous forme tabulaire. Pour la mise en page il y a les feuilles de styles (CSS).

Un tableau élémentaire

Un tableau, représenté par l'élément table, contient des rangées, soit des éléments tr (pour table row).

Ces rangées contiennent à leur tour des cellules, soit des éléments td (pour table data).

<table>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
</table>

Si on veut utiliser une rangée du tableau comme entête, on pêut remplacer ses éléments td par des éléments th (pour table header).

<table>
  <tr>
    <th>...</th><th>...</th><th>...</th>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
</table>

L'élément th est par défaut centré et affiché en caractères gras par les navigateurs, sans qu'il soit nécessaire de lui affecter un style.

Bla Bla Bla
Lorem ipsum dolor sit amet 666
Je suis une cellule Bonjour!

Exemple
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Tableau élémentaire</title>
</head>
<body>
  <p>
    Par défaut un tableau n'a pas de bordure et
    pas de remplissage (padding).
  </p>
  <p>
    La première rangée contient des "th" et les
    autres des éléments "td".
  </p>

  <table>
    <tr>
      <th>Article</th>
      <th>Prix</th>
    </tr>
    <tr>
      <td>Ventilateur</td>
      <td>70$</td>
    </tr>
    <tr>
      <td>Climatiseur</td>
      <td>350$</td>
    </tr>
  </table>

</body>
</html>                             
Je teste

Bordures

Par défaut les tableaux n'ont pas de bordures.

enteteenteteentete
cellulecellulecellule
cellulecellulecellule

On peut leur en ajouter à l'aide des propriétés border-width, border-style et border-color.

On doit modifier la valeur des propriétés pour les éléments th et td.

Exemple :

th, td {
  border-width: 2px;
  border-style: solid;
  border-color: blue;
}

Sortie :

entete entete entete
cellule cellule cellule
cellule cellule cellule

Il est généralement plus simple d'utiliser la propriété border qui est la combinaison des propriétés: border-width, border-style et border-color.

On aurait donc pu écrire le code de cette manière :

th, td {
  border: 2px solid blue;
}

Fusionner les bordures

C'est déjà un début, mais les bordures des différentes cellules sont par défaut distancées l'une de l'autre, ce qui n'est généralement pas l'effet recherché.

La propriété border-collapse permet de régler le problème en fusionnant les bordures.

Cette propriété est rajoutée à l'élément table.

Exemple :

table {
  border-collapse: collapse;
}
th, td {
  border: 2px solid blue;
}

Sortie :

entete entete entete
cellule cellule cellule
cellule cellule cellule

On peut également simplifier les choses en donnant les mêmes propriétés à tous les éléments qui forment le tableau :

table, th, td {
  border: 2px solid blue;
  border-collapse: collapse;
}

Largeur des bordures

La largeur s'exprime dans différentes unités, on peut écrire thin, medium, thick, une valeur en pixels (spécifier l'unité) ou dans toutes les unités possibles en CSS (em, rem, %, etc.), mais ces dernières options sont rarement utilisées

Types de bordures

Les types les plus utilisés sont les suivants :

dotted
dashed
double
solid

Espacement intérieur

Par défaut les tableaux n'ont pas d'espacement intérieur (remplissage ou padding en anglais).

Pour aérer le contenu des cellules, il suffit d'utiliser la propriété padding, qui correspond à l'espacement intérieur entre la bordure et le contenu qui est généralement du texte, mais qui pourrait aussi être une image, un bouton, etc.

Exemple :

table, th, td {
  border: 2px solid blue;
  border-collapse: collapse;
  padding: 10px;
}

Sortie :

entete entete entete
cellule cellule cellule
cellule cellule cellule

Le padding peut être spécifié dans n'importe quelle unité, mais nous nous limiterons pour l'instant au pixel ("px").

Exemple
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Tableau élémentaire</title>
  
  <style>
    table {
      border-collapse: collapse;
    }
    th, td {
      border: 2px solid blue;
      padding: 10px;
    }
  </style>

</head>
<body>
  <p>
    N'hésitez pas à modifier les styles pour en
    constater l'effet sur le tableau
  </p>

  <table>
    <tr>
      <th>Article</th>
      <th>Prix</th>
    </tr>
    <tr>
      <td>Ventilateur</td>
      <td>70$</td>
    </tr>
    <tr>
      <td>Climatiseur</td>
      <td>350$</td>
    </tr>
  </table>

</body>
</html>                             
Je teste

Fusionner les cellules

On peut faire en sorte que toutes les cellules d'un tableau n'aient pas la même taille.

Exemple :

Sur 2 colonnes
Sur 2
rangées

On y parvient à l'aide des propriétés colspan et rowspan des éléments th et td.

La propriété colspan permet d'avoir des cellules qui s’étendent sur plus d’une colonne.

Exemple :

<table>
  <tr>
    <td colspan="2">colspan=2</td>
    <td></td>
    <!-- pas de 3e td -->
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

Sortie :

colspan=2

La propriété rowspan permet d'avoir des cellules qui s’étendent sur plus d’une rangée.

Exemple :

<table>
  <tr>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td rowspan="2">rowspan=2</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <!-- pas de 3e td -->
  </tr>
</table>

Sortie :

rowspan=2

Exemple combiné :

<table>
  <tr>
    <td colspan="2" style="background:turquoise"></td>
    <td></td>
    <!-- pas de 3e td -->
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td rowspan="2" style="background:orange"></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <!-- pas de 3e td -->
  </tr>
</table>

Sortie :

En résumé

Tableaux

Tableau de 2 rangées et 3 colonnes

<table>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
</table>

Avec avec ligne d'entête

<table>
  <tr>
    <th>...</th><th>...</th><th>...</th>
  </tr>
  <tr>
    <td>...</td><td>...</td><td>...</td>
  </tr>
</table>

Avec avec colonne d'entête

<table>
  <tr>
    <th>...</th><td>...</td><td>...</td>
  </tr>
  <tr>
    <th>...</th><td>...</td><td>...</td>
   </tr>
</table>

Fusionner 2 cellules à l'horizontale

<table>
  <tr>
    <td colspan="2"></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td>
  </tr>
</table>

Fusionner 2 cellules à la verticale

<table>
  <tr>
    <td rowspan="2"></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td>
  </tr>
</table>

CSS minimal pour tableau

table {
  border-collapse: collapse;
}
th, td {
  border: solid black 1px;
}