使用高级Chakra UI组件更快地构建 💎

了解更多
跳到内容
文档演练场指南博客
赞助

菜单

用于创建可访问的下拉菜单

源代码Storybook样式配方Ark

用法

import { Menu } from "@chakra-ui/react"
<Menu.Root>
  <Menu.Trigger />
  <Menu.Positioner>
    <Menu.Content>
      <Menu.Item />

      <Menu.ItemGroup>
        <Menu.Item />
      </Menu.ItemGroup>

      <Menu.Separator />
      <Menu.Arrow />

      <Menu.CheckboxItem>
        <Menu.ItemIndicator />
      </Menu.CheckboxItem>

      <Menu.RadioItemGroup>
        <Menu.RadioItem>
          <Menu.ItemIndicator />
        </Menu.RadioItem>
      </Menu.RadioItemGroup>
    </Menu.Content>
  </Menu.Positioner>
</Menu.Root>

示例

命令

使用 Menu.ItemCommand 组件在菜单中显示命令。

上下文菜单

使用 Menu.ContextTrigger 组件创建上下文菜单。

分组

使用 Menu.ItemGroup 组件对相关菜单项进行分组。

危险项

这是一个如何为用于删除项目的菜单项设置样式的示例。

这是一个如何创建子菜单的示例。

asChild prop 传递给 Menu.Item 组件以渲染链接。

当使用自定义路由链接时,您需要设置 Menu.Root 组件上的 navigate prop。

"use client"

import { Menu } from "@chakra-ui/react"
import { useNavigate } from "react-router-dom"

const Demo = () => {
  const navigate = useNavigate()
  return (
    <Menu.Root navigate={({ value, node }) => navigate(`/${value}`)}>
      {/* ... */}
    </Menu.Root>
  )
}

单选项目

这是一个如何创建包含单选项目的菜单的示例。

复选框项目

这是一个如何创建包含复选框项目的菜单的示例。

图标和命令

组合菜单以包含图标和命令。

定位

使用 positioning.placement prop 来控制菜单的定位。

锚点

使用 positioning.anchorPoint prop 来控制菜单的锚点。

您可以从 DOM 元素的 getBoundingClientRect 中获取它,或者使用 DOMRect.fromRect({ x: 0, y: 0, width: 1, height: 1 }) 等方法创建一个新的矩形。

混合布局

这是一个如何创建菜单项混合布局的示例。在此布局中,顶部的水平菜单包含常用菜单项。

分离时隐藏

当菜单在可滚动容器中渲染时,将 positioning.hideWhenDetached 设置为 true,以便当触发器滚动出视图时隐藏菜单。

0

1

2

3

4

5

在对话框内

若要在 Dialog 中使用 Menu,您需要避免将 Menu.Positioner 传送到文档的 body。

-<Portal>
  <Menu.Positioner>
    <Menu.Content>
      {/* ... */}
    </Menu.Content>
  </Menu.Positioner>
-</Portal>

属性

属性默认值类型
closeOnSelect true
boolean

选择选项时是否关闭菜单

composite true
boolean

菜单是否与其他复合小部件(如组合框或选项卡)组合

lazyMount true
boolean

是否启用懒加载

loopFocus false
boolean

是否循环键盘导航。

typeahead true
boolean

按下可打印字符时是否触发预输入导航

unmountOnExit true
boolean

退出时是否卸载。

colorPalette 'gray'
'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'

组件的颜色调色板

variant 'subtle'
'subtle' | 'solid'

组件的变体

size 'md'
'sm' | 'md'

组件的尺寸

anchorPoint
Point

菜单的定位点。可通过上下文菜单触发器或按钮触发器设置。

aria-label
string

菜单的可访问性标签

defaultOpen
boolean

菜单首次渲染时的初始打开状态。当您不需要控制其打开状态时使用。

highlightedValue
string

高亮菜单项的值。

id
string

机器的唯一标识符。

ids
Partial<{ trigger: string contextTrigger: string content: string groupLabel(id: string): string group(id: string): string positioner: string arrow: string }>

菜单中元素的 ID。用于组合时非常有用。

immediate
boolean

是立即同步当前更改还是将其延迟到下一帧

navigate
(details: NavigateDetails) => void

如果所选项目是锚点元素,则导航到该项目的功能

onEscapeKeyDown
(event: KeyboardEvent) => void

按下 Esc 键时调用的函数

onExitComplete
() => void

动画在关闭状态结束时调用的函数

onFocusOutside
(event: FocusOutsideEvent) => void

焦点移出组件时调用的函数

onHighlightChange
(details: HighlightChangeDetails) => void

高亮菜单项更改时调用的函数。

onInteractOutside
(event: InteractOutsideEvent) => void

组件外部发生交互时调用的函数

onOpenChange
(details: OpenChangeDetails) => void

菜单打开或关闭时调用的函数

onPointerDownOutside
(event: PointerDownOutsideEvent) => void

指针在组件外部按下时调用的函数

onSelect
(details: SelectionDetails) => void

选中菜单项时调用的函数。

open
boolean

菜单是否打开

positioning
PositioningOptions

用于动态定位菜单的选项

present
boolean

节点是否存在(由用户控制)

as
React.ElementType

要渲染的基础元素。

asChild
boolean

使用提供的子元素作为默认渲染元素,结合它们的属性和行为。

更多详细信息,请阅读我们的 组合 指南。
unstyled
boolean

是否移除组件的样式。

属性默认值类型
value *
string

菜单项选项的唯一值。

asChild
boolean

使用提供的子元素作为默认渲染元素,结合它们的属性和行为。

更多详细信息,请阅读我们的 组合 指南。
closeOnSelect
boolean

选中选项时是否应关闭菜单。

disabled
boolean

菜单项是否禁用

valueText
string

选项的文本值。用于菜单的预输入导航。如果未提供,则使用菜单项的文本内容。

上一个

输入框

下一个

数字输入