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
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 屬性介紹
-
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座標)*/
-
transform-style
指定元素的子元素是位於 3D 空間中還是平面中, 預設值是
flat
.可取值:
transform-style: flat; /*子元素位於獨立的平面*/ transform-style: preserve-3d; /*子元素位置繼承自父元素的3d位置*/
-
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為盒佈局方式*/
->> 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/
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