Skyroc UI
弹层覆盖

HoverCard

鼠标悬停或聚焦时展示补充信息的浮层卡片

HoverCard 用于在用户悬停或聚焦某个触发元素时展示简短的补充信息。它基于 Radix HoverCard 封装,适合展示用户资料、术语说明、链接预览或上下文摘要。

import {
  HoverCard,
  HoverCardArrow,
  HoverCardContent,
  HoverCardRoot,
  HoverCardTrigger
} from '@skyroc/web-ui';

何时使用

  • 需要在不打断当前流程的情况下展示补充信息。
  • 触发内容和浮层内容之间存在明确关联,例如用户、链接、指标或术语。
  • 内容较短,用户可以快速扫读并离开。
  • 需要点击确认或承载复杂交互时使用 Dialog;只需要纯文本提示时优先使用 Tooltip。

基础用法

通过 trigger 提供触发元素,children 作为悬停后展示的浮层内容。

Preview
Code
Loading...

箭头

通过 showArrow 显示箭头,让浮层和触发元素的视觉关系更明确。箭头样式可以通过 classNames.arrowarrowProps 调整。

Preview
Code
Loading...

位置与偏移

通过 contentProps 传递 Radix Content 的定位属性,例如 sidealignsideOffsetalignOffset 和碰撞检测相关配置。

<HoverCard
  trigger={<button type="button">Hover me</button>}
  contentProps={{ align: 'start', side: 'right', sideOffset: 12 }}
>
  <div>Content</div>
</HoverCard>

自定义样式

通过 classNames.content 控制浮层内容容器,通过 classNames.arrow 控制箭头。也可以直接使用 className 设置内容容器样式,className 的优先级高于 classNames.content

API

HoverCard

通用属性参考:基于 Radix HoverCard Root,支持打开状态、延迟、触发元素、内容属性和箭头配置。

属性说明类型默认值
trigger*触发 HoverCard 打开的元素,通常是 Button、链接或文本节点ReactNode-
children浮层内容ReactNode-
showArrow是否显示指向触发元素的箭头booleanfalse
arrowProps传递给 HoverCardArrow 的额外 props,仅在 showArrow 为 true 时生效HoverCardArrowProps-
contentProps传递给 HoverCardContent 的定位和交互 props,不包含 children 与 classNameOmit<HoverCardContentProps, 'children' | 'className'>-
classNames各 slot 的自定义 class(content / arrow)HoverCardClassNames-
className传递给内容容器的自定义 class;优先级高于 classNames.contentClassValue-
open受控模式下的打开状态boolean-
defaultOpen非受控模式下的默认打开状态boolean-
onOpenChange打开状态变化时触发(open: boolean) => void-
openDelay鼠标进入或聚焦后延迟打开的毫秒数,透传给 Radix Rootnumber-
closeDelay鼠标离开或失焦后延迟关闭的毫秒数,透传给 Radix Rootnumber-
size类型中存在,但当前 HoverCard 样式没有 size 分支,不建议依赖'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'-

HoverCardContent

浮层内容容器会自动通过 Portal 渲染,并默认设置 align="center"sideOffset={8}

属性说明类型默认值
children浮层内容ReactNode-
className内容容器的自定义 classClassValue-
side浮层相对触发元素的位置'top' | 'right' | 'bottom' | 'left'-
align浮层相对触发元素的对齐方式'start' | 'center' | 'end''center'
sideOffset浮层和触发元素之间的距离number8
alignOffset沿对齐轴偏移的距离number-
avoidCollisions是否启用碰撞检测以避免浮层超出视口boolean-
collisionPadding碰撞检测时和边界之间保留的距离number | Partial<Record<Side, number>>-
forceMount强制挂载内容容器true-

HoverCardArrow

箭头组件用于在浮层和触发元素之间建立视觉连接。主组件中只有 showArrow 为 true 时才会渲染。

属性说明类型默认值
className箭头的自定义 classClassValue-
width箭头宽度,透传给 Radix Arrownumber-
height箭头高度,透传给 Radix Arrownumber-
asChild使用子元素替代默认箭头元素boolean-
size类型中存在,但当前箭头样式没有 size 分支,不建议依赖'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'-

子组件

HoverCard 也导出 Radix 原语,适合在需要完全自定义组合结构时使用。

属性说明类型默认值
HoverCardRootRadix HoverCard Root 原语,用于自定义组合根节点radix primitive-
HoverCardTriggerRadix HoverCard Trigger 原语,用于自定义触发元素radix primitive-
HoverCardContent浮层内容容器,支持对应 Radix Content props、className 和 Portal 渲染HoverCardContentProps-
HoverCardArrow浮层箭头,支持对应 Radix Arrow props 和 classNameHoverCardArrowProps-

类型

HoverCardProps

主组件属性。组合了 Radix HoverCard Root 属性,并额外提供触发元素、内容属性、箭头和 slot 样式配置。

字段类型说明
arrowPropsHoverCardArrowProps传递给箭头组件的额外属性。
childrenReactNode浮层内容。
classNameClassValue内容容器的 class。来自 StyledComponentProps。
classNamesHoverCardClassNames各 slot 的自定义 class。
closeDelaynumber延迟关闭时间。来自 Radix Root props。
contentPropsOmit<HoverCardContentProps, 'children' | 'className'>传递给内容容器的定位和交互属性。
defaultOpenboolean非受控模式下的默认打开状态。来自 Radix Root props。
onOpenChange(open: boolean) => void打开状态变化时触发。
openboolean受控模式下的打开状态。来自 Radix Root props。
openDelaynumber延迟打开时间。来自 Radix Root props。
showArrowboolean是否显示箭头。默认值为 false。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'类型中存在,但当前主组件没有将 size 应用到内容或箭头样式。
trigger*ReactNode触发 HoverCard 打开的元素。

HoverCardClassNames

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

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

HoverCardContentProps

内容容器属性。继承 Radix HoverCard Content props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
align'start' | 'center' | 'end'对齐方式。默认值为 center。
alignOffsetnumber沿对齐轴偏移的距离。
avoidCollisionsboolean是否启用碰撞检测。
childrenReactNode浮层内容。
classNameClassValue内容容器的 class。
collisionPaddingnumber | Partial<Record<Side, number>>碰撞检测边距。
forceMounttrue强制挂载内容容器。
side'top' | 'right' | 'bottom' | 'left'浮层位置。
sideOffsetnumber浮层和触发元素之间的距离。默认值为 8。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'类型中存在,但当前内容容器样式不依赖 size。

HoverCardArrowProps

箭头属性。继承 Radix HoverCard Arrow props,并通过 StyledComponentProps 增加 className 和 size。

字段类型说明
asChildboolean使用子元素替代默认箭头元素。
classNameClassValue箭头的 class。
heightnumber箭头高度。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'类型中存在,但当前箭头样式不依赖 size。
widthnumber箭头宽度。

StyledComponentProps<T>

项目内用于包装 Radix props 或原生元素 props 的通用类型。

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

HoverCardSlots

HoverCard 可配置 classNames 的内置 slot

'arrow' | 'content'

Side

碰撞检测边距支持的方向键

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

ClassValue

CSS 类名类型

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

On this page