AULA 5

📊 Tabelas e Dados

Aprenda a estruturar dados de forma acessível e profissional usando tabelas HTML, com foco em semântica, responsividade e usabilidade.

⏱️ 50 minutos
🎯 Intermediário
📝 4 Exercícios

🎯 Objetivos de Aprendizagem

🏗️ 1. Estrutura Básica de Tabelas - Organizando Dados com Inteligência

🎯 Quando Usar Tabelas - A Regra de Ouro

Tabelas são para dados, não para layout! Use tabelas apenas quando você tiver dados que fazem sentido organizados em linhas e colunas - como relatórios, comparações, listas de produtos, ou qualquer informação que você colocaria numa planilha Excel.

Teste simples: Se você conseguir imaginar seus dados numa planilha, então uma tabela HTML é apropriada. Se você está tentando posicionar elementos na página, use CSS Grid ou Flexbox.

📋 Elementos Fundamentais - A Anatomia de uma Tabela

Toda tabela HTML tem uma hierarquia: Como uma receita bem estruturada, cada elemento tem seu lugar e propósito específico. Vamos começar com o mais simples:

<!-- 📊 Tabela básica - Os primeiros passos -->
<table>
    <tr>                              <!-- 📏 Primeira linha (cabeçalho) -->
        <th>Nome</th>                  <!-- 🏷️ Célula de cabeçalho -->
        <th>Idade</th>
        <th>Profissão</th>
    </tr>
    <tr>                              <!-- 📏 Segunda linha (dados) -->
        <td>Ana Silva</td>             <!-- 📝 Célula de dados -->
        <td>28</td>
        <td>Desenvolvedora</td>
    </tr>
    <tr>                              <!-- 📏 Terceira linha (mais dados) -->
        <td>Carlos Santos</td>
        <td>35</td>
        <td>Designer</td>
    </tr>
</table>

🎯 Elementos Essenciais Explicados

  • <table>: Container principal - "a mesa" onde os dados ficam
  • <tr>: Table Row - cada linha horizontal da tabela
  • <th>: Table Header - células de cabeçalho (negrito por padrão)
  • <td>: Table Data - células de dados normais

🎯 Estrutura Semântica Completa - Profissionalismo Total

Tabelas profissionais têm estrutura: Como um prédio bem construído, uma tabela profissional tem fundações (thead), corpo (tbody), rodapé (tfoot) e um título claro (caption). Isso não é apenas organização - é acessibilidade e SEO!

<table>
    <!-- 📋 Caption: O título que explica tudo -->
    <caption>Funcionários da Empresa - Q1 2024</caption>
    
    <!-- 🎭 THEAD: Cabeçalho da tabela -->
    <thead>
        <tr>
            <th scope="col">ID</th>                    <!-- 🆔 Identificador único -->
            <th scope="col">Nome Completo</th>         <!-- 👤 Nome da pessoa -->
            <th scope="col">Departamento</th>          <!-- 🏢 Setor de trabalho -->
            <th scope="col">Salário</th>               <!-- 💰 Remuneração -->
        </tr>
    </thead>
    
    <!-- 📊 TBODY: Corpo principal com os dados -->
    <tbody>
        <tr>
            <td>001</td>
            <td>Maria Fernanda Costa</td>
            <td>Tecnologia</td>
            <td>R$ 8.500</td>
        </tr>
        <tr>
            <td>002</td>
            <td>João Pedro Oliveira</td>
            <td>Marketing</td>
            <td>R$ 6.200</td>
        </tr>
        <tr>
            <td>003</td>
            <td>Patricia Lima</td>
            <td>Financeiro</td>
            <td>R$ 7.800</td>
        </tr>
    </tbody>
    
    <!-- 🧮 TFOOT: Rodapé com totais e resumos -->
    <tfoot>
        <tr>
            <td colspan="3"><strong>Total Salários:</strong></td>  <!-- 📊 Mescla 3 colunas -->
            <td><strong>R$ 22.500</strong></td>               <!-- 💰 Soma total -->
        </tr>
    </tfoot>
</table>

