Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Menu

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral​

O componente br-menu é o orquestrador completo de navegação lateral (drawer/sidebar) do GovBR-DS. Estrutura a navegação multinível de portais e sistemas públicos, oferecendo suporte a hierarquias em árvore, agrupamentos, busca interna, informações do usuário e canais sociais.

Para que serve​

  • Navegação estruturada em árvore: Permite navegar por hierarquias profundas de seções e subsistemas governamentais.
  • Modos responsivos: Suporta exibição fixa/lateral no desktop e painel retrátil suspenso com cortina de fundo (br-scrim) em telas mobile.
  • Acessibilidade completa: Gerencia controle de foco por teclado, armadilha de foco (trap focus) quando aberto e atributos WAI-ARIA (aria-expanded, role="dialog" ou role="navigation").
  • Navegação multinível fluida: Oferece transições suaves entre níveis hierárquicos com botões de retorno ao nível anterior.

Quando utilizar​

  • Utilize quando:
    • A aplicação ou portal exigir uma estrutura de navegação lateral abrangente, com menus de múltiplos níveis e categorias.
    • Houver necessidade de um menu que possa ser recolhido ou deslizado em dispositivos móveis com controle de foco integrado.
  • Evite e prefira outro componente quando:
    • A navegação tiver poucos itens e puder ser acomodada confortavelmente apenas no cabeçalho (prefira br-header).
    • O objetivo for alternar visualizações na mesma tela de forma plana (prefira br-tab).

Composição e Subcomponentes​

SubcomponentePapelRegra de uso
br-menu-groupAgrupador temático. Agrupa itens sob um subtítulo de seção.Inserido no corpo de navegação do br-menu.
br-menu-headerCabeçalho do menu. Exibe título e botão de fechar o painel.Inserido no topo do br-menu.
br-menu-infoInformações de apoio. Exibe dados de sessão, versão ou contexto do sistema.Posicionado na base ou topo do br-menu.
br-menu-itemItem de menu. Opção clicável de rota ou gatilho para submenu.Deve ser utilizado dentro de um br-menu-list.
br-menu-linkHiperlink. Link textual padronizado no menu.Inserido dentro de br-menu-item ou seções de apoio.
br-menu-listLista de opções. Estrutura semântica de lista contendo itens navegáveis.Inserido no br-menu ou dentro de um br-menu-group.
br-menu-logoLogotipo. Exibe a marca do órgão no interior do menu.Posicionado no cabeçalho ou topo do br-menu.
br-menu-socialRedes sociais. Bloco de canais sociais oficiais no menu.Posicionado preferencialmente no rodapé do br-menu.
br-menuOrquestrador principal. Gerencia estado aberto/fechado, navegação multinível, scrim e armadilha de foco.Deve ser declarado como contêiner principal da navegação lateral.

Como os subcomponentes se relacionam​

O br-menu atua como o orquestrador soberano da navegação. Ele controla a transição de visibilidade, a ativação do scrim de fundo e o comportamento dos subníveis. Ao navegar entre níveis, os itens (br-menu-item) comunicam suas seleções ao br-menu, que desliza os painéis correspondentes e mantém a ordem correta de tabulação do teclado.

Para a documentação completa de design, incluindo diretrizes de acessibilidade e especificações visuais, consulte o Design System do GovBR.

Exemplo(s)​

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
PadrãoGroup By DividerGroup By ExpansionGroup By LabelMenu contextualMenu fixo aberto
Compartilhar URL
Ativar movimento reduzido
Mudar fundo
Abrir no StackBlitz
Mais opções
Tela cheia
Carregando preview…
HTML
Controles do componente
Console: logs, eventos e erros
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Desfazer alteração
Refazer alteração
Comparar alterações
Formatar código
Resetar código para o estado inicial
Escolher formato para copiar

Estado aberto e associação com header​

isOpen é a fonte de verdade pública do menu. Interação, open(), close() e toggle() atualizam essa propriedade e emitem brMenuOpenChange uma vez, com detail.open e detail.sourceId. Escrita com o mesmo valor não emite evento.

Ao usar um trigger no br-header, defina data-target com o id ou customId do menu. Isso isola páginas com vários headers e menus e mantém aria-expanded sincronizado somente no trigger associado.

