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(矩陣計算)相關函數
-
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-矩陣/ -
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中文文檔 //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
->> Version History
現在版本為V1.0, 下一版預計添加兩處(函數和transform-origin) flight.Playground 以便互動式理解
詳見 Github(@flightmakers)
2021.8.17 在掘金髮布V0.1
2021.8.18 補全內容. 發布V1.0