2026-02-065 min94 views
什么骨架屏?怎么做的?
#React#Web Development#CSS#Vue#User Experience
AI Summary
每分钟最多 5 次
- 骨架屏是一种在网页加载真实数据前展示的占位图,通过简单的灰色块模拟出最终内容的轮廓。
- 实现方式包括:
- 纯 CSS:最轻量级的方法,适合小型组件或列表页。通过给空
<div>加上背景色和动画来模拟“流光”效果。 - 利用 UI 组件库(如 Vue 的 Element Plus 或 React 的 Ant Design):效率最高,适用于企业级后台系统。官方已封装好相关组件,开发者可以直接使用。
- 自动生成版:针对结构非常复杂的页面,使用自动化工具如饿了么的
page-skeleton-webpack-plugin自动生成 SVG 图片作为骨架屏,或直接使用视觉设计师提供的灰色占位图。
- 纯 CSS:最轻量级的方法,适合小型组件或列表页。通过给空
- 选择实现方案时需考虑性能、开发速度及适用场景。对于小型组件推荐使用纯 CSS 方法;需要快速开发且样式固定的情况下建议采用组件库;而面对极其复杂的页面布局,则可考虑自动化生成技术。
骨架屏(Skeleton Screen)其实就是网页在加载真实数据之前,先展示出的一个“低配版”占位图。它的核心逻辑并不复杂:用简单的灰色块模拟出最终内容的轮廓。
通常有三种主流的实现方式,我帮你梳理了一下:
1. 基础版:纯 CSS 实现(最常用)
这种方式最轻量。通过给空的 <div> 加上背景色和动画,模拟出“流光”效果。
<div class="skeleton-card">
<div class="skeleton-avatar"></div>
<div class="skeleton-info">
<div class="skeleton-line short"></div>
<div class="skeleton-line long"></div>
</div>
</div>
/* 基础灰色块 */
.skeleton-avatar, .skeleton-line {
background: #e2e2e2;
border-radius: 4px;
}
/* 关键:流光动画 */
@keyframes loading {
0% { background-position: -100% 0; }
100% { background-position: 100% 0; }
}
.skeleton-card {
/* 使用渐变制作闪烁感 */
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
}
2. 进阶版:利用 UI 组件库(效率最高)
如果你在用 Vue (Element Plus) 或 React (Ant Design),根本不需要手写 CSS,官方已经封装好了:
- Element Plus: 使用
<el-skeleton>。 - Ant Design: 使用
<Skeleton />。
代码示例 (Vue):
<template>
<el-skeleton :loading="loading" animated>
<template #template>
<el-skeleton-item variant="circle" style="width: 40px; height: 40px" />
<el-skeleton-item variant="p" style="width: 50%" />
</template>
<template #default>
<div>这是我的真实数据内容</div>
</template>
</el-skeleton>
</template>
3. 自动生成版(大厂黑科技)
对于页面非常复杂的场景,手写骨架屏很痛苦。一些大厂会使用 “图片占位” 或者 “自动化工具”:
- **饿了么的
page-skeleton-webpack-plugin**:它会运行你的页面,自动分析 DOM 结构,生成一张 SVG 图片作为骨架屏。 - 直接切图:视觉设计师出一张灰色的占位图,Loading 时直接展示这张图。
总结:你应该选哪种?
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 纯 CSS | 性能最好,定制化强 | 结构复杂时编写繁琐 | 小型组件、列表页 |
| 组件库 | 开发速度极快 | 样式相对固定 | 企业级后台系统 |
| 自动化生成 | 无需手动维护 | 配置较麻烦,容易样式错乱 | 结构极其复杂的移动端首页 |
/** Comments(0)*/
Loading comments...