阅读 84

CSS液体加载动画

前言

不走寻常路,论CSS在流体美学中的引用~

效果展示

GIF 2021-9-6 0-15-59.gif

实现思路

首先我们要让元素能够旋转起来,可以使用transform中的rotate进行2D的360deg旋转。
紧接着我们可以通过CSS变量(--开头的形式)结合animation-delay来控制每个元素的动画从何时开始。
最后为了让整个旋转的元素能够呈现流体形,我们需要使用filter滤镜来特殊处理一下,这里涉及到一些复杂的颜色处理,建议直接上svgfeColorMatrix,这也是过滤的一种类型,使用矩阵来影响颜色的通道(rgba),通过它可以实现相当多的 “阴间滤镜”~

代码如下

HTML

//HTML <body>     <div class="loading">         <span style="--i:1"></span>         <span style="--i:2"></span>         <span style="--i:3"></span>         <span style="--i:4"></span>         <span style="--i:5"></span>         <span style="--i:6"></span>         <span style="--i:7"></span>     </div>     <svg>         <!-- filter元素id属性顶一个滤镜的唯一名称,             feGaussianBlur 定义模糊效果,             in="SourceGraphic"这个部分定义了由整个图像创建效果,             stdDeviation属性定义模糊量         -->         <filter id="gooey">             <feGaussianBlur in="SourceGraphic" stdDeviation="10" />             <!-- feColorMatrix 用于彩色滤光片转换 -->             <feColorMatrix values="             1 0 0 0 0              0 1 0 0 0             0 0 1 0 0              0 0 0 20 -10             " />             <!--              values="             R G B A 1             1 0 0 0 0  R = 1*R + 0*G + 0*B + 0*A + 0             0 1 0 0 0  G = 0*R + 1*G + 0*B + 0*A + 0             0 0 1 0 0  B = 0*R + 0*G + 1*B + 0*A + 0             0 0 0 20 -10  A = 0*R + 0*G + 0*B + 1*A + 0             "                -->         </filter>     </svg> </body> 复制代码

CSS

//CSS * {     margin: 0;     padding: 0; } body {     display: flex;     min-height: 100vh;     overflow: hidden;     justify-content: center;     align-items: center;     background: #010b10; } svg {     width: 0;     height: 0; } .loading {     width: 200px;     height: 200px;     position: relative;     filter: url(#gooey); } .loading span {     position: absolute;     top: 0;     left: 0;     width: 100%;     height: 100%;     display: block;     animation: loading 4s ease-in-out infinite;     /* var函数用来插入css变量的值,css变量名称以--开头 */     animation-delay: calc(0.2s * var(--i)); } .loading span::before {     content: '';     position: absolute;     top: 0;     left: calc(50% - 20px);     width: 40px;     height: 40px;     background: linear-gradient(#fce4ec, #03a9f4);     border-radius: 50%;     box-shadow: 0 0 30px #03a9f4; } @keyframes loading {     0% {         transform: rotate(0deg);     }     50%,     100% {         transform: rotate(360deg);     } } 复制代码

总结: CSS变量的使用 var(--xx) ,配合 animation-delay 以及 calc 计算属性就是液体加载动画实现的核心思路,而滤镜的使用也是凸显流体美感的重要组成部分~


作者:动画百晓生
链接:https://juejin.cn/post/7004496282907574279


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