Tabelas


Algumas informações são naturalmente uma grade. Uma tabela de horários de trem, um plano de preços, uma tabela de classificação, um conjunto de informações nutricionais: cada uma dessas coisas tem linhas e colunas, e o sentido está em como elas se alinham. O HTML tem um conjunto de elementos dedicado exatamente a esse tipo de conteúdo, e usá-los mantém a grade legível tanto na tela quanto para programas que leem a página em voz alta.
Fundamentos de tabelas
Uma tabela é uma grade de linhas e colunas, com a mesma estrutura de uma planilha. Você constrói uma usando quatro elementos. <table> envolve toda a grade. Cada <tr> é uma linha (tr vem de table row). Dentro de uma linha, cada <td> é uma célula de dados (td é table data). Quando uma célula rotula sua coluna ou linha, você usa <th> em vez disso (th é table header), e o navegador a exibe em negrito e centralizada, para que ela se destaque dos dados.
<table>
<tr>
<th>Dia</th>
<th>Horário de funcionamento</th>
</tr>
<tr>
<td>Segunda-feira</td>
<td>8:00 às 18:00</td>
</tr>
<tr>
<td>Sábado</td>
<td>9:00 às 14:00</td>
</tr>
</table>Duas células de cabeçalho no topo, depois duas linhas de dados. O navegador desenha a grade, ajusta o tamanho de cada coluna ao conteúdo e renderiza as duas células <th> em negrito.
<table> envolvendo tudo, <tr> para cada linha, <td> para uma célula, e <th> para uma célula de cabeçalho. As células de cabeçalho saem em negrito e centralizadas, para se destacarem dos dados. Construa uma linha por vez e as colunas se alinham por conta própria. Estruturando uma tabela
A ordem das suas linhas é a ordem em que as pessoas as leem, então coloque a linha de cabeçalho, aquela feita de células <th>, no topo. Depois mantenha todas as linhas com o mesmo tamanho: se a linha de cabeçalho tem três células, cada <tr> abaixo dela também precisa ter três células <td>. Uma linha com uma célula faltando deixa um buraco na grade, e as colunas deixam de se alinhar. Não há nada novo para aprender aqui, só cuidado com as linhas que você já conhece.
<table>
<caption>Receita trimestral por região</caption>
<thead>
<tr>
<th>Região</th>
<th>T1</th>
<th>T2</th>
</tr>
</thead>
<tbody>
<tr>
<th>Norte</th>
<td>R$ 12.000</td>
<td>R$ 15.400</td>
</tr>
<tr>
<th>Sul</th>
<td>R$ 9.800</td>
<td>R$ 11.200</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Total</th>
<td>R$ 21.800</td>
<td>R$ 26.600</td>
</tr>
</tfoot>
</table><th>. Depois mantenha todas as linhas com o mesmo tamanho: três cabeçalhos no topo significam três células <td> em cada linha abaixo. Uma célula faltando é um buraco na grade, e é isso que costuma pegar as pessoas no começo. Tabelas acessíveis
Uma tabela acessível é aquela que faz sentido para todo mundo, incluindo pessoas que ouvem a página com um leitor de tela (um programa que lê a página em voz alta) em vez de vê-la. A coisa mais útil que você pode fazer já está no seu repertório: use <th> em toda célula de cabeçalho, não <td>. Assim, um leitor de tela consegue dizer a quem está escutando quais células são rótulos e quais são dados, de modo que um valor como "R$ 15" seja anunciado junto com a coluna a que pertence. Uma tabela em que toda célula é um simples <td> é lida como uma parede de números sem nada que os ancore.
A acessibilidade vai muito além das tabelas; o capítulo Acessibilidade cobre o resto do panorama.
<th> para cabeçalhos e <td> para dados. Um leitor de tela se apoia nessa distinção para ler cada valor junto com o cabeçalho ao qual pertence, de modo que R$ 15 chegue acompanhado da sua coluna, e não solto. Ignore isso e a tabela toda vira uma parede de números soltos. Para que servem as tabelas
Houve uma época, antes de o CSS conseguir cuidar do layout, em que as pessoas construíam páginas inteiras usando tabelas: uma <table> para colocar o menu à esquerda e o conteúdo à direita. Isso funciona visualmente, então você ainda vê esse padrão em páginas antigas e em alguns modelos de e-mail. Não copie isso. Uma tabela serve para dados tabulares, informações que pertencem a uma grade de linhas e colunas. Organizar as partes de uma página é trabalho do CSS. Usar uma tabela para posicionar elementos, em vez de guardar dados, torna a página mais difícil de ler para quem usa um leitor de tela, e mais difícil de ajustar depois.
<!-- Errado: uma tabela usada para posicionar uma barra lateral ao lado de um artigo -->
<table>
<tr>
<td><nav>...</nav></td>
<td><article>...</article></td>
</tr>
</table>
<!-- Certo: elementos reais, com o CSS cuidando das colunas -->
<nav>...</nav>
<article>...</article>Essa é a mesma separação entre estrutura e apresentação apresentada em O que é HTML: estrutura no HTML, layout no CSS. Para escolher elementos pelo seu significado, veja HTML semântico.

