Busca

Boas práticas de Desenvolvimento com Padrões Web


Tabelas semânticas

Você já deve saber que o desenvolvimento utilizando Padrões Web preza pela Semântica no código. Todo código que você escrever deve dar algum significado ao conteúdo. E toda tag sem sua função específica e te ajuda a formar um código mais esperto e legível. Alguns elementos por dependerem de várias tags para ter um funcionamento [...]

27/10/2008 por Diego Eis
27 Comentários

Você já deve saber que o desenvolvimento utilizando Padrões Web preza pela Semântica no código. Todo código que você escrever deve dar algum significado ao conteúdo. E toda tag sem sua função específica e te ajuda a formar um código mais esperto e legível.
Alguns elementos por dependerem de várias tags para ter um funcionamento pleno, acabam sofrendo com o desinteresse dos desenvolvedores em entender melhor os diversos objetos que compoem um determinado elemento. Um caso bastante comum, além dos Formulários, é a formação das TABLES.
Normalmente, escrevemos uma tabela mais ou menos assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<table>
<tr>
<td>Produto</td>
<td>Descrição</td>
<td>Valor</td>
</tr>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</table>

Para nós que enxergamos bem e conseguimos fazer uma breve interpretação de texto, conseguimos entender na maioria das vezes qual o assunto das tabelas na página.

Mas e o Google? E o leitor de tela do cego?

Por isso, a tabela tem algumas tags que ajudam o desenvolvedor a dar mais informação sobre o conteúdo daquela tabela.

Há algumas tags que iremos acrescentar em nossa tabela para dar essa informação extra ao visitante, seja ele ser humano ou robô.

SUMMARY – Dizendo do que se trata a tabela

O atributo summary é colocado na tag TABLE. Ela serve para indicar do que se trata aquela tabela, dizendo sua utilidade e que tipo de informação está descrevendo.

1
<table summary="Lista de produtos em promoção">

TH – Table Header

Considerando o código que colocamos mais acima, há os títulos de células PRODUTO, DESCRIÇÃO e VALOR. Esses títulos, devem ser destacados como título, não apenas modificando seu visual pelo CSS, mas também destacando-os pelo código. Para fazermos isso, iremos utizar a tag TH.

Essa tag irá indicar que tais células são títulos. O nosso código ficará assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<table summary="Lista de produtos em promoção">
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</table>

THEAD – Cabeçalho da Tabela

Normalmente as tabelas tem sempre uma linha de títulos, como a nossa tabela acima. Precisamos informar então, que essa linha é um cabeçalho, que contém os títilos das colunas ou linhas. Para isso, envolveremos a TR que contém as THs com a tag THEAD. Nosso código ficará dessa forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<table summary="Lista de produtos em promoção">
<thead>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</thead>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</table>

TFOOT – Indicando o rodapé da tabela

Logo após o THEAD, iremos indicar quais informações irão no rodapé do documento, utilizando a tag TFOOT. Aqui, iremos colocar as mesmas informações do THEAD, supondo que a tabela é muito grande e queremos que o usuário, ao chegar no rodape, não se perca com a identificação das colunas. Nosso código fica assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<table summary="Lista de produtos em promoção">
<thead>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</tfoot>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</table>

TBODY – Indicando o corpo da tabela

Se há um cabeçalho e um rodapé na tabela, é mais do que normal haver um BODY, apresentando as informações que de fato interessam ao usuário.
O TBODY deve ir logo após a tag TFOOT. Sinceramente, não sei porque a tag TFOOT não vem após a TBODY, já que é o código de Rodapé. Se você souber, por favor, me diga!

Nosso código fica dessa forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<table summary="Lista de produtos em promoção">
<thead>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</tbody>
</table>

CAPTION – Título do Cabeçalho

A tag CAPTION define um título para o cabeçalho da tabela. Esse título vai apresentar a tabela para o usuário. Ele deve ser colocado logo antes da tag THEAD e logo após tag TABLE.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<table summary="Lista de produtos em promoção">
<caption>Produtos em Promoção</caption>
<thead>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Produto</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Tênis</td>
<td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td>
<td>R$350,00</td>
</tr>
<tr>
<td>Camiseta</td>
<td>Tamanho GG, cor preta e uma estampa nas costas.</td>
<td>R$55,00</td>
</tr>
<tr>
<td>Calça</td>
<td>Tecido Jeans, azul claro, com botão duplo.</td>
<td>R$105,00</td>
</tr>
</tbody>
</table>

