一款利用html5和css3實現(xiàn)的3D立方體旋轉(zhuǎn)效果教程

如何利用CSS3實現(xiàn)3D變換、立方體旋轉(zhuǎn)效果,本文為大家分享實現(xiàn)思路,供大家參考,具體內(nèi)容如下
3D變換基于幾個比較重要的屬性,perspective,translateZ,preserve-3d;
transform-style(preserve-3d)建立3D空間
perspective視鏡
perspective-origin視鏡基點
x:left/center/right/length/%
y:top/center/bottom/length/%
transform新增函數(shù)
rotateX():如果值為正值,元素圍繞X軸順時針旋轉(zhuǎn);反之,如果值為負值,元素圍繞X軸逆時針旋轉(zhuǎn)。
rotateY():如果值為正值,元素圍繞Y軸順時針旋轉(zhuǎn);反之,如果值為負值,元素圍繞Y軸逆時針旋轉(zhuǎn)。
rotateZ():rotateZ()函數(shù)指定元素圍繞Z軸旋轉(zhuǎn),如果僅從視覺角度上看,rotateZ()函數(shù)讓元素順時針或逆時針旋轉(zhuǎn),并且效果和rotate()效果等同,
translateZ();讓元素在Z軸進行位移,當其值越大時,元素離觀看者越近,視覺上元素放大,反之元素縮小。
scaleZ(),scaleZ()在單獨使用時,沒有任何效果,需要配合其它的變形函數(shù)一起使用才會有效果。
transform-orign:旋轉(zhuǎn)的基準點
x:left/center/right/length/%
y:top/center/bottom/length//%
z:length
**3D位移:**CSS3中的3D位移主要包括translateZ()和translate3d()兩個功能函數(shù);
**3D旋轉(zhuǎn):**CSS3中的3D旋轉(zhuǎn)主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四個功能函數(shù);
**3D縮放:**CSS3中的3D縮放主要包括scaleZ()和scale3d()兩個功能函數(shù);
**3D矩陣:**CSS3中3D變形中和2D變形一樣也有一個3D矩陣功能函數(shù)matrix3d()
格式:
舞臺(perspective)
容器(3D, preserve-3d)
內(nèi)容
3D實現(xiàn)立方體盒子:
第一步:先布局好div的位置。
第二步:對每個平面旋轉(zhuǎn)。旋轉(zhuǎn)之前的準備工作:
給舞臺加上視鏡,perspective(設(shè)為800px到1200px之間)
給容器加上3D效果;transform-style:preserve-3d;
上面和下面繞著X軸旋轉(zhuǎn)。左面和右面繞著Y軸旋轉(zhuǎn),前面在Z軸上移動。旋轉(zhuǎn)時,要設(shè)置旋轉(zhuǎn)的基準點,上面以下邊為旋轉(zhuǎn)基準,旋轉(zhuǎn)90deg,下面以上邊為旋轉(zhuǎn)基點,旋轉(zhuǎn)90deg,左面以右邊為旋轉(zhuǎn)基點,旋轉(zhuǎn)90deg,右邊以左邊作為旋轉(zhuǎn)基點,旋轉(zhuǎn)90deg.然后將前面沿著Z軸方向平移。
如果將視鏡加給容器,在容器旋轉(zhuǎn)時,就可以看到異常,如果不給容器加上transform-style:preserve-3d;那么旋轉(zhuǎn)時,就只看到平面在旋轉(zhuǎn)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .stage{perspective: 800px;}
- .container{width: 150px;height:150px;margin: 200px auto; position: relative;
- transform-style: preserve-3d;height:200px;transition:5s;transform-origin: center center 75px;}
- .container .side{position: absolute;width: 150px;height: 150px;border:2px solid #0033FF;text-align: center;line-height: 150px;}
- .left{left:-152px;transform: rotateY(90deg);transform-origin: right;}
- .right{left:152px;transform: rotateY(-90deg);transform-origin: left;}
- .top{top:-152px;transform: rotateX(-90deg);transform-origin: bottom;}
- .bottom{top:152px;transform: rotateX(90deg);transform-origin: top;}
- .front{transform: translateZ(152px);z-index:2;}
- .back{z-index:1;}
- .container:hover{transform: rotateY(360deg)}
- </style>
- </head>
- <body>
- <div class="stage">
- <div class="container">
- <div class="side front">前</div>
- <div class="side back">后</div>
- <div class="side left">左</div>
- <div class="side right">右</div>
- <div class="side top">上</div>
- <div class="side bottom">下</div>
- </div>
- </div>
- </body>
- </html>
第三步:實現(xiàn)3D立方體的旋轉(zhuǎn)
給容器設(shè)置旋轉(zhuǎn)中心,我設(shè)置的是盒子的正中心進行旋轉(zhuǎn)。這樣一個3D立方體的旋轉(zhuǎn)效果就完成了。
為了更好的展示,我們可以將每個面換成是一張圖片。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .stage{perspective: 800px;}
- .container{width: 150px;height:150px;margin: 200px auto; position: relative;
- height:200px;transition:5s;transform-origin: center center 75px;transform-style: preserve-3d;backface-visibility: hidden;}
- .container .side{position: absolute;width: 150px;height: 150px;border:2px solid #0033FF;text-align: center;line-height: 150px;}
- .left{left:-152px;transform: rotateY(90deg);transform-origin: right;background: url(../images/photo5.jpg);background-size:100% 100%;}
- .right{left:152px;transform: rotateY(-90deg);transform-origin: left;background: url(../images/photo4.jpg);background-size:100% 100%;}
- .top{top:-152px;transform: rotateX(-90deg);transform-origin: bottom;background: url(../images/photo3.jpg);background-size:100% 100%;}
- .bottom{top:152px;transform: rotateX(90deg);transform-origin: top;background: url(../images/photo2.jpg);background-size:100% 100%;}
- .front{transform: translateZ(152px);z-index:2;background: url(../images/photo1.jpg);background-size:100% 100%;}
- .back{z-index:1;background: url(../images/photo.jpg);background-size:100% 100%;}
- .container:hover{transform: rotateY(360deg)}
- </style>
- </head>
- <body>
- <div class="stage">
- <div class="container">
- <div class="side front"></div>
- <div class="side back"></div>
- <div class="side left"></div>
- <div class="side right"></div>
- <div class="side top"></div>
- <div class="side bottom"></div>
- </div>
- </div>
- </body>
- </html>
但是這個在旋轉(zhuǎn)時,有一個問題,不該看到的平面也會被看到:
相反,如果通過另一種方式來實現(xiàn),則不會有這個問題。不修改容器的旋轉(zhuǎn)中心,通過將后面,上下左右面沿著Z軸向后平移寬度的一般,然后再將前面向前移動寬度的一般,那么旋轉(zhuǎn)中心就是盒子的中心。
如下:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .stage{perspective: 800px;}
- .container{width: 150px;height:150px;margin: 200px auto; position: relative;
- transform-style: preserve-3d;height:200px;transition:5s;}
- .container .side{position: absolute;width: 150px;height: 150px;border:2px solid #0033FF;text-align: center;line-height: 150px;}
- .left{left:-152px;transform: translateZ(-75px) rotateY(90deg);transform-origin: right;background: url(../images/photo5.jpg);background-size:100% 100%;}
- .right{left:152px;transform: translateZ(-75px) rotateY(-90deg);transform-origin: left;background: url(../images/photo4.jpg);background-size:100% 100%;}
- .top{top:-152px;transform: translateZ(-75px) rotateX(-90deg);transform-origin: bottom;background: url(../images/photo3.jpg);background-size:100% 100%;}
- .bottom{top:152px;transform:translateZ(-75px) rotateX(90deg);transform-origin: top;background: url(../images/photo2.jpg);background-size:100% 100%;}
- .back{transform:translateZ(-75px);z-index:1; background: url(../images/photo2.jpg);background-size:100% 100%;}
- .front{z-index:2;transform:translateZ(75px);background: url(../images/photo.jpg);background-size:100% 100%;}
- .container:hover{transform: translateZ(-75px) rotateY(360deg);}
- </style>
- </head>
- <body>
- <div class="stage">
- <div class="container">
- <div class="side front"></div>
- <div class="side back"></div>
- <div class="side left"></div>
- <div class="side right"></div>
- <div class="side top"></div>
- <div class="side bottom"></div>
- </div>
- </div>
- </body>
- </html>
在旋轉(zhuǎn)過程中,一切正常:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。
原文地址:http://blog.csdn.net/liuyan19891230/article/details/51233866
相關(guān)文章
- 下面小編就為大家?guī)硪黄P(guān)于老式瀏覽器兼容HTML5和CSS3的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-01
HTML5結(jié)合CSS3實現(xiàn)的手動切換幻燈片動畫特效源碼
是一段非常有創(chuàng)意的html5+css3 幻燈片切換特效,很早以前就非常喜歡的一款特效,最近剛剛找到,擔心以后再也找不到了,趕緊上傳上來,本段代碼適應(yīng)于所有網(wǎng)頁使用,有需要2016-05-24HTML5+Canvas+CSS3實現(xiàn)齊天大圣孫悟空騰云駕霧效果
使用HTML5的canvas畫的孫悟空,CSS3畫的白云飄飄。本文給大家介紹基于HTML5+Canvas+CSS3實現(xiàn)齊天大圣孫悟空騰云駕霧效果,感興趣的朋友參考下吧2016-04-26HTML5+CSS3圖片堆疊轉(zhuǎn)瀑布流布局特效源碼
HTML5+CSS3圖片堆疊轉(zhuǎn)瀑布流布局特效源碼是一款基于CSS3+HTML5實現(xiàn)的超酷風格堆疊相片轉(zhuǎn)瀑布流網(wǎng)格布局動畫效果代碼。需要的朋友前來下載源碼2016-04-07html5+css3鼠標懸停hover超鏈接導(dǎo)航條特效源碼 21種
hover超鏈接導(dǎo)航條特效源碼是一個利用css3 transition屬性制作的21種不同的鼠標懸停效果的代碼。鼠標hover或懸停時,會觸發(fā)各種動畫效果2016-03-31- 一款實現(xiàn)了非常漂亮的canvas雪花飄落特效代碼,非常真實,使用也非常方便,本段代碼適應(yīng)于所有網(wǎng)頁使用,有需要的朋友們可以前來下載使用2016-03-30
- 下面小編就為大家?guī)硪黄肅SS3打造HTML5的Logo(實現(xiàn)代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-16