Pagination
Paginação — percorre uma lista longa uma página por vez e mostra onde a pessoa está nela. Os números são links para páginas que um buscador deve encontrar, ou botões para uma lista que vive no navegador.
Instalação
Configure o Camaleo uma vez (Instalação) e importe o que precisar. O DataTable já traz a paginação; use ela sozinha para qualquer outra lista.
import { Pagination } from "@camaleo/react";Anatomia
Um landmark nav em volta de uma lista. O primeiro e o último itens são Anterior e Próxima; entre eles, os números das páginas e os intervalos. A quantidade de itens não muda quando a página muda, então o controle não pula de largura.
Exemplos
Todo exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor da marca escolhidos na barra acima.
Links, para páginas que se compartilham
Passe getHref quando cada página tiver sua própria URL: os buscadores seguem os links, e as pessoas podem abrir uma página em outra aba ou compartilhar.
Pedidos recentes
- #4821R$ 49,90Mariana LimaPago
- #4820R$ 87,69Rafael SouzaPago
- #4819R$ 125,48Camila FerreiraPendente
- #4818R$ 163,27Lucas OliveiraPago
Uma lista no navegador
Mude de página. Com onPageChange os números são botões; o foco fica no que você apertou, e uma mensagem de status diz "Página 3 de 10".
Compacta, para celular
Com setas em texto e uma vizinha, a fileira quebra em duas linhas abaixo de uns 420px. siblings={0} e os nomes das setas em VisuallyHidden deixam ela abaixo de 310px em todos os estilos, numa linha só num celular de 390px; o total vai para o texto acima.
Com tamanho da página e contagem
Mude as linhas por página. "Mostrando 21–40 de 312" diz quanto conteúdo há, e a nova página mantém a primeira linha que você estava vendo.
Primeira e última sempre à vista
A primeira e a última páginas nunca saem da fileira, então um só toque volta ao início ou vai direto ao fim de 48 páginas.
siblings=0siblings=1siblings=2Vizinhas
siblings define quantas páginas aparecem de cada lado da atual. Use 0 em lugares estreitos e 2 quando as pessoas costumam pular algumas páginas.
Nomes para o leitor de tela
Traduza o aria-label, as setas e o pageLabel. Com o total no pageLabel, cada número é lido como "Página 3 de 12".
Em contexto
Estas são partes inteiras de interface que você pode copiar, no estilo que escolheu.
Arquivo do blog
- Produto21/10/2026Reembolsos por Pix agora chegam em segundos
- Design08/10/2026Como fizemos o modo escuro para 13 estilos
- Engenharia30/09/2026O checkout ficou 40% mais rápido no celular
Pedidos recentes
| Pedido | Cliente | Situação | Total |
|---|---|---|---|
| #5132 | Mariana Lima | Pago | R$ 49,90 |
| #5131 | Rafael Souza | Pago | R$ 87,69 |
| #5130 | Camila Ferreira | Pendente | R$ 125,48 |
| #5129 | Lucas Oliveira | Pago | R$ 163,27 |
| #5128 | Fernanda Rocha | Pago | R$ 201,06 |
- Como reembolsar um pedidoO reembolso total volta para o mesmo meio de pagamento em 5 a 10 dias úteis.
- Como responder a um chargebackEnvie o comprovante de entrega em até 7 dias para o banco analisar a contestação.
- Reembolso parcial e crédito na lojaDevolva parte do pedido ou dê um crédito para o cliente usar na próxima compra.
Boas práticas
A página atual e "Mostrando 21–40 de 312" respondem às duas perguntas antes que alguém faça.
Sem o número da página nem um total, a pessoa não sabe quanto já andou nem quanto falta.
- Ana Ribeiro
- Carlos Mendes
- Júlia Santos
- Pedro Almeida
- Beatriz Costa
Cinco nomes cabem na tela. Ler todos leva menos tempo do que achar a próxima página.
- Ana Ribeiro
- Carlos Mendes
Três páginas de dois nomes escondem quase toda a lista atrás de cliques, e o Ctrl+F para de encontrá-los.
Props
onPageChange.As demais props vão para o nav. Passe getHref (links) ou onPageChange (botões).
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 paginação.
Atributos
Tokens que ele lê
Cor
Forma e tamanho
Tipografia e movimento
Só deste componente
/* números quadrados na tabela de pedidos */
.orders [data-slot="pagination-item"] {
--cml-radius-control: 4px;
}Acessibilidade
- É um landmark nav. Dê a ele o nome do que ele pagina ("Páginas de pedidos") e use um nome único quando a página tiver duas paginações.
- A página atual tem aria-current="page". Cada número recebe o nome de pageLabel, "Page 3" por padrão; os intervalos … ficam escondidos do leitor de tela.
- Com onPageChange, o foco fica no controle apertado, para a pessoa continuar paginando. Anuncie a mudança numa mensagem role="status" ("Página 3 de 12"); a lista atualizada está logo acima.
- Com getHref, cada página é uma nova URL e um carregamento completo; deixe o título da página dizer qual é ("Pedidos, página 3 de 12").