<br-header>
<button slot="menu-trigger" data-toggle="menu" data-target="#menu-principal" aria-expanded="false">
Menu
</button>
</br-header>
<br-menu id="menu-principal"></br-menu>

Fluxo, camada e modalidade​

O menu sobreposto usa um <dialog> modal e a top layer quando showModal() está disponível. O painel e a máscara compartilham o mesmo contexto: máscara na subcamada local 0 e painel na 1. Sem suporte nativo, o conjunto permanece fixed na camada de navegação temporária 3.

Os modos push, fixed e contextual não entram na top layer e mantêm o comportamento local ou persistente. No fallback CSS, mantenha apenas um bloqueador legado ativo por vez.

No modo fixed, o painel usa 20rem como largura padrão, limitada à viewport. Defina --menu-fixed-width no br-menu para personalizar esse valor.

No modo sobreposto, breakpoints aceita classes de coluna do grid GovBR, como col-sm-4 col-lg-3. Sem essas classes, o painel ocupa a largura disponível. Os modos push, fixed e contextual mantêm suas próprias regras de largura.

Propriedades​

breakpoints​

Atributobreakpoints
DescriçãoClasses de coluna do grid GovBR para definir a largura responsiva do painel sobreposto.
Exemplo: col-sm-4 col-lg-3. Os modos push, fixed e contextual não usam esta propriedade.
Quando vazia, o painel ocupa a largura disponível.
Tipostring
Valor padrão''

contextual​

Atributocontextual
DescriçãoDefine se o menu deve usar comportamento contextual (aparece na parte inferior).
Quando ativado, o menu é posicionado na parte inferior da tela em dispositivos móveis.
Tipoboolean
Valor padrãofalse

contextualLabel​

Atributocontextual-label
DescriçãoRótulo do botão trigger do menu contextual.
Exibido apenas em modo contextual e em telas menores (mobile).
Tipostring
Valor padrão'Menu Contextual'

customId​

Atributocustom-id
DescriçãoIdentificador único do componente.
Quando omitido, um valor é gerado automaticamente.

> Padrão: valor único gerado por generateUniqueId().
Tipostring
Valor padrãogenerateUniqueId()

density​

Atributodensity
DescriçãoDefine a densidade dos itens do menu, alterando o espaçamento interno.
- small (densidade alta): itens mais compactos
- medium (padrão): equilíbrio entre economia de espaço e separação
- large (densidade baixa): maior espaçamento (recomendado em touch)
Valores inválidos usam medium.
Tipo"large" | "medium" | "small"
Valor padrão'medium'

fixed​

Atributofixed
DescriçãoMantém o menu como uma barra lateral fixa quando estiver aberto.
O menu continua podendo ser ocultado alterando isOpen ou chamando close().
A largura padrão é 20rem, limitada à viewport, e pode ser sobrescrita
pela variável CSS --menu-fixed-width.
Tipoboolean
Valor padrãofalse

isOpen​

Atributois-open
DescriçãoDefine se o painel do menu está aberto/visível.
Em modo push, esta propriedade permite controle externo da visibilidade.
O nome permanece porque o método público open() já ocupa a propriedade open no host.
Tipoboolean
Valor padrãofalse

push​

Atributopush
DescriçãoDefine se o menu deve usar comportamento push.
Quando ativado, o menu permanece fixo na lateral e empurra o conteúdo principal.
Tipoboolean
Valor padrãofalse

socialTitle​

Atributosocial-title
DescriçãoTítulo da seção de redes sociais exibida no rodapé do menu.
Utilize esta propriedade para personalizar o texto que aparece acima dos ícones sociais.
Tipostring
Valor padrão'Redes Sociais'

Slots​

NomeDescrição
"default"Slot para o conteúdo principal do menu (menu-list, menu-group e menu-item).
"header"Slot para o cabeçalho do menu, exibido apenas em modo não contextual e não push.
"info"Slot para informações adicionais no rodapé.
"link"Slot para links externos no rodapé (use br-menu-link).
"logo"Slot para logotipos de parceiros no rodapé.
"social"Slot para ícones de redes sociais no rodapé.

Eventos​

