三維變換使用基於二維變換的相同屬性,若是您熟悉二維變換,大家發現3D變形的功能和2D變換的功能至關相似。CSS3中的3D變換主要包括如下幾種功能函數:css
在CSS3中3D位移主要包括兩種函數translateZ()和translate3d()。translate3d()函數使一個元素在三維空間移動。這種變形的特色是,使用三維向量的座標定義元素在每一個方向移動多少。其基本語法以下:web
translate3d(tx,ty,tz)
其屬性值取值說明以下:函數
一塊兒來看一個簡單的實例,加深對translate3d()函數的理解:url
<div class="stage s1"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="70" height="100" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="70" height="100" /> </div> </div> <div class="stage s2"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="70" height="100" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="70" height="100" /> </div> </div>
.stage {
width: 300px;
height: 300px;
float: left;
margin: 15px;
position: relative;
background: url(http://www.w3cplus.com/sites/default/files/blogs/2013/1311/bg.jpg) repeat center center;
-webkit-perspective: 1200px;
-moz-perspective: 1200px;
-ms-perspective: 1200px;
-o-perspective: 1200px;
perspective: 1200px;
}
.container {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.container img {
position: absolute;
margin-left: -35px;
margin-top: -50px;
}
.container img:nth-child(1){
z-index: 1;
opacity: .6;
}
.s1 img:nth-child(2){
z-index: 2;
-webkit-transform: translate3d(30px,30px,200px);
-moz-transform: translate3d(30px,30px,200px);
-ms-transform: translate3d(30px,30px,200px);
-o-transform: translate3d(30px,30px,200px);
transform: translate3d(30px,30px,200px);
}
.s2 img:nth-child(2){
z-index: 2;
-webkit-transform: translate3d(30px,30px,-200px);
-moz-transform: translate3d(30px,30px,-200px);
-ms-transform: translate3d(30px,30px,-200px);
-o-transform: translate3d(30px,30px,-200px);
transform: translate3d(30px,30px,-200px);
}
效果以下所示:spa
從上圖的效果能夠看出,當z軸值越大時,元素也離觀看者更近,從視覺上元素就變得更大;反之其值越小時,元素也離觀看者更遠,從視覺上元素就變得更小。3d
在CSS3中3D位移除了translate3d()函數以外還有translateZ()函數。translateZ()函數的功能是讓元素在3D空間沿Z軸進行位移,其基本使用語法以下:code
translate(t)
取值說明以下:orm
使用translateZ()函數可讓元素在Z軸進行位移,當其值爲負值時,元素在Z軸越移越遠,致使元素變得較小。反之,當其值爲正值時,元素在Z軸越移越近,致使元素變得較大。在上例的基礎上,咱們稍加變化一下,將translate3d()函數換成translateZ()函數:blog
.s1 img:nth-child(2){
z-index: 2;
opacity: .6;
-webkit-transform: translateZ(200px);
-moz-transform: translateZ(200px);
-ms-transform: translateZ(200px);
-o-transform: translateZ(200px);
transform: translateZ(200px);
}
.s2 img:nth-child(2){
z-index: 2;
-webkit-transform: translateZ(-200px);
-moz-transform: translateZ(-200px);
-ms-transform: translateZ(-200px);
-o-transform: translateZ(-200px);
transform: translateZ(-200px);
}
效果以下:ci
效果再次證實了translateZ()函數僅讓元素在Z軸進行位移,當其值越大時,元素離觀看者越近,視覺上元素放大,反之元素縮小。
translateZ()函數在實際使用中等同於translate3d(0,0,tz)。僅從視覺效果上看,translateZ()和translate3d(0,0,tz)函數功能很是相似於二維空間的scale()縮放函數,但實際上徹底不一樣。translateZ()和translate3d(0,0,tz)變形是發生在Z軸上,而不是X軸和Y軸。當使用3D變形,可以在一Z軸上移動一個元素確實有很大的好處,好比說在建立一個3D立方體的盒子之時。
CSS3 3D變形中的縮放主要有scaleZ()和scale3d()兩種函數,當scale3d()中X軸和Y軸同時爲1,即scale3d(1,1,sz),其效果等同於scaleZ(sz)。經過使用3D縮放函數,可讓元素在Z軸上按比例縮放。默認值爲1,當值大於1時,元素放大,反之小於1大於0.01時,元素縮小。其使用語法以下:
scale3d(sx,sy,sz)
其取值說明以下:
scaleZ(s)
其取值說明以下:
scaleZ(-1)定義了一個原點在Z軸的對稱點(按照元素的變換原點)。
scaleZ()和scale3d()函數單獨使用時沒有任何效果,須要配合其餘的變形函數一塊兒使用纔會有效果。下面咱們來看一個實例,爲了能看到scaleZ()函數的效果,咱們添加了一個rotateX(45deg)功能:
.s1 img:nth-child(2){
z-index: 2;
-webkit-transform: scaleZ(5) rotateX(45deg);
-moz-transform: scaleZ(5) rotateX(45deg);
-ms-transform: scaleZ(5) rotateX(45deg);
-o-transform: scaleZ(5) rotateX(45deg);
transform: scaleZ(5) rotateX(45deg);
}
.s2 img:nth-child(2){
z-index: 2;
-webkit-transform: scaleZ(.25) rotateX(45deg);
-moz-transform: scaleZ(.25) rotateX(45deg);
-ms-transform: scaleZ(.25) rotateX(45deg);
-o-transform: scaleZ(.25) rotateX(45deg);
transform: scaleZ(.25) rotateX(45deg);
}
其效果以下所示:
到目前爲止,咱們已經討論瞭如何讓一個元素在平面上進行順時針或逆時針旋轉。在三維變形中,咱們可讓元素在任何軸旋轉。爲此,CSS3新增三個旋轉函數:rotateX()、rotateY()和rotateZ()。
使用rotateX()函數容許一個元素圍繞X軸旋轉;rotateY()函數容許一個元素圍繞Y軸旋轉;最後rotateZ()函數容許一個元素圍繞Z軸旋轉。接下來咱們簡單的瞭解一下這三個旋轉函數。
rotateX()函數指定一個元素圍繞X軸旋轉,旋轉的量被定義爲指定的角度;若是值爲正值,元素圍繞X軸順時針旋轉;反之,若是值爲負值,元素圍繞X軸逆時針旋轉。其基本語法以下:
rotateX(a)
其中a指的是一個旋轉角度值,其值能夠是正值也能夠是負值。
rotateY()函數指定一個元素圍繞Y軸旋轉,旋轉的量被定義爲指定的角度;若是值爲正值,元素圍繞Y軸順時針旋轉;反之,若是值爲負值,元素圍繞Y軸逆時針旋轉。其基本語法以下:
rotateY(a)
其中a指的是一個旋轉角度值,其值能夠是正值也能夠是負值。
rotateZ()函數和其餘兩個函數功能同樣的,區別在於rotateZ()函數指定一個元素圍繞Z軸旋轉。其基本語法以下:
rotateZ(a)
rotateZ()函數指定元素圍繞Z軸旋轉,若是僅從視覺角度上看,rotateZ()函數讓元素順時針或逆時針旋轉,而且效果和rotate()效果等同,但他不是在2D平面的旋轉。
在三維空間裏,除了rotateX()、rotateY()和rotateZ()函數可讓一個元素在三維空間中旋轉以外,還有一個屬性rotate3d()函數。在3D空間,旋轉有三個程度的自由來描述一個轉動軸。軸的旋轉是由一個[x,y,z]向量並通過元素原點。其基本語法以下:
rotate3d(x,y,z,a)
rotate3d()中取值說明:
面介紹的三個旋轉函數功能等同:
接下來經過一個簡單的實例,來實戰一下3D旋轉的運用:
<div class="stage s1"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> </div> </div> <div class="stage s2"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> </div> </div> <div class="stage s3"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> </div> </div> <div class="stage s4"> <div class="container"> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> <img src="http://www.w3cplus.com/sites/default/files/blogs/2013/1311/cardKingClub.png" alt="" width="140" height="200" /> </div> </div>
.stage {
width: 300px;
height: 300px;
float: left;
margin: 15px;
position: relative;
background: url(http://www.w3cplus.com/sites/default/files/blogs/2013/1311/bg.jpg) repeat center center;
-webkit-perspective: 1200px;
-moz-perspective: 1200px;
-ms-perspective: 1200px;
-o-perspective: 1200px;
perspective: 1200px;
}
.container {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.container img {
position: absolute;
margin-left: -70px;
margin-top: -100px;
}
.container img:nth-child(1){
z-index: 1;
opacity: .6;
}
.s1 img:nth-child(2){
z-index: 2;
-webkit-transform:rotateX(45deg);
-moz-transform:rotateX(45deg);
-ms-transform:rotateX(45deg);
-o-transform:rotateX(45deg);
transform:rotateX(45deg);
}
.s2 img:nth-child(2){
z-index: 2;
-webkit-transform:rotateY(45deg);
-moz-transform:rotateY(45deg);
-ms-transform:rotateY(45deg);
-o-transform:rotateY(45deg);
transform:rotateY(45deg);
}
.s3 img:nth-child(2){
z-index: 2;
-webkit-transform:rotateZ(45deg);
-moz-transform:rotateZ(45deg);
-ms-transform:rotateZ(45deg);
-o-transform:rotateZ(45deg);
transform:rotateZ(45deg);
}
.s4 img:nth-child(2){
z-index: 2;
-webkit-transform:rotate3d(.6,1,.6,45deg);
-moz-transform:rotate3d(.6,1,.6,45deg);
-ms-transform:rotate3d(.6,1,.6,45deg);
-o-transform:rotate3d(.6,1,.6,45deg);
transform:rotate3d(.6,1,.6,45deg);
}
效果以下所示: