css实现圆环旋转加载
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>css实现圆环旋转加载</title>
<style>
*{
margin:0
padding:0
}
#outbox{
position:relative/*相对定位*/
width:100px/*宽度100px*/
height:100px/*高度100px*/
background:orange/*背景色橙色*/
border-radius:50%/*圆角50%*/
margin:100px/*外侧边距100px*/
}
#outbox::before{/*前置伪元素*/
content:""/*内容空*/
display:block/*块元素*/
position:absolute/*绝对定位*/
width:80px/*宽度80px*/
height:80px/*高度80px*/
left:10px/*左边距10px*/
top:10px/*距离顶部10px*/
border-radius:50%/*圆角50%*/
background:white/*背景色白色*/
}
#outbox::after{/*后置伪元素*/
content:""/*内容为空*/
display:block/*转为块元素*/
position:absolute/*绝对定位*/
width:100px/*宽度100px*/
height:100px/*高度100px*/
top:0/*距离父容器顶部边距0*/
left:0/*距离入容器左边距0*/
border-radius:50%/*圆角50%*/
background:white/*背景色白色*/
animation:myfirst 1s both linear infinite/*绑定动画。为了看清楚效果,设置动画反复执行。使用的时候只执行一次就好了*/
-webkit-animation:myfirst 1s both linear infinite/* Safari and Chrome */
}
@keyframes myfirst/*动画开始*/
{
0%{
-webkit-clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 0, 100% 0)/*不裁剪的初始效果*/
clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 0, 100% 0)
}
40%{
-webkit-clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 0, 0 0)/*裁剪四分之一*/
clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 0, 0 0)
}
60%{
-webkit-clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 100%, 0 100%)/*裁剪四分之二*/
clip-path: polygon(50% 50%, 100% 0, 100% 100%, 0 100%, 0 100%, 0 100%)
}
90%{
-webkit-clip-path: polygon(50% 50%, 100% 0, 100% 100%, 100% 100%, 100% 100%, 100% 100%)/*裁剪四分之三*/
clip-path: polygon(50% 50%, 100% 0, 100% 100%, 100% 100%, 100% 100%, 100% 100%)
}
100%{
-webkit-clip-path: polygon(50% 50%, 100% 0, 100% 100%, 100% 0, 100% 0, 100% 0)/*裁剪四分之四*/
clip-path: polygon(50% 50%, 100% 0, 100% 100%, 100% 0, 100% 0, 100% 0)
}
}
</style>
</head>
<body>
<div id="outbox"></div>
</body>
</html>
<!--裁剪比较粗糙,如果要更顺滑,可以裁剪得更细腻一点,比如裁剪十分之一,十分之二,十分之三,以此类推一直到十分之十。-->
实现思路:
用一个铺满蓝色的背景的盒子,
利用::before与after画2个圆角值不同的不规则圆形(其中一个设置透明度或者其他颜色,以便区分):
父元素设置overflow:hidden;
最后加上animation 动画让不同规则圆形旋转起来即可:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div class="wave"></div>
</body>
<style>
/* // 简单的盒子 */
.wave {
position: relative
width: 150px
height: 150px
background-color: #5291e0
/* overflow: hidden*/
}
/* // 两个不规则圆形(相对盒子进行定位,距离底部距离则为波浪高度) */
.wave::before,
.wave::after {
content: ""
position: absolute
left: 50%
bottom: 15%
width: 500%
height: 500%
border-radius: 45%
background-color: #fff
transform: translateX(-50%)
animation: rotate 15s linear infinite
}
/* // 其中一个不规则圆形调整一下样式,以便区分(或者调整animation的参数来区分) */
.wave::before {
bottom: 10%
opacity: .5
border-radius: 47%
}
/* // 旋转动画 */
@keyframes rotate {
from {
transform: translateX(-50%) rotateZ(0deg)
}
to {
transform: translateX(-50%) rotateZ(360deg)
}
}
</style>
</html>