🎯 Anatomia da Tabela Profissional

  • <caption>: Título da tabela - crucial para SEO e acessibilidade
  • <thead>: Cabeçalho - fica fixo ao fazer scroll em algumas implementações
  • <tbody>: Corpo principal - onde ficam os dados reais
  • <tfoot>: Rodapé - para totais, médias, resumos
  • scope="col": Indica que o cabeçalho se refere à coluna inteira
  • colspan="3": Mescla células horizontalmente

⚠️ Elementos Obrigatórios vs Opcionais

  • ✅ Obrigatórios: <table>, <tr>, <td> ou <th>
  • 📋 Recomendados: <caption>, <thead>, <tbody>
  • 📊 Opcionais: <tfoot> (só quando há totais/resumos)
  • ♿ Acessibilidade: scope, headers (obrigatórios para tabelas complexas)

🏋️‍♂️ Exercício 1: Tabela de Produtos

Crie uma tabela completa de produtos com:

♿ 2. Tabelas Acessíveis - Inclusão Digital Verdadeira

🌍 Por que Acessibilidade em Tabelas é Crítica?

Tabelas podem ser labirintos para usuários com deficiência visual. Imagine navegar por uma planilha gigante usando apenas um leitor de tela - sem as técnicas corretas, é como tentar montar um quebra-cabeças no escuro.

Acessibilidade em tabelas beneficia todos: Headers bem definidos, navegação clara e estrutura lógica tornam os dados mais compreensíveis para qualquer pessoa, com ou sem deficiência.

🎯 Atributo Scope - Criando Relacionamentos Claros

Scope conecta dados aos seus cabeçalhos: É como dizer ao leitor de tela "esta célula com o número 150 se refere ao cabeçalho 'Notebooks' na linha e 'Q1' na coluna". Sem scope, os dados ficam órfãos de contexto.

<table>
    <caption>Vendas por Trimestre - 2024</caption>
    
    <thead>
        <tr>
            <th scope="col">Produto</th>               <!-- 🏷️ Cabeçalho de coluna -->
            <th scope="col">Q1</th>                    <!-- 📊 Dados trimestrais -->
            <th scope="col">Q2</th>
            <th scope="col">Q3</th>
            <th scope="col">Q4</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <th scope="row">Notebooks</th>            <!-- 🏷️ Cabeçalho de linha -->
            <td>150</td>                             <!-- 📊 Leitor lê: "Notebooks, Q1: 150" -->
            <td>200</td>                             <!-- 📊 Leitor lê: "Notebooks, Q2: 200" -->
            <td>180</td>
            <td>220</td>
        </tr>
        <tr>
            <th scope="row">Smartphones</th>          <!-- 🏷️ Outro produto -->
            <td>300</td>                             <!-- 📊 Contexto claro automaticamente -->
            <td>350</td>
            <td>280</td>
            <td>400</td>
        </tr>
    </tbody>
</table>

🎯 Tipos de Scope Explicados

  • scope="col": Este cabeçalho se refere a toda a coluna abaixo
  • scope="row": Este cabeçalho se refere a toda a linha à direita
  • scope="colgroup": Para cabeçalhos que agrupam várias colunas
  • scope="rowgroup": Para cabeçalhos que agrupam várias linhas

🏷️ Headers Complexos - Navegando Estruturas Avançadas

Algumas tabelas são mais complexas: Quando você tem cabeçalhos aninhados, subgrupos ou estruturas em múltiplos níveis, precisa de técnicas mais sofisticadas para manter a acessibilidade.

