CSS3 transform 屬性詳解(skew, rotate, translate, scale)


寫這篇文章是因為在一個前端QQ群里,網友 “小豆豆” (應他要求要出現他的網名......) ,問skew的角度怎么算,因為他看了很多文章還是不能理解skew的原理。於是,我覺得有必要寫個博文,幫助那些不懂的人,讓他們看了此文就懂。

進入正題:

先說明下,電腦屏幕的XY軸跟我們平時所說的直角坐標系是不一樣的。如下圖:

圖上的盒子就是代表我們的電腦屏幕,原點就是屏幕的左上角,豎直向下為X軸正方向,水平向右為Y軸正方向。

 

1、傾斜skew

先看圖

http://images2015.cnblogs.com/blog/916005/201611/916005-20161118134714951-758389550.png

 

 每個圖下方都有skew的參數。粗的紅色的線分別是水平垂直方向上的投影,其長度與左邊的未傾斜的邊是相等的。而兩個參數所代表的角度,就是圖中黑色標記的角。從上面我們也可以看出來:skewx是代表與X軸傾斜的角度,方向是逆時針;skewY是代表與Y軸傾斜的角度,方向是順時針。

但是要注意的是,例如當用skew(60,60)的時候,角度的算法不是上面那樣的呢,因為當兩個參數的角度都大於45的時候,其實我們看到的是圖形的反面,也就是長和寬交換了位置。我們可以看圖片上的MyDiv確實是倒的

          

 此時黃色的才才是投影的矩形,可以和左邊的原圖進行比較。而原來的粗的紅色的線是錯的,錯的,錯的!!!多說幾遍先。而角度則是黑色的標出來的!

 其他角度,大家也可以去推一推。

需要說明的是skew的默認原點 transform-origin 是這個物件的中心點。這也是我在第二行有一條橘黃色的細線,是為了尋找中心點,然后獲取投影。

如果上面的你不能理解,就看我畫的投影,首先知道角度是怎么標記的,然后記住這么一句話:不管它是一個方向傾斜,還是兩個方向一起傾斜,最后的在X,Y軸上的投影長度是不變的,也就是參數都為 0 時候的長度但是投影要注意旋轉的角度。為了保持投影長度不變,所以就得拉長圖形,也就是變形。所以如果你想通過動手實驗的話,是得不出上面的結果,因為實際的不會變形。

如果你真的懂了,用手就可以畫出最后的結果的。

skew效果體驗              skewX效果體驗              skewY效果體驗

 

2、旋轉rotate

用法:

transform: rotate(45deg);

共一個參數“角度”,單位deg為度的意思,正數為順時針旋轉,負數為逆時針旋轉,上述代碼作用是順時針旋轉45度。

rotate()默認旋轉中心為圖片的中點

我以前用rotate寫過一個時鍾,獲取電腦當前時間,然后顯示,開始計時,具體如下圖:

 

 

 

源碼參見我很早之前寫的:javascript實例——時間日期篇

還有rotateX,rotateY是,這個動手操作下就能理解,記得旋轉中心是圖形的中心。

rotateX體驗效果        rotateY體驗效果            rotate效果體驗

 

3、縮放 scale

用法:transform: scale(0.5)  或者  transform: scale(0.5, 2);

參數表示縮放倍數;

  • 一個參數時:表示水平和垂直同時縮放該倍率
  • 兩個參數時:第一個參數指定水平方向的縮放倍率,第二個參數指定垂直方向的縮放倍率。

 需要注意的是,scale不看XY軸,而是看水平豎直的。具體可看下面的示例:

     

 

以上三個分別是scale(1,1);scale(0.5,2);scale(1.1,1.1);

scale效果體驗

 

4、移動 translate

用法:transform: translate(45px)  或者 transform: translate(45px, 150px);

參數表示移動距離,單位px,

  • 一個參數時:表示水平方向的移動距離;
  • 兩個參數時:第一個參數表示水平方向的移動距離,第二個參數表示垂直方向的移動距離。

這個比較簡單就不多說了,跟relative的屬性有點像。它也是不看XY軸的。

translateX水平移動體驗     translateY豎直移動體驗         translate效果體驗

 

組合

上面我們介紹了使用transform對元素進行旋轉、縮放、傾斜、移動的方法,這里講介紹綜合使用這幾個方法來對一個元素進行多重變形。

用法:

transform: rotate(45deg) scale(0.5) skew(30deg, 30deg) translate(100px, 100px);

這四種變形方法順序可以隨意,但不同的順序導致變形結果不同,原因是變形的順序是從左到右依次進行,這個用法中的執行順序為1.rotate  2.scalse  3.skew  4.translate

 

參考文章:

1、CSS3新增樣式大解析:[7]skew之元素變形

2、CSS3屬性transform詳解之(旋轉:rotate,縮放:scale,傾斜:skew,移動:translate)


免責聲明!

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



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