EventoDescriçãoDepreciaçãoPropagação
brMenuOpenChangeEvento canônico emitido quando o menu abre ou fecha. detail.open contém o estado concluído e detail.sourceId identifica a instância pelo id ou customId.---true
brMenuStateChange Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Evento emitido quando o menu abre ou fecha.Use brMenuOpenChange.true

Métodos​

close​

DescriçãoFecha o painel do menu.
Pode ser chamado externamente: menuEl.close().
Assinaturaclose() => Promise<void>
Parâmetros---

open​

DescriçãoAbre o painel do menu.
Pode ser chamado externamente: menuEl.open().
Assinaturaopen() => Promise<void>
Parâmetros---

toggle​

DescriçãoAlterna o estado do painel do menu (abre se fechado, fecha se aberto).
Pode ser chamado externamente: menuEl.toggle().
Assinaturatoggle() => Promise<void>
Parâmetros---

CSS Shadow Parts​

NomeDescrição
"back-btn"Botão de voltar do menu de navegação drill-down.
"body"Parte principal onde ficam os links e grupos de navegação.
"container"Parte para o container externo que envolve o menu inteiro.
"footer"Parte para o contêiner principal do rodapé do menu, agrupando logos, links, redes sociais e informações.
"info"Parte para informações adicionais, como licença ou direitos autorais.
"link"Parte para links úteis ou navegação secundária no rodapé.
"logo"Parte para a área de logotipos de parceiros no rodapé.
"panel"Parte para o painel de navegação do menu (o menu propriamente dito).
"social"Parte para ícones de redes sociais no rodapé.
"trigger"Botão de acionamento do menu (hambúrguer ou contextual).

Acessibilidade​

O painel do menu recebe role="dialog" quando é uma sobreposição (contextual/push) e role="navigation" quando é persistente. O botão de acionamento reflete aria-expanded.

Foco​

  • Enquanto aberto como sobreposição, o foco fica preso no painel: Tab e Shift+Tab circulam entre os elementos focáveis internos.
  • Ao abrir, o foco vai para o primeiro item; ao fechar, volta para o acionador.
  • Na navegação drill-down, o botão "voltar" (::part(back-btn)) e a pilha de navegação mantêm a orientação; ao voltar um nível o foco é reposicionado.

Teclado​

  • ArrowDown/ArrowUp movem o foco entre os itens de navegação (roving).
  • Escape fecha o menu no nível raiz; dentro de um submenu, Escape, ArrowLeft e Backspace voltam um nível.
  • No menu contextual, Enter/Espaço no acionador abrem o menu.
  • Clique no scrim (fundo) ou fora do painel fecha o menu.

Estrutura​

Use br-menu-list, br-menu-group e br-menu-item para a hierarquia. O item da rota atual deve indicar o estado ativo; passe aria-current="page" no item correspondente quando o menu refletir a navegação da aplicação.

Movimento​

Abertura, fechamento e o drill-down respeitam prefers-reduced-motion: reduce.

Dependências​

Subcomponentes​

Depende de​

Gráfico​

Migração de <br-menu> (1.x → 2.x)​

Na 1.x, o menu recebia grande parte da árvore de navegação em objetos pela propriedade list. Na 2.x, o menu é um contêiner e a árvore deve ser declarada com br-menu-list e br-menu-item.

Propriedades e composição​

API 1.xAPI 2.xAção na migração
dataBreakpointsbreakpointsRenomeie e revise o formato.
density, contextualLabel, socialTitlemesmos nomesMantenha quando usados.
isContextualcontextualRenomeie.
isPushpushRenomeie.
listbr-menu-list / br-menu-itemTroque o objeto de dados por composição de elementos.
logoHeader, links, social, infoslots/subcomponentesDistribua cada parte na área semântica correspondente.
showMenuisOpenRenomeie e controle o estado aberto.

Para aplicações SPA, configure navigation-mode nos itens e trate brNavigate no nível da aplicação.

Exemplo​

1.x:

<br-menu :list="items" :is-push="true"></br-menu>

2.x:

<br-menu push>
<br-menu-list>
<br-menu-item href="/inicio">Início</br-menu-item>
<br-menu-item href="/servicos">Serviços</br-menu-item>
</br-menu-list>
</br-menu>
Comece aquiComponentesQuickstartsSobre o projetoRepositório GitLabVersõesDiscordGovBR-DSFAQWikiRedefinir cookies