Skyroc UI
弹层覆盖

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 渲染。

Preview
Code
Loading...
<Tooltip content="Save your changes">
  <Button>Hover me</Button>
</Tooltip>

位置

通过 contentProps.sidecontentProps.align 控制浮层位置。sideOffset 默认是 8avoidCollisions 默认开启。

Preview
Code
Loading...
<Tooltip
  content="Tooltip content"
  contentProps={{
    align: 'center',
    side: 'top'
  }}
>
  <Button>Top</Button>
</Tooltip>

箭头

通过 showArrow 显示指向触发器的箭头。arrowProps 会传递给内部 TooltipArrow

Preview
Code
Loading...
<Tooltip showArrow content="Tooltip content">
  <Button>with arrow</Button>
</Tooltip>

尺寸

通过 size 调整内容浮层的字号、内边距和箭头大小。默认尺寸为 md

尺寸字号适用场景
xs10px紧凑工具栏
sm12px表格内操作提示
md14px常规场景(默认)
lg16px较醒目的操作说明
xl18px大号操作区说明
2xl20px大尺寸展示或演示区
Preview
Code
Loading...

自定义样式

通过 classNames.content 控制内容浮层,通过 classNames.arrow 控制箭头。className 当前会作为内容浮层的自定义 class 使用。

Preview
Code
Loading...
<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是否显示箭头booleanfalse
size尺寸,影响内容浮层的字号、内边距和箭头大小'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
contentProps传递给 TooltipContent 的额外属性Omit<TooltipContentProps, 'children' | 'className'>-
arrowProps传递给 TooltipArrow 的额外属性TooltipArrowProps-
className内容浮层的自定义 classClassValue-
classNames各 slot 的自定义 class(content / arrow)TooltipClassNames-

TooltipContent

内容浮层组件。默认通过 Portal 渲染,avoidCollisions 默认为 truesideOffset 默认为 8

属性说明类型默认值
children浮层内容ReactNode-
side浮层出现方向'top' | 'right' | 'bottom' | 'left'-
align浮层对齐方式'start' | 'center' | 'end'-
sideOffset浮层与触发元素之间的距离number8
avoidCollisions是否自动避让视口碰撞booleantrue
size尺寸,影响字号与内边距'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className内容浮层自定义 classClassValue-

TooltipArrow

箭头组件,通常通过 TooltipshowArrow 自动渲染。

属性说明类型默认值
size尺寸,影响箭头大小'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className箭头自定义 classClassValue-

TooltipProvider / TooltipRoot / TooltipTrigger

这些组件直接从 Radix Tooltip re-export。需要统一延迟、跳过延迟窗口或自定义组合结构时,可以使用这些底层组件。

类型

TooltipProps

Tooltip 高层封装组件属性。继承 Radix Tooltip Root 属性,并增加内容、箭头、尺寸和 slot class 配置。

字段类型说明
arrowPropsTooltipArrowProps传递给箭头组件的额外属性。
childrenReactNode触发元素。
classNameClassValue内容浮层的自定义 class。
classNamesTooltipClassNames各 slot 的自定义 class。
contentReactNode提示内容。
contentPropsOmit<TooltipContentProps, 'children' | 'className'>内容浮层额外属性。
defaultOpenboolean非受控默认打开状态。
onOpenChange(open: boolean) => void打开状态变化回调。
openboolean受控打开状态。
showArrowboolean是否显示箭头。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

TooltipClassNames

各 slot 的自定义 class,用于精细化控制 Tooltip 样式。

字段类型说明
contentClassValue内容浮层的 class。
arrowClassValue箭头的 class。

TooltipContentProps

内容浮层组件属性。继承 Radix Tooltip Content 属性并支持项目尺寸。

字段类型说明
align'start' | 'center' | 'end'浮层对齐方式。
avoidCollisionsboolean是否自动避让视口碰撞。
childrenReactNode浮层内容。
classNameClassValue自定义 class。
side'top' | 'right' | 'bottom' | 'left'浮层出现方向。
sideOffsetnumber浮层与触发元素之间的距离。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

TooltipArrowProps

箭头组件属性。继承 Radix Tooltip Arrow 属性并支持项目尺寸。

字段类型说明
classNameClassValue自定义 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

StyledComponentProps<T>

项目内用于包装组件 props 的通用类型。

字段类型说明
...sourcePropsinherited props without className继承原始组件属性,但重新定义 className。
classNameClassValue组件 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'项目统一尺寸类型。

TooltipSide

Tooltip 出现方向类型

'top' | 'right' | 'bottom' | 'left'

TooltipAlign

Tooltip 对齐方式类型

'start' | 'center' | 'end'

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page