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.
25 Comentários
25 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!!