兼容所有瀏覽器的旋轉效果-IE濾鏡Matrix和CSS3transform


在現代瀏覽器中使用CSS3的transform樣式即可輕松搞定,但是對於國內IE瀏覽器(特別是7,8)還占有較大份額的情況下,兼容性還是必須要考慮的,所以也特意記錄下IE旋轉濾鏡的使用。

 

在IE下的旋轉濾鏡有兩種:

第一種:

CSS樣式

filter:progid:DXImageTransform.Microsoft.BasicImage(rotation:1)

其中rotation屬性只有四個值:0,1,2,3 分別表示的旋轉度數是:0度,90度,180度,270度。查看參考文檔,請點擊這里,但是想要旋轉其他任意度數上面的方法就不適合了,這就需要下面的方法。

第二種

CSS樣式

filter:progid:DXImageTransform.Microsoft.Matrix(enabled=bEnabled ,SizingMethod=sMethod ,FilterType=sType ,Dx=fDx ,Dy=fDy ,M11=fM11 ,M12=fM12 ,M21=fM21 ,M22=fM22)
  • enabled:定義濾鏡是否被禁止使用,取值范圍為布爾值,當取值為true的時候濾鏡可用;取值為false時,禁止使用濾鏡。
  • SizingMethod:定義元素使用圖片時是否改變屬性。當取值為clip to original時,元素不改變尺寸;當取值為auto expand時,元素改變尺寸。
  • FilterType:定義元素旋轉的方法。當取值為bilinear時,使用平滑、靜態的顯示效果;nearest neighhbor一般用於動態濾鏡中。
  • Dx:定義水平方向上的向量增加量。使用浮點數定義增量的大小,默認值為1.0。
  • Dy:定義垂直方向上的向量增加量。使用浮點數定義增量的大小,默認值為1.0。
  • M11:定義元素右側邊線水平方向上的顯示位置。使用浮點數定義增量的大小,默認值為1.0。當取值大於1.0時,右邊線向右移動,同時拉伸元素的寬度;當取值小於1.0時,右邊線向左移動,同時減小元素的寬度。
  • M12:定義元素底側邊線水平方向上的顯示位置。使用浮點數定義增量的大小,默認值為0時。當取值大於0時,底部連線向右移動,同時拉伸元素的寬度;當取值小於0時,底部邊線向左移動,同時拉伸元素的寬度。
  • M21:定義元素右側邊線豎直方向上的顯示位置。使用浮點數定義增量的大小,默認值為0。當取值大於0時,底部邊線向下移動,同時拉伸元素的高度;當取值小於0時,底部邊線向上移動,同時拉伸元素的高度。
  • M22:定義元素底側邊線豎直方向上的顯示位置。使用浮點數定義增量的大小,默認值為1.0。當取值大於1.0時,底部邊線向下移,同時拉伸元素的高度;當取值小於1.0時,右邊線向上移動,同時減小元素的高度。

以上是此濾鏡全部的參數,但是平時用的最多的參數只有5個,所以可以簡化為:

CSS樣式

filter:progid:DXImageTransform.Microsoft.Matrix(SizingMethod=sMethod ,M11=fM11 ,M12=fM12 ,M21=fM21 ,M22=fM22)

SizingMethod一般選擇“auto expand”,它和“clip to original”值的區別如下圖(圖中旋轉角度都為45度):

auto expand和clip to original的區別

下面來說下如何計算旋轉值,也就是如何計算M11,M12,M21,M22的值。

其實也很簡單,用計算器算即可,如果你要做旋轉動畫,那么需要JS去計算,M11=cos(角度值),M12=-sin(角度值),M21=sin(角度值),M22=cos(角度值)。例如:你想要旋轉10度,那么sin(10)約=0.174,cos(10)約=0.985,所以四個值相應為:M11=0.985,M12=-0.174,M21=0.174,M22=0.985

在這里也想提下,IE Matrix濾鏡還可以實現放大和縮小的效果,類似於zoom樣式,只要將M11,M12,M21,M22的值乘以相應的倍數即可。

Ps:在IE6和IE7中如果將濾鏡寫在<style>標簽或者樣式表中,會出現以下兩個問題,

  • 此濾鏡之后的樣式都會失效;
  • 旋轉濾鏡一個頁面中只允許有一個。

這兩點的解決方案是:將濾鏡樣式直接內嵌在元素標簽上。T_T

如果有更好的解決方法可以留言。想了解更多Matrix濾鏡,請猛戳這里這里

這樣配合CSS3樣式transform即可兼容所有瀏覽器實現旋轉效果。

原文出自:http://www.csscool.net/ie-matrix-and-css3-transform.html


免責聲明!

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



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