1、写一个样式为.containe的div用来包含进度条,其次是用样式为.title的div来包裹标题。 2、接下来,添加样式为.bar的di来包含填充和未填充的进度条样式。最后,在.bar里添加样式为.bar-unfill 和.bar-fill的span标签。 Plain 3.简单的进度条的CSS代码.container 类里将 width 定义为 30% 使进度条能够自适应。放一些简单的 border-radius 之类的属性在我们的 .title 类里以修改顶部和底部的左边的边框弧度,创建一个简单明了的平板式设计。 .container { width:30%margin:0 auto } .title { background:#545965color:#fffpadding:15pxfloat:leftposition:relative-webkit-border-top-left-radius:5px-webkit-border-bottom-left-radius:5px-moz-border-radius-topleft:5px-moz-border-radius-bottomleft:5pxborder-top-left-radius:5pxborder-bottom-left-radius:5px } 4.首先建一个白色的背景 .bar-unfill {height:15pxdisplay:blockbackground:#fffwidth:100%border-radius:8px} 5.定义进度条的样式,先令他的宽度为 100% ,因为这也会应用于定义和未定义的部分。所以在我们的 .bar-fill 的类里,令他的宽度为 0 作为起始的宽度,添加CSS3的 transition 属性使动画效果更加流畅,最后,我们将添加CSS3里的 animation 属性,定义动画的名字,和 duration 和 animation-iteration-count 属性。 .bar-fill { height:15pxdisplay:blockbackground:#45c9a5width:0border-radius:8px-webkit-transition:width .8s ease-moz-transition:width .8s easetransition:width .8s ease-webkit-animation:progressbar 7s infiniteanimation:progressbar 7s infinite } 6.使用CSS3里的 @keyframe 规则来设置宽度从 0 变化到 100% 。你也能定制你自己喜欢的变化。 @-webkit-keyframes progressbar { from { width:0 } to { width:100% } } /* Standard syntax */ @keyframes progressbar { from { width:0 } to { width:100% } } 7.条纹进度条,应该把 .bar-fill 重新命名为 .bar-fill-stripes 。使用 backgrou-image 属性里的 linear-gradient 同时声明它的颜色。剩余的CSS3动画效果也是和上述相同,看下面的代码: .bar-fill-stripes { height:15pxdisplay:blockbackground:#e74c3cwidth:0border-radius:8pxbackground-image:linear-gradient(-45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent)-webkit-transition:width .8s ease-moz-transition:width .8s easetransition:width .8s ease-webkit-animation:progressbar 7s infiniteanimation:progressbar 7s infinite } 追踪 Tracker 8.最后产生动画效果 .track-wrap { position:relativetop:-18px-webkit-animation:progressbar2 7s infiniteanimation:progressbar2 7s infinite } .track { height:20pxdisplay:blockbackground:#e74c3cwidth:20pxborder-radius:10pxposition:relativeleft:-12px } @-webkit-keyframes progressbar2 { from { left:0 } to { left:100% } } /* Standard syntax */ @keyframes progressbar2 { from { left:0 } to { left:100% }这样写吧:
<div class="meter">
<span style="width: 25%"></span>
</div>
.meter {
height: 20px /* Can be anything */
position: relative
background: #555
-moz-border-radius: 25px
-webkit-border-radius: 25px
border-radius: 25px
padding: 10px
box-shadow: inset 0 -1px 1px rgba(255,255,255,0.3)
}
.meter >span {
display: block
height: 100%
border-top-right-radius: 8px
border-bottom-right-radius: 8px
border-top-left-radius: 20px
border-bottom-left-radius: 20px
background-color: rgb(43,194,83)
background-image: linear-gradient(
center bottom,
rgb(43,194,83) 37%,
rgb(84,240,84) 69%
)
box-shadow:
inset 0 2px 9px rgba(255,255,255,0.3),
inset 0 -2px 6px rgba(0,0,0,0.4)
position: relative
overflow: hidden
}
.orange >span {
background-color: #f1a165
background-image: linear-gradient(to bottom, #f1a165, #f36d0a)
}
.red >span {
background-color: #f0a3a3
background-image: linear-gradient(to bottom, #f0a3a3, #f42323)
}
.meter >span:after {
content: ""
position: absolute
top: 0left: 0bottom: 0right: 0
background-image: linear-gradient(
-45deg,
rgba(255, 255, 255, .2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, .2) 50%,
rgba(255, 255, 255, .2) 75%,
transparent 75%,
transparent
)
z-index: 1
background-size: 50px 50px
animation: move 2s linear infinite
border-top-right-radius: 8px
border-bottom-right-radius: 8px
border-top-left-radius: 20px
border-bottom-left-radius: 20px
overflow: hidden
}
进度条效果做为网站常用模块无论是投资理财类、还是众筹类、加载提示类网站已经比较常见。另外,HTML5新增了 progress 标签,其重要程度可见一斑。
由于HTML的 progress 存在兼容性问题,本文主要讲解如何通过CSS实现一个简单的自定义进度条效果!
前端开发常用的进度条效果如下:
(环形进度条下次再讲!)
这两个算是比较有代表性的,一个的均匀的一个的不均匀的,实现起来略有不用。
以第一个为例:
这种比较简单,只需要两个 div 标签就可以了(一个标签也可以实现,后文会讲到)
原理介绍:
外层 div 用来显示进度条总长度以及背景色;内层div用来显示当前进度条进度,和当前进度条颜色。
结构如下:
样式如下:
此时效果如下:
只需要利用 js 动态控制上层 div 的宽度就可以实现最简单的自定义进度条了.
** 第二种带原点的进度条 **
此时实现原理跟第一种类似,只是背景色替换成了背景图片,图片如下:
这两个图片除了颜色不一样以外其他是一样大小的!
如果上面的能理解我想这个就不难理解了吧,不过为了显得文章完整还是简单做一个demo如下:
效果如下: