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(矩陣計算)相關函數
-
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-矩陣/ -
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(透視深度)相關函數
-
perspective(l)l:<length>, 表示透視深度, 在值為正數時生效
Rotate(旋轉)相關函數
-
rotate3d(x, y, z, a)x,y,z,a:<angle>, 橫坐標, 縱坐標, Z坐標 和 順時針旋轉的角度 -
rotate(a)a:<angle>, 表示順時針旋轉的角度 -
rotateX(a)a:<angle>, 表示橫坐標旋轉的角度 -
rotateY(a)a:<angle>, 表示縱坐標旋轉的角度 -
rotateZ(a)a:<angle>, 表示Z坐標旋轉的角度
Scale(縮放)相關函數
-
scale3d(sx, sy, sz)sx,sy,sz:<percentage>, 在X軸, Y軸, Z軸上的縮放大小.參數取值為
1時不進行縮放處理, 在[0~1]區間按比例縮小, 在[>1]時按比例放大.參數取負值時元素將沿原點中心翻轉.
-
scale(sx, [sy])sx,sy(可選):<percentage>, 在X軸, Y軸上的縮放大小. -
scaleX(s)s:<percentage>, 在X軸上的縮放大小. -
scaleY(s)s:<percentage>, 在Y軸上的縮放大小. -
scaleZ(s)s:<percentage>, 在Z軸上的縮放大小.
Skew(傾斜)相關函數
-
skew(ax, [ay])ax,ay(可選):<angle>, 元素沿X軸和Y軸傾斜的角度 -
skewX(a)a:<angle>, 元素沿X軸傾斜的角度 -
skewY(a)a:<angle>, 元素沿Y軸傾斜的角度
Translate(平移)相關函數
備注: translate 是一個CSS屬性, 可以單獨使用, 用法與函數一致.
-
translate3d(tx, ty, tz)tx,ty,tz:<length>, 元素沿X軸,Y軸和Z軸平移的距離. -
translate(tx, [ty])tx,ty(可選):<length>, 元素沿X軸和Y軸平移的距離. -
translateX(t)t:<length>, 元素沿X軸平移的距離. -
translateY(t)t:<length>, 元素沿Y軸平移的距離. -
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坐標)*/
->> Reference link
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-originCSS-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, 添加了兩個鏈接
