JGuang

骨架屏

Skeleton · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

骨架屏

在需要等待加载内容的位置提供一个占位图形组合。

何时使用

  • 网络较慢,需要长时间等待加载处理的情况下。
  • 图文信息内容较多的列表/卡片中。
  • 只在第一次加载数据的时候使用。
  • 可以被 Spin 完全代替,但是在可用的场景下可以比 Spin 提供更好的视觉效果和用户体验。

代码演示

  • 基本 · basic
  • 复杂的组合 · complex
  • 动画效果 · active
  • 按钮/头像/输入框/图像/自定义节点 · element
  • 包含子组件 · children
  • 列表 · list
  • 自定义语义结构的样式和类 · style-class

API

通用属性参考:通用属性

共同的 API

<Antd component="Alert" title="以下 API 为 Skeleton、Avatar、Button、Input、Image、Node 共享的 API。" type="info" banner="true"></Antd>

参数说明类型默认值版本全局配置
active是否展示动画效果booleanfalse-×
classNames用于自定义 Skeleton 组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props }) => Record<SemanticDOM, string>-6.0.06.0.0
styles用于自定义 Skeleton 组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props }) => Record<SemanticDOM, CSSProperties>-6.0.06.0.0

Skeleton

属性说明类型默认值版本全局配置
active是否展示动画效果booleanfalse×
avatar是否显示头像占位图boolean | SkeletonAvatarfalse×
loading为 true 时,显示占位图。反之则直接展示子组件boolean-×
paragraph是否显示段落占位图boolean | SkeletonParagraphPropstrue×
round为 true 时,段落和标题显示圆角booleanfalse×
title是否显示标题占位图boolean | SkeletonTitlePropstrue×

SkeletonTitleProps

属性说明类型默认值
width设置标题占位图的宽度number | string-

SkeletonParagraphProps

属性说明类型默认值
rows设置段落占位图的行数number-
width设置段落占位图的宽度,若为数组时则为对应的每行宽度,反之则是最后一行的宽度number | string | Array<number | string>-

Skeleton.Avatar

属性说明类型默认值
active是否展示动画效果,只在独立使用头像时有效booleanfalse
shape指定头像的形状circle | squarecircle
size设置头像占位图的大小number | large | medium | smallmedium

Skeleton.Button

属性说明类型默认值版本
active是否展示动画效果booleanfalse
block将按钮宽度调整为其父宽度的选项booleanfalse4.17.0
shape指定按钮的形状circle | round | square | default-
size设置按钮的大小large | medium | smallmedium

Skeleton.Input

属性说明类型默认值
active是否展示动画效果booleanfalse
size设置输入框的大小large | medium | smallmedium

Semantic DOM

Skeleton

语义节点原生说明版本
root根元素,包含表格显示、宽度、动画效果、圆角等骨架屏容器的基础样式6.0.0
header头部元素,包含表格单元格、内边距、垂直对齐等头像占位区域的布局样式6.0.0
section区块元素,包含骨架屏内容区域的布局样式6.0.0
avatar头像元素,包含行内块显示、垂直对齐、背景色、尺寸、圆角等头像占位的样式6.0.0
title标题元素,包含宽度、高度、背景色、圆角等标题占位的样式6.0.0
paragraph段落元素,包含内边距、列表项样式、背景色、圆角等段落占位的样式6.0.0

语义说明来源: vendor/components/skeleton/demo/_semantic.tsx

Skeleton.Element

语义节点原生说明版本
root根元素6.0.0
content内容元素6.0.0

语义说明来源: vendor/components/skeleton/demo/_semantic_element.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
colorstring见原生声明及继承类型
colorGradientEndstring见原生声明及继承类型
gradientFromColorstring渐变色起点颜色
gradientToColorstring渐变色终点颜色
titleHeightnumber | string标题骨架屏高度
blockRadiusnumber骨架屏圆角
paragraphMarginTopnumber段落骨架屏上间距
paragraphLiHeightnumber段落骨架屏单行高度

声明来源: vendor/components/skeleton/style/index.ts

import type { CSSObject } from '@ant-design/cssinjs';

import { Keyframes, unit } from '@ant-design/cssinjs';

import type { CSSUtil, FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks, mergeToken } from '../../theme/internal';

export interface ComponentToken {
  /** @deprecated use gradientFromColor instead. */
  color: string;
  /** @deprecated use gradientToColor instead. */
  colorGradientEnd: string;
  /**
   * @desc 渐变色起点颜色
   * @descEN Start color of gradient
   */
  gradientFromColor: string;
  /**
   * @desc 渐变色终点颜色
   * @descEN End color of gradient
   */
  gradientToColor: string;
  /**
   * @desc 标题骨架屏高度
   * @descEN Height of title skeleton
   */
  titleHeight: number | string;
  /**
   * @desc 骨架屏圆角
   * @descEN Border radius of skeleton
   */
  blockRadius: number;
  /**
   * @desc 段落骨架屏上间距
   * @descEN Margin top of paragraph skeleton
   */
  paragraphMarginTop: number;
  /**
   * @desc 段落骨架屏单行高度
   * @descEN Line height of paragraph skeleton
   */
  paragraphLiHeight: number;
}

interface SkeletonToken extends FullToken<'Skeleton'> {
  skeletonAvatarCls: string;
  skeletonTitleCls: string;
  skeletonParagraphCls: string;
  skeletonButtonCls: string;
  skeletonInputCls: string;
  skeletonNodeCls: string;
  skeletonImageCls: string;
  imageSizeBase: number | string;
  skeletonLoadingBackground: string;
  skeletonLoadingMotionDuration: string;
  borderRadius: number;
}

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/skeleton/Avatar.tsx
  • vendor/components/skeleton/Button.tsx
  • vendor/components/skeleton/Element.tsx
  • vendor/components/skeleton/Image.tsx
  • vendor/components/skeleton/Input.tsx
  • vendor/components/skeleton/Node.tsx
  • vendor/components/skeleton/Paragraph.tsx
  • vendor/components/skeleton/Skeleton.tsx
  • vendor/components/skeleton/Title.tsx
  • vendor/components/skeleton/style/index.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。