1. 程式人生 > 其它 >CSS Transform完全指南(第二版) #flight.Archives007

CSS Transform完全指南(第二版) #flight.Archives007

Coding Changes the World. 最簡約高效的前端教程 / 表達最張狂的個性 / 創作不一樣的體驗 / 設計狂喜 ---- 忘我思考

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 屬性介紹

  1. 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座標)*/
    
  2. transform-style

    指定元素的子元素是位於 3D 空間中還是平面中, 預設值是 flat.

    可取值:

    transform-style: flat; /*子元素位於獨立的平面*/
    
    transform-style: preserve-3d; /*子元素位置繼承自父元素的3d位置*/
    
  3. transform-box

    指定變形的佈局框

    /*不瞭解CSS Box Model的, 可以去搜一下, 本文不詳細介紹.*/
    transform-box: content-box /*使用內容框為盒佈局方式*/
    
    transform-box: border-box /*使用邊框框為盒佈局方式*/
    
    transform-box: fill-box /*使用填充邊界框為盒佈局方式, 填充邊界框是僅包含元素幾何形狀的框. 對於基本形狀, 這是填充的區域.*/
    
    transform-box: stroke-box /*使用描邊框為盒佈局方式. 描邊框是包含元素的幾何形狀及其筆畫形狀的邊界框.*/
    
    transform-box: view-box /*使用最近父元素的SVG Viewport為盒佈局方式*/
    

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/

Quackit https://www.quackit.com/css/css3/properties/css_transform-box.cfm

張鑫旭 - 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

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

詳見 Github(@flightmakers)

2021.8.17 在掘金髮布V0.1

2021.8.18 補全內容. 釋出V1.0, 添加了兩個連結

2021.8.24 補全了許多其他Transform屬性,釋出V2