CSS3神奇的matrix

關鍵詞:matrix

css最為人稱道的優(yōu)點之一就是增加了transform功能,用它來配黑transition可是不用js就能夠實現(xiàn)優(yōu)美的動畫效果,css3提供了四種變換方法位移,縮放,旋轉,斜切
簡單演示下效果:
* <div class="box"></div>

       /* CSS代碼 */  

        .box{
            width: 100px;
            height: 100px;
            box-sizing: content-box;
            background-color: #eee;
            border:1px solid #ccc;
            transition: 1s;
        }
        .box:hover{
            
             transform: skew(35deg);    /* 斜切 */  
             transform:scale(1, 0.5);   /* 縮放 */
             transform:rotate(45deg);   /* 旋轉 */
             transform:translate(10px, 20px);  /* 位移 */

        }

那這些方法是怎么實現(xiàn)的呢,其實都是通過矩陣的方式做出來的,

matrix功能實現(xiàn)

一提到矩陣是不是聯(lián)想到線性代數(shù)啦,突然間好方( ⊙ o ⊙ )?。?br> 其實并不難,用到的都是簡單的矩陣
旋轉、壓縮、斜切等,本質上都是應用的matrix()方法實現(xiàn)的(修改matrix()方法固定幾個值),只是類似于transform:rotate這種表現(xiàn)形式,我們更容易理解,記憶與上手。

寫法是這樣的
* transform: matrix(a,b,c,d,e,f);

六個參數(shù)對應的矩陣:

矩陣

其變化的方法:

變換公式

什么意思呢?

  • ax+cy+e表示變換后的水平坐標,
  • bx+dy+f 表示變換后的垂直位置。

位移(displace)
* transform: matrix(1, 0, 0, 1, 100, 100); /* a=1, b=0, c=0, d=1, e=100, f=100 */

變換后:

  • x坐標 : ax+cy+e = 10+00+30 =30,
  • y坐標 : bx+dy+f = 00+10+30 =30.

縮放(scale)
* transform: matrix(3, 0, 0, 0.5, 0, 0);

其實就是這樣一個公式

*比例是 s,則有matrix(s, 0, 0, s, 0, 0);第一個s代表x軸,第二個s代表y軸。

  • x' = ax+cy+e = sx+0y+0 = s*x;
  • y' = bx+dy+f = 0x+sy+0 = s*y;

旋轉(rotate)

* transform: matrix(0.866025,0.500000,-0.500000,0.866025,0,0);  // 旋轉30度
  • matrix(cosθ,sinθ,-sinθ,cosθ,0,0)
  • x' = xcosθ-ysinθ+0 = xcosθ-ysinθ
  • y' = xsinθ+ycosθ+0 = xsinθ+ycosθ

拉伸(skew)

* transform: matrix(1,0,0.75,1,0,0);
  • matrix(1,tan(θy),tan(θx),1,0,0)
  • x' = x+ytan(θx)+0 = x+ytan(θx)
  • y' = xtan(θy)+y+0 = xtan(θy)+y

我在github上上傳了幾個小demo,可以對matrix矩陣進行轉換:



利用matrix矩陣,可以實現(xiàn)IE下的兼容,而且還可以做出很多特別炫的效果,大家多多嘗試,共勉!!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容