<table>
    <caption>Relatório de Vendas por Região e Produto</caption>
    
    <thead>
        <tr>
            <th rowspan="2" scope="col">Produto</th>       <!-- 🎯 Atravessa 2 linhas -->
            <th colspan="2" scope="colgroup">Sudeste</th>   <!-- 🌎 Agrupa 2 colunas -->
            <th colspan="2" scope="colgroup">Sul</th>      <!-- 🌎 Outro agrupamento -->
        </tr>
        <tr>
            <!-- Subcabeçalhos da região Sudeste -->
            <th scope="col">SP</th>                       <!-- 🏙️ Estados específicos -->
            <th scope="col">RJ</th>
            <!-- Subcabeçalhos da região Sul -->
            <th scope="col">RS</th>
            <th scope="col">SC</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <th scope="row">Notebooks</th>              <!-- 📱 Produto como cabeçalho de linha -->
            <td>120</td>                               <!-- 📊 SP: 120 notebooks -->
            <td>85</td>                                <!-- 📊 RJ: 85 notebooks -->
            <td>95</td>                                <!-- 📊 RS: 95 notebooks -->
            <td>60</td>                                <!-- 📊 SC: 60 notebooks -->
        </tr>
        <tr>
            <th scope="row">Tablets</th>                <!-- 📱 Outro produto -->
            <td>80</td>                                <!-- 📊 Leitores entendem a hierarquia -->
            <td>65</td>
            <td>70</td>
            <td>45</td>
        </tr>
    </tbody>
</table>

🎯 Estruturas Complexas Explicadas

  • rowspan="2": Cabeçalho que se estende por 2 linhas verticalmente
  • colspan="2": Cabeçalho que agrupa 2 colunas horizontalmente
  • scope="colgroup": Para cabeçalhos que representam grupos de colunas
  • Hierarquia clara: Região → Estado → Produto → Valor

🗣️ ARIA para Tabelas Complexas - Comunicação Avançada

Quando HTML não é suficiente: Para tabelas muito complexas, ARIA (Accessible Rich Internet Applications) oferece atributos extras que ajudam leitores de tela a navegar e compreender estruturas sofisticadas.

<table role="table" aria-label="Dados financeiros da empresa">
    <caption id="caption-financeiro">
        Demonstrativo Financeiro - Último Trimestre
        <div>Valores em milhares de reais</div>       <!-- 💰 Contexto importante -->
    </caption>
    
    <thead>
        <tr role="row">                               <!-- 📏 Papel da linha -->
            <th scope="col" aria-describedby="caption-financeiro">
                Mês
            </th>
            <th scope="col">Receita</th>                <!-- 💵 Entrada de dinheiro -->
            <th scope="col">Despesas</th>               <!-- 💸 Saída de dinheiro -->
            <th scope="col">Lucro</th>                  <!-- 📈 Resultado final -->
        </tr>
    </thead>
    
    <tbody>
        <tr role="row">
            <th scope="row">Janeiro</th>                <!-- 📅 Período de referência -->
            <td>R$ 150k</td>                           <!-- 💰 Valores claramente formatados -->
            <td>R$ 120k</td>
            <td>R$ 30k</td>
        </tr>
        <!-- Mais linhas de dados... -->
    </tbody>
</table>

💡 Dicas de Acessibilidade Avançada

  • <caption> sempre: Descreva o propósito e contexto da tabela
  • scope correto: "col" para colunas, "row" para linhas, "colgroup"/"rowgroup" para grupos
  • role="table": Garante que seja reconhecido como tabela
  • aria-label: Descrição adicional quando caption não é suficiente
  • aria-describedby: Conecta células a descrições extras
  • Teste com leitor de tela: Use NVDA (gratuito) ou JAWS para validar

🔗 3. Mesclando Células - Criando Estruturas Inteligentes

🎯 O Poder da Mesclagem

Mesclar células é como arquitetura de dados: Você conecta informações relacionadas, cria agrupamentos lógicos e organiza dados complexos de forma visual. É a diferença entre uma planilha bagunçada e um relatório profissional.

Mas cuidado: Mesclagem excessiva pode tornar tabelas inacessíveis. Use com moderação e sempre mantenha a lógica clara.

↔️ Colspan - Mesclagem Horizontal (Conectando Colunas)

Colspan é para spans horizontais: Quando uma informação se aplica a várias colunas adjacentes, use colspan. Perfeito para cronogramas, relatórios de período e agrupamentos de dados relacionados.

