Tabelas
Uma tabela de horários de ônibus é uma tabela: cada célula só faz sentido junto com o título da linha e o da coluna.
Tabelas são para dados
Use uma tabela quando a informação tem linhas e colunas: uma grade de horários, uma lista de preços, os resultados de uma pesquisa. No fim dos anos 1990, muitos sites usavam tabelas para montar o layout da página inteira, com o menu numa célula e o conteúdo em outra. Isso causa problemas reais. Os leitores de tela anunciam cada célula com sua linha e sua coluna, então uma tabela de layout soa como uma planilha confusa, e layouts em tabela não se adaptam bem a telas pequenas. Hoje o layout é feito com CSS, e as tabelas ficam para os dados.
Linhas, células e cabeçalhos
Uma tabela é montada linha por linha. <table> envolve tudo, cada <tr> (table row, linha da tabela) é uma linha e, dentro de uma linha, cada <td> (table data, dado da tabela) é uma célula. As células que rotulam uma linha ou uma coluna usam <th> (table header, cabeçalho da tabela), que os navegadores mostram em negrito e centralizado por padrão. O número de células de cada linha deve bater, para que as colunas fiquem alinhadas.
<table>
<caption>Bread prices, October 2026</caption>
<thead>
<tr><th scope="col">Loaf</th><th scope="col">Weight</th><th scope="col">Price</th></tr>
</thead>
<tbody>
<tr><th scope="row">Sourdough</th><td>800 g</td><td>6.50</td></tr>
<tr><th scope="row">Rye</th><td>600 g</td><td>5.00</td></tr>
</tbody>
</table>Faça a tabela se explicar sozinha
Três acréscimos transformam uma grade de células numa tabela que todos conseguem ler. Primeiro, <caption>, colocado logo depois da tag de abertura <table>, dá um título à tabela; os leitores de tela o anunciam antes do conteúdo, então quem ouve sabe do que a tabela trata. Segundo, o atributo scope em cada <th> diz se ele rotula uma coluna (scope="col") ou uma linha (scope="row"). Com ele, um leitor de tela pode ler Rye, Price, 5.00 em vez de um 5.00 solto. Terceiro, <thead>, <tbody> e <tfoot> agrupam as linhas de cabeçalho, as linhas do corpo e as linhas de total. Eles deixam a estrutura clara, ajudam o CSS a estilizar cada parte e permitem que os navegadores repitam o cabeçalho em cada página impressa de uma tabela longa.
Células que se estendem
Uma célula pode se estender por várias colunas com colspan ou por várias linhas com rowspan. Numa grade semanal, um intervalo de almoço que cobre os cinco dias úteis pode ser uma só célula com colspan="5". Quando uma célula se estende, a linha em que ela está precisa de menos células: se uma linha normalmente tem 6 células e uma delas tem colspan="5", essa linha contém só 2 células no HTML. Use a mesclagem quando ela refletir os dados; tabelas muito complexas são difíceis para todo mundo ler, então dividir uma tabela grande em duas mais simples muitas vezes é melhor.
Tabelas largas podem ser um problema no celular. Uma tabela não quebra linha como o texto, então uma tabela com muitas colunas pode ficar mais larga que a tela. Uma solução comum é envolver a tabela num elemento que role para os lados sozinho, usando CSS, para que o resto da página não fique mais largo também.
Deixe os dados de cada célula o mais simples possível: um valor por célula, as unidades no cabeçalho (Preço em euros) em vez de repetidas em todas as células, e nada de células vazias usadas como espaçadores. Uma tabela feita assim é mais fácil de ler em voz alta, mais fácil de ordenar e cola direitinho numa planilha.
| table | Envolve uma tabela de dados |
| tr | Linha da tabela |
| td | Célula de dados |
| th | Célula de cabeçalho que rotula uma linha ou coluna |
| caption | Título da tabela, o primeiro elemento dentro de table |
| scope | Diz se um th rotula uma coluna (col) ou uma linha (row) |
| colspan / rowspan | Uma célula que cobre várias colunas ou linhas |
- Quando você deve usar uma tabela?
- Para dados em linhas e colunas
- Para o layout de uma página inteira
- Para qualquer lista
- Qual elemento é uma linha?
- Qual elemento rotula uma coluna?
- th
- td
- caption
- Onde fica o caption?
- Logo depois da tag de abertura table
- No fim da tabela
- Antes da tabela
- O que significa scope="row" num th?
- Ele rotula as células da sua linha
- Ele rotula a sua coluna
- Ele se estende pela linha
- Uma linha normalmente tem 6 células. Uma célula tem colspan="4". Quantas células são escritas nessa linha?
- Qual elemento agrupa as linhas de cabeçalho?
- thead
- tbody
- tfoot
- Por que tabelas de layout são um problema?
- Os leitores de tela as leem como dados, e elas não se adaptam a telas pequenas
- Não são HTML válido
- Não podem conter imagens
- Qual atributo deixa uma célula cobrir duas linhas?
- rowspan="2"
- colspan="2"
- scope="2"
- O que um leitor de tela anuncia primeiro numa tabela com caption?
- O caption
- A última linha
- Nada
- Tabelas são para dados: table, tr, th, td.
- caption dá nome à tabela; scope liga cabeçalhos às células; thead, tbody e tfoot agrupam linhas.
- colspan e rowspan mesclam células; mantenha as tabelas simples.
Fontes deste curso (10)
- WHATWG, HTML Living Standard (html.spec.whatwg.org, checked 2026-10-17)
- MDN Web Docs, Learn web development: Structuring content with HTML, and the HTML element reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content and developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements, checked 2026-10-17)
- MDN, HTML images (alt text guidance, checked 2026-10-17)
- W3C WAI, Images tutorial and alt decision tree (w3.org/WAI/tutorials/images/decision-tree, checked 2026-10-17)
- CERN, A short history of the Web (home.cern/science/computing/the-birth-of-the-web/short-history-web/, checked 2026-10-17)
- W3C and WHATWG memorandum of understanding, 28 May 2019 (w3.org/2019/04/WHATWG-W3C-MOU.html, checked 2026-10-17)
- W3C, Using ARIA, first rule of ARIA use (w3.org/TR/using-aria/, checked 2026-10-17)
- W3C Markup Validation Service (validator.w3.org, checked 2026-10-17)
- MDN, Viewport meta element (checked 2026-10-17)
- Every code exercise was checked with a Playwright probe against a reference solution.
Data de verificação: 2026-10-17