iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Modern Web

重造會 Slide 的輪子!深入 JavaScript、CSS 模組化設計系列 第 15

Day 15 - CSS Transform 屬性指南 (2) 二維函式 (2D)

  • 分享至 

  • xImage
  •  

CSS 的 transform 屬性值為 <transform-function>,可以把它想像成程式語言裡的函式 (function),搭配參數,可以展現出平移、旋轉、縮放及傾斜的效果。在平面中,相對於元素的參考點,對 X 軸與 Y 軸進行變化,即為 2D 效果。

Translate (平移轉變)

  • translateX
  • translateY
  • translate

3D:translateZ、translate3d。

translateX

主要用途是對 DOM 元素進行 X 軸方向的平移,以左上角為參考點,轉變 DOM 元素與參考點的距離。

語法:

transform: translateX(x);

參數:<length> | <percentage>

  • 可接受長度單位,例如 px、pt、em、rem 等等。
  • 可接受百分比,例如 50%、75% 等等。

transform: translateX 範例
查看範例 15-1圖 a: transform: translateX 範例畫面

可點擊筆者設計的範例,動手調整 translateX 的參數值。

translateY

語法:

transform: translateY(y);

主要用途是對 DOM 元素進行 Y 軸方向的平移,以左上角為參考點,轉變 DOM 元素與參考點的距離。

參數:<length> | <percentage>

  • 可接受長度單位,例如 px、pt、em、rem 等等。
  • 可接受百分比,例如 50%、75% 等等。

transform: translateY 範例
查看範例 15-2圖 b: transform: translateY 範例畫面

可點擊筆者設計的範例,動手調整 translateY 的參數值。

translate

語法:

transform: translate(x, [y]);

參數:<length> | <percentage>

  • 可接受長度單位,例如 px、pt、em、rem 等等。
  • 可接受百分比,例如 50%、75% 等等。
  • 只有一參數時,代表 x、y 都使用相同參數值。

transform: translate 範例
查看範例 15-3圖 c: transform: translate 範例畫面

可點擊筆者設計的範例,動手調整 translate 的參數值,有 x、y 兩種參數。translate 為 translateX 及 translateY 的集合。

Scale (縮放比例)

  • scaleX
  • scaleY
  • scale

3D:scaleZ、scale3d。

scaleX

主要用途是對 DOM 元素進行 X 軸方向的縮小及放大。

語法:

transform: scaleX(x);

參數:<number>

  • 大於 1 的數字為放大,大於 0 小於 1 之間的小數為縮小。
  • 負數為往 X 軸另一個方向進行放大或縮小。

transform: scaleX 範例
查看範例 15-4圖 d: transform: scaleX 範例畫面

可以看到範例中,調到 0 的時候,因為倍數為 0 的關係,圖片會消失。調成小於 1 的負數值時,圖片會左右相反。

scaleY

主要用途是對 DOM 元素進行 Y 軸方向的縮小及放大。

語法:

transform: scaleY(y);

參數:<number>

  • 大於 1 的數字為放大,大於 0 小於 1 之間的小數為縮小。
  • 負數為往 Y 軸另一個方向進行放大或縮小。

transform: scaleY 範例
查看範例 15-5圖 e: transform: scaleY 範例畫面

可以看到範例中,調到 0 的時候,因為倍數為 0 的關係,圖片會消失。調成小於 1 的負數值時,圖片會上下顛倒。

scale

語法:

transform: scale(x, y);

參數:<number>

  • 大於 1 的數字為放大,大於 0 小於 1 之間的小數為縮小。
  • 負數為往另一個方向進行放大或縮小。

transform: scale 範例
查看範例 15-6圖 f: transform: scaleX範例畫面

可以看到範例中,X 軸調到 0 的時候,因為倍數為 0 的關係,圖片會消失。調成小於 1 的負數值時,圖片會左右相反。相對的,Y 軸調成小於 1 的負數值時,圖片會上下顛倒。

