Tooltip
用于在悬停或聚焦时展示简短说明的浮层提示组件
Tooltip 用于给按钮、图标、快捷操作等元素提供轻量说明。组件基于 Radix Tooltip 封装,提供内容浮层、箭头、位置、尺寸和 slot class 配置。
import { Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '@skyroc/web-ui';何时使用
- 需要解释图标按钮、短标签、快捷操作等界面元素的含义。
- 信息足够简短,不需要用户在浮层内进行交互。
- 需要在 hover 或 focus 时展示辅助说明。
- 需要承载复杂内容或可交互操作时使用 Popover;需要展示对象预览时使用 HoverCard。
基础用法
通过 content 设置提示内容。Tooltip 会把子元素作为触发器,内部使用 TooltipTrigger asChild 渲染。
<Tooltip content="Save your changes">
<Button>Hover me</Button>
</Tooltip>位置
通过 contentProps.side 和 contentProps.align 控制浮层位置。sideOffset 默认是 8,avoidCollisions 默认开启。
<Tooltip
content="Tooltip content"
contentProps={{
align: 'center',
side: 'top'
}}
>
<Button>Top</Button>
</Tooltip>箭头
通过 showArrow 显示指向触发器的箭头。arrowProps 会传递给内部 TooltipArrow。
<Tooltip showArrow content="Tooltip content">
<Button>with arrow</Button>
</Tooltip>尺寸
通过 size 调整内容浮层的字号、内边距和箭头大小。默认尺寸为 md。
| 尺寸 | 字号 | 适用场景 |
|---|---|---|
xs | 10px | 紧凑工具栏 |
sm | 12px | 表格内操作提示 |
md | 14px | 常规场景(默认) |
lg | 16px | 较醒目的操作说明 |
xl | 18px | 大号操作区说明 |
2xl | 20px | 大尺寸展示或演示区 |
自定义样式
通过 classNames.content 控制内容浮层,通过 classNames.arrow 控制箭头。className 当前会作为内容浮层的自定义 class 使用。
<Tooltip
showArrow
content="Custom tooltip"
classNames={{
arrow: 'fill-primary',
content: 'border-primary bg-primary text-primary-foreground'
}}
>
<Button>Custom</Button>
</Tooltip>API
Tooltip
高层封装组件。继承 Radix Tooltip Root 属性,并增加 content、内容浮层配置、箭头配置和项目尺寸。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| content* | 提示内容 | ReactNode | - |
| children | 触发元素 | ReactNode | - |
| open | 受控打开状态 | boolean | - |
| defaultOpen | 非受控模式下的默认打开状态 | boolean | - |
| onOpenChange | 打开状态变化时触发 | (open: boolean) => void | - |
| showArrow | 是否显示箭头 | boolean | false |
| size | 尺寸,影响内容浮层的字号、内边距和箭头大小 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| contentProps | 传递给 TooltipContent 的额外属性 | Omit<TooltipContentProps, 'children' | 'className'> | - |
| arrowProps | 传递给 TooltipArrow 的额外属性 | TooltipArrowProps | - |
| className | 内容浮层的自定义 class | ClassValue | - |
| classNames | 各 slot 的自定义 class(content / arrow) | TooltipClassNames | - |
TooltipContent
内容浮层组件。默认通过 Portal 渲染,avoidCollisions 默认为 true,sideOffset 默认为 8。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| children | 浮层内容 | ReactNode | - |
| side | 浮层出现方向 | 'top' | 'right' | 'bottom' | 'left' | - |
| align | 浮层对齐方式 | 'start' | 'center' | 'end' | - |
| sideOffset | 浮层与触发元素之间的距离 | number | 8 |
| avoidCollisions | 是否自动避让视口碰撞 | boolean | true |
| size | 尺寸,影响字号与内边距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| className | 内容浮层自定义 class | ClassValue | - |
TooltipArrow
箭头组件,通常通过 Tooltip 的 showArrow 自动渲染。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| size | 尺寸,影响箭头大小 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| className | 箭头自定义 class | ClassValue | - |
TooltipProvider / TooltipRoot / TooltipTrigger
这些组件直接从 Radix Tooltip re-export。需要统一延迟、跳过延迟窗口或自定义组合结构时,可以使用这些底层组件。
类型
TooltipProps
Tooltip 高层封装组件属性。继承 Radix Tooltip Root 属性,并增加内容、箭头、尺寸和 slot class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| arrowProps | TooltipArrowProps | 传递给箭头组件的额外属性。 |
| children | ReactNode | 触发元素。 |
| className | ClassValue | 内容浮层的自定义 class。 |
| classNames | TooltipClassNames | 各 slot 的自定义 class。 |
| content | ReactNode | 提示内容。 |
| contentProps | Omit<TooltipContentProps, 'children' | 'className'> | 内容浮层额外属性。 |
| defaultOpen | boolean | 非受控默认打开状态。 |
| onOpenChange | (open: boolean) => void | 打开状态变化回调。 |
| open | boolean | 受控打开状态。 |
| showArrow | boolean | 是否显示箭头。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 组件尺寸。 |
TooltipClassNames
各 slot 的自定义 class,用于精细化控制 Tooltip 样式。
| 字段 | 类型 | 说明 |
|---|---|---|
| content | ClassValue | 内容浮层的 class。 |
| arrow | ClassValue | 箭头的 class。 |
TooltipContentProps
内容浮层组件属性。继承 Radix Tooltip Content 属性并支持项目尺寸。
| 字段 | 类型 | 说明 |
|---|---|---|
| align | 'start' | 'center' | 'end' | 浮层对齐方式。 |
| avoidCollisions | boolean | 是否自动避让视口碰撞。 |
| children | ReactNode | 浮层内容。 |
| className | ClassValue | 自定义 class。 |
| side | 'top' | 'right' | 'bottom' | 'left' | 浮层出现方向。 |
| sideOffset | number | 浮层与触发元素之间的距离。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 组件尺寸。 |
TooltipArrowProps
箭头组件属性。继承 Radix Tooltip Arrow 属性并支持项目尺寸。
| 字段 | 类型 | 说明 |
|---|---|---|
| className | ClassValue | 自定义 class。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 组件尺寸。 |
StyledComponentProps<T>
项目内用于包装组件 props 的通用类型。
| 字段 | 类型 | 说明 |
|---|---|---|
| ...sourceProps | inherited props without className | 继承原始组件属性,但重新定义 className。 |
| className | ClassValue | 组件 class。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 项目统一尺寸类型。 |
TooltipSide
Tooltip 出现方向类型
TooltipAlign
Tooltip 对齐方式类型