Sémantiquement, la rangée vide a-t-elle un but, ou est-ce purement pour la disposition? Dans ce dernier cas, il peut être utile d'envisager de supprimer la ligne vide et de fournir la séparation via CSS. Par exemple.
<tr class="separate-below">
<td>Data before separater</td><td>More Data</td>...
</tr>
<tr>
<td>Data after separater</td><td>More Data</td>...
</tr>
de ce qui suit dans la feuille de style:
TR.separate-below TD,TR.separate-below TH {
border-bottom: 1em solid white; /* use the background colour of a cell here */
}
En variante, on peut utiliser plusieurs <tbody> éléments à blocs de groupes de rangées ensemble (l'ajout de règles = « groupes » à cause de l'élément de table <t> éléments pour gagner une bordure horizontale en haut et en bas, et <colgroup> élément pour gagner une bordure à leur gauche et à droite):
<table rules="groups">
<thead>
<tr><th>Header</th><th>Header</th>...</tr>
</thead>
<tbody>
<tr><td>Data</td><td>Data</td>...</tr>
<tr><td>Data</td><td>Data</td>...</tr>
...
</tbody>
<tbody>
<tr><td>Data</td><td>Data</td>...</tr>
...
</tbody>
...
</table>
Vous feriez probablement mieux d'envelopper les différents blocs de données dans les éléments de tête ou de corps et de les styliser pour obtenir l'espacement. – Quentin