组件 · 导航

Menubar 菜单栏

桌面式菜单栏。

入口 @selrux/ui/menubar · 源码 src/components/menubar/index.ts · 16 个组件 · 发布状态 preview

使用建议

  • 避免:移动端强行使用密集 Menubar
  • 限制:属性与导出以 @selrux/ui 对应子路径 d.ts/源码为准,禁止臆造

引入

tsx
import {
  Menubar,
  MenubarCheckboxItem,
  MenubarContent,
  MenubarGroup,
  MenubarItem,
  MenubarLabel,
  // …共 16 个导出
} from '@selrux/ui/menubar';

演练场

调节下方可实现的字面量属性,实时预览真实组件。函数、Portal、样式逃生口等见代码演示与 API 表。

组合预览;默认全部关闭,点击触发器打开。

代码演示

基础用法

桌面应用式菜单栏,点击触发器打开菜单,方向键在菜单间移动。

受控菜单栏

value / onValueChange 受控当前打开的菜单(null 为全部关闭);MenubarMenu 的 value 标识菜单、onOpenChange、disabled、loop、closeOnEscape、closeOnOutsidePress;size 尺寸。

value = null

勾选、单选与子菜单

CheckboxItem 的 checked / onCheckedChange、disabled、inset、onAction、closeOnAction;RadioGroup + RadioItem(value / textValue / disabled / inset / onAction / closeOnAction);Label 的 inset;Sub / SubTrigger / SubContent 嵌套。

网格 = true,缩放 = 100%,最近:-

API

属性覆盖:示例用到 48 / 49 个自有属性(98%)

由 scripts/demo-coverage.mjs 统计,不含 className / style / 原生透传属性与纯转发事件。

  • MenubarContent.container:Portal 挂载目标,默认 body;文档页无需更换挂载点
  • MenubarMenu.returnFocusRef:焦点目标 ref,效果不可见;行为见“无障碍”
  • MenubarPortal.container:Portal 挂载目标,默认 body;文档页无需更换挂载点
  • MenubarSubContent.container:Portal 挂载目标,默认 body;文档页无需更换挂载点

Menubar

主题化顶栏菜单根。

属性说明类型默认值
size菜单字号与项内距;省略取 Provider → md。"xs" | "sm" | "md" | "lg" | "xl" | "2xl"-
value受控:当前打开菜单的 value。string | null-
defaultValue非受控默认打开菜单。string | null-
onValueChange打开菜单变更。((value: string | null) => void)-

另有 278 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarCheckboxItem

主题化勾选项;内置指示器。

属性说明类型默认值
textValue *typeahead 文本。string-
defaultChecked非受控默认选中。boolean-
disabled禁用。boolean-
inset起步缩进。boolean-
onAction可选;在 checked 变更后通知。((details: MenuActionDetails) => void)-
closeOnAction默认 false,保持菜单打开。booleanfalse
checked受控选中。boolean-
onCheckedChange选中变更。((checked: boolean, details: MenuActionDetails) => void)-
children可见内容。ReactNode-

另有 283 项原生属性与事件继承自 ButtonHTMLAttributes / HTMLAttributes,原样透传。

MenubarContent

主题化内容面:默认自带 Portal + 域镜像(对齐 shadcn MenubarContent)。

属性说明类型默认值
containerPortal 挂载点;省略默认 body。PortalContainerInputbody
side物理四向;根默认 bottom,子默认逻辑外向。"top" | "bottom" | "left" | "right"bottom
align对齐;默认 start。"start" | "end" | "center"start
sideOffset侧向间距(CSS px)。number-
collisionPadding碰撞内边距(CSS px)。number-
onEscapeKeyDownEsc;preventDefault 取消关闭。((event: KeyboardEvent) => void)-
onPointerDownOutside外部主指针;preventDefault 取消关闭。((event: Event) => void)-
style普通样式;受管定位不可绕过。CSSProperties-
ref转发到内容根。 Allows getting a ref to the component instance. Once the component unmounts, React will set ref.current to null (or call the ref with null if you passed a callback ref).Ref<HTMLDivElement>-
children菜单面子树。ReactNode-

另有 276 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarGroup

主题化分组。

属性说明类型默认值
children组内容。ReactNode-

另有 278 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarItem

主题化动作项;支持 destructive / inset。

属性说明类型默认值
textValue *可访问名与 typeahead 来源;必填非空。string-
disabled禁用;aria-disabled,集合内仍可达。boolean-
variant危险动作外观。"default" | "destructive"-
inset无前导图标时的起步缩进。boolean-
onAction统一激活入口。((details: MenuActionDetails) => void)-
closeOnAction激活后是否关闭整棵菜单。默认 true。booleantrue
children可见内容。ReactNode-

另有 285 项原生属性与事件继承自 ButtonHTMLAttributes / HTMLAttributes,原样透传。

MenubarLabel

主题化标签;支持 inset。

属性说明类型默认值
inset无前导图标时的起步缩进。boolean-
children标签文本。ReactNode-

