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

ScrollArea

Área de rolagem — uma caixa de tamanho fixo cujo conteúdo rola de forma nativa — roda do mouse, toque e teclado — com barras de rolagem desenhadas pelo estilo. Use para um histórico de conversa, uma lista longa num card ou uma tabela mais larga que a tela.

Feito com Base UIPadrão Região rolável (WCAG 2.1.1)Componente clienteCódigo ↗
minimal · light · #3fa34d
jan 2025
fev 2025
mar 2025
abr 2025
mai 2025
jun 2025
jul 2025
ago 2025
set 2025
out 2025
nov 2025
dez 2025
jan 2026
fev 2026
mar 2026
abr 2026
mai 2026
jun 2026
jul 2026
ago 2026
set 2026
out 2026
nov 2026
dez 2026
orientation

Instalação

Configure o Camaleo uma vez (Instalação) e importe o componente. Ele renderiza no cliente.

import { ScrollArea } from "@camaleo/react";

Anatomia

A raiz recorta, o viewport rola. Dê uma altura à raiz, ou uma altura máxima para ela crescer com o conteúdo até ali e então rolar (uma largura, para rolar na horizontal): sem isso, a caixa só cresce com o conteúdo. As barras só aparecem quando há o que rolar.

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor da marca escolhidos na barra acima. Clique dentro de um e use as setas, ou aperte Tab até a caixa ganhar o anel de foco.

minimal · light · #3fa34d
  1. Oi! Meu pedido nº 4821 ainda está como “em preparação”. Já saiu?Ana Ribeiro · 09:12
  2. Oi, Ana, vou verificar para você.Você · 09:13
  3. Ele saiu do nosso estoque hoje de manhã. A transportadora só ainda não registrou.Você · 09:14
  4. Ah, ótimo. Quando deve chegar?Ana Ribeiro · 09:15
  5. Até quinta, 14/03. Você recebe o link de rastreio por e-mail na próxima hora.Você · 09:15
  6. Perfeito. Ainda dá para mudar o endereço de entrega?Ana Ribeiro · 09:17
  7. Infelizmente não. Mas você pode retirar na agência se não estiver em casa.Você · 09:18
  8. Combinado. Obrigada pela resposta rápida!Ana Ribeiro · 09:19

Uma linha, para o lado

No celular, uma linha de filtros que rola para o lado ocupa menos espaço que uma que quebra em quatro linhas. O chip cortado na borda mostra que tem mais.

$ pnpm build
> @atlas/web@4.2.0 build /home/ci/workspace/atlas/apps/web
> next build --experimental-build-mode=compile && node scripts/upload-sourcemaps.mjs --release 4.2.0
✓ Compiled successfully in 41.8s (1,284 modules, 3 warnings: see /home/ci/workspace/atlas/apps/web/.next/trace)
⚠ ./src/features/billing/invoice-table.tsx: "useMemo" has a missing dependency: "currency" (react-hooks/exhaustive-deps)
✓ Uploaded 212 source maps to https://sourcemaps.atlas.example/releases/4.2.0 in 6.3s

Linhas longas

Logs, diffs e comandos perdem a forma quando quebram. Mantenha as linhas inteiras e deixe a caixa rolar para o lado.

Uma lista entre um título e um botão

Só rola a parte que cresce. O título e o botão "Novo projeto" ficam onde as pessoas esperam.

