骨架屏通过结构化灰色占位提升感知性能,用内联html+css实现轻量渲染,确保宽高一致与样式复用,精准控制显隐时机并搭配占位图与自动化工具优化维护。

骨架屏不是“让页面变快”,而是让用户“感觉更快”。它用结构化灰色占位替代白屏,在 JS 执行前就渲染出页面轮廓,降低等待焦虑、减少布局偏移(CLS),从而提升感知性能。
用内联 HTML + CSS 实现轻量骨架
在 HTML 的 中直接写骨架结构,避免额外请求。每个骨架元素需与真实内容宽高一致,防止替换时跳动:
- 用 class 名复用真实组件的 CSS 规则(如 margin、padding、flex 布局),确保骨架与最终内容对齐
- 推荐使用语义化结构,例如:
<div class="skeleton-article"> <div class="skeleton-img"></div> <div class="skeleton-title"></div> </div> - CSS 中为骨架元素设置浅灰背景、圆角和脉冲动画(
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%)+background-size: 200% 100%)
控制显示与隐藏时机
骨架不能一直挂着,也不能一闪而过。关键在于精准切换:
- 初始状态:骨架默认显示,真实内容 display: none 或用 v-if / useState 控制不可见
- 数据加载完成(如 API resolve 后、组件挂载前)再显真实内容、隐藏骨架
- 设置合理超时兜底:若 3 秒未加载完成,可叠加文字提示(如“内容加载中…”),避免静止骨架引发疑虑
搭配 Placeholder.js 优化图片占位
对于图片区域,可用 Placeholder.js 自动生成轻量占位图,体积小于 1KB,无需框架依赖:
- 引入后,用
<img src="placeholder.js?w=300&h=200&color=eee">直接生成指定尺寸灰块 - 结合 aspect-ratio 锁定宽高比(如
aspect-ratio: 16/9),防止图片加载时重排 - 与骨架整体风格统一:颜色用 #eee 或 #f0f0f0,避免突兀色差
自动化生成减少维护成本
手工维护骨架易遗漏、难同步,尤其多端适配时:
- Webpack 场景可用 page-skeleton-webpack-plugin,构建时扫描首屏 DOM,自动生成骨架模板
- Vue/React 项目优先选用 UI 库内置方案,如 Ant Design 的
<skeleton avatar title paragraph></skeleton>,一行启用 - 生成时需覆盖主流断点,检查移动端骨架是否错位或溢出,避免响应式失效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











