css实现旋转loading

277 阅读1分钟

工作中要实现一个加载 loading 的效果,蓝色中空,类似贪吃蛇不停旋转

image.png

找了一些素材都不符合需求,那就自己实现一个吧,样式都是按照比例设置的,可自行调节大小,代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Loading</title>
    <style>
      /* 定义一个名为loading的关键帧动画,用于旋转360度 */
      @-webkit-keyframes loading {
        /* 0% 动画开始 */
        0% {
          -webkit-transform: rotate(0deg);
        }
        /* 100% 动画结束 */
        100% {
          -webkit-transform: rotate(360deg);
        }
      }
      @keyframes loading {
        0% {
          transform: rotate(0deg);
        }
        100% {
          transform: rotate(360deg);
        }
      }
      /* 定义loading-view类,设置大小、形状、背景、位置和动画 */
      .loading-view {
        width: 100px;
        height: 100px;
        border-radius: 50%;
        position: relative;
        /* 创建一个从透明到蓝色的渐变效果,圆锥渐变(颜色过渡围绕中心点旋转) */
        background: conic-gradient(
          rgba(266, 185, 240, 0) 10%,
          rgb(0, 72, 255) 100%
        );
        /* 设置动画时间为1.5s,并使其无限循环 */
        animation: loading linear 1.5s infinite;
      }
      /* 定义loading-view的伪元素::after,设置大小、形状、背景、位置 */
      /* ::after用于创建一个小的蓝色圆形 */
      .loading-view::after {
        position: absolute;
        width: 20%;
        height: 20%;
        background: rgb(0, 72, 255);
        border-radius: 50%;
        content: "";
        left: 50%;
        transform: translateX(-50%);
      }
      /* 定义loading-view的伪元素::before,设置大小、形状、背景、位置 */
      /* ::before用于创建一个大的白色圆形。这两个伪元素与.loading-view类一起旋转,从而形成旋转loading的效果 */
      .loading-view::before {
        content: "";
        width: 100%;
        height: 100%;
        border-radius: 50%;
        background-color: #fff;
        transform: scale(0.6);
        position: absolute;
        top: 0;
        left: 0;
      }
    </style>
  </head>
  <body>
    <div class="loading-view"></div>
  </body>
</html>