Resumo Completo sobre Tabelas em HTML e CSS

1. Estrutura Básica de uma Tabela

Uma tabela HTML é composta por:

<table>
  <thead>
    <tr>
      <th>Cabeçalho 1</th>
      <th>Cabeçalho 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dado 1</td>
      <td>Dado 2</td>
    </tr>
  </tbody>
</table>

2. Estilização Básica

Para uma tabela visualmente agradável, use:

3. Efeito Zebrado com nth-child(2n)

O seletor tbody tr:nth-child(2n) seleciona todas as linhas pares do tbody da tabela, aplicando estilos diferentes para criar o efeito zebrado.
NomeIdadeCidade
João28São Paulo
Maria34Rio de Janeiro
Carlos22Belo Horizonte
Ana29Curitiba
Pedro40Fortaleza
tbody tr:nth-child(2n) {
  background-color: #f9f9f9;
}

4. Outros Efeitos Comuns

ProdutoPreçoQuantidade
TecladoR$120,0015
MouseR$70,0030
MonitorR$850,007
NotebookR$3.200,005
tbody tr:hover {
  background-color: #d1e7fd;
}

th, td {
  vertical-align: middle;
}

5. Tabela Responsiva Simples

Para tabelas com muitas colunas, use um container com overflow-x: auto; para permitir scroll horizontal em telas pequenas.

NomeIdadeCidadeProfissãoSalárioEmpresa
João28São PauloDesenvolvedorR$4.500Empresa A
Maria34Rio de JaneiroDesignerR$3.800Empresa B
Carlos22Belo HorizonteAnalistaR$3.200Empresa C
Ana29CuritibaGerenteR$5.000Empresa D
.table-responsive {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

6. Cabeçalho fixo no topo da página (Sticky Header)

Para deixar o cabeçalho da tabela fixo no topo enquanto você rola o conteúdo da tabela, use position: sticky; no <thead> com top: 0;.

Isso funciona melhor se a tabela estiver dentro de um container com altura fixa e overflow-y: auto;, para que o scroll seja interno.

NomeIdadeCidade
João28São Paulo
Maria34Rio de Janeiro
Carlos22Belo Horizonte
Ana29Curitiba
Pedro40Fortaleza
Lucas31Porto Alegre
Mariana27Salvador
Felipe36Brasília
Clara24Recife
Rafael33Fortaleza
thead {
  position: sticky;
  top: 0;
  background-color: #34495e; /* importante para visual */
  color: white;
  z-index: 10; /* para ficar sobre as linhas */
}

.container-tabela {
  max-height: 200px;
  overflow-y: auto;
  border: 1px solid #ccc;
}

7. Usando colspan e rowspan em tabelas

colspan é usado para fazer uma célula ocupar duas ou mais colunas.

rowspan é usado para fazer uma célula ocupar duas ou mais linhas.

🔸 Exemplo com colspan:

NomeContato
EmailTelefone
Joãojoao@email.com9999-0001
Mariamaria@email.com9999-0002
<th colspan="2">Contato</th>

🔸 Exemplo com rowspan:

DiaEvento
SegundaReunião
Treinamento
TerçaApresentação
<td rowspan="2">Segunda</td>

Esses atributos são úteis quando você precisa organizar melhor visualmente dados agrupados na tabela.

8. Estilizando colunas com <colgroup> e <col>

A tag <colgroup> é usada dentro da tabela para aplicar estilos diretamente às colunas, sem precisar estilizar célula por célula. Ela contém uma ou mais tags <col>, que representam cada coluna da tabela, na ordem em que aparecem.

Você pode aplicar estilos como largura, cor de fundo ou bordas usando atributos inline ou classes CSS.

🔸 Exemplo prático com estilos por coluna:

ProdutoPreçoEstoque
TecladoR$12015
MouseR$7030
MonitorR$8508
<table>
  <colgroup>
    <col style="background-color: #f2f2f2; width: 200px;">
    <col style="background-color: #dff0d8;">
    <col>
  </colgroup>
  <thead>...</thead>
  <tbody>...</tbody>
</table>

🔸 Usando span para aplicar a várias colunas

Você pode aplicar o mesmo estilo a várias colunas usando o atributo span:

<colgroup>
  <col span="2" style="background-color: #e0f7fa;">
  <col>
</colgroup>

Nesse exemplo, as duas primeiras colunas receberão a mesma cor de fundo.

9. Tabela Responsiva com Scroll Horizontal

Por padrão, tabelas em HTML não são responsivas. Para que funcionem bem em telas pequenas (como celular), é comum colocá-las dentro de um <div> com rolagem horizontal usando overflow-x: auto.

Produto Preço Estoque Fornecedor Data
TecladoR$12015ABC10/06
MouseR$7030XYZ09/06
MonitorR$8508DEF08/06
NotebookR$3.2005GHI07/06

🧠 Dica:

Use min-width na tabela e white-space: nowrap nas células para forçar a rolagem horizontal quando necessário.

📱 Comportamento: