Tableaux

Sommaire

  1. Structure des tableaux
    1. L'élément TABLE
    2. Titres de tableaux : L'élément CAPTION
    3. Groupes de lignes : Les éléments THEAD, TFOOT, et TBODY
    4. Groupes de colonnes : Les éléments COLGROUP et COL
    5. Lignes de tableaux : L'élément TR
    6. Cellules de tableaux : Les éléments TH et TD
  2. Formatage des tableaux par les agents utilisateurs visuels
    1. Alignement horizontal et vertical
    2. Bordures et règles
    3. Marges de cellules
  3. Exemples de tableaux
    1. Exemple 1
    2. Exemple 2

Le modèle de tableaux tel que le gère HTML permet aux utilisateurs d'organiser leurs données dans des structures tabulaires complexes. Les tableaux peuvent contenir des listes, des paragraphes, des formulaires, des images, du texte préformaté, ou d'autres tableaux.

Dans ce modèle de tableaux, des lignes ou des colonnes pourront être groupées ensembles. Ces groupements ajoutent de l'information structurelle aux tableaux et pourront être visualisées par les agents utilisateurs de telle sorte à mettre en valeur ces organisations.

Les groupes de lignes sont particulièrement utiles dans des tableaux très longs. Des agents utilisateurs visuels "intelligents" permettront de faire défiler un corps de table tout en préservant la position des en-têtes et pieds de tables à l'écran. De même, lorsque des tableaux longs sont visualisés, l'en-tête et le pied de table pourra être répété sur chaque page qui contient des données.

Note : Cette spécification inclue une information plus détaillée à propos des tableaux dans les sections traitant des règles et conseils de design des tableaux.

Structure des tableaux

Un tableaux a la structure suivante en HTML :

L'élément TABLE

<!ELEMENT TABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ATTLIST TABLE                 -- élément de tableau --
  %attrs;                          -- %coreattrs, %i18n, %events --
  align       %TAlign;   #IMPLIED  -- position du tableau par rapport à la fenêtre --
  bgcolor     %Color     #IMPLIED  -- couleur de fond des cellules  --
  width       CDATA      #IMPLIED  -- largeur de tableau par rapport à la fenêtre --
  cols        NUMBER     #IMPLIED  -- utilisé pour affichage par anticipation --
  border      CDATA      #IMPLIED  -- contrôle la largeur du cadre autour du tableau --
  frame       %TFrame;   #IMPLIED  -- which parts of table frame to include --
  rules       %TRules;   #IMPLIED  -- règles entre lignes et colonnes --
  cellspacing CDATA      #IMPLIED  -- espacement entre cellules --
  cellpadding CDATA      #IMPLIED  -- marge intérieure des cellules --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

align = left|center|right
Cet attribut spécifie la position du tableau par rapport au reste du document. Valeurs possibles :
  • left : Le tableau est calé contre la marge gauche.
  • center : Le tableau occupe le centre du document.
  • right : Le tableau est calé contre la marge droite.
width = length
Cet attribut spécifie la largeur désirée pour la table entière, à destination des agents utilisateurs visuels. En l'absence de cet attribut, la largeur du tableau sera déterminé par l'agent utilisateur.
cols = integer
Cet attribut spécifie le nombre de colonnes du tableau. Lorsque spécifié, cet attribut aidera les agents utilisateurs à représenter la table dès que les premières données arrivent, plutôt qu'attendre que l'intégralité du tableau soit chargé pour en déterminer avec certitude la mise en forme.

Attributs définis par ailleurs

L'élément TABLE contient tous les autres éléments qui spécifient le titre, les lignes, le contenu, et le format.

Calcul du nombre de lignes et de colonnes d'un tableau

Le nombre des lignes d'un tableau est égal au nombre d'éléments TR qu'il contient. Les agents utilisateurs ignoreront les lignes artificiellement induites par des étalement verticaux de cellules au delà de nombre.

La détermination du nombre de colonnes peut se faire par plusieurs méthodes :

Les agents utilisateur pourront déduire de l'exemple qui suit que la table a trois colonnes.

<TABLE cols="3">
...le reste de la table...
</TABLE>

Si le nombre de colonnes d'une table n'est pas spécifiée par l'attribut cols, il se pourrait qu'un agent utilisateur visuel dusse attendre le chargement de l'intégralité du tableau avant de commencer à le représenter. En général, l'attente de toutes les informations de la table permet de déterminer le nombre de colonnes et leur largeur sans avoir à redessiner le tout. La définition de l'attribut cols peut être considéré comme un "truc" qui permet aux agents utilisateurs visuels d'afficher la table au fur et à mesure de la réception des données de chacune des lignes. Il est conseillé aux auteurs d'utiliser les éléments COL et COLGROUP pour exprimer les propriétés des colonnes plutôt que spécifier l'attribut cols.

Directionnalité dans les tableaux

La directionnalité d'une table est spécifiée par l'attribut dir de l'élément TABLE. Pour une table déclarée de gauche à droite (par défaut), la première coonne se situe à gauche de la table et la première ligne est en haut. Pour une table définie de droite à gauche, la première colonne se situe à droite de la table, et la première ligne toujours en haut de la table.

Par la suite, pour les tables de gauche à droite (par défaut), les cellules de "bourrage" seront ajoutées par la droite, et par la gauche à contrario pour des tables de droite à gauche.

