效果展示
Demo代码
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charsetp 6 Z ( \ o A )="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-I z C a ? w _ ;scaleT q X F , z Y )=1.0"? : & Z \ N>
<link rel="stylesheet" href="https://www.cnblogs.cm s \ Z s 5 Rom/haihongpro/p/style.css">
&E { \ b | Z 4 ult;title>Document</title>
</head>
<body>
<sectio6 m X %n><span></span></section>
</body>
</html>
CSS
html,body{
margin: 0;
height: 100%;
}
body{
display: flex;
justify-content: center;
align-items: center;
background: #263238;
}
section {
width: 650px;
height: 300px;
padding: 10px;
position: relay } v Stive;
displah ? b K 6 { H 2 }y:\ K x flex;
align-items: center;
justify-content: center;
border: 2px solidb G W , 2 red;
}
span {
widthP W & 8 + E : 96px;
height: 96px;
border-radius: 50%;
display: inZ S \line-block;
position: relaF / ] ctive;
border: 20px solid;
anim2 @ u s g 7 a { ,ation: animloader 2s linear infinite alternate;
}
@kU + X weyframes animloader {
0% { border-color: rgba(( c U ( [ K j d 1255,255,255, 1) rgba(255,255,255, 0) rgba(255,255,255,j o Y P E ( ; } 0) rgba(255,255,255, 0);}
33% { border-c= F T X q P :olor: rgba(255~ ( / p,255,255, 1) rgba(255,255,255,k E S 1) rgba(255,255,255, 0) rgba(255,255% L + s H L 0,255, 0);}
66% { border-color: rgba(255,255,255, 1) rgba(255,255,255, 1) rgba(255,L ` K t ] _ X n255,H Q q i C g ? ;255, 1) rgba(255,255,255, 0);}
100% { border-color: rgba(255,255,255, 1) rgba(25] * t b v } } d5,2B / F $ O55,255, 1) rgba(255,255,255, 18 v $) rgba(255,255,F 7 m s n h {255, 1);}
}
原理详解M = E C K
步骤a = \ _ T 31
使用span标签,设置
- 宽度、高度均为96px
- 边框:2R e 7 – ! V0px solid
效果图如下
步骤2
span圆角化
border-radius: 50%;
效果图如下
步骤3
为A B 4 B k p o U espan添加动画
动画总共分为4帧
第一帧
- 上边框颜色设置为:白色 其余为透明
为了便于观察
这里给出未对span圆角化之前的视角
这样就会更好得理解每一帧的原理
第二帧
- 上+右 边框颜色设置为:白色 其余透明
未设置border-radius: 50%前= 4 } P = z l v的效果如下
第三帧
- 上+右+下 边框颜色设置为白色 其余为透明
未设置border-radius: 50%前的效果如下
第四帧
- 上+下+左+右 边框均为w i f $ 3白色
未设置border-radius: 50%前的效果如下
综上
变化过程就是:h A S
代码如下
animat{ ? x H O rion: animloa u ^ U \ v b yade` b P { H Ur 2s linear infinite ;
/*动画实现*/
@keyframes animloader {
/*第一帧*/
0% { border-color: rgba(255,255,255, 1* p e 7 I n ;) rgba(255,255,255, 0) rgba(255U D b : Y = j \,255,255, 0) rgba(255,255,* E J N 0 l255, 0);}
/*s o ~ @ E Y第二帧*/
33% { border-color: rgba(25~ X \ - S - ? n ]5,255,255, 1) rgba(255,255,255, 1) rgba(255,255,255, 0) rgba(255,255,~ \ y i T ) ] r S255, 0);}
/*第三帧*/
66% { border-color: rgba(255+ Q f e K | _ v,255,255, 1) rgba(255,255,255, 1) rgba(255,255,255, 1) rgba(255,255,255, 0);}
/*第四帧*/
100% { border-color: rgba(255,255,255, 1) rgba(255,255,255, 1) rgba(255,255,255, 1) rgba(255,255,255, 1);}
}4 : I : , i h
注:这里使用了rgba函数,设置透明级别为x O \ w ? x 0 #0来实现的透明色
效果图如下
步骤4
从上面的效果中T , o = n H ) w我们可以看出
我们需要的效果是:执行Q , X r完4帧后,再反向回到动画初始位置
其实也很简单
再多设置一个参数即可
设置动画为:轮流反向播放动画
animation: animloader 2s linear infy d ( f * @ m t .inite alternate;
效果如下
注:V k H ? ` C
结语
学习来源:
文章仅作为学习笔记,记录g p g从0到1的一个过程。希望对您有所帮助,如有错误欢迎小伙伴指正~
我是海轰ଘ(੭ᵕ)੭,如果您觉得写得可以的话,请点个赞吧
写作不易,% S $ 5 – 3 X「点赞」+「收藏」+「转发」
谢谢支持❤️
特别声明:本站所收录作品、热点评论等信息来源互联网,目的只是为了系统归纳学习和传递资讯所有作品版权归原创作者所有,与本站立场无关,图文源自网络,如有侵权,请联系删除!请联系我们邮箱:908164873@qq.com/电话:187-8421-3206,我们将做删除处理!