Sobre este problema HTML
A especificação HTML requer que cada linha numa tabela tenha pelo menos uma célula que comece nessa linha. Uma “célula que começa numa linha” significa um elemento <td> ou <th> que é colocado diretamente nesse <tr>, ao contrário de uma célula que meramente se estende para ela através de rowspan de uma linha anterior. Quando o validador encontra uma linha sem células que comecem nela, sinaliza o erro porque a linha é estruturalmente sem significado — não contribui nada para o modelo de dados da tabela.
Este problema surge comumente em dois cenários:
-
Elementos
<tr>vazios — Um<tr>que não contém filhos<td>ou<th>de todo. Isto às vezes aparece quando os programadores usam linhas vazias para espaçamento visual, ou quando sistemas de gestão de conteúdo geram markup residual. -
Linhas totalmente cobertas por
rowspan— Quando células em linhas precedentes usam valoresrowspansuficientemente grandes para se estenderem sobre uma linha subsequente inteira, essa linha subsequente fica sem células que comecem nela, mesmo que tecnicamente “tenha” células passando através dela.
Isto importa por várias razões. Leitores de ecrã e outras tecnologias assistivas dependem de uma estrutura de tabela bem formada para navegar células e anunciar o seu conteúdo. Uma linha vazia ou totalmente expandida confunde esta navegação. Os navegadores também podem lidar com tabelas mal formadas de forma inconsistente, levando a renderização inesperada. Garantir que cada linha tem pelo menos uma célula que comece nela mantém as suas tabelas semanticamente corretas e acessíveis.
Como corrigir
-
Remova linhas vazias. Se um
<tr>não tem células e não serve nenhum propósito, elimine-o completamente. -
Adicione células à linha. Se a linha é intencional, povoe-a com elementos
<td>ou<th>(podem estar vazios se necessário). -
Ajuste valores
rowspan. Se células anteriores se estendem por demasiadas linhas, reduza o seurowspanpara que cada linha ainda tenha pelo menos uma célula própria. -
Use CSS para espaçamento. Se linhas vazias foram usadas para espaçamento visual, use CSS
margin,padding, ouborder-spacingem vez disso.
Note que elementos <tr /> auto-fechados são tratados da mesma forma que <tr></tr> — produzem uma linha vazia e vão desencadear este erro.
Exemplos
Linha vazia em <tbody> (incorreto)
<table>
<tbody>
<tr>
</tr>
<tr>
<td>Data</td>
</tr>
</tbody>
</table>
O primeiro <tr> não tem células, então o validador reporta que a linha 1 do grupo de linhas <tbody> não tem células que comecem nela.
Linha vazia removida (correto)
<table>
<tbody>
<tr>
<td>Data</td>
</tr>
</tbody>
</table>
Linha totalmente coberta por rowspan (incorreto)
<table>
<tbody>
<tr>
<td rowspan="3">Estende-se por três linhas</td>
<td rowspan="3">Também se estende por três</td>
</tr>
<tr>
</tr>
<tr>
</tr>
</tbody>
</table>
As linhas 2 e 3 não têm células que comecem nelas — todas as células originam da linha 1. Mesmo que células passem através dessas linhas via rowspan, o validador ainda requer pelo menos uma célula para começar em cada linha.
rowspan corrigido com células em cada linha (correto)
<table>
<tbody>
<tr>
<td rowspan="3">Estende-se por três linhas</td>
<td>Detalhe da linha 1</td>
</tr>
<tr>
<td>Detalhe da linha 2</td>
</tr>
<tr>
<td>Detalhe da linha 3</td>
</tr>
</tbody>
</table>
Cada linha tem agora pelo menos um <td> que começa nela, satisfazendo o requisito.
Usar CSS em vez de linhas vazias para espaçamento (correto)
<table>
<tbody>
<tr>
<td>Primeiro item</td>
</tr>
<tr style="height: 1.5em;">
<td>Segundo item com espaço extra acima</td>
</tr>
</tbody>
</table>
Em vez de inserir uma linha vazia para espaçamento, aplique CSS à linha ou células que precisam de espaço adicional.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.