Lorsqu'il est défini pour l'élément TABLE, l'attribut dir affecte également la direction du texte à l'intérieur de chaque celule (du fait de l'héritage de la directionnalité des éléments de niveau "bloc").

Pour spécifier la directionnalité d'une table de droite à gauche, définissez l'attribut dir comme suit :

<TABLE dir="RTL">
...le reste de la table...
</TABLE>

La direction du texte dans les cellules individuelles pourra être commutée en définissant l'attribut dir dans l'élément qui définit la cellule. Consultez la section traitant du texte bidirectionnel pour plus d'informations sur ces problèmes de direction d'écriture de texte.

Titres de tableaux : L'élément CAPTION

<!ELEMENT CAPTION - - (%inline;)+>
<!ENTITY % CAlign "(top|bottom|left|right)">

<!ATTLIST CAPTION               -- table caption --
  %attrs;                          -- %coreattrs, %i18n, %events --
  align       %CAlign;   #IMPLIED  -- relative to table --
  >

Balise de début : requise, Balise de fin : requise

Définition des attributs

align = top|bottom|left|right
Cet attribut spécifie la position du titre par rapport au tableau. Valeurs possibles :
  • top : Le titre est placé au dessus du tableau. C'est la valeur par défaut.
  • bottom : Le titre apparaît sous le tableau.
  • left : Le titre est placé à gauche du tableau.
  • right : Le titre est placé à droite du tableau.

Attributs définis par ailleurs

Lorsque présent, le texte de l'élément CAPTION décrira usuellement la nature du tableau. L'élément CAPTION doit venir immédiatement après la balise de début de l'élément TABLE.

Par exemple,

<TABLE cols="3">
<CAPTION>Tasses de café consommées par chaque parlementaire</CAPTION>
...le reste de la table...
</TABLE>

Groupes de lignes : Les éléments THEAD, TFOOT, et TBODY

<!ELEMENT THEAD - O (TR+)>
<!ELEMENT TFOOT - O (TR+)>

Balise de début : requise, Balise de fin : optionelle

<!ELEMENT TBODY O O (TR+)>

Balise de début : optionnelle, Balise de fin : optionnelle

<!ATTLIST (THEAD|TBODY|TFOOT)   -- table section --
  %attrs;                          -- %coreattrs, %i18n, %events --
  %cellhalign;                     -- alignement horizontal dans les cellules --
  %cellvalign;                     -- alignement vertical dans les cellules --
  >

Attributs définis par ailleurs

Un tableau doit contenir au moins un groupe de lignes. Chaque groupe de lignes est divisé en trois parties : en-tête, corps, et piétement. Les en-têtes et piétements de tableaux sont optionnels. L'élément THEAD définit l'en-tête, l'élément TFOOT définit le piétement, et l'élément TBODY définit le corp de tableau.

Lorsqu'il existe, chacun des instances d'éléments THEAD, TFOOT, et TBODY DOIT contenir au moins une ligne (voir TR).

L'exemple suivant illustre l'ordre et la structure des en-têtes, pieds et corps de tableaux.

<TABLE>
<THEAD>
     <TR> ...information d'en-tête...
</THEAD>
<TFOOT>
     <TR> ...information de piétement...
</TFOOT>
<TBODY>
     <TR> ...première ligne du premier bloc de données...
     <TR> ...deuxième ligne du premier bloc de données...
</TBODY>
<TBODY>
     <TR> ...première ligne du deuxième bloc de données...
     <TR> ...deuxième ligne du deuxième bloc de données...
     <TR> ...troisième ligne du deuxième bloc de données...
</TBODY>
</TABLE>

La déclaration TFOOT DOIT apparaître avant TBODY dans une définition de TABLE de sorte queles agents utilisateurs puissent afficher le piétement de tableau avant d'avoir effectivement reçu toutes les (potentiellement nombreuses) lignes de données.

Balise optionnelle de regroupement de lignes

Les interpréteurs des agents utilisateurs conformes doivent se conformer à ces règles pour des raisons de compatibilité ascendante.

La définition du tableau de l'exemple précédent pourrait être raccourcie en enlevant certaines balises de fin.

<TABLE>
<THEAD>
     <TR> ...en-tête...
<TFOOT>
     <TR> ...piétement...
<TBODY>
     <TR> ...première ligne du premier bloc...
     <TR> ...seconde ligne du premier bloc...
<TBODY>
     <TR> ...première ligne du deuxième bloc...
     <TR> ...deuxième ligne du deuxième bloc...
     <TR> ...troisième ligne du deuxième bloc...
</TABLE>

Groupement de colonnes : Les éléments COLGROUP et COL

L'élément COLGROUP

<!ELEMENT COLGROUP - O (col*)>
<!ATTLIST COLGROUP
  %attrs;                          -- %coreattrs, %i18n, %events --
  span        NUMBER     1         -- nombre de colonnes par défaut dans le groupe --
  width       CDATA      #IMPLIED  -- largeur par défaut des COL internes --
  %cellhalign;                     -- alignement horizontal dans les cellules --
  %cellvalign;                     -- alignement vertical dans les cellules --
  >

Balise de début : requise, Balise de fin : optionnelle

Définition des attributs

span = integer
Lorsque présent, cet attribut spécifie le nombre de colonnes par défaut dans ce groupe. Les agents utilisateurs devront ignorer cet attribut si le présent groupe de colonne contient au moins un élément COL. La valeur par défaut pour cet attribut vaut un.
width = length
Cet attribut spécifie une largeur par défaut pour chacune des colonnes du groupe de colonnes courant. En plus des valeurs courantes en pixel et en pourcentage, on pourra donner à cet attribut la valeur spéciale "0*", qui signifie que la largeur de chaque colonne du groupe doit être la largeur minimale qui permet d'accueillir le contenu de la cellule la plus large de la colonne.

Attributs définis par ailleurs

Un tableau doit contenir au moins un groupe de colonnes. En l'absence de toute définition de groupe de colonne, on considérera qu'il existe implicitement un groupe de colonnes incluant toutes les colonnes du tableau. L'élément COLGROUP crée explicitement un groupe de colonnes.

L'attribut width de l'élément COLGROUP spécifie une largeur par défaut pour toutes les colonnes du groupe de colonnes. La valeur spéciale "0*" indique aux agents utilisateurs d'utiliser pour chaque colonne sa taille minimale quilui permet d'afficher le contenu de la cellule la plus large. Ce comportement pourra être contrarié par la présence d'un élément COL.

Le tableau de l'exemple qui suit contient deux groupes de colonnes. Le premier groupe de colonnes contient 10 colonnes et le second 5. La largeur par défaut de chacune des colonnes du premier groupe vaut 50 pixels. La largeur des colonnes du second groupe est la largeur minimale utile pour l'affichage des colonnes.

    
<TABLE>
<COLGROUP span="10" width="50">
<COLGROUP span="5" width="0*">
<THEAD>
<TR> ...
</TABLE>

L'élément COL

<!ELEMENT COL - O EMPTY>
<!ATTLIST COL                   -- groupe de colonnes et propriétés --
  %attrs;                          -- %coreattrs, %i18n, %events --
  span        NUMBER     1         -- nombre de colonnes sur lequel le groupe s'étend --
  width       CDATA      #IMPLIED  -- spécification de largeur de colonne --
  %cellhalign;                     -- alignement horizontal des cellules --
  %cellvalign;                     -- alignement vertical des cellules --
  >

Balise de début : requise, Balise de fin : interdite

Définition des attributs

width = length
Cet attribut spécifie une largeur par défaut pour toutes les colonnes du groupe de colonnes courant. En plus des valeurs courantes en pixel et en pourcentage, on pourra donner à cet attribut la valeur spéciale "0*", qui signifie que la largeur de chaque colonne du groupe doit être la largeur minimale qui permet d'accueillir le contenu de la cellule la plus large de la colonne. La valeur de cet attribut pourra aussi prendre la forme "i*", dans laquelle "i" est un entier. Il s'agit alors d'une largeur relative. Lorsque l'espace est alloué pour les lignes et les colonnes, les agents utilisateurs réservent d'abord l'espace des éléments définis d'une manière absolue, puis divisent l'espace qui reste entre les diverses colonnes ou lignes restantes. Chaque ligne ou colonne définie en relatif reçoit une portion de l'espace qui reste proportionnellement à l'entier précédant le "*". La valeur "*" équivaut à "1*".

Attributs définis par ailleurs

Chaque groupe de colonnes défini par une déclaration COLGROUP peut contenir un certain nombre d'éléments COL. Un élément COL ne définit pas un groupe de colonne de la même façon que l'élément COLGROUP; Il s'agit implement de la façon dont des attributs peuvent être partagés par plusieurs colonnes dans un grouped e colonnes. Notez que les éléments COL sont vides ; ils ne servent qu'à réunir des paramètres.

L'attribut span de l'élément COL a la signification suivante :

Comme pour l'élément COLGROUP, l'attribut width de l'élément COL affecte la largeur de toutes les colonnes rassemblées par l'élément. Si un élément COL affecte plusieurs colonnes, alors son attribut width définit la largeur de chacune des colonnes du regroupement, et non la largeur du groupe de colonnes pris comme un tout.

Le tableau du prochain exemple contient deux groupes de colonnes. Le premier contient trois colonnes, le second ne contient que deux colonnes. L'espace horizontal disponible sera découpé comme suit : L'agent utilisateur réservera 30 pixels à la première colonne. Puis, l'espace minimal nécessaire à la seconde colonne est calculé puis réservé. L'espace horizontal restant sera divisé en six portions égales. Deux de ces portions sont attribuées à la colonne trois, une à la colonne quatre, et enfin trois à la colonne cinq.

    
<TABLE>
<COLGROUP>
   <COL width="30">
   <COL width="0*">
   <COL width="2*">
<COLGROUP align="center">
   <COL width="1*">
   <COL width="3*" align="char" char=":">
<THEAD>
<TR> ...
</TABLE>

Nous avons défini la valeur de l'attribut align du second groupe de colonnes à "center". Toutes les cellules de toutes les colonnes de ce groupe hériteront de cette valeur, maisz peuvent la surcharger. Le COL final procède à un alignement, en spécifiant que toutes les cellules des colonnes qu'il concerne seront alignées sur le caractère ":".

Lignes de tableau : L'élément TR

<!ELEMENT TR - O (TH|TD)+>
<!ATTLIST TR                    -- ligne de tableau --
  %attrs;                          -- %coreattrs, %i18n, %events --
  %cellhalign;                     -- alignement horizontal des cellules --
  %cellvalign;                     -- alignement vertical des cellules --
  bgcolor     %Color     #IMPLIED  -- couleur de fond de la ligne --
  >

Balise de début : requise, Balise de fin : optionnelle

Attributs définis par ailleurs

L'élément TR agit comme un container accueillant des cellules d'une ligne d'un tableau.

L'échantillon de tableau ci-dessous contient trois lignes, chacune commençant par un élément TR :

<TABLE>
<CAPTION>Tasses de café par parlementaire</CAPTION>
<TR> ...Une ligne de données...
<TR> ...Deuxième ligne de données...
<TR> ...Troisième ligne de données...
...le reste du tableau...
</TABLE>

Cellules de tableau : Les éléments TH et TD

<!ELEMENT (TH|TD) - O %block>
<!ATTLIST (TH|TD)               -- Titre de ligne ou cellule de données --
  %attrs;                          -- %coreattrs, %i18n, %events --
  axis        CDATA      #IMPLIED  -- le contenu de la cellule, par défaut --
  axes        CDATA      #IMPLIED  -- liste des noms de l'axe --
  nowrap      (nowrap)   #IMPLIED  -- interdit le retour automatique de ligne --
  bgcolor     %Color     #IMPLIED  -- couleur de fond de la cellule --
  rowspan     NUMBER     1         -- nombre de lignes sur lequel s'étend la cellule --
  colspan     NUMBER     1         -- nombre de colonnes sur lequel s'étend la cellule --
  %cellhalign;                     -- alignement horizontal des cellules --
  %cellvalign;                     -- alignement vertical des cellules --
  >

Balise de début : requise, Balise de fin : optionnelle

Définition des attributs

axis = cdata
Cet attribut définit un nom abbrégé d'une cellule tête deligne ou de colonne. Le nom par défaut pour une cellule est son contenu.
axes = cdata-list
La valeur de cet attribut est une liste séparée par des virgules de noms d'axis, spécifiés par les têtes des lignes et des colonnes auxquelles cette cellule appartient. Par défaut, les agents utilisateurs pourront utiliser d'autres façons d'identifier des têtes de lignes ou de colonnes pertinentes pour cette cellule.
rowspan = integer
Cet attribut spécifie le nombre de lignes sur lesquelles la cellule courant s'étend. Cet attribut vaut un ("1") par défaut. Une valeur ("0") indiquera que la cellule courante s'étend à toutes les lignes existant de la ligne courante à la fin du tableau.
colspan = integer
Cet attribut spécifie le nombre de colonnes sur lesquelles la cellule courant s'étend. Cet attribut vaut un ("1") par défaut. Une valeur ("0") indiquera que la cellule courante s'étend à toutes les colonnes existant de la colonne courante à la fin du tableau.
nowrap
Obsolète. Lorsque présent, cet attribut booléen indique aux agents utilisateurs visuels de désactiver le renvoi à la ligne automatique pour cette cellule. On utilisera les feuilles de style plutôt que cet attribut (ex., l'attribut "white-space" de la [CSS1] . Note : une utilisation inconsidérée de cet attribut peut conduire à des largeurs de cellule immodérément grandes.

Attributs définis par ailleurs

Les éléments TH contiennent les en-têtes de colonnes (ou de ligne), tandis que les éléments TD définissent des cellules de données. Cette distinction permet aux agents utilisateurs de représenter différemment les en-têtes et les cellules de données, même en l'absence de feuilles de style.

Les cellules peuvent être vides (c-à-d, ne contenir aucune données).

Le tableau suivant contient quatre colonnes de données, chacune chapeautée par un titre de colonne.

<TABLE>
<CAPTION>Tasses de café par parlementaire</CAPTION>
<TR> <TH>Nom <TH>Tasses <TH>Type de Café <TH>Sucre?
<TR> <TD> Jean-Paul Ixe<TD>10 <TD>Expresso <TD>Non
<TR> <TD>Michèle Ygreque <TD>5 <TD>Décaféïné <TD>Oui
...reste du tableau...
</TABLE>

Votre agent utilisateur affichera le début du tableau comme suit :

Tasses de café par parlementaire
Nom Tasses Type de Café Sucre?
Jean-Paul Ixe 10 Expresso Non
Michèle Ygreque 5 Décaféïné Oui

Pour aider à la distinction entre les "cases" du tableau, il sera possible de définir l'attribut border de l'élément TABLE :

<TABLE border="border">
...reste du tableau...
</TABLE>

Avec une bordure, votre agent utilisateur affichera le début du tableau de la manière suivante :

Tasses de café par parlementaire
Nom Tasses Type de Café Sucre?
Jean-Paul Ixe 10 Expresso Non
Michèle Ygreque 5 Décaféïné Oui

Référencement de cellules

Les attributs axis et axes procurent une façon de référencer des cellules en définissant des "étiquettes".

Les agents utilisateurs vocaux pourront utiliser ces étiquettes pour identifier le contenu et la position d'une cellule dans un tableau. Les programmes de traitement pourront trouver dans ces étiquettes les noms de champs de base de données pour un transfert entre le document et la base ou vice-versa.

Dans l'exemple de tableau suivant, la valeur de l'attribut axis a été défini comme étant le nom de famille de chaque sénateur. La cellule est aussi étiquetée comme appartenant à la colonne des "Noms" column.

<TABLE border="border">
<CAPTION>Tasses de thé par sénator</CAPTION>
<TR> <TH>Noms <TH>Tasses <TH>Type de Thé <TH>Sucre?
<TR> <TD axis="Jie" axes="Noms">T. Jie <TD>10
<TD>Tilleul <TD>4
<TR> <TD axis="Kha" axes="Noms">J. Kha <TD>5 <TD>Daarjeling <TD>6
</TABLE>

Etalement de cellules sur plusieurs lignes ou colonnes

Les cellules peuvent s'étaler sur plusieurs lignes et/ou colonnes. Le nombre de ligne ou colonnes "consommées" par une cellule sont définis par les attributs rowspan et colspan, et ce pour les deux éléments TH ou TD.

Dans la définition de table qui suit, la cellule de la quatrième ligne, deuxième colonne est prévue pour s'étaler sur trois colonnes, y compris la colonne courante.

<TABLE border="border">
<CAPTION>Tasses de thé par sénateur</CAPTION>
<TR> <TH>Noms <TH>Tasses <TH>Type de thé <TH>Sucre?
<TR> <TD>T. Jie <TD>10 <TD>Tilleul <TD>4
<TR> <TD>J. Kha <TD>5 <TD>Daarjeling <TD>6
<TR> <TD>A. Elle <TD colspan="3"><em>inconnu</em>
</TABLE>

Cette table devrait être affichée ainsi par un agent utilisateur :

       Tasses de thé par sénateur
 --------------------------------------
 |   Noms  |Tasses|Type de Thé |Sucre?|
 --------------------------------------
 |T. Jie   |10    |Tilleul      |4    |
 --------------------------------------
 |J. Kha   |5     |Daarjeling   |6    |
 --------------------------------------
 |A. Elle  |inconnu                   |
 --------------------------------------

Votre agent utilisateur affiche ce tableau comme suit :

Tasses de thé par sénateur
Noms Tasses Type de thé Sucre?
T. Jie 10 Tilleul 4
J. Kha 5 Daarjeling 6
A. Elle inconnu

L'exemple suivant illustre comment des définitions qui étendent des cellules sur plusieurs plsueirus lignes ou colonnes affectent la définition des cellules suivantes. Considérez la définition de tableau suivante :

<TABLE border="border">
<TR><TD>1 <TD rowspan="2">2 <TD>3
<TR><TD>4 <TD>6
<TR><TD>7 <TD>8 <TD>9
</TABLE>

Ce tableau devrait être affiché à peu près comme ça :

-------------
| 1 | 2 | 3 | 
----|   |----
| 4 |   | 6 |
----|---|----
| 7 | 8 | 9 |
-------------

Du fait que la cellule marquée "2" s'étend sur deux lignes, elle affecte la position des cellules définies dans la deuxième ligne. Notez qu'en l'absence d'une définition effective de la cellule "6", les agents utilisateurs ajouteraient une cellule vide à sa place pour terminer la ligne.

De même, dans la définition de table suivante :

<TABLE border="border">
<TR><TD>1 <TD>2 <TD>3
<TR><TD colspan="2">4 <TD>6
<TR><TD>7 <TD>8 <TD>9
</TABLE>

la cellule "4" prend deux colonnes, et la cellule "6" attérit en colonne trois.

-------------
| 1 | 2 | 3 | 
--------|----
| 4     | 6 |
--------|----
| 7 | 8 | 9 |
-------------

L'exemple suivant illustre comment l'on pourrait créer des cellules superposées. Dans cette table, la cellule "5" s'étale sur deux lignes et la "7" sur deux colonnes, et il y aura recouvrement entre les cellules "7" et "9" :

    
<TABLE border="border">
<TR><TD>1 <TD>2 <TD>3
<TR><TD>4 <TD rowspan="2">5 <TD>6
<TR><TD colspan="2">7 <TD>9
</TABLE>

Ce tableau devrait être affiché ainsi, pour tenir compte du recouvrement :

-------------
| 1 | 2 | 3 | 
-------------
| 4 | 5 | 6 | 
----|...|----
| 7 :   | 9 | 
-------------

Le résultat de cellules superposées est indéfini. Il peut varier d'un agent utilisateur à l'autre.

NdA. Actuellemnt, et une fois les tests effectués, il apparaît que Internet Explorer 3.0 ne gère pas du tout la superposition. Netscape en version 3.2 réalise effectivement ue superposition correcte lors du réaffuchage d'un document précédemment chargé (redimentionnement de fenêtre ou démasquage). Au moment du chargement par contre, si l'on essaie de surimprimer du texte sur une image pour réaliser une mise en page de type "infographie", le texte apparaît masqué par l'image, même s'il est spécifié qu'elle soit chargée avant (la balise IMG précéde la déclaration de la cellule contenant le texte à surimprimer). En effet, le temps de chargement en mémoire de l'image est plus long que celui du dessin du texte, et si l'affichage de l'image commence effectivement AVANT la pose du texte, il termine bien après, en ayant recouvert le texte).

Mise en forme des tableaux par les agents utilisateurs

La section qui suit décrit les attributs de tableaux HTML qui fournissent aux agents utilisateurs les informations leur permettant de mettre en forme visuellement le tableau. Les feuilles de style constitueront souvent une solution bien meilleure pour définir ce format. Au moment où cette spécification paraît, la [CSS1] ne fournit pas encore un mécanisme permettant le contrôle de TOUS les aspects visuels des tableaux.

Cette version de HTML inclue des mécanismes contrôlant :

Alignement horizontal et vertical

Les attributs qui suivent peuventêtre définis pour les éléments constituant un tableau (se reporter à leurs définitions respectives).

<!-- attributs d'alignement horizontal du contenu de cellule -->
<!ENTITY % cellhalign
  "align (left|center|right|justify|char) #IMPLIED
char       CDATA      #IMPLIED  -- alignment char, e.g. char=':' --
   charoff    CDATA      #IMPLIED  -- offset for alignment char --"
  >
<!-- attributs d'alignement vertical du contenu de cellule -->
<!ENTITY % cellvalign
  "valign (top|middle|bottom|baseline) #IMPLIED"
  >

Définition des attributs

align = left|center|right|justify|char
Cet attribut spécifie la façon dont est aligné le contenu et la justification du texte dans la cellule. Valeurs possibles :
  • left : Cellule remplie par la gauche/justification à gauche du texte. C'est la valeur par défaut pour les cellules de données.
  • center : Cellule remplie par le centre centre/Justification centrée du texte. C'est la valeur par défaut pour les cellules d'en-tête.
  • right : Cellule remplie par la droite/Justification à droite du texte.
  • justify: Justification à gauche et à droite.
  • char:Justification par alignement sur un caractère particulier.

NdA. A noter que le mode Justify n'est pas reconnu par Netscape Navigator 3.x
valign = top|middle|bottom|baseline
Cet attribut spécifie l'alignement vertical des données dans une cellule. Valeurs possibles :
  • top : Le remplissage de cellule s'effectue par le haut.
  • middle : Les données de la cellule se centrent automatiquement dans la hauteur de cellule. C'est la valeur par défaut.
  • bottom : Le remplissage de cellule s'effectue par le bas.
  • baseline : Toutes les cellules d'une ligne qui comporte une cellule dont l'attribut valign prend cette valeur devront être formatées de façon à ce que les premières lignes de texte soient toutes alignées sur une ligne de base commune à toute la ligne. Cette contrainte ne continue pas de s'appliquer aux lignes suivantes.
char = cdata
Cet attribut spécifie un caractère dans un fragment de texte qui sera utilisé comme repère d'alignement. Par défaut, l'alignement est toujours réalisé sur la virgule décimale propre à chacune des langues courantes (la langue à considérer est fixée par l'attribut lang (ex., le point (".") en Anglais et la virgule (",") en Français). La valeur de cet attribut est sensible à la casse.
charoff = length
Lorsque présent, cet attribut spécifie un décalage à compter par rapport à la première occurence du caractère d'alignement pour chaque ligne. Si un fragment de texte n'inclue aucun caractère d'alignement, elle sera décalée horizontalement de façon à ce qu'elle termine à cette position.

Lorsque charoff est utilisé pour définir le décalage relativement à un caractère d'alignement, la direction du décalage est déterminée par la direction d'écriture de texte courante (voir l'attribut dir). Dans les textes de gauche à droite (par défaut), ce décalage est naturellement compté par rapport à la marge gauche. Pour les textes de droite à gauche, il le sera à partir de la marge de droite.

Le tableau de l'exemple suivant aligne une rangée de valeurs monétaires sur la virgule décimale. Nous avaons ici explicitement défini cette virgule d'alignement comme étant ",".

<TABLE border="border">
<COLGROUP>
<COL><COL align="char" char=",">
<THEAD>
<TR><TH>Légumes <TH>Prix au kilo
<TBODY>
<TR><TD>Laitue        <TD>4 F.
<TR><TD>Carottes primeur <TD>9,50 F.
<TR><TD>Pommes Golden <TD>14,45 F.
</TABLE>

Le tableau mis en forme devrait ressembler à ceci :

-------------------------------
|  Légumes       |Prix au kilo|
|----------------|------------|
|Laitue          |     4    F.|
|----------------|------------|
|Carottes primeur|     9,50 F.|
|----------------|------------|
|Pommes Golden   |    14,45 F.|
------------------------------

Héritage des spécifications d'alignement

L'alignement du contenu des cellules peut être spécifié cellule par cellule, ou bien hérité d'éléments "englobants", tels qu'une ligne, ou une colonne du tableau lui-même.

L'ordre de priorité (de la plus grande à la plus faible) pour les attributs align, char, et charoff est le suivant :

  1. Un attribut d'alignement défini sur un élément à l'intérieur des données d'une cellule (P par exemple).
  2. Un attribut d'alignement défini pour une cellule (TH ou TD).
  3. Un attribut d'alignement défini sur une colonne ou un groupe de colonnes (COL and COLGROUP). Lorsque'une colonne fait partie d'un regroupement multi-colonnes (span), la propriété d'alignement est héritée de cele définie pour la première cellule du regoupement.
  4. Un attribut d'alignement sur une ligne ou un groupe de lignes (TR, THEAD, TFOOT, et TBODY). Lorsqu'une cellule fait partie d'un regroupement de lignes, la propriété d'alignement est héritée de celle de la cellule du début du regroupement.
  5. Un attribut d'alignement défini au niveau de l'élément (TABLE).
  6. L'alignement par défaut.

L'ordre de priorité (de la plus grande à la plus faible) pour les attributs valign (ainsi que celui des autres attributs hérités lang, dir, et style) est le suivant :

  1. Un attribut défini pour un élément contenu à l'intérieur des données de cellule (P par exemple).
  2. Un attribut défini au niveau de la cellule (TH et TD).
  3. un attribut défini pour la ligne ou le groupe de lignes (TR, THEAD, TFOOT, et TBODY). Si une cellule fait partie d'un regroupement multi-lignes, la valeur de l'attribut est héritée de celle de la première cellule du regroupement.
  4. Un attribut défini pour la colonne ou le regroupement de colonnes (COL et COLGROUP). Si une cellule fait partie d'un regroupement multi-colonnes, la valeur de l'attribut est héritée de la première cellule du regroupement.
  5. Un attribut défini au niveau du tableau lui-même (TABLE).
  6. La valeur par défaut pour cet attribut.

De plus, lors de l'affichage des cellules, l'alignement horizontal est déterminé en priorité par rapport aux colonnes plutôt qu'aux lignes, tandis que l'alignement vertical tient compte en priorité des lignes avant de prendre en considération les colonnes.

L'alignement par défaut des cellules dépend de l'agent utilisateur. Cependant, ces derniers devront substituer les valeurs par défaut en fonction de la directionnalité (c'est-à-dire., ne pas simplement induire un "left" dans toutes les cases).

Les agents utilisateurs qui ne supportent pas la valeur "justify" de l'attribut align pourront employer à la place la valeur "left".

Bordures et gouttières

Les attributs suivants affectent le cadre externe du tableau et les gouttières intérieures.

Définition des attributs

frame = void|above|below|hsides|lhs|rhs|vsides|box|border
Cet attribut spécifie quels côtés du cadre qui entoure le tableau doivent être visibles. Valeurs possibles :
  • void: Aucun coté. C'est la valeur par défaut.
  • above : Le côté supérieur exclusivement.
  • below : Le côté inférieur exclusivement.
  • hsides : Les deux côtés horizontaux.
  • vsides : Les deux côtés verticaux.
  • lhs : Le côté gauche exclusivement .
  • rhs : Le côté droit exclusivement.
  • box : Les quatre côtés.
  • border : Les quatre côtés.
rules = none|groups|rows|cols|all
Cet attribut spécifie quelles gouttières apparaissent entre les cellules d'un tableau. Valeurs possibles :
  • none: Aucune gouttière. C'est la valeur par défaut.
  • groups: Les gouttières n'apparaissent seulement qu'entre les groupes de lignes (Cf. THEAD, TFOOT, et TBODY) et les groupes de colonnes (Cf. COLGROUP et COL).
  • rows : Seules les gouttières horizontales apparaissent entre chaque paire de lignes.
  • cols : Seules les gouttières verticales apparaissent entre chaque paire de colonnes.
  • all : Les gouttières apparaissent entre toutes les cellules.
border = cdata
Cet attribut spécifie la largeur (uniquement en pixels) du cadre situé autour du tableau (Voir la note ci-dessous pour plus d'informations à propos de cet attribut).

Dans le tableau suivant, des bordures de cinq pixels de large seront affichées à droite et à gauche du tableau et des gouttières seront présentes entre toutes les colonnes.

<TABLE border="5" frame="vsides" rules="cols">
<TR> <TD>1 <TD>2 <TD>3
<TR> <TD>4 <TD>5 <TD>6
<TR> <TD>7 <TD>8 <TD>9
</TABLE>

Les réglages suivants devront être compris par les agents utilisateurs pour des raisons de compatibilité ascendante.

Ainsi, par exemple:

<FRAME border="2"> <=> <FRAME border="2" frame="border" rules="all">

and

<FRAME border> <=> <FRAME frame="border" rules="all">

Note : L'attribut border définit aussi le comportement en termes de bordure des éléments OBJECT et IMG, bien qu'il accepte alors d'autres valeurs.

Marges de cellules

Deux attributs contrôlent l'espacement entre les cellules et la marge intérieure de celles-ci.

Définition des attributs

cellspacing = length
Cet attribut spécifie combien d'espace doit être laissé entre le cadre de tableau et le bord de la première et dernière cellule de chacune des lignes ou colonnes, ainsi qu'entre les cellules dansla table.
cellpadding = length
Cet attribut spécifie combien d'espace doit être laissé entre le bord intérieur d'une cellule et son contenu, dans toutes les directions.

Dans le tableau qui suit, l'attribut cellspacing spécifie que les cellules seront séparées les unes des autres, et du cadre extérieur de 20 pixels. L'attribut cellpadding spécifie que la marge haute et la marge basse valent toutes deux 10% de la hauteur totale de la cellule (soit 20% d'espace vertical vide à elles deux). De même, les marges gauche et droite valent aussi 10% de la largeur de la cellule (soit 20% d'espace horizontal vide à elles deux).

<TABLE>
<TR cellspacing="20"> <TD>Data1 <TD cellpadding="20%">Data2 <TD>Data3
</TABLE>

Si un tableau ou une colonne donnée a une largeur fixe, cellspacing et que l'attribut cellpadding spécifie un espace plus grand que celui alloué, il est conseillé aux agents utilisateurs de préférer ces attributs avant l'attribut width lorsque conflit il y a, mais il ne s'agit nullement d'une obligation.

Quelques exemples de tableaux

Le tableau suivant illustre l'interaction de tous les éléments de tableaux.

Exemple 1

Soit en "ascii art", le tableau suivant :

<TABLE border="border">
<CAPTION>Tableau test avec cellules jointes</CAPTION>
<TR><TH rowspan=2><TH colspan="2">Moyenne
    <TH rowspan="2">Autres<BR>catégories<TH>Div
<TR><TH>taille<TH>poids
<TR><TH align="left">hommes<TD>1.9<TD>0.003
<TR><TH align="left" rowspan="2">femmes<TD>1.7<TD>0.002
</TABLE>

serait affiché peu ou prou ainsi :

         Tableau test avec cellules jointes
    /--------------------------------------------------\
    |          |      Moyenne      | Autres   |  Div   |
    |          |-------------------|catégories|--------|
    |          |  taille |  poids  |          |        |
    |-----------------------------------------|--------|
    | hommes   | 1.9     | 0.003   |          |        |
    |-----------------------------------------|--------|
    | femmes   | 1.7     | 0.002   |          |        |
    \--------------------------------------------------/

Sur votre agent utilisateur, ce tableau s'affiche ainsi :

Tableau test avec cellules jointes
Moyenne Autres
catégories
Div
taillepoids
males1.90.003
femmes1.70.002

Exemple 2

Cet exemple illustre des lignes et colonnes groupées. Cet exemple est adapté du "Developing International Software", de Nadine Kano.

En "ascii art", le tableau suivant :

<TABLE border="2" frame="hsides" rules="groups">
<CAPTION>CODE-PAGE SUPPORT IN MICROSOFT WINDOWS</CAPTION>
<COLGROUP align="center">
<COLGROUP align="left">
<COLGROUP align="center" span="2">
<COLGROUP align="center" span="3">
<THEAD valign="top">
<TR>
<TH>Code-Page<br>ID
<TH>Name
<TH>ACP
<TH>OEMCP
<TH>Windows<br>NT 3.1
<TH>Windows<br>NT 3.51
<TH>Windows<br>95
<TBODY>
<TR><TD>1200<TD>Unicode (BMP of ISO/IEC-10646)<TD><TD><TD>X<TD>X<TD>*
<TR><TD>1250<TD>Windows 3.1 Eastern European<TD>X<TD><TD>X<TD>X<TD>X
<TR><TD>1251<TD>Windows 3.1 Cyrillic<TD>X<TD><TD>X<TD>X<TD>X
<TR><TD>1252<TD>Windows 3.1 US (ANSI)<TD>X<TD><TD>X<TD>X<TD>X
<TR><TD>1253<TD>Windows 3.1 Greek<TD>X<TD><TD>X<TD>X<TD>X
<TR><TD>1254<TD>Windows 3.1 Turkish<TD>X<TD><TD>X<TD>X<TD>X
<TR><TD>1255<TD>Hebrew<TD>X<TD><TD><TD><TD>X
<TR><TD>1256<TD>Arabic<TD>X<TD><TD><TD><TD>X
<TR><TD>1257<TD>Baltic<TD>X<TD><TD><TD><TD>X
<TR><TD>1361<TD>Korean (Johab)<TD>X<TD><TD><TD>**<TD>X
<TBODY>
<TR><TD>437<TD>MS-DOS United States<TD><TD>X<TD>X<TD>X<TD>X
<TR><TD>708<TD>Arabic (ASMO 708)<TD><TD>X<TD><TD><TD>X
<TR><TD>709<TD>Arabic (ASMO 449+, BCON V4)<TD><TD>X<TD><TD><TD>X
<TR><TD>710<TD>Arabic (Transparent Arabic)<TD><TD>X<TD><TD><TD>X
<TR><TD>720<TD>Arabic (Transparent ASMO)<TD><TD>X<TD><TD><TD>X
</TABLE>

qui apparaîtrait peu ou prou ainsi :

                  CODE-PAGE SUPPORT IN MICROSOFT WINDOWS
===============================================================================
Code-Page | Name                         | ACP  OEMCP | Windows Windows Windows
    ID    |                              |            |  NT 3.1 NT 3.51    95
-------------------------------------------------------------------------------
   1200   | Unicode (BMP of ISO 10646)   |            |    X       X       *
   1250   | Windows 3.1 Eastern European |  X         |    X       X       X
   1251   | Windows 3.1 Cyrillic         |  X         |    X       X       X
   1252   | Windows 3.1 US (ANSI)        |  X         |    X       X       X
   1253   | Windows 3.1 Greek            |  X         |    X       X       X
   1254   | Windows 3.1 Turkish          |  X         |    X       X       X
   1255   | Hebrew                       |  X         |                    X
   1256   | Arabic                       |  X         |                    X
   1257   | Baltic                       |  X         |                    X
   1361   | Korean (Johab)               |  X         |            **      X
-------------------------------------------------------------------------------
    437   | MS-DOS United States         |        X   |    X       X       X
    708   | Arabic (ASMO 708)            |        X   |                    X
    709   | Arabic (ASMO 449+, BCON V4)  |        X   |                    X
    710   | Arabic (Transparent Arabic)  |        X   |                    X
    720   | Arabic (Transparent ASMO)    |        X   |                    X
===============================================================================

Sur votre agent utilisateur, elle est affichée ainsi :

CODE-PAGE SUPPORT IN MICROSOFT WINDOWS
Code-Page
ID
Name ACP OEMCP Windows
NT 3.1
Windows
NT 3.51
Windows
95
1200Unicode (BMP of ISO/IEC-10646)XX*
1250Windows 3.1 Eastern EuropeanXXXX
1251Windows 3.1 CyrillicXXXX
1252Windows 3.1 US (ANSI)XXXX
1253Windows 3.1 GreekXXXX
1254Windows 3.1 TurkishXXXX
1255HebrewXX
1256ArabicXX
1257BalticXX
1361Korean (Johab)X**X
437MS-DOS United StatesXXXX
708Arabic (ASMO 708)XX
709Arabic (ASMO 449+, BCON V4)XX
710Arabic (Transparent Arabic)XX
720Arabic (Transparent ASMO)XX

Cet exemple illuste bien comment il est possible d'utiliser des COLGROUP pour grouper des colonnes et définir un alignement de colonne par défaut. De même, les éléments TBODY permettront de grouper des lignes. Les attributs frame et rules indiqueront auxc agents utilisateurs quelles bordures et gouttières afficher.
NdA. Cet exemple illustre aussi parfaitement le problème de la compatibilité entre produits qui, s'ils sont leaders du marché, n'en sont pas moins pas complètement "conformes". On identifiera rapidement les forces et lacunes de chacun.