CSS 2D轉換 matrix() 詳解


2D轉換

IE10、Firefox、Opera 支持 transform 屬性

Chrome、Safari 需要前綴 -webkit- 。

IE9 需要前綴 -ms- 。

 

translate():接收兩個參數:水平移動的距離、垂直移動的距離

transform: translate(50px, 100px);

可以分別使用 translateX() 或者 translateY() 進行單獨指定。

 

rotate():接收一個參數:順時針(正數)或逆時針(負數)旋轉的角度

transform: rotate(45deg);

 

scale():接收兩個參數:width 的倍數、height 的倍數

transform: scale(0.5, 0.5);

使用 scaleX() 或者 scaleY() 單獨指定。

 

skew():接收兩個參數:圍繞 X 軸翻轉的角度、圍繞 Y 軸翻轉的角度

transform: skew(30deg, 30deg);

使用 skewX() 或者 skewY() 單獨指定。

 

如果需要同時應用多於一種轉換效果,需要使用空格,而不是逗號

transform: scale(2, 2) rotate(45deg);

 

transform-origin:其默認值為 transform 元素的中心點,即 50% 50% ;可以改變這個屬性的值,從而改變轉換的中心點。

比如將其 transform-origin 設置為 0 0 ,使用 scale() 轉換,能明顯看出區別。

中心點的設置是相對於元素的左上角,可以使用像素法、百分比法、關鍵字法自定義轉換的中心點。

 

matrix()詳解

matrix():接收 6 個參數:a、b、c、d、e、f

其計算規則為:

其中,x 和 y 表示轉換前矩陣偏移元素中心點的坐標;x' = ax + cy + e 和 y' = bx + dy + f 分別表示轉換后的坐標。

中心點的坐標固定為(0, 0),這個值與 transform-origin 的值無關;也就是說,即使 transform-origin 的值從默認的 50% 50% 被指定為 (假設)30px 30px ,其意為坐標 (0, 0) 從 50% 50% 的位置移動到 30px 30px 的位置; 30px 30px 這個點是新的中心點,其坐標為 (0, 0) 。

假設 matrix(1,0,0,1,30,30) ;

那么 x' 和 y' 分別等於 x + 30 和 y +30 ;

也就是說,經過矩陣轉換之后,(0, 0) 變成 (30, 30) ,(1, 1) 變成 (31, 31) ,以此類推。。。直到轉換元素所有的坐標都經過變化之后,在新的位置上組成了一個新的圖形。

其結果與 translate(30px, 30px) 完全相同。

動態演示參考這里

 

總結

位移:

matrix(1, 0, 0, 1, tx, ty)  ===  translate(tx + "px", ty + "px")

x' = x + tx

y' = y + ty 

 

縮放:

 matrix(sx, 0, 0, sy, 0, 0)  ===  scale(sx, sy)

x' = sx * x 

y' = sy * y 

 

旋轉:

matrix(cosθ, sinθ, -sinθ, cosθ, 0, 0)  ===  rotate(θ + "deg")

順序為 CS - SC

x' = x * cosθ - y * sinθ

y' = x * sinθ + y * cosθ

需要傳入具體的 cos 或者 sin 值。

 

斜切:

matrix(1, tan(θy), tan(θx), 1, 0, 0)  === skew(θx + "deg", θy + "deg")

x' = x * tan(θx)

y' = y * tan(θy)

 

參考:

理解 CSS3 transform 中的 matrix (矩陣)


免責聲明!

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



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