只要css就能实现的骨架屏方案

线上体验地址https://jsfiddle.net/z13wtr0q/ css

先说优缺点,毕竟骨架屏实现的方案有不少种html

优势

  • 简单,不须要工程,不用puppeteer生成骨架dom,也不须要二次开发维护
  • 定制程度高,想怎么搞就怎么搞
  • 不臃肿,只给你想要的

缺点

  • 自动化程度低,须要在骨架dom上手动添加类
  • 协同要求高,不像工程化能经过工程去约束

思路

经过伪元素实现骨架样式,经过操做样式实现骨架和页面的动态切换vue

实现

css部分(scss写法)

经过after伪元素生成骨架样式,并经过absolute覆盖到实际元素上react

.skt-loading {
    pointer-events: none; /* 加载中阻止事件 */
    .skeleton {
      position: relative;
      overflow: hidden;
      border: none !important;
      border-radius: 5px;
      background-color: transparent !important;
      background-image: none !important;
      &::after {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        z-index: 9;
        width: 100%;
        height: 100%;
        background-color: #EBF1F8;
        display: block;
      }
      
      /* 下面这部分都是自定义的,看需求修改 */
      &:not(.not-round)::after {
        border-radius: 4px;
      }
      &:not(.not-before)::before {
        position: absolute;
        top: 0;
        width: 30%;
        height: 100%;
        content: "";
        background: linear-gradient(to right,rgba(255,255,255,0) 0,
            rgba(255,255,255,.3) 50%,rgba(255,255,255,0) 100%);
        transform: skewX(-45deg);
        z-index: 99;
        animation: skeleton-ani 1s ease infinite;
        display: block;
      }
      &.badge {
        &::after {
          background-color: #F8FAFC;
        }
      }
    }
  }

  @keyframes skeleton-ani { /* 骨架屏动画 */
    from {
      left: -100%;
    }
    to {
      left: 150%;
    }
  }

html部分

只须要在你认为合理的骨架粒度元素上添加skeleton类便可dom

js部分

控制好skt-loading类的切换动画

使用注意

  • after伪元素没法插入到inputimg等非容器元素中,因此若是须要添加skleton,则须要再加一层元素将其包裹
  • 对于像vuereact数据驱动页面须要先有mock数据以生成dom

欢迎各位抛砖spa

相关文章
相关标签/搜索