跳转到内容

文字提示 tooltip

反馈与浮层组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

悬停或聚焦触发器即出;指针停在提示上也不收起

朝向

placement 是请求值,空间不够时由定位引擎避让;箭头跟着最终落定的那一面走

延时

openDelay 默认 700ms 用来防误触,closeDelay 默认 300ms 留出指针走位的余地;聚焦不走这两段等待

禁用

disabled 只关掉提示本身,被包裹的触发器照样可点、可聚焦

已点 0 次

语气

六种语气换的是浮层实心底与其上的文字色,箭头一并跟着走;把指针停在触发器上(或用 Tab 聚焦)看差别

尺寸

三档换的是浮层的内边距与字号,不写 size 即缺省档;把指针停在触发器上(或用 Tab 聚焦)看差别

受控

传了 open 就由宿主说了算;悬停、聚焦、Escape 都只发意图,最终写不写由外面这份状态决定

最近意图:(还没动过)

长文案

提示到了宽度上限就换行,不会拉成一条横线;上限是 content 上的 --xh-tooltip-max-w 槽位

产物

自定义元素<xh-tooltip>
Vue 组件XhTooltipArrow XhTooltipContent XhTooltipPositioner XhTooltipRoot XhTooltipTrigger
组合式函数useTooltip
状态机tooltipMachine
皮肤@xihan-ui/styles/tooltip.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="tooltip"trigger · positioner · content · arrow

Props

属性类型必填说明
openboolean
defaultOpenboolean
placementPlacement请求的浮层朝向,默认 bottom;空间不足时由定位引擎避让。
dirDirection文字方向,缺省 ltr。只改写浮层在行内轴上 start 与 end 的落点。
offsetnumber浮层与锚点的间距(px)。
openDelaynumber悬停进入到展开的等待毫秒,默认 700。
closeDelaynumber悬停移出到收起的等待毫秒,默认 300。
disabledboolean只关闭提示本身,不影响被包裹控件的可用性。
toneTone语气:brand / neutral / success / warning / danger / info,决定提示的底色与其上的文字色。
sizeSize尺寸:sm / md / lg,决定内边距与字号档位。
onOpenChange(details: TooltipOpenChangeDetails) => voidopen 变化意图回调;受控时是唯一出口,非受控随内部转移一并通知。

状态机

状态closed · opening · open · closing

事件POINTER.ENTER · POINTER.LEAVE · POINTER.DOWN · FOCUS · BLUR · ESCAPE · OPEN · CLOSE · after.openDelay · after.closeDelay · CONTROLLED.OPEN · CONTROLLED.CLOSE

判据isOpenControlled · isDisabled · isFocusOpened

connect API

useTooltip 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
openboolean
setOpen(next: boolean) => void
getTriggerProps() => T['button']
getPositionerProps() => T['element']
getContentProps() => T['element']
getArrowProps() => T['element']

键盘

规格出处:W3C APG

按键生效条件行为
Tab / Shift+Tabnot disabled焦点进入 trigger 立即展开、离开立即收起,都不走延时
Escapefocus in trigger, 展开或等待展开中立即收起,不等 closeDelay

Released under The MIT License