CSS Transform完全指南 #flight.Archives007

Title/ CSS Transform完全指南 #flight.Archives007

序: 第7天了! 終身學習, 堅持創作, 為生活埋下微小的信仰. 我是忘我思考,共同進步!

簡介: 一篇最簡約高效的CSS Transform教程.

Tag/ Transform介紹

CSS的 transform 可以讓元素產生變形效果,比如旋轉,縮放,傾斜或平移

element {
    transform: scale(0.5) translate(10px, 10px); /*`transform` 支援同時指定多個函數.*/
}

上面程式碼中 element 會縮放一半大小, 同時向右和向下各平移 10px.

接下來逐一介紹現支援的所有 Transform 函數.

Tag/ Transform 函數介紹

Matrix(矩陣計算)相關函數

  1. matrix3d(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)

    這個函數涉及高等數學知識, 矩陣變換, 使用非常複雜 ,隨後介紹的rotate, scale, skew, translate 函數都是基於這個 matrix 函數實現的

    但是在實戰中直接使用這個函數的情況不大, 多數是間接使用基於該方法實現的函數, 所以本文不詳細介紹該方法.

    就像Canvas中的 webgl, 在實戰中一般都是使用基於 webgl 實現的JS庫, 如 three.js

    關於 matrix矩陣 的詳細內容可以參見 //www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-矩陣/

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

    這個函數是 matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1) 的簡寫形式.

Perspective(透視深度)相關函數

  1. perspective(l)

    l: <length>, 表示透視深度, 在值為正數時生效

Rotate(旋轉)相關函數

  1. rotate3d(x, y, z, a)

    x,y,z,a: <angle>, 橫坐標, 縱坐標, Z坐標 和 順時針旋轉的角度

  2. rotate(a)

    a: <angle>, 表示順時針旋轉的角度

  3. rotateX(a)

    a: <angle>, 表示橫坐標旋轉的角度

  4. rotateY(a)

    a: <angle>, 表示縱坐標旋轉的角度

  5. rotateZ(a)

    a: <angle>, 表示Z坐標旋轉的角度

Scale(縮放)相關函數

  1. scale3d(sx, sy, sz)

    sx, sy, sz: <percentage>, 在X軸, Y軸, Z軸上的縮放大小.

    參數取值為 1 時不進行縮放處理, 在 [0~1] 區間按比例縮小, 在 [>1] 時按比例放大.

    參數取負值時元素將沿原點中心翻轉.

  2. scale(sx, [sy])

    sx, sy(可選): <percentage>, 在X軸, Y軸上的縮放大小.

  3. scaleX(s)

    s: <percentage>, 在X軸上的縮放大小.

  4. scaleY(s)

    s: <percentage>, 在Y軸上的縮放大小.

  5. scaleZ(s)

    s: <percentage>, 在Z軸上的縮放大小.

Skew(傾斜)相關函數

  1. skew(ax, [ay])

    ax, ay(可選): <angle>, 元素沿X軸和Y軸傾斜的角度

  2. skewX(a)

    a: <angle>, 元素沿X軸傾斜的角度

  3. skewY(a)

    a: <angle>, 元素沿Y軸傾斜的角度

Translate(平移)相關函數

備註: translate 是一個CSS屬性, 可以單獨使用, 用法與函數一致.

  1. translate3d(tx, ty, tz)

    tx, ty, tz: <length>, 元素沿X軸,Y軸和Z軸平移的距離.

  2. translate(tx, [ty])

    tx, ty(可選): <length>, 元素沿X軸和Y軸平移的距離.

  3. translateX(t)

    t: <length>, 元素沿X軸平移的距離.

  4. translateY(t)

    t: <length>, 元素沿Y軸平移的距離.

  5. translateZ(t)

    t: <length>, 元素沿Z軸平移的距離.

Tag/ transform-origin 屬性介紹

transform-origin 屬性可以更改元素變形的原點, 默認值為 center

可取值:

transform-origin: 2px; /*如果只有一個值, 則表示原點的橫坐標*/

transform-origin: 2px 2em; /*如果有兩個值, 則分別表示原點的橫坐標和縱坐標*/

transform-origin: left top; /*可以使用關鍵字: left, center, right, top 或 bottom*/

transform-origin: top right; /*如果兩個值都是關鍵字, 則可以先縱坐標, 後橫坐標*/

transform-origin: 20px left; /*這是錯誤的表示. 如果關鍵字和長度單位同時使用, 不可以都表示縱坐標或橫坐標*/

transform-origin: 2px 10% 20px; /*如果有三個值, 則前兩個值用法不變, 第三個值表示原點的深度(Z坐標)*/

MDN中文文檔 //developer.mozilla.org/zh-CN/docs/Web/CSS/transform

MDN 英文文檔 //developer.mozilla.org/en-US/docs/Web/CSS/transform

transform-origin屬性介紹 //developer.mozilla.org/zh-CN/docs/Web/CSS/transform-origin

CSS-Tricks //css-tricks.com/almanac/properties/t/transform/

->> Version History

現在版本為V1.0, 下一版預計添加兩處(函數和transform-origin) flight.Playground 以便互動式理解

詳見 Github(@flightmakers)

2021.8.17 在掘金髮布V0.1

2021.8.18 補全內容. 發布V1.0

Tags: