HTML5+CSS3搭配自定义滤镜做一个液体环形小球加载动画,七个小球绕环形旋转,设置有规律的动画延迟时间,使它们有序依次旋转,过程伴随溶球效果,这真是一个百看不腻的loading加载动画。
效果:
源码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>自定义滤镜实现液体加载动画</title>
<link rel="stylesheet" href="../css/26.css">
</head>
<body>
<div class="loading">
<!-- --i是CSS的自定义属性,通过var函数可以调用 -->
<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>标签用来定义SVG滤镜 -->
<filter id="gooey">
<!-- <feGaussianBlur>元素是用于创建模糊效果 -->
<feGaussianBlur in="SourceGraphic" stdDeviation="10"></feGaussianBlur>
<!-- <feColorMatrix>是过滤中的一种类型,使用矩阵来影响颜色的每个通道(基于RGBA),你可以将其想象成Photshop中通道编辑一样 -->
<feColorMatrix values="
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 20 -10
"></feColorMatrix>
</filter>
</svg>
</body>
</html>
*{
/* 初始化 取消页面内外边距 */
margin: 0;
padding: 0;
}
body{
/* 弹性布局 水平、垂直居中 */
display: flex;
justify-content: center;
align-items: center;
/* 100%窗口高度 */
height: 100vh;
background-color: #222;
}
svg{
width: 0;
height: 0;
}
.loading{
/* 相对定位 */
position: relative;
width: 200px;
height: 200px;
/* 使用自定义滤镜gooey */
filter: url(#gooey);
}
.loading span{
/* 绝对定位 */
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: block;
/* 执行动画:动画名称 时长 加速后减速 无限次播放 */
animation: animate 4s ease-in-out infinite;
/* 动画延迟,通过var函数调用自定义属性--i,计算出延迟时间 */
animation-delay: calc(0.2s * var(--i));
}
.loading span::before{
content: "";
position: absolute;
top: 0;
left: calc(50% - 20px);
width: 40px;
height: 40px;
border-radius: 50%;
background: linear-gradient(#d1f5ff,#1683ff);
box-shadow: 0 0 30px #1683ff;
}
/* 定义动画 */
@keyframes animate {
0%{
transform: rotate(0deg);
}
50%,100%{
transform: rotate(360deg);
}
}