Skip to content

CSS 變形 transform:能做什麼與怎麼開始

CSS 變形介紹:transform 能做到什麼

transform 是一個 CSS 屬性,用來讓 HTML 元素進行 2D 或 3D 的轉換(變形),像是移動、旋轉、縮放、傾斜等等。它不會改變元素原本在文件流中的位置,但可以視覺上改變它的樣子或位置。也因為不影響版面,它是做動畫時最流暢的屬性之一,詳見 動畫的效能

2D 變形

在 X、Y 兩軸上平移、旋轉、縮放與傾斜元素。外觀變了,但它在 HTML 中的實際位置不變。

函式說明
translate平移,沿 X、Y 軸位移。
rotate旋轉。
scale縮放。
skew傾斜。
matrix矩陣,把上述變形合併成一次運算。

詳細用法請見 2D 變形

3D 變形

讓元素在三維空間中旋轉與位移,做出翻牌、立體卡片這類效果。開啟立體感的關鍵是 perspective,它決定觀察者與畫面的距離。

屬性/函式說明
perspective透視距離,立體感的關鍵,數值越小越誇張。
rotateXrotateYrotateZ沿三個軸旋轉。
translateZscaleZ在 Z 軸上平移與縮放。
transform-style子元素要不要留在同一個 3D 空間。
backface-visibility背面朝向觀察者時要不要顯示。

詳細用法請見 3D 變形

變形基準點

transform-origin 決定旋轉、縮放與傾斜時繞著哪一點進行,預設在元素正中央。基準點換了,同一個函式的結果就完全不同。

詳細用法請見 變形基準點

小提醒

純行內元素不接受 transform,要先把 display 改成 inline-blockblock

常見問題

transform 會影響周圍的元素嗎?

不會。它只改變視覺呈現,元素在文件流中仍佔著原本的位置與大小,因此旁邊的元素不會跟著位移,這也是它適合做動畫的原因。

函式的先後順序有差嗎?

有,而且差很多。變形是依序套用的,先旋轉再平移與先平移再旋轉,結果完全不同,因為座標軸會跟著一起轉,範例見 多個函式的順序

為什麼建議用 transform 做動畫?

因為位移與縮放交由合成層處理,不會觸發重新排版與重繪,比直接改寬高或位置流暢得多,詳見 動畫的效能

行內元素套用 transform 沒反應?

純行內元素不接受變形。把它改成 inline-blockblock 之後就會生效。

延伸閱讀