跳至主要内容

下拉菜单

使用 Bootstrap 下拉菜单插件切换上下文覆盖层以显示链接列表等

概述

下拉菜单是用于显示链接列表等的可切换上下文覆盖层。与覆盖层一样,下拉菜单是使用第三方库 Popper.js 构建的,该库提供动态定位和视口检测。

无障碍性

WAI ARIA 标准定义了一个 role="menu" 小部件,但它非常特定于某种菜单。 ARIA 菜单必须仅包含 role="menuitem"role="menuitemcheckbox"role="menuitemradio"

另一方面,Bootstrap 的下拉菜单旨在更通用,并在各种情况下应用。出于这个原因,我们不会自动将菜单角色添加到标记中。我们确实实现了一些基本的键盘导航,如果您确实提供了“菜单”角色,react-bootstrap 将尽力确保焦点管理符合 ARIA 菜单的作者指南。

示例

单按钮下拉菜单

基本的下拉菜单由一个包裹的 Dropdown 和内部的 <DropdownMenu> 以及 <DropdownToggle> 组成。默认情况下,<DropdownToggle> 将渲染一个 Button 组件,并接受所有相同的 props。

结果
加载中...
实时编辑器

由于以上配置非常常见,react-bootstrap 提供了 <DropdownButton> 组件来减少输入。提供一个 title prop 和一些 <DropdownItem>,你就可以开始使用了。

结果
加载中...
实时编辑器

DropdownButton 将把 Button props 传递给底层的 Toggle 组件

结果
加载中...
实时编辑器

分隔按钮下拉菜单

类似地,你可以通过将 Dropdown 组件与另一个 Button 和 ButtonGroup 组合来创建一个分隔下拉菜单。

结果
加载中...
实时编辑器

与 DropdownButton 一样,SplitButton 作为便利组件提供。

结果
加载中...
实时编辑器

尺寸

下拉菜单适用于所有尺寸的按钮。

结果
加载中...
实时编辑器

深色下拉菜单

通过在现有 DropdownMenu 上添加 variant="dark" 来选择更暗的下拉菜单,以匹配深色导航栏或自定义样式。或者,在使用 DropdownButton 组件时使用 menuVariant="dark"

结果
加载中...
实时编辑器

NavDropdown 中使用 menuVariant="dark"

结果
加载中...
实时编辑器

下拉方向

使用 drop prop,可以在其切换元素的上方、下方、左侧或右侧触发下拉菜单。

结果
加载中...
实时编辑器

历史上,下拉菜单内容必须是链接,但在 v4 中不再是这种情况。现在,你可以在下拉菜单中使用 <button> 元素,而不仅仅是 <a>

您也可以使用<Dropdown.ItemText>创建非交互式下拉菜单项。您可以随意使用自定义 CSS 或文本实用程序进行进一步的样式设置。

结果
加载中...
实时编辑器

默认情况下,下拉菜单向左对齐,但您可以通过将align="end"传递给<Dropdown><DropdownButton><SplitButton>来切换它。

结果
加载中...
实时编辑器

响应式对齐

如果您想使用响应式菜单对齐,请将包含断点的对象传递给<DropdownMenu><DropdownButton><SplitButton>上的align道具。您可以为各种断点指定startend

结果
加载中...
实时编辑器

添加标题以标记操作部分。

结果
加载中...
实时编辑器

使用分隔符将相关菜单项分组。

结果
加载中...
实时编辑器

自动关闭

默认情况下,下拉菜单在选择菜单项或单击下拉菜单外部时关闭。可以使用autoClose属性更改此行为。

默认情况下,autoClose设置为默认值true,并按预期工作。通过选择false,下拉菜单只能通过单击下拉按钮来切换。inside使下拉菜单通过选择菜单项消失,而outside通过单击外部关闭下拉菜单。

注意在每种情况下,如何通过单击按钮来切换下拉菜单。

结果
加载中...
实时编辑器

自定义

如果下拉菜单和切换组件的默认处理不符合您的要求,您可以使用更基本的<Dropdown>组件显式指定切换和菜单组件来对其进行自定义。

结果
加载中...
实时编辑器

自定义下拉组件

对于那些想要自定义所有内容的用户,您可以放弃包含的 Toggle 和 Menu 组件,并创建自己的组件。通过向 as 属性提供自定义组件,您可以控制每个组件的行为。自定义的切换和菜单组件**必须**能够接受 refs。

结果
加载中...
实时编辑器

API

SplitButton