利用CSS3实现进度条的两种姿势详解


Posted in HTML / CSS onMarch 21, 2017

效果图如下:

利用CSS3实现进度条的两种姿势详解
 

利用CSS3实现进度条的两种姿势详解
 

第一种姿势如下
 

先上代码

<div id="progress">
      <span></span>
</div>
/*对应CSS*/
    #progress{
           width: 300px;
           height: 30px;
           border:1px solid #ccc;
           border-radius: 15px;
           overflow: hidden;  /*注意这里*/
           box-shadow: 0 0 5px 0px #ddd inset;
    }          
    #progress span {
           display: inline-block;
           width: 70%;
           height: 100%;       
           background: linear-gradient(45deg, #2989d8 30%,#7db9e8 31%,#7db9e8 58%,#2989d8 59%);    
           background-size: 60px 30px;
           text-align: center;
           color:#fff;
           animation:load 3s ease-in;
     }
     @keyframes load{
           0%{
               width: 0%;
           }
           100%{
               width:70%;
           }
       }

上方的渐变色使用了css3中的 linear-gradient
 

linear-gradient语法

<linear-gradient> = linear-gradient([ [ <angle> | to <side-or-corner> ] ,]? <color-stop>[, <color-stop>]+)
<side-or-corner> = [left | right] || [top | bottom]
<color-stop> = <color> [ <length> | <percentage> ]?
  • angle:用角度值指定渐变的方向(或角度)。
  • to left:设置渐变为从右到左。相当于: 270deg
  • to right:设置渐变从左到右。相当于: 90deg
  • to top:设置渐变从下到上。相当于: 0deg
  • to bottom:设置渐变从上到下。相当于: 180deg。这是默认值,等同于留空不写。
  • color-stop: 用于指定渐变的起止颜色:
  • color:指定颜色。
  • length:用长度值指定起止色位置。不允许负值
  • percentage:用百分比指定起止色位置。
     

栗子:

