效果图大概是这样的
第一步 先定义出一个方形盒子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
</div>
</body>
</html>
第二步 将盒子分为两半,左右个占一半
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}
.right{
right:0;
border: solid 1px black;
}
.left{
left:0;
border: solid 1px red;
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
<div class="wrapper right">
</div>
<div class="wrapper left">
</div>
</div>
</body>
</html>
第三步 在这两个盒子中再分别放一个盒子 并且给他们的边框大小为20px
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
/* overflow: hidden; */
}
.right{
right:0;
border: solid 1px black;
}
.left{
left:0;
border: solid 1px red;
}
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
}
.rightcircle{
border: solid 20px rgb(71, 82, 10);
right:0;
}
.leftcircle{
border: solid 20px rgb(218, 252, 24);
left:0;
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
<div class="wrapper right">
<div class="circleProgress rightcircle"></div>
</div>
<div class="wrapper left">
<div class="circleProgress leftcircle"></div>
</div>
</div>
</body>
</html>
到这一步大家可以看见一个黄色的方形,但只能看见一个,另一个被这个黄色方形遮住了,这个时候我们要给那两个class为 wrapper的div加上个属性 overflow:hidden
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}
加上之后我们在看一看
此时我们已经能看见两个方形 了,只不过都只能看见一半,因为加上 overflow:hidden 后超出的部分隐藏了
第四步 给这两个黄色的方形和褐色的方形定义 右上边框 和 左下边框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}
.right{
right:0;
border: solid 1px black;
}
.left{
left:0;
border: solid 1px red;
}
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
}
.rightcircle{
border-top:20px solid rgb(71, 82, 10);
border-right:20px solid rgb(71, 82, 10);
right:0;
}
.leftcircle{
border-bottom:20px solid rgb(218, 252, 24);
border-left:20px solid rgb(218, 252, 24);
left:0;
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
<div class="wrapper right">
<div class="circleProgress rightcircle"></div>
</div>
<div class="wrapper left">
<div class="circleProgress leftcircle"></div>
</div>
</div>
</body>
</html>
好 现在我们可以看见三种颜色 黄色 褐色 以及灰色
一个是左下边框的黄色 和右上边框的褐色 这两个颜色分别是我们自己刚刚定义的
而那个灰色则是默认色,因为之前我们是给所有的边框都定义了颜色,当现在我们只给左下 和 右上的边框定义了颜色 ,其他没有定义颜色的部分就默认为灰色
第五步 给这两个黄色和褐色的方形加上个属性 border-radius: 50%;
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
border-radius: 50%;
}
此时我们可以看到这样的效果
第六步 旋转角度 关键的一步来了 transform: rotate(-135deg);
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
border-radius: 50%;
transform: rotate(-135deg);
}
此时我们看到的是一个全灰色的圆形
但这其实是两个圆形 就是刚刚那两个黄色和褐色的圆形,只不过旋转之后有颜色的部分都被遮住了
看到的只是没有颜色的部分 所有看起来是一个圆形
可以 把 overflow: hidden; 属性暂时去掉就能看到旋转后的效果
第七步 添加动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}
.right{
right:0;
border: solid 1px black;
}
.left{
left:0;
border: solid 1px red;
}
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
border-radius: 50%;
transform: rotate(-135deg);
}
.rightcircle{
border-top:20px solid rgb(71, 82, 10);
border-right:20px solid rgb(71, 82, 10);
right:0;
animation: circleProgressLoad_right 5s linear infinite;
}
.leftcircle{
border-bottom:20px solid rgb(218, 252, 24);
border-left:20px solid rgb(218, 252, 24);
left:0;
animation: circleProgressLoad_left 5s linear infinite;
}
@keyframes circleProgressLoad_right{
0%{
-webkit-transform: rotate(-135deg);
}
50%,100%{
-webkit-transform: rotate(45deg);
}
}
@keyframes circleProgressLoad_left{
0%,50%{
-webkit-transform: rotate(-135deg);
}
100%{
-webkit-transform: rotate(45deg);
}
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
<div class="wrapper right">
<div class="circleProgress rightcircle"></div>
</div>
<div class="wrapper left">
<div class="circleProgress leftcircle"></div>
</div>
</div>
</body>
</html>
这里注意 左边圆形的动画的开始时间是50% 而右边的是在0%
此时我们可以看一下旋转的效果 我这没有动图 大家可以自己复制代码看一下
最后一步 将两个圆形的边框颜色统一 ,此时圆形进度条完成
.rightcircle{
border-top:20px solid rgb(218, 252, 24);
border-right:20px solid rgb(218, 252, 24);
right:0;
animation: circleProgressLoad_right 5s linear infinite;
}
.leftcircle{
border-bottom:20px solid rgb(218, 252, 24);
border-left:20px solid rgb(218, 252, 24);
left:0;
animation: circleProgressLoad_left 5s linear infinite;
}
最后 贴出完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style>
.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}
.right{
right:0;
border: solid 1px black;
}
.left{
left:0;
border: solid 1px red;
}
.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(172, 172, 172);
position: absolute;
top:0;
border-radius: 50%;
transform: rotate(-135deg);
}
.rightcircle{
border-top:20px solid rgb(218, 252, 24);
border-right:20px solid rgb(218, 252, 24);
right:0;
animation: circleProgressLoad_right 5s linear infinite;
}
.leftcircle{
border-bottom:20px solid rgb(218, 252, 24);
border-left:20px solid rgb(218, 252, 24);
left:0;
animation: circleProgressLoad_left 5s linear infinite;
}
@keyframes circleProgressLoad_right{
0%{
-webkit-transform: rotate(-135deg);
}
50%,100%{
-webkit-transform: rotate(45deg);
}
}
@keyframes circleProgressLoad_left{
0%,50%{
-webkit-transform: rotate(-135deg);
}
100%{
-webkit-transform: rotate(45deg);
}
}
</style>
</head>
<body>
<div class="circleProgress_wrapper">
<div class="wrapper right">
<div class="circleProgress rightcircle"></div>
</div>
<div class="wrapper left">
<div class="circleProgress leftcircle"></div>
</div>
</div>
</body>
</html>