📊 Tabelas Estruturadas
🏗️ Anatomia de uma Tabela
Estrutura Hierárquica
<table>
Container principal
<thead>
Cabeçalho
<tbody>
Corpo/Dados
<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 📙