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

Sidebar

Barra lateral com a navegação principal do app, na borda esquerda. Grupos de links com nome, a página atual marcada, contadores do que está esperando e uma faixa de ícones quando falta espaço.

Padrão WAI-ARIA Landmarks (navigation)Componente clienteCódigo ↗
minimal · light · #3fa34d
collapsed

Instalação

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

import { Sidebar, SidebarHeader, SidebarNav, SidebarGroup, SidebarItem, SidebarFooter, SidebarToggle } from "@camaleo/react";

Anatomia

Um <aside> com três linhas. Só o nav rola, então a marca e o rodapé ficam sempre à vista. SidebarBrand e SidebarContent são outros nomes para SidebarHeader e SidebarNav.

Exemplos

Cada exemplo é um arquivo de verdade que você pode copiar. Todos usam o estilo, o modo e a cor da barra acima. Aperte Tab para passar pelos links.

minimal · light · #3fa34d

Recolher para uma faixa

Aperte o botão lá embaixo. Os rótulos somem da tela, mas continuam dando nome a cada link para leitores de tela, e uma dica mostra o nome no hover e no foco.

Página atual

Clique num link. current coloca aria-current="page", e a barrinha ao lado mostra a página sem depender só da cor.

Com o seu roteador

Passe render={<NextLink href="…" />}. O roteador cuida do clique sem recarregar a página, e o item mantém o estilo. Aqui o current vem do caminho, então o link para esta página fica marcado.

Contadores que fazem sentido ouvidos

O número é lido como parte do nome do link, então ponha a unidade num VisuallyHidden: "Entrada 12 não lidas", e não "Entrada 12".

Seções aninhadas

Um projeto com páginas próprias abre no lugar com um Collapsible. O cabeçalho dele é um botão, porque só mostra links e não leva a lugar nenhum.

Menu da conta no rodapé

A pessoa e as configurações dela ficam embaixo, longe das páginas. O menu abre para cima quando não há espaço abaixo.

Tarefas
Tarefas de hoje
  • Enviar o relatório do 3º trimestre para a Marina
  • Revisar a nova página inicial
  • Reservar o local do encontro do time

No celular, numa gaveta

A Sidebar não tem um modo próprio para celular. Abaixo de uma largura, esconda a barra e ponha os mesmos links num Drawer à esquerda, que prende o foco e o devolve ao botão de menu.

Em contexto

São partes inteiras de interface que você pode copiar, no estilo que escolheu.

Site de documentaçãoSidebar · Collapsible · Badge
Painel de uma lojaSidebar · Meter · Button
Espaço de trabalho de um timeSidebar · IconButton · Avatar

Boas práticas

FaçaPoucos grupos com nome.

Dois ou três títulos deixam a pessoa pular direto para a parte do app que ela procura.

EviteDez links numa lista só.

Sem grupos, a pessoa lê todos os links para achar um, e páginas parecidas ficam longe uma da outra.

FaçaUma ou duas palavras por link.

Nomes curtos cabem na coluna e são rápidos de ler. A página pode ter um título mais longo.

EviteFrases como rótulos.

Rótulos longos são cortados, e as palavras que diferenciam um do outro são justamente as que somem.

Props

PropriedadeTipoPadrãoDescrição
collapsedboolean—Se a barra aparece como uma faixa de ícones. Use para controlar pelo código, junto com onCollapseChange.
defaultCollapsedbooleanfalseSe começa como faixa, quando você não controla o estado.
onCollapseChange(collapsed: boolean) => void—Chamado com o novo estado quando o SidebarToggle (ou useSidebar().setCollapsed) muda a barra.

O SidebarItem aceita href, icon, count e current, e também render para usar o link do seu roteador no lugar do a. O SidebarGroup aceita label. O SidebarToggle aceita collapseLabel e expandLabel; passe os dois no idioma da página (o padrão é "Collapse sidebar" e "Expand sidebar"). O useSidebar() lê e muda o estado de qualquer parte dentro da barra.

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

Atributos

data-collapsedna barra, enquanto ela é uma faixa
data-current · aria-currentpage · no link da página mostrada

Tokens que ele lê

Cor

--cml-border--cml-brand--cml-fg--cml-fg-secondary--cml-focus-ring--cml-surface--cml-surface-raised

Forma e tamanho

--cml-border-width--cml-radius-control--cml-radius-pill

Tipografia e movimento

--cml-duration-fast--cml-font-body--cml-font-label

Só deste componente

--cml-item-highlight--cml-sidebar-group-label-size--cml-sidebar-group-label-tracking--cml-sidebar-group-label-transform--cml-sidebar-indicator-bg--cml-sidebar-indicator-width--cml-sidebar-item-active-fg--cml-sidebar-item-fg--cml-sidebar-item-height--cml-sidebar-item-hover-bg--cml-sidebar-item-hover-fg--cml-sidebar-item-radius--cml-sidebar-rail-width--cml-sidebar-width
/* uma barra mais larga e uma faixa mais fina */
.app [data-slot="sidebar"] {
  --cml-sidebar-width: 16rem;
  --cml-sidebar-rail-width: 3.25rem;
}

Acessibilidade

TabVai para o próximo link, cabeçalho de seção ou botão, de cima para baixo. Na faixa também: os rótulos escondidos não viram paradas.
Shift + TabVolta para o anterior.
EnterNum link, segue o link. No botão de recolher ou num cabeçalho de seção, recolhe ou expande.
EspaçoNo botão de recolher ou num cabeçalho de seção, recolhe ou expande.

Relacionados

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