Orçamento mensal 2025
Categoriajanfevmarabrmaijunjulagosetoutnovdez
AluguelR$ 8.200R$ 8.400R$ 8.600R$ 8.350R$ 8.550R$ 8.300R$ 8.500R$ 8.250R$ 8.450R$ 8.200R$ 8.400R$ 8.600
FolhaR$ 46.850R$ 46.600R$ 46.800R$ 46.550R$ 46.750R$ 46.500R$ 46.700R$ 46.900R$ 46.650R$ 46.850R$ 46.600R$ 46.800
SoftwareR$ 3.350R$ 3.100R$ 3.300R$ 3.500R$ 3.250R$ 3.450R$ 3.200R$ 3.400R$ 3.150R$ 3.350R$ 3.100R$ 3.300
HardwareR$ 1.950R$ 2.150R$ 1.900R$ 2.100R$ 1.850R$ 2.050R$ 1.800R$ 2.000R$ 2.200R$ 1.950R$ 2.150R$ 1.900
ViagensR$ 2.450R$ 2.650R$ 2.400R$ 2.600R$ 2.800R$ 2.550R$ 2.750R$ 2.500R$ 2.700R$ 2.450R$ 2.650R$ 2.400
MarketingR$ 5.600R$ 5.350R$ 5.550R$ 5.300R$ 5.500R$ 5.250R$ 5.450R$ 5.200R$ 5.400R$ 5.600R$ 5.350R$ 5.550
TreinamentoR$ 1.800R$ 1.550R$ 1.750R$ 1.500R$ 1.700R$ 1.900R$ 1.650R$ 1.850R$ 1.600R$ 1.800R$ 1.550R$ 1.750
SegurosR$ 1.100R$ 1.300R$ 1.050R$ 1.250R$ 1.000R$ 1.200R$ 950R$ 1.150R$ 900R$ 1.100R$ 1.300R$ 1.050
ContasR$ 1.200R$ 1.400R$ 1.150R$ 1.350R$ 1.100R$ 1.300R$ 1.500R$ 1.250R$ 1.450R$ 1.200R$ 1.400R$ 1.150
Material de escritórioR$ 400R$ 600R$ 800R$ 550R$ 750R$ 500R$ 700R$ 450R$ 650R$ 400R$ 600R$ 800
JurídicoR$ 1.650R$ 1.400R$ 1.600R$ 1.350R$ 1.550R$ 1.300R$ 1.500R$ 1.700R$ 1.450R$ 1.650R$ 1.400R$ 1.600
ImpostosR$ 8.050R$ 7.800R$ 8.000R$ 8.200R$ 7.950R$ 8.150R$ 7.900R$ 8.100R$ 7.850R$ 8.050R$ 7.800R$ 8.000

Nas duas direções

Uma planilha rola para os dois lados. Deixe a linha de cabeçalho e a primeira coluna fixas (sticky), para cada número manter seus rótulos.

  1. Ah, ótimo. Quando deve chegar?
  2. Até quinta, 14/03. Você recebe o link de rastreio por e-mail na próxima hora.
  3. Perfeito. Ainda dá para mudar o endereço de entrega?
  4. Infelizmente não. Mas você pode retirar na agência se não estiver em casa.
  5. Combinado. Obrigada pela resposta rápida!

Mensagens novas

Envie uma resposta. A mensagem mais nova rola até ficar visível, e o role="log" na lista faz o leitor de tela anunciá-la sem mover o foco.

Histórico de atividades

  • Paula Lima aprovou a fatura FAT-2025-11812/03, 16:40
  • Rafael Souza mudou o vencimento para 28/03/202512/03, 11:05
  • Bruno Costa enviou contrato_v3.pdf11/03, 17:22
  • Paula Lima adicionou Julia Alves como revisora11/03, 09:30
  • Julia Alves comentou: “Os valores batem com o pedido.”10/03, 15:12
  • Rafael Souza criou a fatura FAT-2025-11810/03, 14:58

Com o nome do título

Quando o conteúdo transborda, o viewport entra na ordem do Tab. Dê role="region" à raiz e um nome com aria-labelledby, para a pessoa ouvir onde chegou.

Em contexto

São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Atividade recente

Equipe Financeiro · últimos 7 dias

  • Marina aprovou a folha de marçohá 2 h
  • Tiago pagou a fatura FAT-2025-097há 5 h
  • Lucas exportou o relatório do 1º triOntem
  • Marina convidou Carla para o FinanceiroOntem
  • Tiago sinalizou uma despesa de Uberhá 2 dias
  • Lucas fechou o balanço de fevereirohá 4 dias
  • Carla entrou na equipehá 6 dias
Feed de atividadesCard · ScrollArea · Avatar · Button

Termos de uso

Atualizados em 01/03/2025. Leia antes de continuar.

1. Sua conta

Você é responsável pelo que acontece na sua conta e por manter sua senha segura. Avise a gente se notar algum acesso que não reconhece.

2. Pagamentos

Os planos são cobrados mensalmente, de forma antecipada. Os preços incluem impostos quando exigido. Você pode cancelar quando quiser e manter o acesso até o fim do período pago.

3. Seus dados

O conteúdo que você envia é seu. Só o processamos para prestar o serviço, e você pode exportá-lo ou excluí-lo quando quiser.

4. Uso aceitável

Não use o serviço para enviar spam, infringir a lei ou atrapalhar outros clientes. Podemos suspender contas que fizerem isso.

5. Alterações

