Tabs
Alterne entre visões com um indicador que desliza até a aba ativa, como um controle segmentado ou um sublinhado, e listas que rolam quando transbordam.
Overview
Visitors are up 12% this week, mostly from search.
pnpm dlx shadcn@latest add https://hextaui.com/r/tabs.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/tabs.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Um indicador desliza até a aba ativa e se redimensiona para caber nela, enquanto o conteúdo troca instantaneamente, então trocas frequentes nunca esperam por uma animação. O indicador é posicionado antes da hidratação da página, então nunca salta ao carregar.
Sublinhado
variant="line" em TabsList desliza um sublinhado em vez de uma pílula.
Muitas abas
Quando as abas não cabem, a lista rola para o lado, esmaece as bordas que têm mais a ver e rola a aba ativa ou com foco para a vista.
Muitas abas, segmentado
O estilo pill rola do mesmo jeito, mantendo sua trilha enquanto a aba escolhida permanece à vista.
Ícones e contagens
Coloque ícones e badges dentro dos gatilhos.
Vertical
orientation="vertical" empilha as abas; o sublinhado vai para o lado.
Desabilitado
Abas desabilitadas são ignoradas pelo teclado.
Controlado
Passe value e onValueChange. Mudanças de fora também deslizam o indicador.
Da direita para a esquerda
Abas, setas e o indicador seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| Tab | Entra na lista na aba ativa e depois no painel. |
| ←→ | Move entre as abas, voltando ao início nas extremidades. ↑ e ↓ na vertical. |
| HomeEnd | Move para a primeira ou a última aba. |
| EnterSpace | Abre a aba com foco. Defina activateOnFocus em TabsList para abrir as abas conforme o foco se move. |
- A lista é um
tablist; cada gatilho é umtabque controla seutabpanel. - Os painéis são focáveis, então usuários de teclado alcançam conteúdo que não tem links nem botões.
- Com movimento reduzido, o indicador salta em vez de deslizar.
| Prop | Tipo | Padrão |
|---|---|---|
value | any | – |
defaultValue | any | 0 |
onValueChange | (value, details) => void | – |
orientation | "horizontal" | "vertical" | "horizontal" |
| Atributo | Descrição |
|---|---|
data-activation-direction | "left", "right", "up" ou "down": onde a nova aba está em relação à antiga. |
| Prop | Tipo | Padrão |
|---|---|---|
variant | "default" | "line" | "default" |
activateOnFocus | boolean | false |
loopFocus | boolean | true |
| Atributo | Descrição |
|---|---|
data-slot="tabs-indicator" | A pílula ou o sublinhado deslizante. |
data-scrolled-start / data-scrolled-end | Presente quando a lista pode rolar nessa direção. |
--active-tab-left / --active-tab-width | Posição e tamanho da aba ativa, também -top e -height. |
| Prop | Tipo | Padrão |
|---|---|---|
value | any | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-active | A aba aberta. |
data-disabled | A aba está desabilitada. |
| Prop | Tipo | Padrão |
|---|---|---|
value | any | – |
keepMountedMantém o painel no DOM enquanto oculto. | boolean | false |
- BreadcrumbUma trilha de links até a página atual que quebra linha com segurança, se espelha em layouts da direita para a esquerda e expande os segmentos recolhidos no próprio lugar.
- Navigation menuNavegação do site com dropdowns, ou um único painel de largura total que permanece aberto enquanto o conteúdo desliza entre os menus.
- PaginationNavegação de páginas que mantém cada botão no lugar, desliza até a página atual e salta para qualquer página a partir das reticências.
- SidebarUma barra lateral de app que recolhe para ícones ou fora da tela, permanece fixa sob o seu cabeçalho e vira uma sheet com deslize no celular.
Usado em blocos
Blocos que se baseiam em Tabs.