.test1{
    background: linear-gradient(#EA2000, #E5A399);
}
.test2 {
    background: linear-gradient(45deg,#EA2000 20%,#E5632D 50%, #E5B12D 80%);
}
.test3 {
    background: linear-gradient(to top right, #000, #416796 50%, #B5CAE4);
}
.test4{
    background: linear-gradient(45deg, #2989d8 30%,#7db9e8 31%,#7db9e8 58%,#2989d8 59%);   
}

效果图:
 

利用CSS3实现进度条的两种姿势详解
 

动画通过keyframes来实现,通过改变span的宽度来实现进度的效果,素不素hin简单?!
 

现在的进度条效果是只有70%的效果,只要改变width的值就可以啦,就像下图,一致改成某个值即可。
 

利用CSS3实现进度条的两种姿势详解
 

第二种姿势
 

首先,构造好一个正方形的div,将这个正方形对称分成左右两块,如下
 

这里构造的是一个200px 200px的一个正方形,分成两块100px200px的矩形。

<div class="progress2">
        <div class="rect right">
        </div>                               
        <div class="rect left">
        </div>
 </div>
.progress2{
        width: 200px;
        height: 200px;
        margin: 100px auto;
        position: relative;
        border:1px solid #ddd;
    }
   
    .rect{
        width: 100px;
        height: 200px;
        position: absolute;
        top:0;
        overflow: hidden; /*注意这里*/
    }
    .right{
        right:0;
    }
    .left{
        left:0;
    }

如下效果
 

利用CSS3实现进度条的两种姿势详解

接下来,在每一块矩形中再构造一个空心圆,先构造右半边,如下

<div class="progress2">
        <div class="rect right">
            <div class="circle rightcircle"></div>
        </div>                               
        <div class="rect left">
            
        </div>
 </div>
.circle{
        width: 160px;
        height: 160px;
        border:20px solid #ccc;
        border-radius: 50%;
        position: absolute;
        top:0;
    }
    .rightcircle{
        border-top:20px solid rgb(41,137,216);
        border-right:20px solid rgb(41,137,216);
        right:0;
    }

会看到下面的效果
 

利用CSS3实现进度条的两种姿势详解
 

由于在class:rect中,将overflow设置成了hidden,使得溢出的部分被遮盖了,之后的效果实现与这个属性关系也紧密相连。
 

如果没有设置该属性,效果就是这样的。
 

利用CSS3实现进度条的两种姿势详解
 

那会发现有一部分被盖住了,我们在使他旋转45度即可

.circle{
        width: 160px;
        height: 160px;
        border:20px solid #ccc;
        border-radius: 50%;
        position: absolute;
        top:0;
        transform: rotate(45deg); /*注意这里*/
    }

效果如下
 

利用CSS3实现进度条的两种姿势详解
 

我们实现动画效果的方式就是让右半边旋转180度,然后左半边旋转180度,凑成完整的效果。
 

先给这右半边设置动画效果,即一开始让其旋转45度,然后旋转180度,由于这只是右半边,所以在50%的时候就应该旋转完毕,之后一直保持不变。

.rightcircle{
        border-top:20px solid rgb(41,137,216);
        border-right:20px solid rgb(41,137,216);
        right:0;
        animation: load_right 5s linear infinite;
    }
    @keyframes load_right{
        0%{

            transform: rotate(45deg);
        }
        50%{

            transform: rotate(225deg);
        }
        100%{

            transform: rotate(225deg);
        }
    }

这是没有在class rect中设置overflow:hidden的效果
 

利用CSS3实现进度条的两种姿势详解
 

这是在class rect中设置了overflow:hidden的效果
 

利用CSS3实现进度条的两种姿势详解
 

现在,我们就可以把左半边也凑上了,同理,动画效果一开始先旋转45度,调正,然后一直保持不变,到50%之后,再开始旋转180度。这样就与右半边衔接上了。

<div class="progress2">
        <div class="rect right">
            <div class="circle rightcircle"></div>
        </div>                               
        <div class="rect left">
            <div class="circle leftcircle"></div>
        </div>
 </div>
.leftcircle{
        border-bottom:20px solid rgb(41,137,216);
        border-left:20px solid rgb(41,137,216);
        left:0;
        animation: load_left 5s linear infinite;
    }
    @keyframes load_left{
        0%{

            transform: rotate(45deg);
        }
        50%{

            transform: rotate(45deg);
        }
        100%{
            transform: rotate(225deg);
        }
    }

这是整体的效果
 

利用CSS3实现进度条的两种姿势详解
 

可以调整角度或者调整颜色即可实现反向的效果。
 

我是调整了颜色就可以得到最开始的动画效果啦,下面是完整的代码

<div class="progress2">
        <div class="rect right">
            <div class="circle rightcircle"></div>
        </div>                               
        <div class="rect left">
            <div class="circle leftcircle"></div>
        </div>
 </div>
.progress2{
        width: 200px;
        height: 200px;
        margin: 100px auto;
        position: relative;
    }
   
    .rect{
        width: 100px;
        height: 200px;
        position: absolute;
        top:0;
        overflow: hidden;
    }
    .right{
        right:0;
    }
    .left{
        left:0;
    }
    .circle{
        width: 160px;
        height: 160px;
        border:20px solid rgb(41,137,216);
        border-radius: 50%;
        position: absolute;
        top:0;
        transform: rotate(45deg);
    }
    .rightcircle{
        border-top:20px solid #ccc;
        border-right:20px solid #ccc;
        right:0;
        animation: load_right 5s linear infinite;
    }
    .leftcircle{
        border-bottom:20px solid #ccc;
        border-left:20px solid #ccc;
        left:0;
        animation: load_left 5s linear infinite;
    }
    @keyframes load_right{
        0%{

            transform: rotate(45deg);
        }
        50%{

            transform: rotate(225deg);
        }
        100%{

            transform: rotate(225deg);
        }
    }
    @keyframes load_left{
        0%{

            transform: rotate(45deg);
        }
        50%{

            transform: rotate(45deg);
        }
        100%{
            transform: rotate(225deg);
        }
    }

利用CSS3实现进度条的两种姿势详解

总结

以上就是关于CSS3实现进度条的两种方法,希望对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。
 

HTML / CSS 相关文章推荐
CSS3 中的@keyframes介绍
Sep 02 HTML / CSS
使用CSS3美化HTML表单的技巧演示
May 17 HTML / CSS
HTML5离线缓存Manifest是什么
Mar 09 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
Mar 21 HTML / CSS
Web前端页面跳转并取到值
Apr 24 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
Nov 21 HTML / CSS
微信端html5页面调用分享接口示例
Mar 14 HTML / CSS
canvas实现手机的手势解锁的步骤详细
Mar 16 HTML / CSS
CSS代码检查工具stylelint的使用方法详解
Mar 27 HTML / CSS
css实现左上角飘带效果的完整代码
Mar 18 HTML / CSS
html中两种获取标签内的值的方法
Jun 10 HTML / CSS
CSS中理解层叠性及权重如何分配
Dec 24 HTML / CSS
CSS3实现头像旋转效果
Mar 13 #HTML / CSS
用React加CSS3实现微信拆红包动画效果
Mar 13 #HTML / CSS
css3类选择器之结合元素选择器和多类选择器用法
Mar 09 #HTML / CSS
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
Mar 02 #HTML / CSS
CSS3实现点击放大的动画实例代码
Feb 27 #HTML / CSS
利用纯CSS3实现动态的自行车特效源码
Jan 20 #HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
Jan 18 #HTML / CSS
You might like
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Pandas中resample方法详解
2019/07/02 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
python 弧度与角度互转实例
2020/04/15 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
揭牌仪式策划方案
2014/05/28 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
起诉书格式范文
2015/05/20 职场文书
师范生见习总结范文
2015/06/23 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL