Dropdown

向下弹出的菜单,通过触发元素唤起一组可操作命令项。对齐 Semi:children 为触发器,render/menu 定义浮层内容(Dropdown.Menu/Item/Title/Divider);hover/focus/click/custom/contextMenu 触发;12 方位;嵌套子菜单(手动嵌套 Dropdown);showTick 勾选、type 五色语义、icon、active、disabled;键盘导航与 Esc 关闭。

设计文档

如何引入

import { Dropdown, Dropdown.Menu, Dropdown.Item, Dropdown.Title, Dropdown.Divider } from '@chenzy-design/svelte';

基本用法

render 用 Dropdown.Menu 组合 Title / Item / Divider;Item 支持 icon、disabled、type 五色。

嵌套使用

在 render 内手动嵌套 <Dropdown>,其 children 为 Dropdown.Item 作子菜单触发器。

弹出位置

position 支持 12 方位,语义对齐 Semi(bottomStart≈bottomLeft),空间不足时自动翻转。

top
topStart
topEnd
bottom
bottomStart
bottomEnd
left
leftStart
leftEnd
right
rightStart
rightEnd

触发方式

trigger 支持 hover 悬浮、focus 聚焦、click 点击、contextMenu 右键四种唤起方式。

Hover me
Please use Tab to focus this div

触发事件

菜单项支持 onClick / onMouseEnter / onMouseLeave / onContextMenu 四类鼠标事件。

JSON 用法

通过 menu 属性传入 JSON Array 快速配置下拉框;showTick 时 active 项左侧显示对勾。

API 参考

Dropdown

Props

属性说明类型默认值
render弹出层内容,由 Dropdown.Menu / Item / Title / Divider 构成(对齐 Semi render)Snippetundefined
menu通过 JSON Array 快速配置内容(node=item/title/divider);render 存在时忽略(对齐 Semi menu)DropdownMenuItem[]undefined
children触发弹出层的 Trigger 元素(对齐 Semi children)Snippetundefined
trigger触发方式;custom 需配 visible 受控,contextMenu 右键定位光标'hover'|'focus'|'click'|'custom'|'contextMenu'hover
visible受控显隐,需配合 trigger=custom(对齐 Semi visible)booleanundefined
defaultVisible非受控初始显隐booleanfalse
position弹出位置(12 方位,语义对齐 Semi position:bottomStart≈bottomLeft、rightStart≈rightTop)Placementbottom
autoAdjustOverflow弹出层被遮挡时自动调整方向(对齐 Semi)booleantrue
mouseEnterDelay移入 Trigger 后延迟显示(ms),仅 hover/focus 生效(对齐 Semi)number50
mouseLeaveDelay移出弹出层后延迟消失(ms),仅 hover/focus 生效(对齐 Semi)number100
spacing弹出层与 Trigger 距离(px)(对齐 Semi spacing)number | { x: number; y: number }4(嵌套 2)
margin弹出层计算溢出的冗余值(px)(对齐 Semi margin)numberundefined
zIndex弹出层 z-index(对齐 Semi zIndex)number1050
motion下拉动画开关(对齐 Semi motion)booleantrue
className下拉弹层外层样式类名(作用于 div.cd-dropdown,对齐 Semi className)stringundefined
contentClassName下拉菜单根元素类名(作用于 div.cd-dropdown-content,对齐 Semi contentClassName)stringundefined
style弹出层内联样式(作用于 div.cd-dropdown-content,对齐 Semi style)stringundefined
showTick自动在 active 的 Dropdown.Item 左侧展示对勾(对齐 Semi showTick)booleanfalse
stopPropagation阻止弹出层上的点击事件冒泡(对齐 Semi stopPropagation)booleanfalse
closeOnEsc在 trigger 或弹出层按 Esc 是否关闭,受控时不生效(对齐 Semi closeOnEsc)booleantrue
rePosKey更新该值手动触发弹出层重新定位(对齐 Semi rePosKey)string | numberundefined
disableFocusListenerhover 时不响应键盘聚焦弹出事件(对齐 Semi,issue#977)booleanfalse
clickToHide弹出层内点击时是否自动关闭弹出层(对齐 Semi clickToHide)booleantrue
keepDOM关闭时是否保留内部组件 DOM 不销毁(对齐 Semi keepDOM)booleanfalse
getPopupContainer指定父级 DOM 挂载弹层(对齐 Semi getPopupContainer)() => HTMLElement() => document.body
onVisibleChange弹出层显示状态改变时的回调(对齐 Semi onVisibleChange)(visible: boolean) => voidundefined
onEscKeyDown在 trigger 或弹出层按 Esc 时调用,关闭逻辑之前(对齐 Semi onEscKeyDown)(e: KeyboardEvent) => voidundefined
onClickOutSide展示状态下点击外部区域回调,仅 custom/click 有效(对齐 Semi onClickOutSide)(e: PointerEvent) => voidundefined

Dropdown.Menu

下拉弹层菜单容器(对齐 Semi dropdownMenu):ul[role=menu][aria-orientation=vertical]。

Props

属性说明类型默认值
class菜单 ul 样式类名stringundefined
style菜单 ul 内联样式stringundefined
childrenDropdown.Item / Title / DividerSnippetundefined

Dropdown.Item

单个菜单项(对齐 Semi dropdownItem):li[role=menuitem]。showTick 时 active 项左侧对勾。

Props

属性说明类型默认值
key项键,onClick 携带string | numberundefined
disabled禁用菜单项(对齐 Semi disabled)booleanfalse
active激活态:showTick 时左侧对勾、字重加粗(对齐 Semi active)booleanfalse
type语义色(对齐 Semi type)'primary'|'secondary'|'tertiary'|'warning'|'danger'undefined
icon前置图标(对齐 Semi icon)Snippetundefined
onClick单击回调(对齐 Semi onClick)(e: MouseEvent) => voidundefined
onMouseEnterMouseEnter 回调(对齐 Semi)(e: MouseEvent) => voidundefined
onMouseLeaveMouseLeave 回调(对齐 Semi)(e: MouseEvent) => voidundefined
onContextMenu右键回调(对齐 Semi)(e: MouseEvent) => voidundefined
children菜单项内容Snippetundefined

Dropdown.Title

分组标题(对齐 Semi dropdownTitle):div.cd-dropdown-title,不可点击/聚焦。

Props

属性说明类型默认值
children分组标题内容Snippetundefined

Dropdown.Divider

分隔线(对齐 Semi dropdownDivider):div.cd-dropdown-divider。

Accessibility

ARIA rolemenu
键盘交互EnterSpaceArrowDownArrowUpEscape
  • 触发器 role=button + aria-haspopup=menu + aria-expanded + aria-controls(嵌套触发器为 Dropdown.Item 自身承担 menuitem 语义)
  • 浮层 ul role=menu + aria-orientation=vertical,项 li role=menuitem(tabindex=-1,方向键移动焦点漫游)
  • click 触发打开后焦点自动落首个非禁用项(对齐 Semi foundation)
  • divider role=separator;title 组标题不可聚焦
  • Esc 关闭并归还触发器焦点(受控时不生效);外部点击关闭并回调 onClickOutSide

设计变量

变量默认值用法
--cd-transition-dropdown-item-bg-delay 0ms下拉菜单项背景色过渡延迟
--cd-transition-dropdown-item-bg-duration var(--cd-motion-duration-none)下拉菜单项背景色过渡时长(默认 none)
--cd-transition-dropdown-item-bg-function var(--cd-motion-ease-standard)下拉菜单项背景色过渡曲线(easeOut)