骨架屏在数据加载前,优先展示页面的大体结构,通常用灰色的明暗变化的块,提高用户体验

纯 CSS 骨架屏适合AjaxFecth请求数据,填充模板引擎渲染的场景。如果请求的是页面本身,那么预渲染生成骨架图,是更好的方式

用子绝父相的定位方式,在需要显示为骨架屏的元素内,放置两个伪元素

  • 一个撑满父容器,表示未填充数据前的元素
  • 一个填充倾斜的渐变条纹,移动条纹位置,模拟进度条动画
<style>
@keyframes skeleton-anime {
  from { transform: translateX(-100%); }
  to { transform: translateX(100%); }
}
.skeleton {
  position: relative;
  overflow: hidden;
}
.skeleton::before, .skeleton::after {
  position: absolute;
  content: '';
  display: block;
  width: 100%;
  height: 100%;
  background-color: #efefef;
}
.skeleton::after {
  background-image: linear-gradient(-75deg, #efefef, white 30%, #efefef);
  animation: skeleton-anime 1s infinite;
  opacity: .3;
}
.avater {
  float: left;
  margin-right: 2px;
  width: 100px;
  height: 100px;
}
.title, .des {
  height: 48px;
  margin-top: 2px;
}
</style>
<div class="avater skeleton"></div>
<div class="title skeleton"></div>
<div class="des skeleton"></div>