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矩陣 的詳細內容可以參見 https://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中文文檔 https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform

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

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

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

張鑫旭 - Matrix矩陣 https://www.zhangxinxu.com/wordpress/2012/06/css3-transform-matrix-矩陣/

張鑫旭 - CSS動畫 https://www.zhangxinxu.com/wordpress/2010/11/css3-transitions-transforms-animation-introduction/

->> Version History

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

詳見 Github(@flightmakers)

2021.8.17 在掘金發布V0.1

2021.8.18 補全內容. 發布V1.0, 添加了兩個鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM