9# Les tableaux
Les tableaux ont eu une enfance heureuse dans le petit monde des designers web, ils permettaient de proposer une mise en forme de la page originale assez facilement. Le résultat était une soupe de code particulièrement indigeste, d’autant plus que les tableaux n’étaient pas destinés à ce rôle. En réaction, le web les a presque bannis, malgré le fait qu’ils restent utile pour au moins un besoin : présenter des données tabulaires. Seul bémol : même si la norme est toujours très permissive, de nombreux attributs ne devraient plus être utilisés.
Sur cette page :
- Les tableaux
9.1# L’élément <table>
Un tableau est constitué d’un ensemble de balises regroupées dans un élément <table></table>. Celui-ci ne possède normalement que très peu d’attributs.
Un élément <table> n’est ni un bloc, ni un élément en-ligne, il possède en fait sa propre catégorie table puisqu’il possède son propre mécanisme de mise en forme.
9.2# La ligne <tr>
Les cellules d’un tableau sont insérées dans une ligne (row en anglais), représenté par l’élément <tr></tr>.
Tout comme son parent, un élément <tr> possède sa propre catégorie table-row.
9.3# La cellule <td>
Une cellule est insérée avec l’élément <td></td>. Il est possible de mettre tout type de contenu désiré dans une cellule, un paragraphe ou un second tableau par exemple.
La catégorie d’une cellule est table-cell.
Vous connaissez maintenant les trois éléments de base permettant de constituer un tableau :
Qui donne à l’écran :
| Ligne 1, Cellule 1 | Ligne 1, Cellule 2 |
| Ligne 2, Cellule 1 | Ligne 2, Cellule 2 |
Attention cependant, ici, la mise en forme a été modifiée à l’aide des feuilles de style. Soyez vigilant, tous les navigateurs n’affichent pas les tableaux de la même manière par défaut.
9.4# En-tête de tableau <thead>, Corps <tbody>, et pied de tableau <tfoot>
Un tableau contient généralement une ligne d’en-tête, et donc, un corps. Parfois, le tableau contient aussi une ligne qui constitue le pied.
Pour indiquer quelle(s) ligne(s) constitue(nt) l’en-tête, il faut les inclure dans un élément <thead></thead>. Vous l’aurez deviné, le corps du tableau est placé dans un élément <tbody></tbody>, et le pied est placé dans un élément <tfoot></tfoot>.
Les cellules d’en-tête ne seront alors plus <td> mais <th>. Vous pouvez également utiliser <th> pour l’entête d’une ligne.
Voici un exemple de tableau utilisant ces balises :
</thead>
Ce qui donne :
| Produit | Prix |
|---|---|
| Produit 1 | 10 € |
| Produit 2 | 20 € |
| Total | 30 € |
9.5# Fusion de cellules colspan et rowspan
Dans certains cas, certaines cellules peuvent être fusionnées, en ligne ou en largeur. Pour indiquer qu’une cellule occupera la place de la suivante, il faudra utiliser l’attribut colspan="2". De même, pour qu’une cellule occupe la place des deux cellules du dessous, on utilisera rowspan="3".
</thead>
| (1, 1) | (1, 2) | (1, 3) |
|---|---|---|
| (2 et 3, 1) | (2, 2) | (2, 3) |
| (3, 2) | (3, 3) | |
| (3, 1/2/3) | ||
9.6# Titre de tableau <caption>
Il est également possible de donner un titre à votre tableau, qui sera placé au dessus à l’aide de l’élément <caption></caption>, placé juste après la balise d’ouverture de <table>.
<caption>Un petit tableau</caption>
Et le résultat :
| Cellule n°1 | Cellule n°2 | Cellule n°3 |
9.7# Accessibilité des tableaux
Les tableaux ne sont pas bien difficile à implémenter en HTML, mais ils ont deux lourds inconvénients : le code est verbeux (il faut écrire beaucoup), et un tableau n’est pas facilement accessible (pour un non voyant, pour un moteur de recherche, etc). Il existe des solutions pour le deuxième problème, mais qui rendront le code encore plus verbeux. Ceci dit, à mon sens, il est plus important d’être vigilant à l’accessibilité d’une page que son poid, qui peut être optimisé autrement.
Vous marquerez un premier point en indiquant un résumé des informations qu’offre le tableau dans la balise <table>.
<table summary="résumé du tableau pour les non voyants">
En indiquant un identifiant unique (à laide de l’attribut id) pour chacune des cellules d’en-tête, vous pourrez indiquer dans chaque cellule une référence à celles-ci à l’aide de l’attribut headers. On peut indiquer plusieurs identifiants pour chaque cellule, en les séparant par des espaces.
Pour aller au bout de la démarche, vous pouvez ajouter l’attribut abbr pour proposer une valeur plus courte pour chaque cellule d’en-tête. Ainsi, la lecture du tableau sera plus agréable pour un utilisateur utilisant un lecteur vocal.
<caption>Tableau comparant deux formats d'écran d'ordinateurs portables</caption> </thead> <td headers="ecran_154 usage"> Pour un peu tout, permet de garder un ordinateur portable relativement mobile <td headers="ecran_17 usage"> Idéal pour regarder des films <td id="ecran_154 inconvenients"> Parfois un peu petit quand la résolution est limitée à 1280*800px <td id="ecran_17 inconvenients"> Consomme plus de batterie, donc nécessite une bonne baterie, en plus, l'orinateur sera plus lourd
En observant ce tableau, les modifications apportées n’ont pas d’influence à l’écran. Mais pour un lecteur d’écran (tel qu’un synthétiseur vocal) ou un robot de référencement, ces informations peuvent être précieuses pour comprendre le sens des données présentées.
| Comparatif : | écran d’ordinateur portable 16/9, 15,4 pouces | écran d’ordinateur portable 16/9, 17 pouces |
|---|---|---|
| Usage de ce format d’écran | Pour un peu tout, permet de garder un ordinateur portable relativement mobile | Idéal pour regarder des films |
| Inconvenients de ces écrans | Parfois un peu petit quand la résolution est limitée à 1280*800px | Consomme plus de batterie, donc nécessite une bonne batterie, en plus, l’ordinateur sera plus lourd |