Skip to content

Skeleton

Skeleton 用于在内容加载期间占位,降低页面布局跳动。它不绑定业务数据结构,适合和 Card、列表、表单区块组合使用。

Basic

Variants

variant 支持文本、矩形和圆形三种基础形态。

Text Rows

SkeletonText 用于快速生成多行文本占位,可通过 widths 控制每一行宽度。

Card Loading / SX

SkeletonCard 是轻量组合组件。所有 Skeleton 组件都支持 sx,可覆盖基础颜色或局部选择器。

常见场景

基础展示

用于页面主体、列表项或卡片中直接展示 Skeleton 的默认形态。

状态与数据驱动

当内容来自接口或业务状态时,优先把状态转换为组件 props,再交给 Skeleton 渲染。

样式组合

需要贴近业务页面时,通过 classNameclassstylesx 做局部覆盖。

Usage

tsx
import { Skeleton, SkeletonAvatar, SkeletonText } from "@ldkj/web-ui";

function Example() {
  return (
    <div className="flex items-start gap-3">
      <SkeletonAvatar size={40} />
      <SkeletonText rows={3} widths={["48%", "100%", "72%"]} />
    </div>
  );
}

API

Skeleton

属性说明类型默认值
variant占位形态'text' | 'rect' | 'circle''rect'
width宽度,数字自动转为 pxnumber | stringtext: '100%'circle: 40
height高度,数字自动转为 pxnumber | stringtext: '1em'circle: 40
inline是否以内联块显示booleanfalse
animated是否启用脉冲动画booleantrue
rounded圆角,支持预设、数字和 CSS 值Roundedtext: 'sm'rect: 'md'circle: 'full'
sx样式增强,支持对象、数组、函数与选择器SxProps-
className自定义类名string-
class自定义类名别名string-
style原生行内样式React.CSSProperties-

Skeleton 透传原生 div 属性。

SkeletonText

属性说明类型默认值
rows文本行数number3
rowHeight单行高度number | string'0.875rem'
gap行间距,数字自动转为 pxnumber | string8
widths每行宽度Array<number | string>最后一行默认 '68%'
width整体容器宽度number | string-
inline是否以内联模式渲染booleanfalse
animated是否启用脉冲动画booleantrue
rounded每行圆角Rounded跟随 Skeleton 默认策略
sx样式增强SxProps-
className自定义类名string-
class自定义类名别名string-
style原生行内样式React.CSSProperties-

SkeletonText 透传原生 div 属性。

SkeletonAvatar

属性说明类型默认值
size头像宽高,数字自动转为 pxnumber | string40

其余属性继承 Skeleton(不含 childrenvariantwidthheight)。

SkeletonButton

属性说明类型默认值
width按钮占位宽度number | string96
height按钮占位高度number | string36
rounded按钮占位圆角Rounded'md'

其余属性继承 Skeleton(不含 childrenvariant)。

SkeletonCard

属性说明类型默认值
showAvatar是否显示头像占位booleantrue
rows文本行数number3
width卡片宽度number | string-
animated是否启用脉冲动画booleantrue
rounded卡片圆角Rounded'lg'
sx样式增强SxProps-
className自定义类名string-
class自定义类名别名string-
style原生行内样式React.CSSProperties-

行为规则 / 优先级

  • 数据展示组件只负责渲染当前输入,不在内部请求数据。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Skeleton 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • Skeleton 默认使用 bg-gray-200,不依赖 shadcn 私有 token。
  • style、组件内部样式与 sx 会合并,sx 最终覆盖同名基础样式。
  • SkeletonText 会确保至少渲染 1 行,rows 传入小数时向下取整。
  • 需要完全静态占位时可以设置 animated={false}