<tr> : l'élément de ligne d'un tableau
======================================

L'élément HTML **`<tr>`** définit une ligne de cellules dans un tableau. Une ligne peut être constituée d'éléments `<td>` (les données des cellules) et `<th>` (les cellules d'en-têtes).

Exemple interactif
------------------

Si on veut qu'une cellule s'étende sur plusieurs lignes/colonnes, on pourra utiliser l'attribut `colspan` ou `rowspan` qui indiquent respectivement le nombre de colonnes / lignes sur lequel s'étendre (la valeur par défaut étant 1).

La construction de tableau peut parfois demander un peu de pratique. Au-delà des exemples présentés ci-après, vous pouvez consulter les tutoriels sur les tableaux HTML afin d'apprendre comment utiliser ces éléments et attributs HTML afin d'organiser vos données tabulaires.

Attributs
---------

À l'instar de tous les éléments HTML, cet élément inclut les attributs universels. Il existe également plusieurs attributs dépréciés à éviter désormais, mais qui peuvent être utiles pour comprendre du code ancien.

### Attributs dépréciés ou obsolètes

**`align`**
Obsolète

Une chaîne de caractère qui définit l'alignement horizontal pour le contenu de chaque cellule. C'est un raccourci pour définir l'alignement sur l'ensemble de la ligne plutôt que pour chaque cellule. Les valeurs possibles sont :

`left`

Le contenu de la cellule est aligné à gauche de la cellule.

`center`

Le contenu de la cellule est centré horizontalement.

`right`

Le contenu de la cellule est aligné à droite de la cellule.

`justify`

Insère des espaces dans le contenu textuel afin que le contenu de la cellule soit justifié.

`char`

Aligne le contenu textuel de la cellule selon un caractère spécial défini par l'attribut `char` (par exemple un point ou une virgule quand on souhaite aligner des nombres) et le nombre de caractères `charoff` à afficher derrière ce caractère d'alignement. Ce mode d'alignement n'a jamais été pris en charge de façon conséquente.

Si cet attribut n'est pas renseigné, la valeur est héritée du nœud parent.

**Note :** Cet attribut est devenu obsolète dans le dernier standard et ne doit donc plus être utilisé.

* Pour réaliser les mêmes effets que les valeurs `left`, `center`, `right` ou `justify`, il faut utiliser la propriété CSS `text-align` sur l'élément
* Pour réaliser le même effet qu'avec la valeur `char`. Il est possible d'utiliser la valeur de l'attribut `char` comme valeur de la propriété `text-align`.

**`bgcolor`** 
Obsolète

Une chaîne de caractères qui définit la couleur d'arrière-plan de toutes les cellules de la colonne. Il peut s'agit d'une notation hexadécimale #RRGGGBB ou #RGB ou bien d'un mot-clé pour une couleur. L'absence de cet attribut (ou sa déclaration à `null` en JavaScript) fera que la couleur des cellules de la ligne sera héritée de la couleur d'arrière-plan de l'élément parent.

**Note :** L'élément `<tr>` doit être mis en forme grâce au CSS. Pour fournir un effet semblable à celui achevé par l'attribut `bgcolor`, il est possible d'utiliser la propriété CSS `background-color`.

**`char`**
Obsolète

Une chaîne de caractère qui définit le caractère sur lequel aligner les cellules d'une colonne. Les valeurs de cet attribut contiennent généralement un point ou une virgule pour aligner des nombres ou des valeurs monétaires. Si l'attribut `align` ne vaut pas `char`, l'attribut est ignoré.

**Note :** Cet attribut est obsolète et peu implémenté : il est donc fortement déconseillé de l'utiliser. Pour réaliser le même effet qu'avec `char`, il faut utiliser la propriété CSS `text-align`.

**`charoff`** 
Obsolète

Une chaîne de caractères utilisée pour indiquer le nombre de caractères à afficher après le caractère défini par l'attribut `char`. Cela peut par exemple servir à indiquer qu'on souhaite afficher deux chiffres après la virgule pour les valeurs monétaires afin d'indiquer les centimes.

**Note :** Cet attribut ne doit plus être utilisé, car il est maintenant obsolète et que sa compatibilité n'était pas répandue.

**`valign`** 
Obsolète

Une chaîne de caractères qui définit l'alignement vertical du texte des cellules de la ligne. Les valeurs possibles de cet attribut sont :

`baseline`

Aligne le texte à la ligne la plus basse possible en utilisant la ligne de base des caractères. Si les caractères ont tous la même taille, cela aura le même effet que la valeur `bottom`.

`bottom`

Place le texte au plus bas de la cellule.

`middle`

Centre verticalement le texte dans la cellule.

`top`

Place le texte au plus haut de la cellule.


**Note :** Cet attribut est obsolète dans le dernier standard, la propriété CSS `vertical-align` doit être utilisée à la place.

Exemples
--------

Voir la page sur `<table>` pour d'autres exemples sur `<tr>`.

### Exemple simple

#### HTML


```html
<table>
  <tr>
    <th>Prénom</th>
    <th>Nom</th>
  </tr>
  <tr>
    <td>Jean</td>
    <td>Biche</td>
  </tr>
  <tr>
    <td>Marcel</td>
    <td>Patulacci</td>
  </tr>
</table>
```


#### CSS

Ce fragment de CSS permet d'ajouter une bordure noire autour du tableau et des cellules, y compris pour celles définies avec `<th>` ou `<td>`. Cela marque clairement la zone de chaque cellule.


```css
table {
  border: 1px solid black;
}

th,
td {
  border: 1px solid black;
}
```


#### Résultat

### Étendre sur plusieurs lignes ou colonnes

On utilise ici les attributs `rowspan` et `colspan` pour étendre des cellules sur plusieurs lignes et colonnes. On voit ainsi que l'en-tête occupe deux lignes pour les noms, l'identifiant et le solde tandis qu'il y a deux colonnes de dates pour l'inscription et la résiliation.

#### Résultat

Une fois n'est pas coutume, commençons par regarder le résultat produit.

On voit que la zone d'en-tête occupe deux lignes : la première avec le nom, l'identifiant, les dates et le solde du compte ; la seconde avec les dates d'inscription et de résiliation qui forment un sous-groupe de colonnes. Pour obtenir ceci, on a:

* Utilisé l'attribut `rowspan` sur la ligne d'en-tête pour les éléments sur le nom, l'identifiant et le solde. Ces cellules occupent ainsi deux lignes.
* Utilisé l'attribut `colspan` sur la cellule d'en-tête pour les dates. Cela permet à ce que cette cellule s'étende sur deux colonnes.
* Défini une deuxième ligne d'éléments `th` qui contient uniquement les en-têtes pour l'inscription et la résiliation. Ces cellules viennent combler l'espace laissé par le fait que l'en-tête Dates n'occupe qu'une seule ligne.

#### HTML


```html
<table>
  <tr>
    <th rowspan="2">Nom</th>
    <th rowspan="2">ID</th>
    <th colspan="2">Dates</th>
    <th rowspan="2">Solde</th>
  </tr>
  <tr>
    <th>Inscription</th>
    <th>Résiliation</th>
  </tr>
  <tr>
    <th>Margaret Nguyen</th>
    <td>427311</td>
    <td><time datetime="2010-06-03">3 juin 2010</time></td>
    <td>n/a</td>
    <td>0</td>
  </tr>
  <tr>
    <th>Edvard Galinski</th>
    <td>533175</td>
    <td><time datetime="2011-01013">13 janvier 2011</time></td>
    <td><time datetime="2017-04008">8 avril 2017</time></td>
    <td>37</td>
  </tr>
  <tr>
    <th>Hoshi Nakamura</th>
    <td>601942</td>
    <td><time datetime="2012-07-23">23 juillet 2012</time></td>
    <td>n/a</td>
    <td>15</td>
  </tr>
</table>
```


#### CSS


```css
table {
  border: 1px solid black;
}

th,
td {
  border: 1px solid black;
}
```

### Distinguer en-tête et contenu

On utilise ici l'élément `<thead>` et l'élément `<tbody>` pour distinguer l'en-tête du tableau et le contenu de celui-ci.

#### HTML


```html
<table>
  <thead>
    <tr>
      <th rowspan="2">Nom</th>
      <th rowspan="2">Identifiant</th>
      <th colspan="2">Dates</th>
      <th rowspan="2">Solde</th>
    </tr>
    <tr>
      <th>Inscription</th>
      <th>Résiliation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Margaret Nguyen</th>
      <td>427311</td>
      <td><time datetime="2010-06-03">3 juin 2010</time></td>
      <td>n/a</td>
      <td>0</td>
    </tr>
    <tr>
      <th scope="row">Edvard Galinski</th>
      <td>533175</td>
      <td><time datetime="2011-01013">13 janvier 2011</time></td>
      <td><time datetime="2017-04008">8 avril 2017</time></td>
      <td>37</td>
    </tr>
    <tr>
      <th scope="row">Hoshi Nakamura</th>
      <td>601942</td>
      <td><time datetime="2012-07-23">23 juillet 2012</time></td>
      <td>n/a</td>
      <td>15</td>
    </tr>
  </tbody>
</table>
```


#### CSS


```css
table {
  border: 1px solid black;
}

th,
td {
  border: 1px solid black;
}
```


#### Résultat

Le résultat n'a pas changé visuellement mais la structure comporte des informations sémantiques complémentaires.

### Mise en forme simple

Il est possible d'utiliser CSS afin de modifier l'apparence d'une ligne d'un tableau. Tous les styles appliqués à un élément `<tr>` auront un impact sur les cellules de cette ligne (sauf si celles-ci indiquent un style par-dessus).

Modifions ici la police et la couleur d'arrière-plan pour la ligne d'en-tête.

#### Résultat

Là encore, regardons le résultat pour commencer.

#### HTML


```html
<table>
  <thead>
    <tr>
      <th rowspan="2">Nom</th>
      <th rowspan="2">ID</th>
      <th colspan="2">Dates</th>
      <th rowspan="2">Solde</th>
    </tr>
    <tr>
      <th>Inscription</th>
      <th>Résiliation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Margaret Nguyen</th>
      <td>427311</td>
      <td><time datetime="2010-06-03">3 juin 2010</time></td>
      <td>n/a</td>
      <td>0</td>
    </tr>
    <tr>
      <th scope="row">Edvard Galinski</th>
      <td>533175</td>
      <td><time datetime="2011-01013">13 janvier 2011</time></td>
      <td><time datetime="2017-04008">8 avril 2017</time></td>
      <td>37</td>
    </tr>
    <tr>
      <th scope="row">Hoshi Nakamura</th>
      <td>601942</td>
      <td><time datetime="2012-07-23">23 juillet 2012</time></td>
      <td>n/a</td>
      <td>15</td>
    </tr>
  </tbody>
</table>
```


#### CSS


```css
table {
  border: 1px solid black;
  font:
    16px "Open Sans",
    Helvetica,
    Arial,
    sans-serif;
}

thead > tr {
  background-color: rgb(228, 240, 245);
}

th,
td {
  border: 1px solid black;
  padding: 4px 6px;
}
```


On utilise ici la propriété `font` sur l'élément `<table>` afin d'avoir une police plus agréable. Ensuite, pour tous les éléments `<tr>` qui sont les fils de `<thead>` (c'est-à-dire pour les lignes de l'en-tête), on indique une couleur d'arrière-plan bleu clair. Cela se propagera à l'ensemble des cellules de l'en-tête.

Cela ne modifie pas la mise en forme des éléments `<th>` de la première colonne où les noms des membres sont considérés comme des en-têtes de ligne.

### Mise en forme avancée

Allons encore plus loin dans la mise en forme avec des styles pour l'en-tête ainsi que le corps du tableau en alternant les couleurs des lignes et en utilisant différentes couleurs pour les cellules selon leur position, etc.

#### Résultat

Voici le résultat qui sera obtenu :

#### HTML

Le HTML n'est pas modifié.


```html
<table>
  <thead>
    <tr>
      <th rowspan="2">Nom</th>
      <th rowspan="2">ID</th>
      <th colspan="2">Dates</th>
      <th rowspan="2">Solde</th>
    </tr>
    <tr>
      <th>Inscription</th>
      <th>Résiliation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Margaret Nguyen</th>
      <td>427311</td>
      <td><time datetime="2010-06-03">3 juin 2010</time></td>
      <td>n/a</td>
      <td>0</td>
    </tr>
    <tr>
      <th scope="row">Edvard Galinski</th>
      <td>533175</td>
      <td><time datetime="2011-01013">13 janvier 2011</time></td>
      <td><time datetime="2017-04008">8 avril 2017</time></td>
      <td>37</td>
    </tr>
    <tr>
      <th scope="row">Hoshi Nakamura</th>
      <td>601942</td>
      <td><time datetime="2012-07-23">23 juillet 2012</time></td>
      <td>n/a</td>
      <td>15</td>
    </tr>
  </tbody>
</table>
```


#### CSS

Ici, CSS est utilisé de façon plus marquée. Sans que ce soit compliqué, il y a beaucoup de choses à voir : autant les décomposer.

##### Règles pour le tableau et les styles de base


```css
table {
  border: 1px solid black;
  font:
    16px "Open Sans",
    Helvetica,
    Arial,
    sans-serif;
  border-spacing: 0;
  border-collapse: collapse;
}
```


Ici, on ajoute les propriétés `border-spacing` et `border-collapse` afin d'éliminer l'espace entre les cellules et afin de fusionner les bordures qui se touchent afin d'obtenir une seule bordure plutôt que des bordures doubles.


```css
th,
td {
  border: 1px solid black;
  padding: 4px 6px;
}

th {
  vertical-align: bottom;
}
```


Voici le style par défaut pour l'ensemble des cellules. Ajoutons quelques personnalisations.

##### Ligne d'en-tête

Nous allons voir l'en-tête en deux parties. Pour commencer, mettons en forme l'en-tête de façon générale :


```css
thead > tr {
  background-color: rgb(228, 240, 245);
}

thead > tr:nth-of-type(2) {
  border-bottom: 2px solid black;
}
```


On définit la couleur d'arrière-plan de tous les éléments `<tr>` dans la ligne d'en-tête du tableau (contenue dans `<thead>`). Ensuite, on définit la bordure basse pour que ce soit une ligne avec une épaisseur de deux pixels. On peut voir qu'on utilise le sélecteur `:nth-of-type` afin de cibler l'application de `border-bottom` sur la *deuxième* ligne de l'en-tête. Pourquoi ? Parce que l'en-tête se compose de deux lignes où on a des cellules fusionnées. Cela signifie qu'il y a effectivement deux lignes et appliquer ces règles à la première ligne ne fournirait pas le résultat attendu.

##### Les en-têtes d'inscription et de résiliation

Mettons en forme ces deux cellules d'en-têtes en utilisant des teintes rouge / vert pour représenter l'aspect positif d'une inscription et l'aspect négatif d'une résiliation.


```css
thead > tr:last-of-type > th:nth-of-type(1) {
  background-color: rgb(225, 255, 225);
}

thead > tr:last-of-type > th:nth-of-type(2) {
  background-color: rgb(255, 225, 225);
}
```


Ici, on cible la dernière ligne de l'en-tête du tableau et on indique la couleur pour la première cellule d'en-tête (qui correspond à l'inscription) avec du vert et la seconde (qui correspond à la résiliation) avec du rouge.

##### Ajouter des couleurs pour les autres lignes

Pour améliorer la lisibilité d'un tableau, il est courant d'appliquer une alternance de couleur entre chaque ligne. Faisons cela en ciblant les lignes paires :


```css
tbody > tr:nth-of-type(even) {
  background-color: rgb(237, 238, 242);
}
```


##### Mise en forme de la colonne d'en-tête gauche

On veut que la première colonne se démarque. Mettons la en forme également.


```css
tbody > tr > th:first-of-type {
  text-align: left;
  background-color: rgb(225, 229, 244);
}
```


Cela applique `text-align` à chaque première cellule de chaque ligne afin de justifier à gauche les noms des membres avec une couleur d'arrière-plan légèrement différentes.

##### Justifier les soldes de compte

Enfin, lorsqu'on affiche des valeurs monétaires, on les représente alignées à droite pour faciliter une lecture comparative entre les valeurs. Appliquons ceci à l'exemple.


```css
tbody > tr > td:last-of-type {
  text-align: right;
}
```


Cette règle applique la propriété CSS `text-align` sur le dernier élément `<td>` de chaque ligne du corps du tableau avec la valeur `"right"`.

Résumé technique
----------------

|  |  |
| --- | --- |
| Catégories de contenu | Aucune. |
| Contenu autorisé | 
 Zéro ou plusieurs éléments
 `<td>` ou
 `<th>`, éventuellement mélangés. Les éléments de script (`<script>`
 et
 `<template>`) sont également utilisés.
  |
| Omission de balises | 
 La balise de début est obligatoire. La balise de fin peut être absente
 si l'élément `<tr>` est immédiatement suivi par un
 élément `<tr>` ou si l'élément du groupe parent (`<thead>`,
 `<tbody>`
 ou
 `<tfoot>`) n'a plus d'autre contenu.
  |
| Parents autorisés | 
 Un élément
 `<table>`
 (uniquement si le tableau ne possède pas d'élément
 `<body>` et
 uniquement après un élément
 `<caption>`,
 `<colgroup>`
 ou
 `<thead>`) ,
 `<thead>`,
 `<tbody>`
 ou
 `<tfoot>`.
  |
| Rôle ARIA implicite | `row (en-US)` |
| Rôles ARIA autorisés | Tous les rôles sont autorisés. |
| Interface DOM | `HTMLTableRowElement` |

Spécifications
--------------

| Specification |
| --- |
| HTML Standard # the-tr-element |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Apprendre : les tableaux HTML : une introduction à l'utilisation des tableaux qui aborde `<tr>`.
* Les autres éléments HTML relatifs aux tableaux : `<caption>`, `<col>`, `<colgroup>`, `<table>`, `<tbody>`, `<td>`, `<tfoot>`, `<th>`, `<thead>`.
* `HTMLTableRowElement` : l'interface DOM sur laquelle `<tr>` est basé.
* Les propriétés et pseudo-classes CSS qui sont particulièrement utiles pour mettre en forme l'élément `<tr>` :
    + La pseudo-classe `:nth-child` qui permet de définir l'alignement des cellules dans la colonne ou sur une ligne
    + La propriété `text-align` qui permet d'aligner l'ensemble des cellules par rapport au même caractère (comme le point ou la virgule).