<table>
    <caption>Cronograma do Projeto</caption>
    
    <thead>
        <tr>
            <th scope="col">Fase</th>
            <th scope="col">Jan</th>
            <th scope="col">Fev</th>
            <th scope="col">Mar</th>
            <th scope="col">Abr</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <th scope="row">Planejamento</th>
            <td colspan="2">Análise e Definição</td>    <!-- 📅 Ocupa Jan+Fev -->
            <td>-</td>                                  <!-- 📅 Março vazio -->
            <td>-</td>                                  <!-- 📅 Abril vazio -->
        </tr>
        <tr>
            <th scope="row">Desenvolvimento</th>
            <td>-</td>                                  <!-- 📅 Janeiro vazio -->
            <td colspan="3">Codificação e Testes</td>   <!-- 📅 Fev+Mar+Abr -->
        </tr>
        <tr>
            <th scope="row">Entrega</th>
            <td>-</td>
            <td>-</td>
            <td>-</td>
            <td>Deploy</td>                              <!-- 📅 Só em Abril -->
        </tr>
    </tbody>
</table>

🎯 Como Colspan Funciona

  • colspan="2": Esta célula ocupa o espaço de 2 colunas
  • colspan="3": Esta célula ocupa o espaço de 3 colunas
  • Regra importante: O número total de colunas deve bater em cada linha
  • Visualize: É como mesclar células no Excel horizontalmente

↕️ Rowspan - Mesclagem Vertical (Conectando Linhas)

Rowspan é para spans verticais: Quando uma informação se aplica a várias linhas consecutivas, use rowspan. Ideal para agrupamentos por categoria, departamentos ou qualquer classificação hierárquica.

<table>
    <caption>Equipe por Departamento</caption>
    
    <thead>
        <tr>
            <th scope="col">Departamento</th>
            <th scope="col">Nome</th>
            <th scope="col">Cargo</th>
            <th scope="col">Experiência</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <th rowspan="3" scope="rowgroup">Tecnologia</th>
            <td>Ana Costa</td>
            <td>Tech Lead</td>
            <td>8 anos</td>
        </tr>
        <tr>
            <td>Bruno Silva</td>
            <td>Desenvolvedor</td>
            <td>5 anos</td>
        </tr>
        <tr>
            <td>Carla Santos</td>
            <td>QA</td>
            <td>3 anos</td>
        </tr>
        
        <tr>
            <th rowspan="2" scope="rowgroup">Design</th>
            <td>Daniel Lima</td>
            <td>UI Designer</td>
            <td>6 anos</td>
        </tr>
        <tr>
            <td>Elena Rodrigues</td>
            <td>UX Designer</td>
            <td>4 anos</td>
        </tr>
    </tbody>
</table>

🎯 Combinação Complexa

<table>
    <caption>Relatório de Vendas por Região e Período</caption>
    
    <thead>
        <tr>
            <th rowspan="2" scope="col">Região</th>
            <th colspan="4" scope="colgroup">2024</th>
            <th rowspan="2" scope="col">Total</th>
        </tr>
        <tr>
            <th scope="col">Q1</th>
            <th scope="col">Q2</th>
            <th scope="col">Q3</th>
            <th scope="col">Q4</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <th scope="row">Norte</th>
            <td>120</td>
            <td>150</td>
            <td>140</td>
            <td>160</td>
            <td><strong>570</strong></td>
        </tr>
        <tr>
            <th scope="row">Sul</th>
            <td>200</td>
            <td>220</td>
            <td>210</td>
            <td>240</td>
            <td><strong>870</strong></td>
        </tr>
    </tbody>
    
    <tfoot>
        <tr>
            <th scope="row">Total Geral</th>
            <td><strong>320</strong></td>
            <td><strong>370</strong></td>
            <td><strong>350</strong></td>
            <td><strong>400</strong></td>
            <td><strong>1440</strong></td>
        </tr>
    </tfoot>
</table>

🏋️‍♂️ Exercício 2: Horário Escolar

Crie uma tabela de horário escolar que use:

📱 4. Tabelas Responsivas - Adaptação Inteligente

📊 O Desafio das Tabelas em Mobile

