Uma tabela HTML é composta por:
<table>
: elemento pai da tabela<thead>
: cabeçalho da tabela<tbody>
: corpo da tabela<tr>
: linha da tabela<th>
: célula de cabeçalho (normalmente no thead
)<td>
: célula de dados (no tbody
)<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>
Para uma tabela visualmente agradável, use:
border-collapse: collapse;
para bordas unidasborder
vertical-align
thead
) com fundo e cor diferententh-child(2n)
tbody tr:nth-child(2n)
seleciona todas as linhas pares do tbody
da tabela, aplicando estilos diferentes para criar o efeito zebrado.
Nome | Idade | Cidade |
---|---|---|
João | 28 | São Paulo |
Maria | 34 | Rio de Janeiro |
Carlos | 22 | Belo Horizonte |
Ana | 29 | Curitiba |
Pedro | 40 | Fortaleza |
tbody tr:nth-child(2n) {
background-color: #f9f9f9;
}
vertical-align: middle;
para centralizar texto verticalmenteProduto | Preço | Quantidade |
---|---|---|
Teclado | R$120,00 | 15 |
Mouse | R$70,00 | 30 |
Monitor | R$850,00 | 7 |
Notebook | R$3.200,00 | 5 |
tbody tr:hover {
background-color: #d1e7fd;
}
th, td {
vertical-align: middle;
}
Para tabelas com muitas colunas, use um container com overflow-x: auto;
para permitir scroll horizontal em telas pequenas.
Nome | Idade | Cidade | Profissão | Salário | Empresa |
---|---|---|---|---|---|
João | 28 | São Paulo | Desenvolvedor | R$4.500 | Empresa A |
Maria | 34 | Rio de Janeiro | Designer | R$3.800 | Empresa B |
Carlos | 22 | Belo Horizonte | Analista | R$3.200 | Empresa C |
Ana | 29 | Curitiba | Gerente | R$5.000 | Empresa D |
.table-responsive {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
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.
Nome | Idade | Cidade |
---|---|---|
João | 28 | São Paulo |
Maria | 34 | Rio de Janeiro |
Carlos | 22 | Belo Horizonte |
Ana | 29 | Curitiba |
Pedro | 40 | Fortaleza |
Lucas | 31 | Porto Alegre |
Mariana | 27 | Salvador |
Felipe | 36 | Brasília |
Clara | 24 | Recife |
Rafael | 33 | Fortaleza |
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;
}
colspan
e rowspan
em tabelascolspan
é usado para fazer uma célula ocupar duas ou mais colunas.
rowspan
é usado para fazer uma célula ocupar duas ou mais linhas.
colspan
:Nome | Contato | |
---|---|---|
Telefone | ||
João | joao@email.com | 9999-0001 |
Maria | maria@email.com | 9999-0002 |
<th colspan="2">Contato</th>
rowspan
:Dia | Evento |
---|---|
Segunda | Reunião |
Treinamento | |
Terça | Apresentação |
<td rowspan="2">Segunda</td>
Esses atributos são úteis quando você precisa organizar melhor visualmente dados agrupados na tabela.
<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.
Produto | Preço | Estoque |
---|---|---|
Teclado | R$120 | 15 |
Mouse | R$70 | 30 |
Monitor | R$850 | 8 |
<table>
<colgroup>
<col style="background-color: #f2f2f2; width: 200px;">
<col style="background-color: #dff0d8;">
<col>
</colgroup>
<thead>...</thead>
<tbody>...</tbody>
</table>
span
para aplicar a várias colunasVocê 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.
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 |
---|---|---|---|---|
Teclado | R$120 | 15 | ABC | 10/06 |
Mouse | R$70 | 30 | XYZ | 09/06 |
Monitor | R$850 | 8 | DEF | 08/06 |
Notebook | R$3.200 | 5 | GHI | 07/06 |
Use min-width
na tabela e white-space: nowrap
nas células para forçar a rolagem horizontal quando necessário.