CSS 实现加载动画之一-菊花旋转

摘要:
最近,我计划组织几种动画样式。最常见的是我们使用的加载动画。CSS3增加了许多强大的功能。虽然会有兼容性问题,但我们不能停止使用这些新功能。例如,一些简单的动画过去可以通过绘图工具实现,但现在可以通过CSS简单地实现。下面的案例是如何使用CSS和html实现菊花旋转的动画。

最近打算整理几个动画样式,最常见的就是我们用到的加载动画。加载动画的效果处理的好,会给页面带来画龙点睛的作用,而使用户愿意去等待。而页面中最常用的做法是把动画做成gif格式,当做背景图或是img标签来引用,这种方式最简单,也不会有兼容性的问题。不过本人有时爱折腾,看到一些动画的效果,不管是简单也好,复杂也好,也想尝试用代码来实现它,换一种思维方式,就算在项目中用到的可能性很小,自己多动手多写写总归不会有坏处。

CSS3新增了很多强大的功能,虽然会有兼容性的问题,但是阻挡不了我们去使用它的这些新特性。像一些简单的动画以前靠画图工具来实现,现在单纯用CSS也能非常简单的实现。下面的案例就是利用CSS加html如何实现菊花旋转的动画。

1.先看gif图

CSS 实现加载动画之一-菊花旋转第1张

2.代码实现思路

将这个动画分解下,共有五个步骤,先用一张图来说明下:

CSS 实现加载动画之一-菊花旋转第2张

2.1 先定义元素容器,定义每个线条的位置。

2.2 因为考虑到旋转时每根线条的透明度不一致,故要把单根线条分为两个区块。

2.3 使用CSS的rotate方法来对线条进行旋转,旋转的度数取决于线条的数量,最终使线条形成一个正圆。

2.4 在形成圆形的线条上面覆盖一个与背景同色的正圆,正圆圆心与线条形成的圆心保持一致,这样整个形状就会有镂空的感觉。

2.5 这一步最关键,就是形成动画的核心,其实整个动画的实现过程非常简单,就是改变每根线条的透明度,这个可以通过animation的动画延迟来实现,即每根线条的动画延迟时间根据其位置决定。

3. 主要使用的技术

主要用到了CSS3的rotate旋转方法和animation方法。

3.1 rotate

rotate是transform方法中的一个属性,除了rotate之外,还有translate(平移),scale(缩放),skew(拉伸)。具体的就不详细解释了。

3.2 animation

animation方法的使用步骤是先使用@关键字定义动画的关键帧,然后在对应的样式名称里来引用。

案例中先定义动画load

@-webkit-keyframes load{
0%{opacity:0;}
100%{opacity:1;}
}

然后在使用动画的节点样式里来引用

.m-load2 .line div:nth-child(1):before{-webkit-animation:load 1.2s linear 0s infinite;}

其中load 1.2s linear 0s infinite这几个值分别对应动画的名称,动画持续的时间,动画显示的方式,动画的延迟时间,动画是否循环播放

另外还有动画播放的次数,动画是否反向播放等。

4.案例源代码

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;">
 5 <title>CSS3实现加载的动画效果1</title>
 6 <meta name="author" content="rainna" />
 7 <meta name="keywords" content="rainna's css lib" />
 8 <meta name="description" content="CSS3" />
 9 <style>
10 *{margin:0;padding:0;}
11 body{background:#535353;}
12 
13 .m-load,.m-load2{width:36px;height:36px;margin:100px auto;}
14 .m-load{background:url('load-v1.gif') #535353 center center no-repeat;}
15 .m-load2{background:#535353;}
16 
17 /** 加载动画的静态样式 **/
18 .m-load2{position:relative;}
19 .m-load2 .line div{position:absolute;left:16px;top:0;width:3px;height:36px;}
20 .m-load2 .line div:before,.m-load2 .line div:after{content:'';display:block;height:50%;background:#fcfcfc;border-radius:5px;}
21 .m-load2 .line div:nth-child(2){-webkit-transform:rotate(30deg);}
22 .m-load2 .line div:nth-child(3){-webkit-transform:rotate(60deg);}
23 .m-load2 .line div:nth-child(4){-webkit-transform:rotate(90deg);}
24 .m-load2 .line div:nth-child(5){-webkit-transform:rotate(120deg);}
25 .m-load2 .line div:nth-child(6){-webkit-transform:rotate(150deg);}
26 .m-load2 .circlebg{position:absolute;left:50%;top:50%;width:18px;height:18px;margin:-9px 0 0 -9px;background:#535353;border-radius:18px;}
27 
28 /** 加载动画 **/
29 @-webkit-keyframes load{
30     0%{opacity:0;}
31     100%{opacity:1;}
32 }
33 .m-load2 .line div:nth-child(1):before{-webkit-animation:load 1.2s linear 0s infinite;}
34 .m-load2 .line div:nth-child(2):before{-webkit-animation:load 1.2s linear 0.1s infinite;}
35 .m-load2 .line div:nth-child(3):before{-webkit-animation:load 1.2s linear 0.2s infinite;}
36 .m-load2 .line div:nth-child(4):before{-webkit-animation:load 1.2s linear 0.3s infinite;}
37 .m-load2 .line div:nth-child(5):before{-webkit-animation:load 1.2s linear 0.4s infinite;}
38 .m-load2 .line div:nth-child(6):before{-webkit-animation:load 1.2s linear 0.5s infinite;}
39 .m-load2 .line div:nth-child(1):after{-webkit-animation:load 1.2s linear 0.6s infinite;}
40 .m-load2 .line div:nth-child(2):after{-webkit-animation:load 1.2s linear 0.7s infinite;}
41 .m-load2 .line div:nth-child(3):after{-webkit-animation:load 1.2s linear 0.8s infinite;}
42 .m-load2 .line div:nth-child(4):after{-webkit-animation:load 1.2s linear 0.9s infinite;}
43 .m-load2 .line div:nth-child(5):after{-webkit-animation:load 1.2s linear 1s infinite;}
44 .m-load2 .line div:nth-child(6):after{-webkit-animation:load 1.2s linear 1.1s infinite;}
45 </style>
46 </head>
47 
48 <body>
49 <div class="m-load"></div>
50 
51 <div class="m-load2">
52     <div class="line">
53         <div></div>
54         <div></div>
55         <div></div>
56         <div></div>
57         <div></div>
58         <div></div>
59     </div>
60     <div class="circlebg"></div>
61 </div>
62 </body>
63 </html>

免责声明:文章转载自《CSS 实现加载动画之一-菊花旋转》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redis 在 php 中的应用(key篇)自定义View的实现流程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CSS文本部分之字体样式[1]

1. 字体系列 [通用字体系列] 1. serif字体:带衬线字体,如Georiga、Times等 2. sans-serif字体:不带衬线字体,包括Arial、Geneva等 3. Monospace字体:等宽字体,包括Courier等 4. Cursive字体:手写字体,包括Author等 5. Fanstasy字体:无法归类,包括Western等...

仅用css制作的手风琴下拉菜单

css制作手风琴下拉菜单: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>html5 UI</title> <link rel="stylesheet"href="css/norm...

Android Activity的切换动画(overridePendingTransition)

overridePendingTransition 1.平时Activity的切换是就是从中间弹出来,然后遮盖住之前的Activity。这种效果看到很多后就想给他换成其他的效果,如: 要显示的Acitvity从左边往右的平移进入,被遮盖的Activity从左往右的平移划出。 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介...

CSS对各个浏览器兼容技巧HACK技巧

*   ie6和ie7都可以识别_   只有ie6可以识别\0  只有ie8可以识别:root 只有ie9可以识别  关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一、CSS HACK HACK概念: 不同的浏览器,比如Internet Explorer 6,...

css无图片圆角效果

不知为何,现在的美工都喜欢弄圆角。之前的网站也弄过圆角,当时做法现在感觉确实太笨了:1用图片;2用Table 背景色嵌套出来这两个做法不仅增加客户端下载数据量,而且改起来也很麻烦。所以综合网上的资料整了个不用图片的单纯css的圆角效果,个人感觉还不错:看下代码吧:  1<html> 2<head> 3<title>css...

使用lua实现Spine动画的预加载

创建spine动画有两种方法,分别是createwithfile和createwithdata。 createWithFile是通过加载动作数据马上进行创建,如果spine动画中的json文件大小超过100k时,会出现卡顿现象,如果动画文件偏小,可以使用这个方法来创建动画。 createWithData是通过预加载,保存动画数据在spSkeletonDat...