利用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中box-shadow的用法介绍
Jul 15 HTML / CSS
CSS3中Animation属性的使用详解
Aug 06 HTML / CSS
使用CSS3美化HTML表单的技巧演示
May 17 HTML / CSS
CSS3 对过渡(transition)进行调速以及延时
Oct 21 HTML / CSS
HTML5仿手机微信聊天界面
Mar 18 HTML / CSS
Html5实现单张、多张图片上传功能
Apr 28 HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
Mar 07 HTML / CSS
会走动的图形html5时钟示例
Apr 27 HTML / CSS
使用Html5多媒体实现微信语音功能
Jul 26 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
Aug 20 HTML / CSS
canvas实现图片镜像翻转的2种方式
Jul 22 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
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
javascript demo 基本技巧
2009/12/18 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
python操作CouchDB的方法
2014/10/08 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
新浪网技术部笔试题
2016/08/26 面试题
司法助理专业自荐书
2014/06/13 职场文书
西安兵马俑导游词
2015/02/02 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
如何在python中实现ECDSA你知道吗
2021/11/23 Python