玩转 css3 续
在上一篇博客里面用css3做了一个立方体,没想到阅读量竟然超过了700,很荣幸也很感动。本来这个css3动画已经做完了,但是一直是没有时间来写这篇博客,让大家久等了。闲话少叙,步入正题。
在这里首先要感谢主机屋提供的免费空间,真的很感谢!虽然注册的的时候验证多次没有通过,呵呵!在这里加了在线预览,文件上传到主机屋里。
让立方体转起来就要用到css3的一个新特性animation;这是玩动画必备的属性。google浏览器不支持但是有-webkit-animation替代。我说了我所做的都是以google浏览器为依托的,别的浏览器的兼容性暂不考虑。有了animation这一个属性还不够,玩过flash都知道动画的完场都是一帧一帧的对吧,css3里面有@keyframes ,这个属性就是规定动画的过程,可以理解成flash的帧。-webkit-@keyframes这个还是谷歌浏览器的私有属性替代@keyframes。这个属性后接动画名称比如
@-webkit-keyframes myfirst{ from { -webkit-transform: rotateY(0deg); } to { -webkit-transform: rotateY(-360deg); } }
这里面就是我定义的一个旋转动画,动画名称myfirst, from规定了动画的初始状态。这里面是绕y轴旋转角度是0。to是这阶段的动画结束状态。这里面是绕y轴旋转-360度,正负代表旋转的方向。当然动画的定义不都这一个规则可以用百分比来表示,上面的就可以写成这样
@-webkit-keyframes myfirst{ 0% { -webkit-transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(-360deg); } }
css3强大之处就出来了,你可以给这个动画定义任何时候的动画状态,给每一帧都不同的变化都可以比如
@-webkit-keyframes myfirst /* Safari and Chrome */ { 0% {background:red; left:0px; top:0px;} 25% {background:yellow; left:200px; top:0px;} 50% {background:blue; left:200px; top:200px;} 75% {background:green; left:0px; top:200px;} 100% {background:red; left:0px; top:0px;} }
这个就是定义动画 myfirst在不同阶段的动画效果,这个你可以根据喜好自定义行为。这里就不多说了。动画定义玩了,就该给动画定义个运行时间吧,有个animation-duration规定了动画的播放时长,但是我们是要让这个动画立方体一直旋转下去,怎么办?css3有animation-direction这个属性定义是否应该轮流反向播放动画;语法animation-direction: normal|alternate;其中normal是动画只播放一个周期,而alternate就是我们要找的,它规定了动画将一直反复的播放下去。好了既然有了这个就好办了,下一步把这个动画加到每一个图片里是不是就ok了呢,好的我们就在上一篇博客的基础上加进动画吧
.inBox{ width:300px; height:300px; -webkit-border-radius:25px; opacity: 0.8; position: absolute; -webkit-animation:myfirst 15s infinite linear ; }
运行一下,我了个擦,结果出现了令人瞠目结舌的效果,立方体的每一个面都飞了起来(这里面不能演示,我还不会演示,我截个图片,图片是我媳妇,大家勿喷啊)
<html lang="en"> <head> <meta charset="utf-8" /> <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame Remove this if you use the .htaccess --> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>css3立体盒子</title> <meta name="description" content="" /> <meta name="author" content="yangheng" /> <meta name="viewport" content="width=device-width; initial-scale=1.0" /> <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references --> <link rel="shortcut icon" href="/favicon.ico" /> <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <style rel="stylesheet"> *{ margin:0; padding:0; } html>body{ text-align:center; height:100%; width:100%; text-align:center; } body>#wrap{ width:100%; height:100%; } #wrap{ height:100%; margin:auto auto; border:1px solid red; position:relative; -webkit-perspective: 800px; } #container{ margin: 200px auto; width:600px; height:600px; padding:50px 100px; -webkit-transform-style: preserve-3d; -webkit-transition:-webkit-transform 3s; -webkit-perspective-origin: 0% 200px; } @-webkit-keyframes myfirst{ from { -webkit-transform: rotateY(0deg); } to { -webkit-transform: rotateY(-360deg); } } .cube{ -webkit-transform-style: preserve-3d; -webkit-transition:-webkit-transform 2s; } .inBox{ -webkit-transform-style: preserve-3d; width:300px; height:300px; -webkit-transition: -webkit-transform 2s , opacity 2s; -webkit-border-radius:25px; opacity: 0.8; position: absolute; } img{ display:block; -webkit-border-radius:5px; -webkit-animation:myfirst 15s infinite linear ; width:100%; height:100%; } .cube .before{ -webkit-transform: scale3d(0.8, 0.8, 0.8) translateZ(150px); } .cube .left{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(90deg) translateZ(150px); } .cube .back{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(180deg) translateZ(150px); } .cube .right{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(-90deg) translateZ(150px); } .cube .top{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(90deg) translateZ(150px); } .cube .bottom{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(-90deg) translateZ(150px); } </style> </head> <body> <div id="wrap"> <div id="container" class="cube backface"> <div class="inBox before"><img src="img/7.jpg" /></div> <div class="inBox back"><img src="img/2.jpg" /></div> <div class="inBox left"><img src="img/3.jpg" /></div> <div class="inBox right"><img src="img/4.jpg" /></div> <div class="inBox top"><img src="img/5.jpg" /></div> <div class="inBox bottom"><img src="img/6.jpg" /></div> </div> </div> </body> </html>
效果竟然是竟然的每个图片都是绕着自己中心旋转,我的立方体呢,没了!怎么办。。。。;找到立方体的中心,这个css3我好像还真没看到啊,车到山前必有路,容器里面再嵌套一个舞台,对,让这个舞台旋转,从而带动整个立方体旋转,ok,动手做起来,
<div id="wrap"> <div id="container" class="cube backface"> <div id="shap"> <div class="inBox before"><img src="img/7.jpg" /></div> <div class="inBox back"><img src="img/2.jpg" /></div> <div class="inBox left"><img src="img/3.jpg" /></div> <div class="inBox right"><img src="img/4.jpg" /></div> <div class="inBox top"><img src="img/5.jpg" /></div> <div class="inBox bottom"><img src="img/6.jpg" /></div> </div> </div> </div>
新建一个舞台,这个舞台包裹着立方体。ok,把动画加到这个舞台上面,同样要加的还有舞台的3d旋转而不是2d -webkit-transform-style: preserve-3d;代码如下
#shap{ position: relative; margin: 0 auto; margin-top:200px; height: 300px; width: 300px; -webkit-transform-style: preserve-3d; } #shap{ -webkit-animation:myfirst 15s infinite linear ; }
ok,在运行一下,效果出来了,大家看一下
看到了吧,这个3d旋转的效果就出来了!舞台带动带动整个的立方体旋转,而且中心没有改变。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame Remove this if you use the .htaccess --> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>css3立体盒子</title> <meta name="description" content="" /> <meta name="author" content="yangheng" /> <meta name="viewport" content="width=device-width; initial-scale=1.0" /> <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references --> <link rel="shortcut icon" href="/favicon.ico" /> <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <style rel="stylesheet"> *{ margin:0; padding:0; } html>body{ text-align:center; height:100%; width:100%; text-align:center; } body>#wrap{ width:100%; height:100%; } #wrap{ height:100%; margin:auto auto; border:1px solid red; position:relative; -webkit-perspective: 800px; -webkit-perspective-origin: 50% 400px; } #container{ width:100%; height:600px; -webkit-transform-style: preserve-3d; -webkit-transition:-webkit-transform 3s; } #shap{ position: relative; margin: 0 auto; margin-top:200px; height: 300px; width: 300px; -webkit-transform-style: preserve-3d; } #shap{ -webkit-animation:myfirst 15s infinite linear ; } @-webkit-keyframes myfirst{ from { -webkit-transform: rotateY(0deg); } to { -webkit-transform: rotateY(-360deg); } } .cube{ -webkit-transform-style: preserve-3d; -webkit-transition:-webkit-transform 2s; } .inBox{ -webkit-transform-style: preserve-3d; width:300px; height:300px; -webkit-transition: -webkit-transform 2s , opacity 2s; -webkit-border-radius:25px; opacity: 0.8; position: absolute; } img{ display:block; -webkit-border-radius:5px; width:100%; height:100%; } .cube .before{ -webkit-transform: scale3d(0.8, 0.8, 0.8) translateZ(150px); } .cube .left{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(90deg) translateZ(150px); } .cube .back{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(180deg) translateZ(150px); } .cube .right{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(-90deg) translateZ(150px); } .cube .top{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(90deg) translateZ(150px); } .cube .bottom{ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(-90deg) translateZ(150px); } </style> </head> <body> <div id="wrap"> <div id="container" class="cube backface"> <div id="shap"> <div class="inBox before"><img src="img/7.jpg" /></div> <div class="inBox back"><img src="img/2.jpg" /></div> <div class="inBox left"><img src="img/3.jpg" /></div> <div class="inBox right"><img src="img/4.jpg" /></div> <div class="inBox top"><img src="img/5.jpg" /></div> <div class="inBox bottom"><img src="img/6.jpg" /></div> </div> </div> </div> </body> </html>
接下来就是做一个效果切换,打乱原来的效果,立方体然后拼成另一个3d效果,而且还有动画效果更平滑!我尽快把博客更新上来!