📊 Tabelas Estruturadas

🏗️ Anatomia de uma Tabela

Estrutura Hierárquica

<table>
Container principal
<thead>
Cabeçalho
<tbody>
Corpo/Dados
<tfoot>
Rodapé (opcional)
<table> <caption>Vendas por Trimestre 2024</caption> <thead> <tr> <th>Produto</th> <th>Q1</th> <th>Q2</th> <th>Q3</th> <th>Total</th> </tr> </thead> <tbody> <tr> <td>Produto A</td> <td>150</td> <td>200</td> <td>180</td> <td>530</td> </tr> <tr> <td>Produto B</td> <td>120</td> <td>160</td> <td>140</td> <td>420</td> </tr> </tbody> <tfoot> <tr> <td><strong>Total Geral</strong></td> <td><strong>270</strong></td> <td><strong>360</strong></td> <td><strong>320</strong></td> <td><strong>950</strong></td> </tr> </tfoot> </table>

📋 Tabela Básica Completa

📊 Relatório de Vendas - Q4 2024
Produto Categoria Vendas (un) Receita (R$) Status
Smartphone Pro Eletrônicos 1,250 R$ 3.750.000 ✅ Meta atingida
Notebook Ultra Informática 850 R$ 4.250.000 ✅ Meta atingida
Tablet Plus Eletrônicos 640 R$ 1.920.000 ⚠️ Abaixo da meta
Smart Watch Wearables 2,100 R$ 1.680.000 🚀 Acima da meta
TOTAL GERAL 4,840 R$ 11.600.000 Meta: 95%
🎯 Elementos importantes: Caption para título, thead/tbody/tfoot para estrutura semântica, th para cabeçalhos e td para dados.

🔗 Colspan e Rowspan

Demonstração de Colspan (múltiplas colunas)

Período Vendas por Região Total
Norte Centro Sul
Janeiro 120 150 180 450
Fevereiro 140 160 200 500

Demonstração de Rowspan (múltiplas linhas)

Categoria Produto Preço Estoque
Eletrônicos Smartphone R$ 1.200 50
Tablet R$ 800 30
Livros Ficção R$ 35 200
Técnico R$ 120 85
<!-- COLSPAN - Célula ocupa múltiplas colunas --> <tr> <th>Período</th> <th colspan="3">Vendas por Região</th> <!-- Ocupa 3 colunas --> <th>Total</th> </tr> <!-- ROWSPAN - Célula ocupa múltiplas linhas --> <tr> <td rowspan="2">Eletrônicos</td> <!-- Ocupa 2 linhas --> <td>Smartphone</td> <td>R$ 1.200</td> </tr> <tr> <!-- Primeira célula é "pulada" devido ao rowspan --> <td>Tablet</td> <td>R$ 800</td> </tr>

♿ Acessibilidade em Tabelas

scope="col"

Define que o cabeçalho se aplica à coluna inteira

<th scope="col">Nome</th>

scope="row"

Define que o cabeçalho se aplica à linha inteira

<th scope="row">Janeiro</th>

headers="id"

Associa células aos seus cabeçalhos complexos

<th id="q1">Q1</th> <td headers="q1">150</td>

<caption>

Título descritivo da tabela para leitores de tela

<caption> Vendas por trimestre </caption>
📊 Exemplo de Tabela Acessível - Vendas 2024
Mês Região Norte Região Sul Total
Janeiro R$ 45.000 R$ 52.000 R$ 97.000
Fevereiro R$ 48.000 R$ 56.000 R$ 104.000
⚠️ Regras de acessibilidade:
✅ Use sempre <caption> para descrever a tabela
✅ Use scope="col" em cabeçalhos de coluna
✅ Use scope="row" em cabeçalhos de linha
✅ Para tabelas complexas, use headers e id

📱 Tabelas Responsivas

Tabela com Scroll Horizontal

