组件

Tooltip

一个 React 提示,采用 Liquid Glass 浮层,支持可配置延迟、定位与可选箭头。

Tooltip 内部负责触发器、Portal、定位器、玻璃浮层、方向箭头和内容。它面向鼠标与键盘用户,是补充性的视觉提示,不能替代可见标签或无障碍描述。

触发器本身的可访问名称应与提示内容一致。纯图标触发器需要 aria-label,Tooltip 只提供额外提示。

基础示例

通过 trigger 传入一个元素,它必须像 Button 一样转发 props 与 ref。

定位

side、align、sideOffset 与 alignOffset 控制首选位置。空间不足时,提示会自动翻转或偏移。

受控用法与箭头

使用 open 与 onOpenChange 控制显示状态;设置 arrow={false} 可隐藏箭头。

The tooltip is closed.

延迟

delay 控制鼠标停留多久后打开,closeDelay 控制关闭延迟,两者都会传给 Base UI 触发器。新手引导需要即时反馈时可设 delay={0};提示出现频繁时则使用更长的延迟。

纯图标触发器

Tooltip 常与图标按钮搭配使用。请为触发器提供独立的 aria-label;提示文字不能替代按钮的可访问名称。

无障碍

Tooltip 在触发器被悬停或获得键盘焦点时打开,在失焦、按 Escape 或点击外部时关闭。浮层仅作视觉提示:它不会被暴露为描述,触屏与屏幕阅读器用户也无法使用 Tooltip。触发器必须通过可见文字、aria-label 或 aria-labelledby 自己提供完整的可访问名称。

提示内容应简短且仅作补充。不要在 Tooltip 中放置交互控件或独有信息,因为部分用户可能永远不会打开它。标签与焦点规范见可访问性指南。

API 参考

属性类型默认值说明
triggerReactElement—打开提示的触发器。必填,必须转发 props 与 ref。
childrenReactNode—浮层中的简短提示。必填。
arrowbooleantrue是否渲染方向箭头。
delaynumber600悬停后打开前的延迟,单位毫秒。
closeDelaynumber0关闭前的延迟,单位毫秒。
side"top" | "bottom" | "left" | "right" | "inline-start" | "inline-end""top"首选方位。
align"start" | "center" | "end""center"相对触发器的对齐方式。
sideOffsetnumber | OffsetFunction8触发器与浮层的像素距离。
alignOffsetnumber | OffsetFunction0沿对齐轴的像素偏移。
collisionPaddingPadding每边 5px浮层与碰撞边界之间的留白。
openboolean—受控显示状态。
defaultOpenbooleanfalse非受控时的初始显示状态。
onOpenChange(open: boolean, details) => void—打开或关闭时调用。
onOpenChangeComplete(open: boolean) => void—打开或关闭动画结束后调用。
disabledbooleanfalse禁止打开提示。
trackCursorAxis"none" | "x" | "y" | "both""none"提示跟随指针移动的轴。
disableHoverablePopupbooleanfalse是否允许悬停在提示内容上而不关闭提示。
actionsRefRefObject<Tooltip.Root.Actions | null>—命令式的 close 与 unmount 操作。
triggerIdstring | null—受控提示所用触发器的 ID。
defaultTriggerIdstring | null—初始打开提示所用触发器的 ID。
handleTooltip.Handle<Payload>—允许外部触发器控制提示的 handle。
classNamestring—合并到浮层的 Tailwind 类名。
styleCSSProperties—内联样式,合并到与 className 相同的元素。
ui{ positioner?: ClassValue; popup?: ClassValue; glass?: ClassValue; overlay?: ClassValue; arrow?: ClassValue; content?: ClassValue }—按 data-slot 组织的内部槽位类名。

ui 的键对应下方列出的 data-slot 值。其余 Base UI Tooltip.Root 属性都会透传。

属性说明
data-open浮层打开时存在。
data-closed浮层关闭时存在。
data-side实际方位(top、bottom、left、right、inline-start 或 inline-end)。
data-align实际对齐方式(start、center 或 end)。
data-starting-style浮层开始进入动画时存在。
data-ending-style浮层正在退出动画时存在。
data-instant需要跳过动画时存在。
data-popup-open提示打开时存在于触发器上。
data-slot标记内部结构(positioner、popup、glass、overlay、arrow、content)。

主题

组件使用共享玻璃材质。可以在父级调整 --ui-glass-* token,用 className 控制布局,并通过 ui 按 data-slot 调整内部槽位。组件级数值位于 src/theme/tooltip.ts。Token 分层与预设见主题指南。

相关组件

  • Popover — 需要更丰富的内容、操作与非模态焦点时使用。
  • Button — 最常见的 Tooltip 触发器。
  • Menu — 锚定在触发器旁的操作列表。