Skip to content

Dropdown 下拉菜单

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

基础用法

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

下拉菜单
基础用法

快捷数据配置

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

快捷配置模式
快捷配置模式

触发方式

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

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

hover to trigger
Dropdown List
click to trigger
Dropdown List
right click to trigger
Dropdown List
触发方式

分割按钮

设置 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 模式)
}

主题变量 (CSS Variables)

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

变量名默认值描述
--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)弹出层圆角

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

Released under the MIT License.