Skip to content

Skeleton 骨架屏 - Vant 4

Skeleton 骨架屏

介绍

用于在内容加载过程中展示一组占位图形。

引入

通过以下方式来全局注册组件,更多注册方式请参考组件注册

js
import { createApp } from'vue'; import { Skeleton, SkeletonTitle, SkeletonImage, SkeletonAvatar, SkeletonParagraph, } from'vant'; const app = createApp(); app.use(Skeleton); app.use(SkeletonTitle); app.use(SkeletonImage); app.use(SkeletonAvatar); app.use(SkeletonParagraph);

🎯 代码演示

🎪 基础用法

通过 title 属性显示标题占位图,通过 row 属性配置占位段落行数,为用户提供优雅的加载体验。

html
<template>
  <van-skeleton title :row="3" />
</template>

👤 显示头像

通过 avatar 属性显示头像占位图,适用于用户信息卡片等场景。

html
<template>
  <van-skeleton title avatar :row="3" />
</template>

🎭 展示子组件

loading 属性设置成 false 表示内容加载完成,此时会隐藏占位图,并显示 Skeleton 的子组件。

html
<template>
  <van-skeleton title avatar :row="3" :loading="loading">
    <div>
      <h3>关于 Vant</h3>
      <p>Vant 是一套轻量、可靠的移动端 Vue 组件库,提供了丰富的基础组件和业务组件,帮助开发者快速搭建移动应用。</p>
    </div>
  </van-skeleton>
</template>

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const loading = ref(true);
    
    onMounted(() => {
      // 模拟数据加载
      setTimeout(() => {
        loading.value = false;
      }, 2000);
    });
    
    return {
      loading,
    };
  },
};
</script>

🎨 自定义展示内容

通过 template 插槽完成自定义内容的展示,可以灵活组合各种占位元素。

html
<template>
  <van-skeleton>
    <template #template>
      <div style="display: flex; width: 100%;">
        <van-skeleton-avatar />
        <div style="flex: 1; margin-left: 16px;">
          <van-skeleton-paragraph :row-width="'60%'" />
          <van-skeleton-paragraph :row-width="'40%'" />
        </div>
      </div>
    </template>
  </van-skeleton>
</template>

📋 API

🎛️ Skeleton Props

参数说明类型默认值
row📝 段落占位图行数*numberstring*
row-width📏 段落占位图宽度,可传数组来设置每一行的宽度*numberstring
title📰 是否显示标题占位图booleanfalse
avatar👤 是否显示头像占位图booleanfalse
loading🔄 是否显示骨架屏,传 false 时会展示子组件内容booleantrue
animate✨ 是否开启动画booleantrue
round🔘 是否将标题和段落显示为圆角风格booleanfalse
title-width📏 标题占位图宽度*numberstring*
avatar-size📐 头像占位图大小*numberstring*
avatar-shape🔲 头像占位图形状,可选值为 squarestringround

📝 SkeletonParagraph Props

参数说明类型默认值
round🔘 是否将段落显示为圆角风格booleanfalse
row-width📏 段落占位图宽度string100%

📰 SkeletonTitle Props

参数说明类型默认值
round🔘 是否将标题显示为圆角风格booleanfalse
title-width📏 标题占位图宽度*numberstring*

👤 SkeletonAvatar Props

参数说明类型默认值
avatar-size📐 头像占位图大小*numberstring*
avatar-shape🔲 头像占位图形状,可选值为 squarestringround

🖼️ SkeletonImage Props

参数说明类型默认值
image-size📐 图片占位图大小*numberstring*
image-shape🔲 图片占位图形状,可选值为 squarestringround

🎭 Skeleton Slots

名称说明
default📦 骨架屏内容
template🎨 自定义内容

📘 类型定义

组件导出以下类型定义,方便在 TypeScript 项目中使用:

ts
import type {
  SkeletonProps,
  SkeletonImageProps,
  SkeletonTitleProps,
  SkeletonImageShape,
  SkeletonAvatarShape,
  SkeletonParagraphProps,
} from 'vant';

🎨 主题定制

🎭 样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
--van-skeleton-paragraph-height16px📏 段落占位图高度
--van-skeleton-paragraph-backgroundvar(--van-active-color)🎨 段落占位图背景色
--van-skeleton-paragraph-margin-topvar(--van-padding-sm)📦 段落占位图上边距
--van-skeleton-title-width40%📏 标题占位图宽度
--van-skeleton-avatar-size32px📐 头像占位图大小
--van-skeleton-avatar-backgroundvar(--van-active-color)🎨 头像占位图背景色
--van-skeleton-duration1.2s⏱️ 动画持续时间
--van-skeleton-image-size96px📐 图片占位图大小
--van-skeleton-image-radius24px🔘 图片占位图圆角

📚 相关文档

🔄 加载组件

  • Loading - 加载组件,用于数据加载时的提示
  • PullRefresh - 下拉刷新组件,用于页面数据刷新

📦 展示组件

  • Empty - 空状态组件,用于无数据时的展示
  • List - 列表组件,常与骨架屏配合使用
  • Cell - 单元格组件,用于信息展示

🎨 布局组件

  • Space - 间距组件,用于元素间距控制
  • Divider - 分割线组件,用于内容分割

🔧 工具组件

基於Vant構建的企業級移動端解決方案