另有 279 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarMenu

主题化菜单:为子树提供 DropdownMenu 视觉尺寸上下文。

属性说明类型默认值
value菜单标识;省略时用稳定自动 id(对齐 shadcn 无 value 用法)。string-
onOpenChange透传打开变更(在协调之后)。((open: boolean, details: OverlayChangeDetails) => void)-
disabled为真时禁止打开并立即抑制可见层。boolean-
loop当前菜单面上下导航是否循环。默认 true。booleantrue
closeOnEscape顶层 Esc 是否进入关闭流程。默认 true。booleantrue
closeOnOutsidePress外部主指针是否关闭整棵菜单树。默认 true。booleantrue
returnFocusRef整棵关闭后适用的返回焦点目标。RefObject<HTMLElement | null>-
children复合子树。ReactNode-

MenubarPortal

Menubar Portal:复用 DropdownMenu 域镜像 Portal。

属性说明类型默认值
container挂载目标;省略默认 body;显式 null 等待就绪。PortalContainerInputbody
childrenPortal 子树。ReactNode-

MenubarRadioGroup

主题化单选组。

属性说明类型默认值
defaultValue非受控默认值。string-
value受控值。string-
onValueChange值变更。((value: string, details: MenuActionDetails) => void)-
children组内项。ReactNode-

另有 277 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarRadioItem

主题化单选项;内置指示器。

属性说明类型默认值
value *组内唯一值。string-
textValue *typeahead 文本。string-
disabled禁用。boolean-
inset起步缩进。boolean-
onAction可选激活通知。((details: MenuActionDetails) => void)-
closeOnAction默认 false。booleanfalse
children可见内容。ReactNode-

另有 283 项原生属性与事件继承自 ButtonHTMLAttributes / HTMLAttributes,原样透传。

MenubarSeparator

主题化分隔线。

无自有属性;其余 278 项原生属性继承自 HTMLAttributes。

MenubarShortcut

主题化快捷键。

属性说明类型默认值
children提示文本。ReactNode-

另有 279 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarSub

子菜单根。

属性说明类型默认值
open受控打开。boolean-
defaultOpen非受控默认。boolean-
onOpenChange子菜单开关变更。((open: boolean, details: OverlayChangeDetails) => void)-
children子树。ReactNode-

MenubarSubContent

主题化子菜单面:默认自带 Portal。

属性说明类型默认值
containerPortal 挂载点;省略默认 body。PortalContainerInputbody
side物理四向;根默认 bottom,子默认逻辑外向。"top" | "bottom" | "left" | "right"bottom
align对齐;默认 start。"start" | "end" | "center"start
sideOffset侧向间距(CSS px)。number-
collisionPadding碰撞内边距(CSS px)。number-
onEscapeKeyDownEsc;preventDefault 取消关闭。((event: KeyboardEvent) => void)-
onPointerDownOutside外部主指针;preventDefault 取消关闭。((event: Event) => void)-
style普通样式;受管定位不可绕过。CSSProperties-
ref转发到内容根。 Allows getting a ref to the component instance. Once the component unmounts, React will set ref.current to null (or call the ref with null if you passed a callback ref).Ref<HTMLDivElement>-
children菜单面子树。ReactNode-

另有 276 项原生属性与事件继承自 HTMLAttributes,原样透传。

MenubarSubTrigger

主题化子菜单触发器;内置 chevron。

属性说明类型默认值
textValue *typeahead 文本。string-
disabled禁用。boolean-
inset起步缩进。boolean-
children可见内容。ReactNode-

另有 283 项原生属性与事件继承自 ButtonHTMLAttributes / HTMLAttributes,原样透传。

MenubarTrigger

主题化触发器。

属性说明类型默认值
render与 children 互斥。ReactElement<unknown, string | JSXElementConstructor<any>>-
children按钮内容。ReactNode-

另有 284 项原生属性与事件继承自 ButtonHTMLAttributes / HTMLAttributes,原样透传。

导出类型:DropdownMenuItemVariant、DropdownMenuSize、MenubarCheckboxItemProps、MenubarContentProps、MenubarGroupProps、MenubarItemProps、MenubarLabelProps、MenubarMenuProps、MenubarPortalProps、MenubarProps、MenubarRadioGroupProps、MenubarRadioItemProps、MenubarSeparatorProps、MenubarShortcutProps、MenubarSubContentProps、MenubarSubProps、MenubarSubTriggerProps、MenubarTriggerProps

无障碍

摘自源码 JSDoc。

  • MenubarContent.onEscapeKeyDown:Esc;preventDefault 取消关闭。
  • MenubarItem.disabled:禁用;aria-disabled,集合内仍可达。
  • MenubarMenu.closeOnEscape:顶层 Esc 是否进入关闭流程。
  • MenubarMenu.returnFocusRef:整棵关闭后适用的返回焦点目标。
  • MenubarSubContent.onEscapeKeyDown:Esc;preventDefault 取消关闭。