CSS3animation实现点点点loading动画
⼀、再续前缘
去年夏天,写了篇名为“”的⽂章,主要内容是实现类似下⾯打点等待提⽰效果,⽐⼲巴巴的字符...要更⼈性化:
之前实现的原理是通过宽度和margin控制实现,但是,问题⾮常明显,字符宽度受制于字体,例如移动端,没有宋体,字符可能就会被半路剪裁,从⽽出现显⽰bug, ⽤计算机术语描述就是“健壮性不⾜”。
上周,实现某载⼊提⽰时候,上⾯圈圈转,下⾯就是⼲巴巴的静态⽂字:“数据导⼊中…”~
由于忘记吃药,我“看东西不顺眼”的病就犯了,⼼中不停地纠结:“这...要是能⽤CSS动起来就好了!成本⼜低,效果⼜好,性价⽐超⾼,⼀劳永逸,多好啊!”
虽然忙到两泡尿攒成⼀⼤泡才去厕所的程度,还是趁着饭点捣腾了⼏下。⾸先看看以前的思路,确定不能在实际项⽬使⽤,于是,开脑洞想想有没有其他更好的⽅式实现打点动画效果(当然,要渐进兼容)。这⼀年多学习不⽌,还是有⼀些积累的,很快折腾了⼀个⽐以前的实现
更加靠谱的⽅法,利⽤CSS3 xxx-xxxxxx属性实现,IE6+都能正常显⽰,颜⾊跟随⽂字变化,看上去很赞,然⽽还是有瑕疵。于是,周末整理demo的时候顺便实践了⾃⼰的另外⼀个想法,发现效果果然如⾃⼰所料,这是⼀个更perfect的⽅法。趁着刚去万达看完《智取威虎⼭》有点high,特意分享下
⼆、基于box-shadow实现的打点效果
理论上,box-shadow可以实现任意的图形效果,可参考我去年写的“”⼀⽂,⾃然我们可以利⽤box-shadow⽣成我们的点效果,然后通过animation控制不同时间点点的数⽬就可以实现点点点... loading效果了~
您可以狠狠地点击这⾥:
1. 渐进兼容
js控制css3动画触发
各个浏览器下的效果分别如下表:
IE7IE8IE9IE10/IE11(gif)Chrome(gif)FireFox(gif)
⽀持CSS3 animation动画的浏览器显⽰的就是打点动画效果;对于不⽀持的浏览器,IE7/IE8显⽰的是真实的字符..., IE9浏览器虽然也是CSS3⽣成,但是是静态的,没有动画效果;此乃渐进兼容。
2. 实现原理
⾸先HTML⾮常简单,就是⼀个标签⼀个类名(标签⾥⾯⼀定要空空如也),其他什么都不需要关⼼,就可以游刃⼏乎各种场景,如下:
上⾯代码这个类名为dotting的span就是我们所有的⽞机所在,页⾯任意地⽅,只要有这⼀⼩撮HTML就可以有打点动画,与⽂字混排良好,且颜⾊⾃动匹配。例如,本⽂“标题⼀”和“标题⼆”后⾯的点点点动画就是添加了这么点HTML.
下⾯是万众瞩⽬的CSS代码了:
上⾯每⾏CSS都有其存在的道理(详见注释),这⾥我们⼜看到了currentColor这个关键字,IE9+浏览器⽀持,其可以让CSS⽣成的图形的颜⾊跟所处环境的color属性值⼀样,也就是跟⽂字颜⾊⼀样,具体可参考我不久前写的“”⼀⽂。
我们动画⼀个周期4秒钟,每秒分别显⽰的是0~3个点,使⽤step-start让动画不连续(animation所有关键字“”这篇⽂章后⾯深藏详细介绍,如有疑问,可参考),于是就有个类似gif打点动画效果,相信不难理解。
3. 美中不⾜
虽然⼏乎所有浏览器都有模有样,但是,从效果上讲,还是有瑕疵的,IE10+以及FireFox浏览器下的点的边缘有些虚(参见下截图),虽然CSS代码并没有设置盒阴影模糊。这种⽻化现象可以让IE以及FireFox在⼤数值盒阴影时候效果更接近photoshop的阴影效果;但是,在⼩尺⼨阴影时候,并不是我们想要的。
苛刻的设计师、完美主义的处⼥座显然是不能对这个置若罔闻的。好在,我⼜想了另外⼀种⽅法实现
三、基于border + background实现的打点效果
我们除了可以使⽤box-shadow⽣成三个点,还可以使⽤border + background-color实现等宽3点效果(如本标题)。
您可以狠狠地点击这⾥:
1. 渐进兼容
各个浏览器下的效果分别如下表(主要关注IE10+以及FF下效果):
IE7IE8IE9IE10/IE11(gif)Chrome(gif)FireFox(gif)
定睛⼀看,会发现IE9以及IE10+以及FireFox的点再也不是模糊的,⽽是清清楚楚的⼩⽅点!
2. 实现原理
HTML还是那个HTML:
CSS代码如下:
⼀些说明:
1. 同样是4秒动画,每秒钟显⽰1个点;
2. IE7/IE8实现原理跟上⾯box-shadow⽅法⼀致,都是内容⽣成,如果⽆需兼容IE7/IE8, 可以按照第⼀个例⼦CSS代码注释说明删
除⼀些CSS;
3. currentColor关键字可以让图形字符化,必不可少;
4. 最⼤功⾂是C S S3 background-clip属性,可以让IE9+浏览器下左右padding没有背景⾊,于是形成了等分打点效果。CSS3
Background博⼤精深,有兴趣可参考⼀篇很赞的⽂章“”,很多图,移动端⾮wifi慎点;
5. box-sizing是让现代浏览器和IE7/IE8占据宽度完全⼀样的功⾂:IE7/IE8实际宽度是width+padding-right为12像素,其他现
代浏览器为width+margin-left也是12像素;
6. 这⾥CSS代码主要⽤来展⽰原理,故没有显⽰-webkit-animation以及@-webkit-keyframes私有前缀,实际⽬前还是需要的;
3. 优势所在
1. CSS⽣成的点没有虚化,效果更好;
2. 占据的尺⼨各个浏览器完全⼀致,都是12像素宽度;
3. 颜⾊继承;
4. 天然字符化显⽰,与⽂字浑然天成;
四、结束语
同志们,去看看你的⽹站,如果发现有「正在加载中…」这样的提⽰时候,就可以把其中的点点点...放⼼⼤胆地换成<span
class="dotting"></span>了。不⽀持animation的浏览器还是那个字符;⽀持的浏览器会渐进增强动画显⽰,只有好处,没有坏处,适合
于各种场景,何乐不为呢!!
技术⽆⽌境,我⽬前提供的⽅案,不⼀定是最好的⽅法,抛砖引⽟,如果你有更好的实现idea, 欢迎分享,也欢迎反馈使⽤问题。
更新于2016年7⽉9⽇
后来我真的发现了更好的⽅法,就是使⽤text-shadow,已申请专利,不详述。
然后,今天,⼜发现了更好的⽅法,借助CSS3 ch单位。详细参见。
感谢阅读,新年快乐!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。