Tooltip

文字提示,鼠标悬停/聚焦/点击/右键触发元素时展示简短说明。固定深色浮层(grey-7),DOM 严格对齐 Semi:.cd-tooltip-wrapper[x-placement] > .cd-tooltip-content + 单 path 箭头 .cd-tooltip-icon-arrow(fill=currentColor)。支持 12 方位 position、hover/focus/click/custom/contextMenu 触发、延迟、custom 完全受控、condition 条件触发,浮层命令式定位(对齐 Semi)。prefixCls 机制供 Popover/Popconfirm 复用切换前缀。

设计文档

如何引入

import { Tooltip } from '@chenzy-design/svelte';

基础用法

悬停触发元素时展示 content 提示文字,默认出现在顶部。

位置

通过 position 配置 12 个弹出方位与对齐位置。

TL
Top
TR
LT
Left
LB
RT
Right
RB
BL
Bottom
BR

指向元素中心

arrowPointAtCenter(默认 true)时小三角始终指向元素中心;设为 false 则浮层与元素边缘对齐。

触发时机

通过 trigger 配置 hover/focus/click/contextMenu/custom;contextMenu 右键触发,custom 配合 visible 完全受控。

condition 条件触发

condition={false} 时不响应 hover/click/focus 触发(custom 不受影响)。

condition

覆盖特定样式

通过 class、style 为浮层配置特定样式,例如覆盖默认的 max-width。

自定义样式与类名

渲染至指定 DOM

传入 getPopupContainer,浮层渲染至该函数返回的 DOM 中;非 body 容器需设 position: relative。

点击此处

搭配 Popconfirm 使用

Tooltip 与 Popconfirm/Popover 嵌套时,需在中间加一层 span 隔离事件劫持,避免外层 trigger 失效。

仅内容超出时展示

用 Typography 的 ellipsis.showTooltip,仅当内容宽度超出时才展示 Tooltip,无需自行判断。

是一个很长很长很长很长 5 号标题
是一个很长很长很长很长的文本

多行截断,超出展示 Tooltip:chenzy-design 是一套严格对齐 Semi Design 的 Svelte 组件库,包含设计语言与一整套可复用的前端组件,帮助设计师与开发者更容易地打造 高质量、体验一致、符合设计规范的 Web 应用。

children 类型

Tooltip 需将事件与定位应用到 children,故 children 应能承载事件、可被定位:真实 DOM 节点或可透传属性的组件。

DOM 节点
组件 Tag

API 参考

Tooltip

Props

属性说明类型默认值
content提示内容,为空不显示string | Snippetundefined
visible受控显隐(配合 trigger=custom)booleanundefined
defaultVisible非受控初始显隐booleanfalse
trigger触发方式,可组合;'custom' 完全受控(仅 visible + onVisibleChange);'contextMenu' 右键触发'hover'|'focus'|'click'|'custom'|'contextMenu'|Array<...>'hover'
position弹出方位(Semi 12 方位命名 + 2 Over)'top'|'topLeft'|'topRight'|'left'|'leftTop'|'leftBottom'|'right'|'rightTop'|'rightBottom'|'bottom'|'bottomLeft'|'bottomRight'|'leftTopOver'|'rightTopOver''top'
autoAdjustOverflow视口溢出时翻转到对侧booleantrue
spacing浮层与触发器距离(px)number | { x: number; y: number }8
margin计算溢出翻转时增加的冗余安全边距number | { marginLeft; marginTop; marginRight; marginBottom }0
mouseEnterDelayhover 进入延迟(ms)number50
mouseLeaveDelayhover 离开延迟(ms)number50
showArrow是否显示箭头,或传自定义箭头 Snippetboolean | Snippettrue
arrowPointAtCenter箭头是否指向触发元素中心(需 showArrow)booleantrue
disabled禁用触发booleanfalse
conditionfalse 时不响应 hover/click/focus 触发(custom 不受影响)booleantrue
clickToHidehover 触发下点击浮层内部即关闭booleanfalse
keepDOM关闭时保留浮层 DOM 不销毁(--hidden 隐藏)booleanfalse
disableFocusListenerhover 触发时不响应键盘 focus 显隐booleanfalse
motion是否展示进出场动画,reduced-motion 退化booleantrue
transformFromCenter是否从触发元素中心处变换(仅影响动效 transform-origin,一般无需改动)booleantrue
zIndex浮层 z-index(覆盖 token --cd-z-tooltip,=1060)numberundefined
prefixCls浮层 wrapper 类名前缀(对齐 Semi prefixCls);Popover 传 cd-popover 切换整套前缀与视觉string'cd-tooltip'
wrapperClassName触发器包裹 span 的类名(对齐 Semi wrapperClassName)string''
wrapperId浮层 wrapper 节点 id(对齐 Semi wrapperId);不设则自动生成,trigger 的 aria 指向它stringundefined
class浮层自定义类名string''
style浮层自定义内联样式(如覆盖 max-width)string''
stopPropagation阻止浮层上的点击事件冒泡booleanfalse
closeOnEscEsc 关闭浮层(WCAG 1.4.13)booleantrue
preventScroll显示时阻止页面滚动booleanfalse
rePosKey更新该值手动触发浮层重新定位string | numberundefined
getPopupContainer自定义浮层挂载容器(缺省回退 ConfigProvider 全局,再回退 body)() => HTMLElement | null | undefinedundefined
onVisibleChange显隐切换回调(visible: boolean) => voidundefined
onClickOutSide点击浮层与触发器外部的回调(仅 custom/click)(e: MouseEvent) => voidundefined
afterClose浮层完全关闭后的回调() => voidundefined
children触发元素(必填)Snippetundefined

Accessibility

ARIA roletooltip
键盘交互Escape
  • 浮层 role=tooltip,使用 useId 生成唯一 id
  • 触发元素 visible 时加 aria-describedby 指向浮层
  • focus 触发支持键盘聚焦展示;closeOnEsc 时 click/custom 触发用 useDismiss 处理 Escape 与外部点击
  • custom 触发不绑定 hover/click/focus,显隐完全由受控 visible + onVisibleChange 控制
  • condition=false 时禁止一切自动触发(custom 不受影响)

设计变量

变量默认值用法
--cd-animation-duration-tooltip-in 100mstooltip-弹出动画-动画持续时间
--cd-animation-duration-tooltip-out 100mstooltip-收起动画-动画持续时间
--cd-animation-function-tooltip-in cubic-bezier(0.215, 0.61, 0.355, 1)tooltip-弹出动画-动画插值函数
--cd-animation-function-tooltip-out cubic-bezier(0.215, 0.61, 0.355, 1)tooltip-收起动画-动画插值函数
--cd-tooltip-motion-zoom-opacity-from 0初始透明度 - 动画用
--cd-tooltip-motion-zoom-opacity-to 1最终透明度 - 动画用
--cd-tooltip-motion-zoom-scale-from 0.8初始缩放 - 动画用