Tabelas são naturalmente horizontais, mobiles são verticais: Essa tensão fundamental cria um dos maiores desafios de design responsivo. Uma tabela que funciona bem em desktop pode ser completamente inutilizável em smartphone.

Não existe solução única: Cada tipo de tabela pede uma estratégia diferente - scroll horizontal, cards, priorização de colunas ou até mesmo redesign completo da informação.

🔄 Scroll Horizontal - A Solução Simples

Quando usar: Para tabelas com muitas colunas onde todas as informações são importantes. O usuário pode deslizar horizontalmente para ver mais dados. É a abordagem mais simples e preserva toda a informação.

<div class="table-container">
    <table class="table-responsive">
        <caption>Dados de Vendas - Role horizontalmente para ver mais</caption>
        <thead>
            <tr>
                <th scope="col">Produto</th>
                <th scope="col">Jan</th>
                <th scope="col">Fev</th>
                <th scope="col">Mar</th>
                <th scope="col">Abr</th>
                <th scope="col">Mai</th>
                <th scope="col">Jun</th>
                <th scope="col">Total</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th scope="row">Notebook Dell</th>
                <td data-label="Jan">45</td>
                <td data-label="Fev">52</td>
                <td data-label="Mar">48</td>
                <td data-label="Abr">55</td>
                <td data-label="Mai">60</td>
                <td data-label="Jun">58</td>
                <td data-label="Total"><strong>318</strong></td>
            </tr>
        </tbody>
    </table>
</div>

📱 CSS para Responsividade

/* Container para scroll horizontal */
.table-container {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border: 1px solid #ddd;
    border-radius: 8px;
}

.table-responsive {
    min-width: 600px;
    width: 100%;
    border-collapse: collapse;
}

/* Estilo mobile-first */
@media (max-width: 768px) {
    .table-responsive,
    .table-responsive thead,
    .table-responsive tbody,
    .table-responsive th,
    .table-responsive td,
    .table-responsive tr {
        display: block;
    }
    
    .table-responsive thead tr {
        position: absolute;
        top: -9999px;
        left: -9999px;
    }
    
    .table-responsive tr {
        border: 1px solid #ccc;
        margin-bottom: 10px;
        padding: 10px;
        border-radius: 8px;
    }
    
    .table-responsive td {
        border: none;
        padding: 10px;
        text-align: right;
        padding-left: 50%;
        position: relative;
    }
    
    .table-responsive td:before {
        content: attr(data-label) ": ";
        position: absolute;
        left: 10px;
        width: 45%;
        text-align: left;
        font-weight: bold;
    }
}

🎯 Tabela Cards para Mobile

<div class="products-table">
    <div class="table-header">
        <h3>Produtos em Destaque</h3>
        <p>Confira nossa seleção especial</p>
    </div>
    
    <div class="table-responsive-cards">
        <div class="product-card">
            <h4>Smartphone Samsung Galaxy</h4>
            <div class="product-details">
                <span class="label">Preço:</span>
                <span class="value">R$ 1.299,00</span>
            </div>
            <div class="product-details">
                <span class="label">Categoria:</span>
                <span class="value">Eletrônicos</span>
            </div>
            <div class="product-details">
                <span class="label">Estoque:</span>
                <span class="value">25 unidades</span>
            </div>
        </div>
        
        <div class="product-card">
            <h4>Notebook Lenovo ThinkPad</h4>
            <div class="product-details">
                <span class="label">Preço:</span>
                <span class="value">R$ 2.899,00</span>
            </div>
            <div class="product-details">
                <span class="label">Categoria:</span>
                <span class="value">Computadores</span>
            </div>
            <div class="product-details">
                <span class="label">Estoque:</span>
                <span class="value">12 unidades</span>
            </div>
        </div>
    </div>
</div>

💡 Estratégias de Responsividade

  • Scroll Horizontal: Para tabelas com muitas colunas
  • Tabela Card: Transformar linhas em cards no mobile
  • Priorização: Mostrar apenas colunas essenciais
  • Agrupamento: Agrupar dados relacionados

