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

Menu

Menu — uma lista de ações que abre a partir de um botão. Use para guardar as ações secundárias de uma linha, um card ou uma barra de ferramentas, não para navegar nem para escolher um valor.

Feito com Base UIPadrão WAI-ARIA Menu ButtonComponente clienteCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe as partes que precisar. O popup vai para um portal e mantém o estilo, o modo e a cor da marca da página em volta.

import { Menu, MenuTrigger, MenuContent, MenuItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuSub, MenuSubTrigger, MenuSubContent, MenuGroup, MenuGroupLabel, MenuSeparator } from "@camaleo/react";

Anatomia

O Menu guarda o estado de aberto. O MenuTrigger é o botão (data-slot="menu-trigger", ou o slot do próprio Button quando você passa render={<Button />}); o MenuContent renderiza o popup abaixo num portal. Cada parte tem um data-slot que você pode usar no CSS.

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a marca da barra acima, e todos começam fechados.

minimal · light · #3fa34d

Com atalhos

Mostre o atalho com Kbd para a pessoa aprender enquanto usa o menu, e use aria-keyshortcuts para o leitor de tela anunciar também. O menu só exibe o atalho: as teclas você liga por conta própria.

Grupos e separadores

Passando de cinco ou seis itens, um MenuGroupLabel em cada grupo deixa a pessoa pular direto para a parte certa em vez de ler tudo.

Mostrando: Linhas de grade, Alinhar à grade

Itens de marcar

Liga e desliga opções. O MenuCheckboxItem continua aberto depois do clique e informa aria-checked, então o leitor de tela diz "marcado" ou "desmarcado".

Agir e avisar

Escolha uma ação. O foco volta ao gatilho, e uma linha com role="status" conta ao leitor de tela o que aconteceu, porque o menu que mostrava a ação sumiu.

Destrutiva, com confirmação

Escolha "Excluir projeto". Ele vem por último, depois de um separador, e abre um AlertDialog; o finalFocus devolve o foco ao botão do menu quando ele fecha.

Desativado, com o motivo

Mantenha a ação indisponível no menu para a pessoa saber que ela existe, e diga o porquê no próprio item: o motivo é lido junto com o nome.

Gatilho só com ícone

Um botão "⋯" não tem texto, então o aria-label diz de que são as ações: "Ações da fatura INV-4029", e não só "Mais".

Links como itens

Para algumas páginas relacionadas, como num menu de ajuda, passe render={<a href="…" />} ao item: ele abre com Enter, e o navegador consegue abrir numa nova aba.

Mostrando: Lista · Nome

Itens de opção e submenu

Para uma configuração de exibição com uma escolha só, como lista ou grade, use o MenuRadioItem; guarde um grupo maior, como a ordenação, num MenuSub que abre com → e fecha com ←.

Em contexto

O menu tira as ações secundárias do caminho. Estas são telas inteiras que você pode copiar, no estilo que escolheu.

FaturaClienteSituaçãoValorAções
INV-4029Padaria Pão DouradoPagaR$ 4.250,00
INV-4028Café Porto AzulPendenteR$ 1.180,50
INV-4027Estúdio LumePendenteR$ 12.900,00
Ações da linhaTable · Badge · IconButton · Menu
Acme Design
Menu da contaAvatar · Button · Menu
Assinado

Contrato de locação 2027.pdf

2,4 MB · Editado em 14/10/2026

Card de arquivoCard · Badge · IconButton · Menu

Boas práticas

FaçaRótulos curtos que começam com verbo.

"Renomear", "Duplicar", "Mover para pasta…": a pessoa sabe o que cada item faz antes de escolher.

EviteUm menu para escolher um valor.

Depois do clique o gatilho continua dizendo "País", e o formulário não recebe nada. Use um Select; para ir a outras páginas, use links ou um NavigationMenu.

FaçaAções destrutivas por último, depois de um separador.

O item vermelho fica longe de um ↓ Enter apressado, e a cor mostra que ele é diferente.

EviteExcluir no meio das ações do dia a dia.

Um deslize do mouse ou das setas e a coisa errada some.

Props

PropriedadeTipoPadrãoDescrição
iconReactNode—Ícone antes do rótulo. Fica escondido do leitor de tela; alguns estilos escondem os ícones de menu.
shortcutReactNode—Mostrado no fim, por exemplo "Ctrl E". Só exibe: as teclas você liga por conta própria.
tone"danger"—danger pinta uma ação destrutiva. Coloque por último, depois de um separador.
renderReactElement | (props, state) => ReactElement—Renderiza outro elemento, como um <a> para um link.
onClickfunction—Roda quando o item é escolhido com clique, Enter ou Espaço.
disabledbooleanfalseDesativa o item. Ele continua focável, para a pessoa conseguir ler.
labelstring—Texto para a busca por letra quando o conteúdo do item não é texto simples.
closeOnClickbooleantrueSe escolher o item fecha o menu.

Estas são as props do MenuItem. O Menu recebe as props da raiz do Base UI: open, onOpenChange, modal e disabled. O MenuCheckboxItem recebe checked, defaultChecked, onCheckedChange e closeOnClick (desligado por padrão). O MenuRadioGroup recebe value, defaultValue e onValueChange, e cada MenuRadioItem, um value; um MenuGroupLabel dentro do grupo dá o nome dele. Envolva o MenuSubTrigger e o MenuSubContent num MenuSub. O MenuTrigger recebe render, normalmente <Button /> ou <IconButton aria-label="…" />.

Styling hooks

Mude o visual sem fazer fork: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio popup.

Atributos

data-popup-openno gatilho enquanto o menu está aberto
data-highlightedno item sob o teclado ou o mouse
data-checked · data-uncheckednos itens de marcar e de opção
data-disablednum item desativado
data-tonedanger
data-sidetop · bottom (no popup)

Tokens que ele lê

Cor

--cml-accent-text--cml-border--cml-danger--cml-fg--cml-fg-muted--cml-fg-secondary--cml-focus-ring--cml-item-highlight-fg--cml-item-highlight-shadow--cml-popover-bg--cml-popover-border--cml-shadow-popover--cml-surface-raised

Forma e tamanho

--cml-border-width--cml-font-size-field--cml-item-height--cml-item-padding--cml-popover-border-width--cml-popover-padding--cml-radius-control--cml-radius-item--cml-radius-popover--cml-toolbar-btn-size

Tipografia e movimento

--cml-duration-fast--cml-ease-standard--cml-font-body--cml-font-control--cml-font-field--cml-font-label--cml-font-weight-control--cml-motion-scale

Só deste componente

--cml-corner-shape--cml-disabled-opacity--cml-item-check--cml-item-divider--cml-item-highlight--cml-item-hover--cml-menu-icons

Acessibilidade

Enter / Space / ↓No gatilho: abre o menu e foca o primeiro item.
↑No gatilho: abre o menu e foca o último item.
↓ / ↑Anda entre os itens, voltando ao início no fim.
Home / EndVai para o primeiro ou o último item.
A–ZVai para o próximo item que começa com a letra.
Enter / SpaceEscolhe o item; num item de marcar ou de opção, alterna e mantém o menu aberto.
→ / ←No gatilho de um submenu, → abre o submenu no primeiro item; dentro dele, ← fecha e volta.
EscFecha o submenu, ou o menu, e devolve o foco ao gatilho dele.
TabFecha o menu e segue em frente.

Relacionados

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