菜单
菜单在临时表面上显示选项列表。
菜单在临时表面上显示选项列表。当用户与按钮或其他控件交互时,菜单会显示出来。
简介
菜单是通过一组相关组件实现的
- Menu: 菜单的容器/表面。
- Menu Item: 用户从菜单中选择的选项。
- Menu List (可选): Menu Item 的替代可组合容器 — 详情请参阅“使用 Menu List 进行组合”。
基础菜单
默认情况下,基础菜单在锚点元素上方打开(此选项可以通过 props 更改)。当靠近屏幕边缘时,基础菜单会垂直重新对齐,以确保所有菜单项都完全可见。
你应该配置组件,以便选择一个选项立即确认并关闭菜单,如下面的演示所示。
图标菜单
在桌面视口中,增加了内边距,为菜单提供更多空间。
- 剪切
⌘X
- 复制
⌘C
- 粘贴
⌘V
- Web Clipboard 网络剪贴板
紧凑菜单
对于包含长列表和长文本的菜单,你可以使用 dense
属性来减小内边距和文本大小。
- 单倍行距
- 1.15
- 双倍行距
- 自定义: 1.2
- 在段落前添加空格
- 在段落后添加空格
- 自定义间距...
选中菜单
如果用于项目选择,当打开时,简单菜单会将初始焦点放在选定的菜单项上。当前选定的菜单项是使用 selected
属性(来自 ListItem)设置的。要在不影响初始焦点的情况下使用选定的菜单项,请将 variant
属性设置为 "menu"。
使用 Menu List 进行组合
Menu
组件在内部使用 Popover
组件。但是你可能想要使用不同的定位策略,或者例如,更喜欢不阻止滚动。
MenuList
组件允许你为这些用例组合自己的菜单 — 它的主要目的是处理焦点。请参阅下面的演示,了解使用 Menu List 进行组合并将 Menu 的默认 Popover 替换为 Popper 组件的示例
- 个人资料
- 我的账户
- 登出
账户菜单
Menu
内容可以与其他组件(如 Avatar
)混合使用。
联系人
个人资料
MenuItem
是 ListItem
的包装器,带有一些额外的样式。你可以将相同的列表组合功能与 MenuItem
组件一起使用
🎨 如果你正在寻找灵感,可以查看 MUI Treasury 的自定义示例。
最大高度菜单
如果菜单的高度阻止了所有菜单项的显示,则菜单可以在内部滚动。
局限性
存在一个 flexbox 错误,该错误阻止 text-overflow: ellipsis
在 flexbox 布局中工作。你可以使用带有 noWrap
的 Typography
组件来解决此问题。
一条简短的消息
一段很长的文本,会溢出
一段很长的文本,会溢出
更改过渡效果
使用不同的过渡效果。
上下文菜单
这是一个上下文菜单的示例。(右键单击以打开。)
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ipsum purus, bibendum sit amet vulputate eget, porta semper ligula. Donec bibendum vulputate erat, ac fringilla mi finibus nec. Donec ac dolor sed dolor porttitor blandit vel vel purus. Fusce vel malesuada ligula. Nam quis vehicula ante, eu finibus est. Proin ullamcorper fermentum orci, quis finibus massa. Nunc lobortis, massa ut rutrum ultrices, metus metus finibus ex, sit amet facilisis neque enim sed neque. Quisque accumsan metus vel maximus consequat. Suspendisse lacinia tellus a libero volutpat maximus.
分组菜单
使用 ListSubheader
组件显示类别。
无样式
使用 Base UI Menu 可以完全掌控组件的设计,无需覆盖 Material UI 或 Joy UI 样式。这个无样式版本的组件是进行重度自定义和减小包大小的理想选择。
API
请参阅下面的文档,以获得此处提及的组件的所有可用 props 和类的完整参考。