拟态骨架

skeleton · neumorphic · 灵感来源:Skeleton Screen 模式 + 本站材质配方

数据到达后整块替换,不闪烁。

复用卡

Skeleton Screen · 拟态骨架 · 骨架 / Neumorphic

规格 · 术语提示词(给 AI 用)

做一个 Skeleton Screen(拟态骨架):
- role=status + aria-busy,占位块全部 aria-hidden,读屏只播一句加载状态
- avatar + lines 还原最终版式;行宽递减,最后一行天然变短
- 静态占位不闪烁,减少动效下无需额外降级
- 同色底 + 内双阴影;头像深一档、正文行浅一档
用这些 CSS 变量:--color-text-muted --neuro-bg --neuro-dark --neuro-light
灵感参考:Skeleton Screen 模式 + 本站材质配方

参数(CSS 变量)

--color-text-muted --neuro-bg --neuro-dark --neuro-light

必缺状态

(无必缺状态)

整页场景

(尚未接进整页场景)

安装(一条链接)

参考(本站可核对)

调研笔记

拟态骨架

拆解

  • role="status" + aria-busy="true" + aria-label;占位块全部 aria-hidden
  • avatar 控制头像位,lines 控制正文行数;行宽 100 / 86 / 72 … 递减
  • 静态占位,不闪烁

材质

  • 占位块:同色底 + 内双阴影,像还没填内容的凹槽
  • 头像用深一档的 inset(2px),正文行用浅一档(1px),层级靠深度而不是颜色

边界

  • 只适合最终版式已知的容器
  • 不做 shimmer;不额外占用动画帧
  • 行数只是占位,不承诺最终内容

变量:--neuro-bg / --neuro-light / --neuro-dark。

实现

skeleton/neumorphic
interface Props {
  /** 正文行数 */
  lines?: number;
  /** 左侧头像位 */
  avatar?: boolean;
  label?: string;
  className?: string;
}

/**
 * 拟态骨架:加载中的占位块。
 * 保持最终版式的高度与节奏,数据到达后整块替换;不做闪烁。
 */
export function NeumorphicSkeleton({
  lines = 3,
  avatar = false,
  label = '加载中',
  className = '',
}: Props) {
  return (
    <div
      role="status"
      aria-busy="true"
      aria-label={label}
      className={`flex items-start gap-3 ${className}`}
    >
      {avatar && (
        <span
          aria-hidden="true"
          className="
            size-10 shrink-0 rounded-full bg-[var(--neuro-bg)]
            shadow-[inset_2px_2px_5px_var(--neuro-dark),inset_-2px_-2px_5px_var(--neuro-light)]
          "
        />
      )}
      <div className="flex-1 space-y-2.5 pt-0.5">
        {Array.from({ length: lines }).map((_, i) => (
          <span
            key={i}
            aria-hidden="true"
            className="
              block h-3 rounded-full bg-[var(--neuro-bg)]
              shadow-[inset_1px_1px_3px_var(--neuro-dark),inset_-1px_-1px_3px_var(--neuro-light)]
            "
            style={{ width: `${Math.max(42, 100 - i * 14)}%` }}
          />
        ))}
      </div>
    </div>
  );
}

元信息

标识
skeleton/neumorphic
状态
done
最后提交
2026-11-01
风格轴
neumorphic
依赖 token
--color-text-muted --neuro-bg --neuro-dark --neuro-light
在工作台打开 源码与 notes 都在 src/components/skeleton/neumorphic/