Pular para o conteúdo
// visualizar em
salvo em todas as páginas

Table

Tabela que mostra registros em linhas e colunas para a pessoa comparar, como faturas ou estoque. Para ordenar, filtrar e paginar dados, use Data table.

Padrão WAI-ARIA tableComponente de servidorCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe o que precisar. Ele renderiza no servidor.

import { Table, TableCaption, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell } from "@camaleo/react";

Anatomia

Uma <table> nativa dentro de uma caixa que rola para o lado quando a tabela não cabe. Cada parte tem um data-slot que você pode usar no CSS.

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d
FaturaSituaçãoValor
INV-4029PagaR$ 1.740,00
INV-4028PendenteR$ 6.402,50
INV-4027VencidaR$ 375,00
Faturas emitidas em outubro de 2026
FaturaEmissãoValor
INV-402914/10/2026R$ 1.740,00
INV-402812/10/2026R$ 6.402,50

Com legenda

Uma TableCaption dá nome à tabela. O leitor de tela lê a legenda antes das linhas, e ela também nomeia a área de rolagem quando a tabela fica larga demais.

ClientePedidosReceita
Acme Logística142R$ 241.000,00
Vila Nova Design89R$ 123.250,00
Aurora Biotecnologia12R$ 42.000,00

Números à direita

Passe align="end" no cabeçalho e nas células das colunas de números. Os algarismos ficam com a mesma largura, e dá para comparar valores de relance.

FaturaClienteValor
INV-4029Acme LogísticaR$ 1.740,00
INV-4028Vila Nova DesignR$ 6.402,50
INV-4027Aurora BiotecnologiaR$ 375,00
TotalR$ 8.517,50

Linha de total

Coloque o total num TableFooter, abaixo de uma linha mais forte. Ele fica separado dos dados, então ordenar ou incluir linhas não muda a posição dele.

ProdutoEstoquePreço
Teclado mecânico TKLDisponívelR$ 749,00
Mouse ergonômico sem fioRestam 3R$ 449,00
Hub USB-C com 8 portasEsgotadoR$ 329,00

Situação numa coluna

Um selo por linha é mais fácil de bater o olho do que uma frase. Use palavras curtas e as mesmas em todas as linhas.

FaturaClienteValor
Nenhuma fatura ainda

As faturas que você enviar para clientes aparecem aqui.

Ainda sem linhas

Mantenha os cabeçalhos e preencha o corpo com uma linha que ocupa todas as colunas. Diga por que está vazia e qual é o próximo passo.

Cliente
Vila Nova DesignR$ 6.250,00
Acme LogísticaR$ 24.000,00
Aurora BiotecnologiaR$ 46.600,00

Coluna que ordena

Clique em Receita. O botão inverte a ordem, e o aria-sort no cabeçalho avisa o leitor de tela em que sentido as linhas estão.

Todas as faturas de outubro de 2026
FaturaClienteEmissãoVencimentoPagamentoSituaçãoValor
INV-4029Acme Logística14/10/202613/11/2026PixPagaR$ 1.740,00
INV-4028Vila Nova Design12/10/202611/11/2026BoletoPendenteR$ 6.402,50
INV-4027Aurora Biotecnologia01/10/202615/10/2026CartãoVencidaR$ 375,00

Tabela larga no celular

Numa tela estreita esta tabela rola para o lado. Só nesse caso a caixa vira uma área de rolagem com nome e uma parada de Tab, para quem usa teclado rolar com as setas.

Em contexto

Tabelas costumam ficar num card ou numa seção da página, com as ações na última coluna. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

FaturaEmissãoSituaçãoValorAções
INV-402914/10/2026PagaR$ 1.740,00
INV-402812/10/2026PendenteR$ 6.402,50
INV-402701/10/2026VencidaR$ 375,00
Faturas para baixarTable · Badge · Button
NomeCargoE-mailSituação
APAline Prado
Arquiteta de front-endaline@camaleo.devAtiva
TCTiago Costa
Engenheiro de DevOpstiago@camaleo.devAusente
Pessoas do timeTable · Avatar · Badge
SKUItemQuantidadePreço unitário
SKU-8921Suporte de monitor de alumínio28R$ 649,00
SKU-8922Mouse pad de feltro, grande114R$ 169,90
SKU-8923Suporte de notebook de carvalho0R$ 289,00
Lista de estoqueTable

Boas práticas

ClienteValor
Acme LogísticaR$ 123.250,00
Vila Nova DesignR$ 375,00
FaçaAlinhe números à direita.

Unidade fica embaixo de unidade, e o maior valor salta aos olhos sem ler linha por linha.

ClienteValor
Acme LogísticaR$ 123.250,00
Vila Nova DesignR$ 375,00
EviteNúmeros alinhados à esquerda.

Os centavos ficam em lugares diferentes, e a pessoa precisa ler cada valor para comparar.

Faturas que vencem em novembro de 2026
FaturaValor
INV-4029R$ 1.740,00
FaçaDê nome a toda tabela.

Use uma TableCaption, ou aria-label quando o título já está na página. Assim a pessoa ouve do que se trata antes da primeira linha.

Coluna AColuna B
Dado 1120,00
EviteCabeçalhos como "Coluna A".

O leitor de tela lê o cabeçalho junto com cada célula. Um cabeçalho vago deixa todas as células vagas.

Props

PropriedadeTipoPadrãoDescrição
scrollLabelstring"Table"Nome da área de rolagem quando a tabela não cabe e não tem <caption>.
Aceita também todas as props da primitiva por baixo e os atributos nativos.
PropriedadeTipoPadrãoDescrição
align"end" | "start""start"Alinha o conteúdo. Use end em colunas de números: eles vão para a direita e todos os algarismos ficam com a mesma largura, então os valores se alinham na coluna.

TableHead e TableCell aceitam align. Todas as partes também aceitam os atributos do elemento HTML, como colSpan e aria-sort. TableCaption (uma <caption>, a primeira coisa dentro do Table) e TableFooter (um <tfoot>) aceitam os atributos dos seus elementos.

Styling hooks

Mude o visual sem copiar o componente: use os atributos ou defina os tokens num elemento pai, num estilo ou na própria tabela.

Atributos

data-alignstart · end
roleregion no table-container, só enquanto a tabela não cabe

Tokens que ele lê

Cor

--cml-border--cml-fg--cml-fg-muted--cml-focus-offset--cml-focus-ring--cml-focus-width--cml-surface-raised

Forma e tamanho

--cml-border-width--cml-font-size-field--cml-radius-popover

Tipografia e movimento

--cml-font-label--cml-font-weight-control

Só deste componente

--cml-corner-shape

Acessibilidade

TabPassa pelos botões e links dentro das células. Quando a tabela não cabe, a área de rolagem é uma parada a mais.
← / →Rolam a tabela larga para o lado enquanto a área de rolagem está com o foco.

Relacionados

Esta página foi útil? · Editar esta página no GitHub