Avisamos por e-mail 30 dias antes de qualquer mudança que afete você. Se você continuar usando o serviço depois disso, valem os novos termos.

Termos para aceitarCard · ScrollArea · Checkbox · Button
Marca
16 marcas
Filtro de marcasFieldset · SearchInput · ScrollArea · Checkbox

Boas práticas

Notificações
  • Sua exportação está pronta para baixar
  • Paula mencionou você em “Orçamento 1º tri”
  • 3 comentários novos em Pagamentos v2
  • A fatura FAT-2025-118 foi paga
  • Bruno compartilhou “Nova marca” com você
  • Seu período de teste termina em 5 dias
  • Relatório semanal: 12 tarefas concluídas
FaçaRole só a parte que cresce.

O título e a ação dele continuam à vista enquanto a lista se move.

Escolha como datas e horários aparecem para a sua equipe.

As mudanças valem para todo o workspace.

EviteUma área rolável dentro de outra.

A roda do mouse fica presa na caixa de dentro, e a pessoa perde a noção de qual está rolando. Encurte a lista de dentro ou deixe a página rolar.

  • Sua exportação está pronta para baixar
  • Paula mencionou você em “Orçamento 1º tri”
  • 3 comentários novos em Pagamentos v2
  • A fatura FAT-2025-118 foi paga
  • Bruno compartilhou “Nova marca” com você
  • Seu período de teste termina em 5 dias
  • Relatório semanal: 12 tarefas concluídas
FaçaMostre que tem mais.

Uma linha cortada ao meio e a barra visível avisam que a lista continua.

  • Sua exportação está pronta para baixar
  • Paula mencionou você em “Orçamento 1º tri”
  • 3 comentários novos em Pagamentos v2
  • A fatura FAT-2025-118 foi paga
  • Bruno compartilhou “Nova marca” com você
  • Seu período de teste termina em 5 dias
  • Relatório semanal: 12 tarefas concluídas
EviteEsconder a barra de rolagem.

Sem barra e com uma altura que termina certinho numa linha, a lista parece completa. A maioria nunca vai achar os últimos itens.

Props

PropriedadeTipoPadrãoDescrição
orientation"both" | "horizontal" | "vertical""vertical"Quais barras de rolagem mostrar. O conteúdo rola de forma nativa de qualquer jeito; isto só escolhe as barras desenhadas.
renderReactElement | (props, state) => ReactElement—Troca o elemento da raiz por outro, mantendo o comportamento.
overflowEdgeThresholdnumber | { xStart, xEnd, yStart, yEnd }0Quantos pixels a partir de uma borda até aparecerem os atributos data-overflow-*. Útil para esmaecer as bordas.

As outras props (style, className, role, aria-label…) vão para a raiz. Defina o tamanho nela.

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 caixa.

Atributos

data-orientationvertical · horizontal, em cada barra
data-has-overflow-x · data-has-overflow-ypresente quando o conteúdo é mais largo ou mais alto
data-overflow-y-start · data-overflow-y-endpresente enquanto há mais acima ou abaixo (também -x-)
data-hovering · data-scrollingna barra, com o ponteiro sobre a caixa ou durante a rolagem

Tokens que ele lê

Cor

--cml-fg--cml-focus-ring--cml-focus-width

Forma e tamanho

--cml-radius-pill

Tipografia e movimento

--cml-duration-fast--cml-ease-standard

Só deste componente

--cml-scrollbar-idle-opacity--cml-scrollbar-size--cml-scrollbar-thumb-shadow--cml-scrollbar-track--cml-scrollbar-track-shadow
/* esmaece a borda de baixo enquanto há mais abaixo */
.feed [data-slot="scroll-area"][data-overflow-y-end] [data-slot="scroll-area-viewport"] {
  mask-image: linear-gradient(to bottom, black calc(100% - 2rem), transparent);
}
/* barras sempre com força total */
.feed { --cml-scrollbar-idle-opacity: 1; }

Acessibilidade

TabLeva o foco ao viewport quando o conteúdo transborda. Sem transbordar, ele é pulado.
↓ / ↑Rolam um pouco para baixo ou para cima.
→ / ←Rolam para o lado quando o conteúdo é mais largo.
Page Down / Page UpRolam quase uma caixa inteira.
Espaço / Shift + EspaçoRolam uma caixa para baixo ou para cima, como Page Down e Page Up.
Home / EndVão para o início ou para o fim.

Relacionados

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