Skyroc UI
数据展示

Skeleton

用于在内容加载前展示占位状态的骨架屏组件

Skeleton 用于在数据加载、图片加载或异步内容渲染前提供视觉占位。Skeleton 适合手动拼出固定形状,SkeletonContainer 可以保留子节点结构并自动把文本、媒体和交互元素转换成骨架块。

import { Skeleton, SkeletonContainer } from '@skyroc/web-ui';

何时使用

  • 内容正在异步加载,但页面布局已经确定。
  • 需要减少空白状态和加载闪烁,让用户感知到内容结构。
  • 需要为卡片、列表、头像、图片或详情页展示占位块。
  • 只有短暂等待且不需要表现内容结构时,可以使用 Spinner 或 Progress。

基础用法

使用 className 控制 Skeleton 的宽高、圆角和布局位置。

Preview
Code
Loading...
<Skeleton className="size-12 rounded-full" />
<Skeleton className="h-4 w-[250px]" />
<Skeleton className="h-[125px] w-[250px] rounded-xl" />

自动骨架化

SkeletonContainerloadingtrue 时会递归处理子节点:文本会变成文本占位,媒体和无内容布局块会变成媒体占位,Button 等交互组件会变成交互占位。

Preview
Code
Loading...
<SkeletonContainer loading>
  <article>
    <h2>Article Title</h2>
    <p>Article preview content</p>
  </article>
</SkeletonContainer>

动画

通过 animation 控制自动生成骨架块的动效。pulse 是默认脉冲动画,wave 使用横向渐变扫光,none 展示静态占位。

Preview
Code
Loading...
动画说明
pulse默认脉冲动画
wave横向渐变扫光动画
none静态占位

控制范围和样式

通过 depth 限制递归深度,通过 skeletonColorskeletonRadius 控制生成骨架块的颜色和圆角。

Preview
Code
Loading...
<SkeletonContainer
  depth={1}
  loading
/>

<SkeletonContainer
  animation="wave"
  loading
  skeletonColor="hsl(var(--primary) / 0.18)"
  skeletonRadius="999px"
/>

排除元素

通过 excludeKeys 保留指定 key 的元素。被排除的元素会带上 data-skeleton-exclude,不会被容器的 loading 样式隐藏。

Preview
Code
Loading...
<SkeletonContainer
  excludeKeys={['action-btn']}
  loading
>
  <button key="action-btn">Take Action</button>
</SkeletonContainer>

API

Skeleton

基础占位块。通常通过 className 设置具体形状,组件本身渲染为 div

属性说明类型默认值
className占位块 class,用于控制宽高、圆角和布局ClassValue-
children当 loading 为 true 时渲染到占位块内部的内容;常规占位用法通常不传ReactNode-
loading是否渲染 children 到占位块内部boolean-
id根元素 idstring-
aria-label无可见文本时提供给辅助技术的说明string-

SkeletonContainer

自动骨架化容器。loading=false 时直接返回 children;loading=true 时渲染包装容器并把 children 转换成骨架结构。

属性说明类型默认值
children*需要显示或自动骨架化的内容ReactNode-
loading是否进入骨架屏状态booleanfalse
animation自动生成骨架块的动画类型'none' | 'pulse' | 'wave''pulse'
depth递归骨架化深度,0 表示只处理直接文本内容numberInfinity
excludeKeys需要排除骨架化的元素 key 列表string[][]
skeletonColor自动生成骨架块的自定义背景色string-
skeletonRadius自动生成骨架块的自定义圆角string-
classNameloading 状态下包装容器 classClassValue-
idloading 状态下包装容器 idstring-

类型

SkeletonProps

Skeleton 基础占位块属性。继承 div 属性,并增加 loading 控制。

字段类型说明
classNameClassValue占位块 class。
childrenReactNode可选子节点。
loadingboolean是否渲染 children 到占位块内部。
idstring根元素 id。
aria-labelstring无障碍说明。

SkeletonContainerProps

自动骨架化容器属性。继承 SkeletonProps,并增加递归转换、动画和样式控制。

字段类型说明
childrenReactNode需要显示或骨架化的内容。
loadingboolean是否进入骨架屏状态。
animationSkeletonAnimation骨架动画类型。
depthnumber递归骨架化深度。
excludeKeysstring[]需要排除的元素 key 列表。
skeletonColorstring自定义骨架背景色。
skeletonRadiusstring自定义骨架圆角。
classNameClassValueloading 状态下包装容器 class。
idstringloading 状态下包装容器 id。

SkeletonAnimation

SkeletonContainer 自动生成骨架块的动画类型

'none' | 'pulse' | 'wave'

ClassValue

CSS 类名类型

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

On this page