css3制作動畫的幾個屬性:變形(transform),過渡(transition)和動畫(animation)。
首先介紹transform變形。
transform英文意思:改變,變形。
css3中transform主要包括以下幾種:旋轉(rotate),扭曲(skew),縮放(scale)、移動(translate)和矩陣變形matrix。
語法:
transform : none | <transform-function> [ <transform-function> ]*
transform: rotate | scale | skew | translate |matrix;
none就是默認值,不進行變形。
<transform-function>:表示一個或多個變換函數,以空格分開。即可同時對一個元素進行transform的多種屬性操作,例如同時用rotate,scale和translate三種。
rotate(<rotate-angle> [<cx> <cy>])
skewX(<skew-angle>)
skewY(<skew-angle>)
scale(<sx> [<sy>])
translate(<tx> [<ty>])
matrix(<a> <b> <c> <d> <e> <f>)
一、旋轉rotate
rotate(<angle>) :通過指定的角度參數對元素指定一個2D rotation(2D旋轉),需先有transform-origin屬性的定義。
transform-origin定義的是旋轉的基點,其中angle是指選擇角度,正順時針旋轉,負逆時針旋轉。
rotate是一個很有用的動畫,可配合animation做出非常有意思的效果,看綜合實例效果。
二、translate平移
translate()函數可以把元素從原來的位置移動,而不影響在x,y軸上的任何web組件,類似於position:relative。
根據給定的left(x坐標),top(y坐標)位置參數,元素從其當前位置移動。
translate()分三種情況:
1、translate(x,y)水平和垂直方向同時移動。
Note:translate移動的基點默認為元素中心點,可以根據transform-origin改變基點。
如果第二個值沒設置,默認為0。
2、translateX(x)僅水平方向移動。
相當於translate(x,0,)的簡寫,基點為元素中心點。
3、translateY(y)僅垂直方向移動。
相當於translate(0,y)的簡寫,基點為元素在中心。
三、scale縮放
scale縮放和translate移動非常相似,也有三種情況。
縮放中心點:即元素的中心位置
基數:縮放就是既可以縮小,也可以放大;縮放基數為1,大於1放大,小於1縮小。
1、scale(x,y)元素在水平和垂直方向同時縮放。
Note:第二個參數未提供則取與第一個一樣的值。
2、scaleX(x)x軸縮放。
3、scaleY(y)y軸縮放。
scale可以取負值,負值會讓元素翻轉並縮放。

<style> div { width: 100px; height: 100px; border-top: 1px dotted orange; border-right: 1px solid red; border-bottom: 1px solid pink; border-left: 1px solid green; text-align: center; line-height: 100px; color: red; font-size: 15px; transform: scale(-1.5); margin: 0 auto; margin-top: 50px; } </style> <div>Scale(-1.5)</div>
四、skew切變
這個屬性是用來制作傾斜度的,設計時在2d里面創建3d透視圖的時候必須的屬性。
skew和translate、scale一樣有三種情況。
1、skew(x,y):x軸和y軸上的skew transformation(斜切變換)。
即x軸和y軸同時按照一定的角度值進行扭曲變形。
如果第二個參數未提供,則值為0,也就是y軸無斜切。
2、 skewX(x):按給定角度沿x軸指定一個skew transformation(斜切變換)。
3、skewY(y):按給定的角度沿Y軸指定一個skew transformation(斜切變換)。
五、矩陣matrix
matrix(<number>, <number>, <number>, <number>, <number>, <number>):以一個含六值的(a,b,c,d,e,f)變換矩陣的形式指定一個2D變換,相當於直接應用一個[a,b,c,d,e,f]變換矩陣。就是基於水平方向和垂直方向重新定位元素。
SVG,css3,html5的canvas中都有矩陣變換,接下來簡單說說。
一個元素渲染后就可以得到一張位圖,然后對這個位圖上每一點進行變換,就可以得到新的一張位圖,從而產生平移,縮放,旋轉,切變及鏡像反射等效果。
1、幾個概念
- 矩陣乘法中,首先要確認兩個矩陣是否可以相乘:只有第一個矩陣的列數等於第二個矩陣的行數,這樣的兩個矩陣才能相乘。
- 左乘【前乘】:即乘在左邊,A左乘E即AE。
- 一個m*n的矩陣左乘一個n*p的矩陣,將得到一個m*p的矩陣。
2D矩陣變換都提供6個參數a,b,c,d,e,f,基本公式為:
其中,x和y是元素最開始的坐標,x'和y'是矩陣變換后得到的新坐標。
Note:變換矩陣中a,b,c,d,e,f6個參數是豎着排的。
x'=ax+cy+e
y'=bx+dy+f
2、矩陣變換和transform的關系
a、矩陣和translate平移
x'=ax+ cy+e,我們設a=1,c=0,則x'=x+e,
y'=bx+dy+f,同樣設b=0,d=1,則y'=y+f。
這就是translate(e,f)了。
所以說translate(e,f)就是簡化了的變換矩陣matrix(1,0,0,1,e,f),
(x,y)平移(tx,ty),就意味着做了一個【1 0 0 1 tx,ty】的矩陣變換。
b、矩陣和scale縮放
x'=ax+cy+e,我們設c=0,e=0,則x'=ax,
y'=bx+dy+f,我們設b=0,f=0,則y'=dy。
這就是scale(a,d)了。
所以說scale(a,d)就是簡化了的變換矩陣matrix(a,0,0,d,0,0)。
(x,y)縮放(sx,sy),就意味着做了一個【sx 0 0 sy 0 0】的矩陣變換。
c、矩陣和rotate旋轉
rotate(a deg)等價於【cons(a) sin(a) -sin(a) cons(a) 0 0】矩陣變換。
d、矩陣和skew切變
skewX(a deg)等價於【1 0 tan(a) 1 0 0】的矩陣變換。
skewY(a deg)等價於【1 tan(a) 0 1 0 0】的矩陣變換。
所以說Matrix就是將所有的2D效果全部組合在了一起使用。
六、transform-origin
前面說了,元素默認的基點是其中心位置,可用transform-origin改變其基點。
使用:
transform-origin(x,y):用來設置元素的基點(參考點)。默認點是元素的中心點。x,y的值可以是百分比,em,px,其中x也可以是left,center,right,y可以是top,center,bottom,這點和background-position一樣。
七、資源鏈接
CSS3:transform與transition背后的數學原理[winter]
w3 文檔,關於坐標系以及矩陣變換屬性
w3 文檔,SVG中的3D變換矩陣
w3 文檔,CSS 3中的3D變換矩陣
純css旋轉,各種動畫,可作為加載時動畫【updated 2015,8,4】
本文作者starof,因知識本身在變化,作者也在不斷學習成長,文章內容也不定時更新,為避免誤導讀者,方便追根溯源,請諸位轉載注明出處:http://www.cnblogs.com/starof/p/4560076.html有問題歡迎與我討論,共同進步。