Skip to content

Dropdown 下拉菜单

将动作或菜单折叠到下拉菜单中,节省界面空间。

基础用法

通过插槽 dropdown 定义下拉菜单内容。该组件支持插槽回退 (Slot Fallback) 机制:当提供插槽时,将完全自定义菜单内容;未提供插槽时,将根据 items 数据自动生成菜单。

基础用法

快捷数据配置

通过 items 属性快速配置菜单项,无需使用插槽。

快捷配置模式

触发方式

可以配置点击激活或者悬停激活。

trigger 属性设置为 click 即可,默认为 hover

触发方式

分割按钮

设置 split-button 属性来让触发下拉元素呈现为按钮组,左边是功能按钮,右边是触发下拉菜单的按钮。

分割按钮

禁用菜单项

通过设置 disabled 属性禁用指定菜单项。

禁用菜单项

弹出位置

通过 placement 属性设置弹出位置。

弹出位置

危险项

通过设置 danger: true 使菜单项显示为红色危险样式,常用于删除等破坏性操作。

危险项

加载状态

通过 loading 属性显示加载状态,适用于异步加载菜单数据的场景。

加载状态

可勾选模式

通过 checkable 属性启用勾选模式,配合 hide-on-click="false" 实现多选筛选场景。

可勾选模式

在 Nuxt 中使用

Dropdown 组件完全支持 Nuxt 3/4 的 SSR 渲染。

Nuxt 中使用

SSR 注意事项

  • ✅ 完美支持服务端渲染 (SSR),无水合错误
  • ✅ 支持键盘导航
  • ✅ 弹出层自动 Teleport 至 body
  • ✅ 毛玻璃效果自动适配

API

属性说明类型默认值
trigger触发方式'hover' | 'click' | 'contextmenu''hover'
placement弹出位置Placement'bottom'
visible是否显示(支持 v-model)boolean | nullnull
disabled是否禁用booleanfalse
show-after延迟显示时间 (ms)number0
hide-after延迟隐藏时间 (ms)number150
z-index弹出层层级number2000
hide-on-click是否在点击菜单项后隐藏booleantrue
items菜单项数据(快捷配置模式)DropdownItemData[][]
loading是否加载中booleanfalse
empty-text空状态文本string'暂无数据'
checkable是否可勾选booleanfalse
max-height菜单最大高度string | number''
teleported是否挂载至 bodybooleantrue
popper-class弹出层自定义类名string''
popper-style弹出层自定义样式CSSProperties{}
split-button分割按钮模式booleanfalse
type按钮类型(splitButton 模式)'primary' | 'success' | 'warning' | 'danger' | 'info' | ''''
size按钮尺寸'large' | 'default' | 'small''default'
plain朴素按钮样式(splitButton 模式)booleanfalse
show-arrow是否显示下拉箭头图标booleantrue
popper-arrow是否显示弹出框小三角booleantrue
offset偏移量[number, number][0, 8]
loopTab 键循环导航booleantrue
tabindexTab 索引number | string0
属性说明类型默认值
command指令/命令值string | number | object''
disabled是否禁用booleanfalse
divided是否显示分割线booleanfalse
icon图标string''
danger是否为危险项booleanfalse
checked是否选中(需开启 checkable)booleanfalse

Events

事件名称说明回调参数
command点击菜单项(command: string | number | object)
update:visible可见性变化(visible: boolean)
show菜单显示-
hide菜单隐藏-
click点击触发器(splitButton 模式)(event: MouseEvent)

Slots

插槽名说明
default触发元素
dropdown下拉菜单内容(使用 DropdownMenu/DropdownItem)
empty空状态内容(无菜单项时显示)

Expose

名称说明类型
show手动显示下拉菜单() => void
hide手动隐藏下拉菜单() => void
visible当前可见状态Ref<boolean>
typescript
interface DropdownItemData {
  key: string | number
  label: string
  icon?: string
  disabled?: boolean
  divided?: boolean
  class?: string
  children?: DropdownItemData[]
  danger?: boolean // 是否为危险项(红色样式)
  checked?: boolean // 是否选中(checkable 模式)
}

主题变量

所有颜色变量已与全局主题系统对接,自动支持暗黑模式:

变量名默认值描述
--yh-dropdown-text-colorvar(--yh-text-color-primary)菜单文字颜色
--yh-dropdown-bg-colorvar(--yh-bg-color-overlay)弹出层背景色
--yh-dropdown-border-colorvar(--yh-border-color-light)边框/分割线颜色
--yh-dropdown-hover-bgvar(--yh-color-primary-light-9)菜单项 hover 背景
--yh-dropdown-active-bgvar(--yh-color-primary-light-8)菜单项 active 背景
--yh-dropdown-disabled-colorvar(--yh-text-color-placeholder)禁用项文字颜色
--yh-dropdown-danger-colorvar(--yh-color-danger)危险项文字颜色
--yh-dropdown-danger-hover-bgvar(--yh-color-danger-light-9)危险项 hover 背景
--yh-dropdown-shadowvar(--yh-shadow-lg)弹出层阴影
--yh-dropdown-radiusvar(--yh-radius-md)弹出层圆角

类型导出

名称说明
YhDropdownPropsYhDropdown props 类型
YhDropdownEmitsYhDropdown emits 类型
YhDropdownSlotsYhDropdown slots 类型
YhDropdownExposeYhDropdown expose 类型
YhDropdownTrigger触发方式联合类型
YhDropdownItemData下拉项数据类型
YhDropdownItemPropsYhDropdownItem props 类型
YhDropdownMenuPropsYhDropdownMenu props 类型
YhDropdownInstanceYhDropdown 实例类型
YhDropdownItemInstanceYhDropdownItem 实例类型
YhDropdownMenuInstanceYhDropdownMenu 实例类型

提示: Dropdown 组件融合了 Element Plus、Ant Design 和 Naive UI 的优秀设计,支持快捷数据配置、分割按钮、键盘导航、危险项样式、加载状态、可勾选模式等丰富功能。

Released under the MIT License.