ID Nome do Produto Categoria Preço Unitário Estoque Fornecedor Data Cadastro Status
001 Smartphone Galaxy Pro Eletrônicos R$ 2.999,00 25 unidades TechCorp LTDA 15/01/2024 ✅ Ativo
002 Notebook UltraBook Informática R$ 4.599,00 12 unidades ComputerMax SA 20/01/2024 ⚠️ Estoque baixo
003 Fone Bluetooth Premium Áudio R$ 599,00 45 unidades SoundTech Inc 25/01/2024 ✅ Ativo
<!-- Container com scroll horizontal --> <div class="container-responsivo"> <table class="tabela-responsiva"> <!-- Conteúdo da tabela --> </table> </div> <style> .container-responsivo { overflow-x: auto; /* Permite scroll horizontal */ width: 100%; } .tabela-responsiva { min-width: 600px; /* Largura mínima */ width: 100%; } /* Em telas pequenas */ @media (max-width: 768px) { .tabela-responsiva th, .tabela-responsiva td { padding: 8px 4px; font-size: 14px; } } </style>
⚠️ Limitações em mobile: Tabelas são naturalmente difíceis para telas pequenas. Para dados complexos, considere usar cards ou listas em mobile.

🎯 Casos de Uso Adequados

✅ USE para:

  • Dados tabulares reais
  • Comparações numéricas
  • Relatórios financeiros
  • Horários e cronogramas
  • Listas de preços
  • Resultados de pesquisas

❌ NÃO USE para:

  • Layout de página
  • Alinhamento visual
  • Grids de imagens
  • Menus de navegação
  • Formulários
  • Cards de produtos
💡 Regra de ouro: Se os dados fazem sentido em uma planilha Excel, provavelmente fazem sentido em uma tabela HTML. Caso contrário, use divs com CSS Grid ou Flexbox.

✨ Exemplo Prático Completo

<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Relatório de Vendas</title> <style> .relatorio { max-width: 1200px; margin: 0 auto; padding: 20px; } .tabela-relatorio { width: 100%; border-collapse: collapse; margin: 20px 0; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .tabela-relatorio caption { font-size: 24px; font-weight: bold; padding: 20px; background: #2c3e50; color: white; } .tabela-relatorio th { background: #3498db; color: white; padding: 15px; text-align: left; } .tabela-relatorio td { padding: 12px 15px; border-bottom: 1px solid #ddd; } .tabela-relatorio tbody tr:nth-child(even) { background: #f8f9fa; } .tabela-relatorio tbody tr:hover { background: #e3f2fd; } .tabela-relatorio tfoot { background: #2c3e50; color: white; font-weight: bold; } .status-ativo { color: #27ae60; } .status-alerta { color: #f39c12; } .status-inativo { color: #e74c3c; } @media (max-width: 768px) { .container-tabela { overflow-x: auto; } .tabela-relatorio { min-width: 600px; } } </style> </head> <body> <div class="relatorio"> <div class="container-tabela"> <table class="tabela-relatorio"> <caption> 📈 Relatório de Performance - Vendas Q4/2024 </caption> <thead> <tr> <th scope="col">Vendedor</th> <th scope="col">Região</th> <th scope="col">Meta</th> <th scope="col">Realizado</th> <th scope="col">% Meta</th> <th scope="col">Status</th> </tr> </thead> <tbody> <tr> <th scope="row">João Silva</th> <td>Sul</td> <td>R$ 150.000</td> <td>R$ 180.000</td> <td>120%</td> <td class="status-ativo">✅ Superou</td> </tr> <tr> <th scope="row">Maria Santos</th> <td>Norte</td> <td>R$ 120.000</td> <td>R$ 115.000</td> <td>96%</td> <td class="status-alerta">⚠️ Próximo</td> </tr> </tbody> <tfoot> <tr> <td colspan="2">TOTAL GERAL</td> <td>R$ 270.000</td> <td>R$ 295.000</td> <td>109%</td> <td>Meta Atingida</td> </tr> </tfoot> </table> </div> </div> </body> </html>



Dev by Maugus em HTML puro 📙