# 3D 轉換
CSS3 3D Transform,用于 3 維動畫或旋轉。
CSS3 3D 轉換是一個屬性,用于改變元素的實際形式。這個特性可以改變元素的形狀、大小和位置。
主要有下列方法:
- rotateX()
- rotateY()
- rotateZ()
**注意:**Internet Explorer 10 和 Firefox 支持 3D 轉換;Chrome 和 Safari 必須添加前綴 -webkit-;Opera 還不支持 3D 轉換(支持 2D 轉換 )

### rotateX()
rotateX()方法,圍繞其在一個給定度數X軸旋轉的元素。
~~~
.rotate-x {
transform: rotateX(60deg);
-webkit-transform: rotateX(120deg); /* Safari and Chrome */
}
~~~
### rotateY()
rotateY()方法,圍繞其在一個給定度數Y軸旋轉的元素。
~~~
.rotate-y {
transform: rotateY(60deg);
-webkit-transform: rotateY(120deg); /* Safari and Chrome */
}
~~~
### rotateZ()
rotateZ()方法,圍繞其在一個給定度數Z軸旋轉的元素。
~~~
.rotate-z {
transform: rotateZ(60deg);
-webkit-transform: rotateY(120deg); /* Safari and Chrome */
}
~~~
### rotate3d()
otate3d(x,y,z,a)中取值說明:
- x:是一個0到1之間的數值,主要用來描述元素圍繞X軸旋轉的矢量值;
- y:是一個0到1之間的數值,主要用來描述元素圍繞Y軸旋轉的矢量值;
- z:是一個0到1之間的數值,主要用來描述元素圍繞Z軸旋轉的矢量值;
-
a:是一個角度值,主要用來指定元素在3D空間旋轉的角度,如果其值為正值,元素順時針旋轉,反之元素逆時針旋轉。面介紹的三個旋轉函數功能等同:
-
rotateX(a)函數功能等同于rotate3d(1,0,0,a)
- rotateY(a)函數功能等同于rotate3d(0,1,0,a)
- rotateZ(a)函數功能等同于rotate3d(0,0,1,a)
例子
~~~
.rotate-3d {
transform: rotate3d(0,0.6,0.2,60deg);
-webkit-transform: rotate3d(0.6,0.6,0.2,60deg); /* Safari and Chrome */
}
~~~
### 轉換方法
<table class="reference"><tbody class="calibre17"><tr class="calibre18"><th class="calibre25">函數</th> <th class="calibre20">描述</th> </tr><tr class="calibre22"><td class="calibre23">matrix3d(<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<br class="calibre27"/><i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>,<i class="calibre26">n</i>)</td> <td class="calibre23">定義 3D 轉換,使用 16 個值的 4x4 矩陣。</td> </tr><tr class="calibre18"><td class="calibre23">translate3d(<i class="calibre26">x</i>,<i class="calibre26">y</i>,<i class="calibre26">z</i>)</td> <td class="calibre23">定義 3D 轉化。</td> </tr><tr class="calibre22"><td class="calibre23">translateX(<i class="calibre26">x</i>)</td> <td class="calibre23">定義 3D 轉化,僅使用用于 X 軸的值。</td> </tr><tr class="calibre18"><td class="calibre23">translateY(<i class="calibre26">y</i>)</td> <td class="calibre23">定義 3D 轉化,僅使用用于 Y 軸的值。</td> </tr><tr class="calibre22"><td class="calibre23">translateZ(<i class="calibre26">z</i>)</td> <td class="calibre23">定義 3D 轉化,僅使用用于 Z 軸的值。</td> </tr><tr class="calibre18"><td class="calibre23">scale3d(<i class="calibre26">x</i>,<i class="calibre26">y</i>,<i class="calibre26">z</i>)</td> <td class="calibre23">定義 3D 縮放轉換。</td> </tr><tr class="calibre22"><td class="calibre23">scaleX(<i class="calibre26">x</i>)</td> <td class="calibre23">定義 3D 縮放轉換,通過給定一個 X 軸的值。</td> </tr><tr class="calibre18"><td class="calibre23">scaleY(<i class="calibre26">y</i>)</td> <td class="calibre23">定義 3D 縮放轉換,通過給定一個 Y 軸的值。</td> </tr><tr class="calibre22"><td class="calibre23">scaleZ(<i class="calibre26">z</i>)</td> <td class="calibre23">定義 3D 縮放轉換,通過給定一個 Z 軸的值。</td> </tr><tr class="calibre18"><td class="calibre23">rotate3d(<i class="calibre26">x</i>,<i class="calibre26">y</i>,<i class="calibre26">z</i>,<i class="calibre26">angle</i>)</td> <td class="calibre23">定義 3D 旋轉。</td> </tr><tr class="calibre22"><td class="calibre23">rotateX(<i class="calibre26">angle</i>)</td> <td class="calibre23">定義沿 X 軸的 3D 旋轉。</td> </tr><tr class="calibre18"><td class="calibre23">rotateY(<i class="calibre26">angle</i>)</td> <td class="calibre23">定義沿 Y 軸的 3D 旋轉。</td> </tr><tr class="calibre22"><td class="calibre23">rotateZ(<i class="calibre26">angle</i>)</td> <td class="calibre23">定義沿 Z 軸的 3D 旋轉。</td> </tr><tr class="calibre18"><td class="calibre23">perspective(<i class="calibre26">n</i>)</td> <td class="calibre23">定義 3D 轉換元素的透視視圖。</td> </tr></tbody></table>
### 源碼
本文中所用例子源碼參見[https://github.com/waylau/css3-tutorial](https://github.com/waylau/css3-tutorial) 中 `samples` 目錄下的 3d_transform.html
### 參考
- [http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/](http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/)
- [http://www.w3cplus.com/css3/css3-3d-transform.html](http://www.w3cplus.com/css3/css3-3d-transform.html)