Já com essas tags diferenciadas, o trabalho que teríamos para formatar o cabeçalho, título e conteúdo da tabela ficou mais leve. Em vez de colocar class em tudo quanto é TR para diferenciar as partes da tabela, conseguimos formatar cada um desses grupos sem encostar no código HTML. Claro, que se você quiser fazer algo mais rebuscado, a modificação do código HTML será inevitável. Mas, com esse pouco código que escrevemos, já procrastinamos essa necessidade.

27 Comentários

Sua opinião:

Vamos elevar o nível de discussão. Exponha sua opinião, sua crítica.



RSS dos comentários deste post
URL para Trackback

27 Comentários

Marcus VBP 27/10/2008 às 07:45

Salve Diego!

O TFOOT vem logo depois do THEAD e antes do TBODY, para o caso da tabela ser muito longa. Por exemplo, uma tabela com centenas de linhas. Com o TFOOT carregado logo depois do THEAD, garantiria que o usuário teria acesso ao resultado dos dados (que é o que normalmente se espera no rodapé de uma tabela) estaria visível mesmo que a tabela fosse exibida de forma incompleta, ou antes mesmo da tabela inteira ser exibida.

Lucas Mezêncio 27/10/2008 às 08:10

Olá! Muito interessante o post. Eu já uso um pouco de semântica nos meus códigos há um tempo, porém não tanto.
Achei interessante a idéia da semântica em tabelas.
Mas não entendi, no quesito que se trata a ordem da escrita do código. Se for pararmos pra pensar, como semântica é para melhor entendimento e discernimento do código, porque esceveremos o TFOOT antes do TBODY sendo que TBODY vem primeiro?
Paira então minha dúvida.
Espero respostas!

Muito bom o post! Abraços a todos!

Neto 27/10/2008 às 08:47

Excelente post, em relação a tables tirou todas minhas dúvidas, valeu!!!

Ubiratan de Carvalho 27/10/2008 às 08:49

Salve, costumo fazer as tabelas assim também. E também tinha dúvida sobre o motivo de TFOOT aparecer antes do TBODY. Bom, tem uma explicação razoável no W3C dizendo: TFOOT must appear before TBODY within a TABLE definition so that user agents can render the foot before receiving all of the (potentially numerous) rows of data.

Grande abraço a todos.

Julio Cesar Bitencour Silva 27/10/2008 às 09:17

Excelente post. Uma vez lí (não lembro onde) que o TFOOT vem antes de TBODY para que, em casos de tabelas com muito conteúdo, as informações sobre a tabela (diga-se THEAD e TFOOT) sejam renderizadas antes do conteúdo todo.

Não sei até onde isso é verdade. Acho que vale a pena uma pesquisa!

Alexandre Romero 27/10/2008 às 10:10

Parabéns pela matéria, muito boa mesmo. Falando em tabelas, sugiro algumas informações sobre a tag , que ajuda um bocado na hora de formatar colunas sem ter que distribuir class pra todo lado!

Abraço!

Willie Oliveira 27/10/2008 às 10:30

Estes atributos e tags de tabelas realmente são bem definidos, no entanto gostaria que alguém me falasse sobre alinhamento e largura de colunas através das tags COLGROUP e COL.

Já tentei seguir o W3C, só que ou eu não tenho conseguido aplicar de forma correta ou simplesmente não funciona. Alguém pode construir um exemplo e testar em FF e IE?

Já consegui aplicar background seguindo alguns workarounds que o próprio W3C recomenda, mas largura e alinhamento não obtive os resultados esperados!

Chris Benseler 27/10/2008 às 10:39

Só o que eu não conhecia era o th. Achava que o thead bastava nesse caso.
Mas, muito bom :)

Elia 27/10/2008 às 12:15

Achei muito bom o post! Pior que existem xiitas que não usam tabela nem para dados tabulares! rsrs

Só fiquei com uma dúvida: qual a diferença entre o summary e o caption?

José 27/10/2008 às 16:50

Muito bacana, a tempo procuro um site que demonstre exemplos claros, práticos e que realmente tenham utilidade.

Izac Cavalheiro 27/10/2008 às 17:16

Muito bom. Já usava semântica em tabelas, porém, não usava o tfoot antes do tbody, justamente, porque pela lógica ele deveria vir depois :) mas agora entendi o motivo.

Quanto a tag summary ela funciona como uma descrição da tabela e não um título como no caso do caption.

Fabio 27/10/2008 às 17:52

Parabéns. Desmitifica o tableless, onde muitos acham que isso é não usar tabelas. Tableless é a arte de usar a tag certa pra coisa certa. Table é pra tabela, como pra título se usa H’s, e não DIVs.

Abraços.

Acelio Filho 27/10/2008 às 19:13

Bom lembrar que na hora de usar tabelas também tem-se que ser semântico.
Muito bom este post.

rascunho » Blog Archive » links for 2008-10-28 28/10/2008 às 18:12

[...] Tabelas semânticas » Tableless.com.br – CSS e Práticas com Padrões Web (tags: http://www.tableless.com.br 2008 mes9 dia28 table tabela semantic blog_post) [...]

Acesse 29/10/2008 às 07:55

Ótimo, já irei testar estas novas semânticas em meu site. Grande abraço”

Alexandre Romero 29/10/2008 às 11:13

Ops, faltou parte do texto, a tag que me referia era COLGROUP =)

Daniel Jesus 30/10/2008 às 17:31

Post, bacana sobre acessibilidade, porém tenho um comentário a fazer, ao invés de usar a expressão “CEGO” por favor Diego use deficiente visual, tenho certeza que muitos deficientes visuais e portadores de outras dificiências acessam o tableless pelo seu excelente conteúdo e provavelmente podem ter se sentido ofendidos com esta denominação.

No mais muito bom este post

Diego Eis 31/10/2008 às 17:11

Daniel, tudo bem?
Uma vez perguntei para um grupo de deficientes visuais sobre exatamente esse termo. Eles disseram que prefeririam que o chamassem de cegos.
Eu acho que também preferiria. Melhor do que ser chamado de Deficiente.
Mas acho que vai de cada pessoa, não é?

Daniel 01/11/2008 às 22:12

Tudo bem Diego, realizei uma pesquisa para minha faculdade onde mais de 80% dos entrevistados disseram ser sentir ofendidos, claro que vai de cada pessoa mas é melhor prevenir do que remediar

Mas entendo seu ponto de vista.

Sei que é muito ocupado e agradeço por ter respondido meu humilde comentário.

Obrigado!!

Erick 05/11/2008 às 09:41

Bom dia, tenho um dúvida que está um pouco além do mencionado na matéria…

Bom, exite também alguma maneira de zerar pelo css a tabela? Como por exemplo o cellpadding=”0″ cellspacing=”0″?

Parabéns pelo seu trabalho, aprende e muito com seu material.

Abraços.
Erick

Hilder Santos 06/11/2008 às 18:51

Opa, meu velho!

Excelente post, cara, principalmente para mim, que não costumo utilizar o Dreamweaver para desenvolver (hehehe… Não é frescura não, é Dreamweaver dando erro mesmo na minha máquina! hauhaua).

Na próxima vez que precisar desenvolver tabelas, certamente vou utilizar estas tags. ;)

Valeu, camarada.

Abraço!

Durval 09/11/2008 às 00:04

Legal estas informações sobre semântica. Quando se esta disputando mercado com seus concorrentes diretos nos sites de busca, todas as dicas são válidas.
Durval – http://www.hotmastersound.com.br

Tiago Luis Facco 12/11/2008 às 08:28

Olá Diego, essas informações sobre tabelas semânticas me foram muito úteis. Já estava cansado de escrever tanto css inútil pra elas… rs. Um abraço!

Leo Cabral 16/12/2008 às 10:08

É muito bom encontrar essas informações traduzidas. Evita equívocos. Nem preciso dizer que quanto mais elementos para trabalhar CSS dentro de uma tabela melhor para todos nós. Evita o excesso de classes e id desnecessárias. Abraço.

Kleberson Leite 25/02/2009 às 00:48

Salve Salve Galera do Tableless.com.br, com muito prazer que venho parabenizar os grandes artigos desenvolvidos pelos colunistas deste site.
É muito legal saber que pessoas como vocês se interessam bastante com a semantica e o desenvolvimento “correto” dos websites.

Abraços.. e Parabéns!!

Tabelas semânticas « Vinicius Balduino Garcia 26/08/2009 às 15:14

[...] <table summary="Lista de produtos em promoção"> <caption>Produtos em Promoção</caption> <thead> <tr> <th>Produto</th> <th>Descrição</th> <th>Valor</th> </tr> </thead> <tfoot> <tr> <th>Produto</th> <th>Descrição</th> <th>Valor</th> </tr> </tfoot> <tbody> <tr> <td>Tênis</td> <td>Tênis com amortecedor, tecido vermelho com cadarço preto.</td> <td>R$350,00</td> </tr> <tr> <td>Camiseta</td> <td>Tamanho GG, cor preta e uma estampa nas costas.</td> <td>R$55,00</td> </tr> <tr> <td>Calça</td> <td>Tecido Jeans, azul claro, com botão duplo.</td> <td>R$105,00</td> </tr> </tbody> </table> FONTE: tableless.com.br [...]

Asp.net e Web Standards » Blog Archive » Asp:Repeater e Web Standards 02/10/2009 às 10:34

[...] mesmo uma tabela semântica pode ser criada utilizando este controle, com recursos que não existem, por exemplo, no [...]