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


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

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

簡介: 一篇最簡約高效的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為盒布局方式*/
    
  4. perspective

    可以獨立為一個CSS屬性, 指定透視深度, 和作為函數使用方法一致.

  5. perspective-origin

    指定了3d觀察者的位置, 值為 perspective 屬性的消失點

    可取值:

    /*x-position 和 y-position 都是 <length-percentage> 值, 可取負值*/
    
    /*
    可使用的關鍵字: 
    x-position: left(0%), center(50%), right(100%)
    y-position: top(0%), center(50%), bottom(100%)
    */
    
    perspective-origin: x-position; /*一個值*/
    
    perspective-origin: x-position y-position; /*兩個值*/
    
    perspective-origin: y-position x-position; /*如果兩個值都是關鍵字, 先y后x也是允許的*/
    

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.1, 下一版預計添加幾處 flight.Playground(hover QuickView) 以便互動式理解

詳見 Github(@flightmakers)

2021.8.17 在掘金發布V0.1

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

2021.8.24上午 補全了許多其他Transform屬性,發布V2

2021.8.24中午 又添加了兩個透視屬性, 發布V2.1


免責聲明!

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



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