10分鐘入門CSS3 Animation
簡(jiǎn)介
Animation可以讓你不用依賴javascript或jquery , 用純CSS在網(wǎng)頁(yè)中輕松實(shí)現(xiàn)各種動(dòng)畫效果 。
兼容性
animation在絕大部分主流瀏覽器都得到了很好的支持!還在兼容IE9的同學(xué)要謹(jǐn)慎使用 。

CSS 坐標(biāo)系
在了解animtion之前 , 我們有必要先了解css的坐標(biāo)系 , 因?yàn)楹芏嗟腶nimation效果都和元素的坐標(biāo)密切相關(guān) 。在css3中網(wǎng)頁(yè)不再是一個(gè)二維平面,而是一個(gè)三維空間,水平方向、豎直方向和垂直屏幕方向分別對(duì)應(yīng)三維坐標(biāo)系的x,y,z軸,如下圖所示 。箭頭方向?yàn)檎颍粗疄樨?fù)向(注意y軸方向與常規(guī)笛卡爾坐標(biāo)系相反) 。

Animations
1. Transforms
transform中文譯為“轉(zhuǎn)換”,但我更傾向于稱呼它“變形”(大名鼎鼎的變形金剛叫transformer) 。我們可以使用transform function使html元素產(chǎn)生各種各樣的變形,比如平移、縮放、旋轉(zhuǎn)、扭曲等,而且不會(huì)影響正常的文檔流(document flow) 。
(1) Translate
Translate一般譯為“翻譯” , 但在css里面一般用作“平移”,因?yàn)閠ranslate用于改變html元素的在3d坐標(biāo)系位置 。translate支持在坐標(biāo)系內(nèi)任意方向移動(dòng)(通過(guò)任意組合x、y、z方向的向量),單位可以是長(zhǎng)度單位和百分比(百分比是相對(duì)于被平移的元素自身尺寸 , x軸是相對(duì)于width,y軸是相對(duì)于height,而在z軸方向由于元素是沒(méi)有‘厚度’的,所以對(duì)于z方向不能用百分比表示),例如:

注意:

(2) Scale
Scale意為“縮放”,顧名思義,是用于改變?cè)氐拇笮?。例如:


(3) Rotate
Rotate意為“旋轉(zhuǎn)”,支持將元素以x、y、z為軸旋轉(zhuǎn) , 旋轉(zhuǎn)正方向?yàn)槊娉鴺?biāo)軸正向逆時(shí)針?lè)较颍蓞⒖忌厦孀鴺?biāo)系示意圖 。rotate方法接收一個(gè)角度作為參數(shù) , 角度>0 正向旋轉(zhuǎn),角度<0 負(fù)向旋轉(zhuǎn),例如:


(4) 組合
我們可以將不同的transform方法組合起來(lái)使用,如:

組合方法的執(zhí)行順序是從右往左 , 即先執(zhí)行scale,然后rotate,最后translate,產(chǎn)生的效果是逐次累加的 。方法書寫的順序?qū)ψ詈笮Ч泻艽蟮挠绊懀聪旅胬樱貀軸平移和放大,順序不同 , 產(chǎn)生的結(jié)果有明顯差別:

如果先translate再scale,平移的距離也將被等比例縮放,而先scale再translate則不會(huì) 。所以在使用transform需按照 translate -> rotate -> scale 的順序書寫,讓scale先執(zhí)行,以免放大translate的效果,而rotate先translate執(zhí)行以防止帶著平移的距離一起轉(zhuǎn)動(dòng) 。我覺(jué)得這是transform目前不方便的地方,因?yàn)榉椒ㄖg相互干擾并不容易理解,書寫順序也不容易記住 。在未來(lái)有望通過(guò)使用獨(dú)立的css transform屬性解決這一問(wèn)題 , 因?yàn)楠?dú)立的transform屬性對(duì)書寫順序沒(méi)有依賴,方法之間彼此不會(huì)干擾 。
Transition
Transition翻譯為“過(guò)渡”,強(qiáng)調(diào)的是過(guò)程 。在css中指在一段時(shí)間內(nèi),元素從一個(gè)狀態(tài)(對(duì)應(yīng)一個(gè)css屬性)過(guò)渡到另一個(gè)狀態(tài)的動(dòng)態(tài)過(guò)程 。我們可以決定以何種方式過(guò)渡過(guò)渡和花費(fèi)多少時(shí)間 。
例如,我們把鼠標(biāo)懸浮到云上面的時(shí)候使其變大一些可以這么寫:

效果:

transition可以和transform結(jié)合使用 , 比如我們可以讓云變大的同時(shí)轉(zhuǎn)一圈:

效果:

我們可以給不同的效果設(shè)置不同的過(guò)渡時(shí)間:

我們也可以給效果設(shè)置延時(shí)時(shí)間,比如我們等寬度增大之后再旋轉(zhuǎn):

效果:

我們還可以給每個(gè)效果設(shè)置不同的timing function,用于控制加速效果 。
比如我們可以讓旋轉(zhuǎn)的速度逐漸加快:

效果:

更多的timing function請(qǐng)后面會(huì)進(jìn)一步討論 , 也可以參考 MDN transition-timing-functions
Keyframes
(1) 基本用法
Keyframe中文譯為“關(guān)鍵幀”,是animation中很強(qiáng)大的功能 , 通俗說(shuō)就是我們可以通過(guò)定義一段動(dòng)畫中的關(guān)鍵點(diǎn)、關(guān)鍵狀態(tài)來(lái)創(chuàng)建動(dòng)畫 。Keyframes相比transition對(duì)動(dòng)畫過(guò)程和細(xì)節(jié)有更強(qiáng)的控制 。
我們先看一個(gè)例子(部分代碼省略)
html:

css:

效果:


但這種對(duì)書寫順序有一定要求(delay要寫在duration后面,其他參數(shù)無(wú)順序要求,css會(huì)通過(guò)傳入的關(guān)鍵詞識(shí)別) 。
(2) Animation Delay
【10分鐘入門CSS3 Animation】

(3) Animation Fill Modeforwards
在上面的例子中可以看到馬里奧運(yùn)動(dòng)到右邊之后又回到了起點(diǎn),如果我們想讓他運(yùn)動(dòng)完成后就停留在右邊呢?很簡(jiǎn)單,我們?cè)O(shè)置annimation fill mode就可以了:

backwards

效果:

可以看到,動(dòng)畫開(kāi)始之前小人立馬移動(dòng)到350px處,1s之后才開(kāi)始動(dòng)畫 。
both
顯而易見(jiàn),both會(huì)同時(shí)應(yīng)用forwards和backwards兩種規(guī)則 , 即在delay時(shí)先應(yīng)用第一幀的狀態(tài),結(jié)束時(shí)保持最后一幀的狀態(tài) 。
(3) Animation Repeat

就像這樣:

(4) Animation Direction
normal
正常方向 , 也是默認(rèn)方向,即先f(wàn)rom,再to 。
reverse
與正常方向相反,即先to , 再from 。例如:

效果:

alternate
alternate意為“交替”,即normal和reverse交替之行 , 先normal再reverse 。
reverse alternate
反向交替 , 先reverse再normal 。
(4) Animation Timing function
和transition一樣,keyframes也可以設(shè)置timing function,常用的timing function歸納如下:
ease:默認(rèn)方法 , 初速度較慢,然后加速再減速
ease-in:初速度最慢,然后一直加速
ease-out:初速度最快,然后一直減速
ease-in-out:初速度較慢,然后加速再減速,與ease的區(qū)別在于加速減速過(guò)程是對(duì)稱的
linear:恒速運(yùn)動(dòng)
直觀表現(xiàn)如下(codepen):

除了上面現(xiàn)成的方法,我們可以通過(guò)貝塞爾曲線自定義速度曲線 。我們可以在 http://cubic-bezier.com 可視化的創(chuàng)建我們自己的貝塞爾曲線 。比如創(chuàng)建一個(gè)剛開(kāi)始極慢,突然變得極快的曲線:

css:

效果:

是不是挺神奇!
(5) Chain Animation
我們可以將多個(gè)animation串聯(lián)使用,比如我們想讓小人在行駛的過(guò)程中跳躍,可以這么寫:
css:

效果:

實(shí)踐
本文目的在于普及css3 animation的基礎(chǔ),并未完全覆蓋animation的知識(shí),未涉及和講解的知識(shí)請(qǐng)大家見(jiàn)諒。掌握上述知識(shí)后,我們就已經(jīng)可以用animation做出豐富的動(dòng)畫效果了,下面列出一些codepen上的小例子:
full mario demo
animated popup
fly items to shopping cart
flipping cards
相關(guān)經(jīng)驗(yàn)推薦
- 火狐Firefox瀏覽器新手入門
- CSS3中的Opacity多瀏覽器透明度兼容性問(wèn)題
- 10分鐘包下款芝麻分550現(xiàn)實(shí)嗎?10分鐘包下款芝麻分550可行嗎?
- 低版本IE怎么正常運(yùn)行HTML5+CSS3網(wǎng)站?3種解決方法分享
- 含IE兼容解決方法 純CSS3怎么實(shí)現(xiàn)圓角效果?實(shí)現(xiàn)圓角效果的方法介紹
- 10分鐘包下款芝麻分550可能嗎?10分鐘包下款芝麻分550可信嗎?
- 螞蟻S1礦機(jī)快速入門教程是什么?螞蟻S1礦機(jī)快速入門教程解答!
- 金山畫王如何畫畫 快速入門方法分享
- photoshop新手如何自學(xué)? 零基礎(chǔ)入門攻略
- 閃劇app怎么玩?新手入門玩法指南