🏋️‍♂️ Exercício 3: Dashboard Responsivo

Crie um dashboard com tabelas que se adaptem bem ao mobile:

🎨 5. Estilização e UX - Design que Funciona

🎯 UX em Tabelas: Mais que Beleza

Tabelas bem estilizadas melhoram a compreensão: Não é apenas sobre fazer bonito - zebra striping reduz erros de leitura, hover states ajudam na navegação, e cores estratégicas destacam informações importantes.

Hierarquia visual é fundamental: Headers devem se destacar, dados devem ser legíveis, e o usuário deve conseguir escanear rapidamente para encontrar o que procura.

🎯 CSS Base para Tabelas - Fundação Sólida

Comece com o básico bem feito: Antes de adicionar efeitos elaborados, garanta que sua tabela tenha tipografia legível, espaçamento adequado e contraste suficiente. A funcionalidade vem antes da decoração.

/* 📐 Estilos base - A fundação */
table {
    border-collapse: collapse;                          /* 🔗 Une bordas adjacentes */
    width: 100%;                                       /* 📏 Largura total disponível */
    margin: 20px 0;                                    /* 📏 Espaço vertical */
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

caption {
    caption-side: top;                                 /* 📍 Posição do título */
    text-align: left;                                  /* 📍 Alinhamento à esquerda */
    font-weight: bold;                                 /* ✨ Destaque do título */
    font-size: 1.2em;                                  /* 📏 Tamanho maior */
    margin-bottom: 10px;                               /* 📏 Espaço abaixo */
    color: #333;                                       /* 🎨 Cor neutra escura */
}

th, td {
    text-align: left;                                  /* 📍 Alinhamento padrão */
    padding: 12px 15px;                                /* 📦 Espaço interno confortável */
    border-bottom: 1px solid #ddd;                     /* 🖼️ Linha separadora */
}

th {
    background-color: #f8f9fa;                         /* 🎨 Fundo dos cabeçalhos */
    font-weight: 600;                                  /* ✨ Peso da fonte */
    color: #495057;                                    /* 🎨 Cor do texto */
    border-top: 2px solid #007bff;                     /* 🎨 Borda superior azul */
}

/* 🦓 Zebra striping - Facilita leitura */
tbody tr:nth-child(even) {
    background-color: #f8f9fa;                         /* 🎨 Linhas pares destacadas */
}

/* 🖱️ Hover effects - Feedback visual */
tbody tr:hover {
    background-color: #e8f4fd;                         /* 🎨 Cor ao passar mouse */
    cursor: default;                                   /* 🖱️ Cursor padrão */
}

/* ♿ Focus para acessibilidade */
th:focus, td:focus {
    outline: 2px solid #007bff;                        /* 🔍 Contorno de foco */
    outline-offset: -2px;                              /* 📏 Posição do contorno */
}

🎯 Princípios de Estilização Explicados

  • border-collapse: Une bordas para visual limpo
  • Zebra striping: Alterna cores das linhas para facilitar leitura
  • Hover states: Feedback visual quando usuário navega
  • Focus states: Essencial para navegação por teclado
  • Tipografia consistente: Font-family, tamanhos e pesos harmônicos
  • Espaçamento generoso: Padding adequado melhora legibilidade

📊 Tabela com Indicadores Visuais - Dados que Falam

Transforme números em insights: Barras de progresso, badges de status e indicadores coloridos ajudam usuários a entender dados rapidamente. É a diferença entre uma planilha fria e um dashboard inteligente.

<table class="status-table">
    <caption>Status dos Projetos da Equipe</caption>
    
    <thead>
        <tr>
            <th scope="col">Projeto</th>
            <th scope="col">Responsável</th>
            <th scope="col">Progresso</th>
            <th scope="col">Status</th>
            <th scope="col">Prazo</th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <td><strong>Site E-commerce</strong></td>
            <td>Ana Silva</td>
            <td>
                <div class="progress-bar">
                    <div class="progress-fill" style="width: 75%"></div>
                </div>
                75%
            </td>
            <td><span class="status em-andamento">Em Andamento</span></td>
            <td>15/08/2024</td>
        </tr>
        <tr>
            <td><strong>App Mobile</strong></td>
            <td>Bruno Costa</td>
            <td>
                <div class="progress-bar">
                    <div class="progress-fill" style="width: 100%"></div>
                </div>
                100%
            </td>
            <td><span class="status concluido">Concluído</span></td>
            <td>10/08/2024</td>
        </tr>
        <tr>
            <td><strong>Dashboard Admin</strong></td>
            <td>Carla Santos</td>
            <td>
                <div class="progress-bar">
                    <div class="progress-fill" style="width: 30%"></div>
                </div>
                30%
            </td>
            <td><span class="status atrasado">Atrasado</span></td>
            <td>05/08/2024</td>
        </tr>
    </tbody>
</table>

🎨 CSS para Indicadores

/* Progress bar */
.progress-bar {
    width: 100px;
    height: 8px;
    background-color: #e9ecef;
    border-radius: 4px;
    overflow: hidden;
    display: inline-block;
    margin-right: 10px;
    vertical-align: middle;
}

.progress-fill {
    height: 100%;
    background: linear-gradient(90deg, #28a745, #20c997);
    transition: width 0.3s ease;
}

/* Status badges */
.status {
    padding: 4px 12px;
    border-radius: 20px;
    font-size: 0.85em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.status.concluido {
    background-color: #d4edda;
    color: #155724;
    border: 1px solid #c3e6cb;
}

.status.em-andamento {
    background-color: #d1ecf1;
    color: #0c5460;
    border: 1px solid #bee5eb;
}

.status.atrasado {
    background-color: #f8d7da;
    color: #721c24;
    border: 1px solid #f5c6cb;
}

/* Sortable headers */
.sortable {
    cursor: pointer;
    user-select: none;
    position: relative;
}

.sortable:hover {
    background-color: #e3f2fd;
}

.sortable:after {
    content: "⇅";
    position: absolute;
    right: 8px;
    opacity: 0.5;
}

🏋️‍♂️ Exercício 4: Painel Administrativo

Crie um painel administrativo completo com:

📋 Resumo da Aula

🎓 Missão Cumprida: Tabelas Dominadas!

Parabéns! Você completou uma jornada completa pelas tabelas HTML. Agora você possui conhecimento sólido para criar tabelas profissionais, acessíveis e responsivas que realmente servem aos usuários.

🏗️ Estrutura Semântica

Domínio completo de thead, tbody, tfoot, caption e elementos corretos para dados tabulares organizados e profissionais.

  • Hierarquia clara com caption, thead, tbody, tfoot
  • Elementos semânticos para diferentes tipos de dados
  • Boas práticas de organização e nomenclatura

♿ Acessibilidade Avançada

Implementação completa de scope, headers, ARIA e navegação por teclado para tabelas verdadeiramente inclusivas.

  • Atributos scope para relacionamentos claros
  • ARIA para tabelas complexas
  • Estruturas navegáveis por leitores de tela

🔗 Mesclagem Inteligente

Uso estratégico de colspan e rowspan para estruturas complexas, relatórios avançados e agrupamentos lógicos.

  • Colspan para mesclagem horizontal
  • Rowspan para agrupamentos verticais
  • Combinações complexas para relatórios

📱 Responsividade Adaptativa

Múltiplas técnicas para adaptar tabelas a diferentes tamanhos de tela mantendo usabilidade e acessibilidade.

  • Scroll horizontal para preservar dados
  • Cards responsivos para mobile
  • Priorização de colunas essenciais

✅ Checklist de Tabelas Profissionais

🚀 Próximos Passos no Mundo das Tabelas

Agora que você domina tabelas HTML, está pronto para:

  • Tabelas Dinâmicas: JavaScript para sorting, filtering e paginação
  • Frameworks de Dados: DataTables, AG-Grid, React Table
  • Visualizações: Charts.js, D3.js para gráficos interativos
  • Performance: Virtual scrolling para grandes datasets
  • Export: CSV, Excel, PDF para download de dados