Skip to main content

Sobre este problema HTML

A especificação HTML define uma hierarquia de aninhamento rigorosa para elementos de tabela. Um <td> (célula de dados de tabela) deve ser um filho direto de um <tr> (linha de tabela), e esse <tr> deve por sua vez estar dentro de uma <table>, <thead>, <tbody>, ou <tfoot>. Quando o analisador do browser encontra um <td> numa localização inesperada, considera-o uma tag de abertura “isolada” — ou seja, o elemento não tem lugar válido no contexto de análise atual.

Este erro ocorre frequentemente em vários cenários:

  • Um <td> é colocado diretamente dentro de uma <table> sem um <tr> envolvente.
  • Um <td> é colocado diretamente dentro de <thead>, <tbody>, ou <tfoot> sem um <tr>.
  • Um <td> aparece completamente fora de qualquer estrutura de tabela, como dentro de uma <div> ou no <body> do documento.
  • Uma tag <tr> foi acidentalmente eliminada ou mal escrita durante a edição, deixando os seus filhos <td> órfãos.

Porque é que isto importa

Inconsistência do browser: Os browsers usam algoritmos de recuperação de erros para lidar com marcação inválida, mas podem tratar células de tabela isoladas de forma diferente. Alguns browsers podem inserir silenciosamente um <tr> implícito, enquanto outros podem mover o conteúdo completamente para fora da tabela. Isto leva a renderização imprevisível entre browsers.

Acessibilidade: Leitores de ecrã e tecnologias de apoio dependem da semântica adequada das tabelas para navegar e anunciar o conteúdo das células. Um <td> isolado quebra a relação lógica linha-e-coluna, tornando os dados difíceis ou impossíveis de interpretar corretamente pelos utilizadores de tecnologia de apoio.

Manutenibilidade: O aninhamento inválido torna a sua marcação mais difícil de entender, depurar e estilizar com CSS. Os seletores CSS específicos para tabelas e as propriedades podem não comportar-se como esperado quando a estrutura DOM está malformada.

Como corrigir

  1. Localize cada elemento <td> sinalizado pelo validador.
  2. Certifique-se de que é um filho direto de um elemento <tr>.
  3. Certifique-se de que esse <tr> está dentro de uma <table>, <thead>, <tbody>, ou <tfoot>.
  4. Se o <td> estava completamente fora de uma tabela, ou envolva-o numa estrutura de tabela completa ou substitua-o por um elemento mais apropriado como uma <div> ou <span>.

Exemplos

<td> diretamente dentro de <table> sem <tr>

Esta é a causa mais comum. Os elementos <td> são filhos de <table> mas carecem de um <tr> envolvente:

<!-- ❌ Mau: td é um filho direto da table -->

<table>
  <td>Name</td>
  <td>Email</td>
</table>

Envolva as células num <tr>:

<!-- ✅ Bom: td está dentro de um tr -->

<table>
  <tr>
    <td>Name</td>
    <td>Email</td>
  </tr>
</table>

<td> diretamente dentro de <tbody> sem <tr>

<!-- ❌ Mau: td é um filho direto do tbody -->

<table>
  <tbody>
    <td>Alice</td>
    <td>alice@example.com</td>
  </tbody>
</table>
<!-- ✅ Bom: td está envolvido num tr dentro do tbody -->

<table>
  <tbody>
    <tr>
      <td>Alice</td>
      <td>alice@example.com</td>
    </tr>
  </tbody>
</table>

<td> usado fora de qualquer contexto de tabela

Por vezes um <td> acaba fora de uma tabela inteiramente, talvez por um erro de cópia-cola ou um erro de template:

<!-- ❌ Mau: td não tem ancestral de tabela -->

<div>
  <td>Some content</td>
</div>

Se pretendia exibir conteúdo num layout não-tabular, use um elemento apropriado:

<!-- ✅ Bom: use um span ou div para conteúdo não-tabular -->

<div>
  <span>Some content</span>
</div>

Tag <tr> em falta ou mal escrita

Um erro tipográfico pode deixar elementos <td> órfãos:

<!-- ❌ Mau: tag de abertura tr está mal escrita -->

<table>
  <t>
    <td>Price</td>
    <td>$9.99</td>
  </t>
</table>
<!-- ✅ Bom: elemento tr correto -->

<table>
  <tr>
    <td>Price</td>
    <td>$9.99</td>
  </tr>
</table>

Tabela completa com estrutura adequada

Para referência, aqui está uma tabela bem estruturada usando <thead>, <tbody>, <th>, e <td> — todos corretamente aninhados:

<table>
  <thead>
    <tr>
      <th>Product</th>
      <th>Price</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Widget</td>
      <td>$4.99</td>
    </tr>
    <tr>
      <td>Gadget</td>
      <td>$14.99</td>
    </tr>
  </tbody>
</table>

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.