JGuang

骨架屏

Skeleton · Material UI

交互预览
npm install @mui/material@9.4.0 @emotion/react@11.14.0 @emotion/styled@11.14.1

骨架屏

在宿主加载内容期间预留预计的内容形状。

本指南覆盖默认 Emotion 环境的 Material UI Core;扩展包与额外示例按清单单独标注。

使用场景与业务边界

Skeleton 不加载数据;应切换到真实内容,并另行提供有意义的加载状态。

原生组成与范围

Skeleton

保持 Material UI 原生组合与类型,不替换为 JGuang/Base UI/Radix 同名 API。示例条目不是额外组件。

原生安装与初始化

npm install @mui/material@9.4.0 @emotion/react@11.14.0 @emotion/styled@11.14.1

采用原生 npm 包与 Emotion,不提供虚构的 JGuang UI Registry 地址。将示例放在原生 ThemeProvider 内,按项目选择 CssBaseline 或 ScopedCssBaseline。先检查 React、现有 Provider、锁文件与 SSR 配置;不要覆盖用户文件或忽略 peer 冲突。本批实际验收 React 19.2.8;React 18 及以下须匹配 react-is。完整初始化规则见随附的双语 setup 文档。

关键原生参数

仅解释本指南选出的关键参数,不是平铺的通用 API。原生继承来源、slot 结构、可空值与泛型仍按固定源码保留。

所属组件.属性用途说明声明来源
Skeleton.variant所属组件的原生视觉枚举,不可替换为通用 variant 属性。Skeleton
Skeleton.animation原生 Skeleton 动画枚举,false 表示关闭动画。Skeleton
Skeleton.width原生 Skeleton 显式宽度,保留 CSS 长度类型。Skeleton
Skeleton.height原生 Skeleton 显式高度,保留 CSS 长度类型。Skeleton

可运行原生示例

下列机器键只选择示例入口,不会作为通用 variant 属性传入每个组件。原生示例 JSX 与数据保持上游原文;JGuang 编写的验收示例明确标注。

  • 多种变体 · Variants · 上游原生示例
  • 动画类型 · Animations · 上游原生示例
  • 脉动骨架屏 · YouTube · 上游原生示例
  • 波浪骨架屏 · Facebook · 上游原生示例
  • 从内容推断尺寸 · SkeletonTypography · 上游原生示例
  • 从内容推断尺寸 · SkeletonChildren · 上游原生示例
  • 颜色 · SkeletonColor · 上游原生示例

真实使用示例

固定版本的未修改原生示例;复制时同时保留所需的局部辅助文件。

import Skeleton from '@mui/material/Skeleton';
import Stack from '@mui/material/Stack';

export default function Variants() {
  return (
    <Stack spacing={1}>
      {/* For variant="text", adjust the height via font-size */}
      <Skeleton variant="text" sx={{ fontSize: '1rem' }} />

      {/* For other variants, adjust the size with `width` and `height` */}
      <Skeleton variant="circular" width={40} height={40} />
      <Skeleton variant="rectangular" width={210} height={60} />
      <Skeleton variant="rounded" width={210} height={60} />
    </Stack>
  );
}

示例依赖边界

@mui/material/Skeleton, @mui/material/Stack, @mui/material/Box, @mui/material/Grid, @mui/material/Typography, react, @mui/material/Card, @mui/material/CardHeader, @mui/material/CardContent, @mui/material/CardMedia, @mui/material/Avatar, @mui/material/IconButton, @mui/icons-material/MoreVert, @mui/material/styles

直接导入 Icons/System/Utils 的示例需要匹配 9.4.0 包。局部数据与辅助文件属于示例闭包,不是额外组件。远程图片和模拟操作不提供后端。

固定上游 API 元数据参考

以下表格保留上游元数据,不是重新推断的通用类型体系。条件泛型、继承属性与回调细节以以下源码声明为准。主题默认配置可能覆盖元数据默认值。

Skeleton

import Skeleton from '@mui/material/Skeleton';
import { Skeleton } from '@mui/material';
属性必需上游元数据类型/约束元数据默认值
animation否'pulse' | 'wave' | false'pulse'
children否node—
classes否object—
component否elementType—
height否number | string—
sx否Array<func | object | bool> | func | object—
variant否'circular' | 'rectangular' | 'rounded' | 'text' | string'text'
width否number | string—

原生源码声明

声明与 import 从固定源码提取,不平铺联合类型或外部继承。英文注释/类型属于原始源码参考,不代表上游正文已全文翻译。共享类型仍位于原生包中。

vendor/src/Skeleton/Skeleton.d.ts

import * as React from 'react';

import { SxProps } from '@mui/system';

import { OverridableStringUnion } from '@mui/types';

import { Theme } from '../styles';

import { OverridableComponent, OverrideProps } from '../OverridableComponent';

import { SkeletonClasses } from './skeletonClasses';

export interface SkeletonPropsVariantOverrides {}

export interface SkeletonOwnProps {
  /**
   * The animation.
   * If `false` the animation effect is disabled.
   * @default 'pulse'
   */
  animation?: 'pulse' | 'wave' | false | undefined;
  /**
   * Optional children to infer width and height from.
   */
  children?: React.ReactNode;
  /**
   * Override or extend the styles applied to the component.
   */
  classes?: Partial<SkeletonClasses> | undefined;
  /**
   * Height of the skeleton.
   * Useful when you don't want to adapt the skeleton to a text element but for instance a card.
   */
  height?: number | string | undefined;
  /**
   * The system prop that allows defining system overrides as well as additional CSS styles.
   */
  sx?: SxProps<Theme> | undefined;
  /**
   * The type of content that will be rendered.
   * @default 'text'
   */
  variant?:
    | OverridableStringUnion<
        'text' | 'rectangular' | 'rounded' | 'circular',
        SkeletonPropsVariantOverrides
      >
    | undefined;
  /**
   * Width of the skeleton.
   * Useful when the skeleton is inside an inline element with no width of its own.
   */
  width?: number | string | undefined;
}

export interface SkeletonTypeMap<
  AdditionalProps = {},
  RootComponent extends React.ElementType = 'span',
> {
  props: AdditionalProps & SkeletonOwnProps;
  defaultComponent: RootComponent;
}

declare const Skeleton: OverridableComponent<SkeletonTypeMap>;

export type SkeletonProps<
  RootComponent extends React.ElementType = SkeletonTypeMap['defaultComponent'],
  AdditionalProps = {},
> = OverrideProps<SkeletonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
  component?: React.ElementType | undefined;
};

安装后验收

执行严格类型检查、生产构建和实际交互。检查键盘标签/焦点、原生支持的禁用/错误/只读语义、深浅色、窄屏和减少动画。按真实宿主数据检查回调,不把复制提示词当作安装完成。初始化工具还需检查服务端 HTML 与无告警水合。

来源与许可

https://github.com/mui/material-ui/tree/809a7717b4c050ba3f69b75300689f07c050a16e

MIT · @mui/material@9.4.0. 保留上游原始内容与许可证。上游完整原文保留于 vendor/docs,不标为全文中文化。