---
# System prepended metadata

title: css 整理 - Transform 形變
tags: [css]

---

# css 整理 - Transform 形變
###### tags: `css`
## 2D Transform 
二維（平面）形變，可變數值有 x, y 三個軸向
### 2D 屬性

| 屬性 |說明| 數值 |
| -------- | -------- | -------- |
| transform |函數本身|translate(x,y) / scale(x,y)/ rotate(deg) / skew(x,y) / matrix() |
| transform-origin|元素原始位置|**(50%,50%)** / (30px,20px) (left,bottom)… |

ex:
```css
.myShape {
    transform: translateX(2px); 
    transform-origin: center right;
}
```
### 2D 函數
![](https://i.imgur.com/9RZDDT8.png)

圖片來源：[www.scaler.com](https://www.scaler.com/topics/css/2d-transformation-in-css/)

(以下全以參考點為中心)

|函數|說明|可輸入數值|其他單軸函數|
| -------- | -------- | -------- | -------- |
| translate(x,y) |**位移** | 尺寸值 或 ％ ex:**none**/20px/40%|  translateX(x) translateY(y)
| scale(x,y)    |  **縮放** (X軸縮放x倍，Y軸縮放y倍)|倍率 ex:0.4/1.2/200...|scaleX(x) scaleY(y)|
rotate(deg)  | **旋轉** |deg ex:30deg/-150deg|
skew(x,y)|**傾斜** (單個參數：如只寫一個，就只有X軸的傾斜)|deg ex:30deg/-150deg |skewX() skewY()
matrix()|變形矩陣的6個參數值產生2D變形|matrix(scaleX(),skewY(),skewX(), scaleY(),translateX(),translateY()) 

## 3D Transform 
三維（立體）形變，可變數值有 x, y, z 三個軸向

### 3D 屬性


| 屬性 |說明| 可輸入數值 |
| -------- | -------- | -------- |
| transform |函數本身|translate3d(x,y,z) / scale3d()/ matrix3d(…) / rotate3d(x,y,z,deg) |
| transform-origin|元素原始位置| (x,y,z)    |
transform-style|定義是3D或是2D |**flat**(2D) / preserve-3d
perspective|透視距離|**0**
perspective-origin|透視原點|**(50%,50%)** / (30px,20px) (left,bottom)...
backface-visibility|元素背面是否可見| hidden/visible

ex:
```css
.myShape { 
    transform: translateZ(25px);
    transform-origin:50% 50% 50%; 
    transform-style:preserve-3d;
    perspective: 200px;
    perspective-origin: center;
    backface-visibility: hidden;
}

```
### 3D 函數
![](https://i.imgur.com/ZkwHi8K.png)

|函數|說明|數值|其他單軸函數|
| -------- | -------- | -------- | -------- |
| translate3d(x,y,z)| **位移**| 尺寸值 或 ％|translateX(m) translateY(m) translateZ(m)|
|scale3d()|**縮放**| 倍率 ex:0.4/1.2/200… |scaleX(x) scaleY(y) scaleZ(z)
|rotate3d(x,y,z,deg)|**旋轉** 從參考點為中心軸旋轉θ度 (旋轉度數：正值=順時針旋轉，負值=逆時針旋轉)|deg ex:30deg/-150deg|rotateX(θ) rotateY(θ) rotateZ(θ)
matrix3d(...)|詳見 [matrix3d介绍](https://www.jianshu.com/p/52e0018e6ce2)|元素以參考點為中心，依變形矩陣的16個參數值產生3D變形|

## Transform-origin 元素的原始位置(參考點)
所有形變的參考起始點

```css
transform-origin: 尺寸值 | 50% | center,top,right,bottom,left
```
- x、y 可為尺寸值 或 % (百分比) 或方位關鍵字；% 是以元素本身大小作為計算基準。
- 預設值為元素中心點(50%,50%)
- 元素左上角座標為(0,0)
- 方位關鍵字(center,top,right,bottom,left)，如忽略第二個值，則自動定為center


ex:
```css
transform-origin:50% 50%; /* 預設值 中心點 */
transform-origin:50px 20px;   /* 尺寸值 */

transform-origin:top left;  /* 方位關鍵字 */

```





## 其他情形
### 同一元素套用多個變形函數
=> 也可被轉換為 matrix() （詳見 [matrix3d介绍](https://www.jianshu.com/p/52e0018e6ce2)）

```css
.box{
transform:translate(120px) rotate(80deg) scale(0.5);
}
```

## 參考資料
[CSS動畫-2D Transform ](https://ithelp.ithome.com.tw/articles/10200713)