可點擊筆者設計的範例,動手調整 scale 的參數值,有 x、y 兩種參數。scale 為 scaleX 及 scaleY 的集合。

Skew (傾斜角度)

  • skewX
  • skewY
  • skew

skewX

從 X 軸方向以設定的角度傾斜。

語法:

transform: skewX(x);

參數:<angle>

  • 可接受角度單位,例如 deg、grad、rad、turn
  • 為數字搭配角度單位,例如 35deg、50grad

transform: skewX 範例
查看範例 15-7圖 g: transform: skewX 範例畫面

skewY

從 Y 軸方向以設定的角度傾斜。

語法:

transform: skewY(y);

參數:<angle>

  • 可接受角度單位,例如 deg、grad、rad、turn
  • 為數字搭配角度單位,例如 45deg、60grad

transform: skewY 範例
查看範例 15-8圖 h: transform: skewY 範例畫面

skew

從 X 軸方向以設定的 x 角度傾斜。,從 Y 軸方向以設定的 y 角度傾斜。

語法:

transform: skew(x, y);

參數:<angle>

  • 可接受角度單位,例如 deg、grad、rad、turn
  • 為數字搭配角度單位,例如 55deg、70grad

transform: skew 範例
查看範例 15-9圖 i: transform: skew 範例畫面

角度單位說明

單位 意思 說明 範例
deg 完整的圓是 360deg 0deg、90deg、54.87deg
grad 百分度 完整的圓是 400grad 0grad、100grad、50.5grad
rad 弧度 完整的圓約為 6.2832rad (2π) 0rad、1.0505rad
turn 圈数 完整的圓是 1turn 0turn、0.5turn、1.5turn

比較直覺的用法,建議使用 deg,其它角度單位較少看到有人使用。

Rotate (旋轉)

  • rotate

3D:rotateX、rotateY、rotateZ、rotate3d

rotate

進行順時針或逆時針的旋轉。

語法:

transform: rotate(a);

參數:<angle>

  • 可接受角度單位,例如 deg、grad、rad、turn
  • 為數字搭配角度單位,例如 60deg、30grad

transform: rotate 範例
查看範例 15-10圖 j: transform: rotate 範例畫面

很直覺的使用,依照設定的角度將元素進行進行順時針或逆時針的旋轉。正數的角度為順時針,負數的角度為逆時針。

Matrix (變形矩陣)

  • matrix

3D: matrix3d

matrix

一個可以一次設定六個參數的屬性,分別為:

代號 參數名 作用 預設值
a scaleX X 軸縮放 1
b skewY Y 軸傾斜 0
c skewX X 軸傾斜 0
d scaleY Y 軸縮放 1
tx translateX X 軸移動 0
ty translateY Y 軸移動 0

語法

matrix(a, b, c, d, tx, ty)

參數:<number>

  • 只接受數字

matrix 範例
查看範例 15-11圖 k: transform: matrix 範例畫面

比較特別的是代號 b 和 c 的參數雖然是 skew,但只接受數字,不需要輸入單位。而且只能很微小差異的值。如果 skewX 使用 35deg 這邊也跟著填數字 35,整個 DOM 元素會炸掉喔 ^^"。建議區間 -2 至 2 之間微調即可。

總結

今天的範例花了筆者很多時間,想讓大家可以實際感受一下設定值不同的差別,更快瞭解 transform 屬性如何使用,點範例進去就有和 GIF 示範動圖一樣的界面可以操作喔。

明天依舊是 transform,和 3D 效果有關的屬性值。依舊會有滿滿範例可以玩唷。


文中範例可在 GitHub Page 閱讀。
原始碼可在 2022 鐵人賽專用 GitHub Repo 下載。


上一篇
Day 14 - CSS Transform 屬性指南 (1) 說明
下一篇
Day 16 - CSS Transform 屬性指南 (3) 三維函式 (3D)
系列文
重造會 Slide 的輪子!深入 JavaScript、CSS 模組化設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言