CSS3中Animation屬性的使用詳解

在開始介紹Animation之前我們有必要先來了解一個特殊的東西,那就是”Keyframes”,我們把他叫做“關鍵幀”,玩過flash的朋友可能對這個東西并不會陌生。下面我們就一起來看看這個“Keyframes”是什么東西。前面我們在使用transition制作一個簡單的transition效果時,我們包括了初始屬性和最終屬性,一個開始執(zhí)行動作時間和一個延續(xù)動作時間以及動作的變換速率,其實這些值都是一個中間值,如果我們要控制的更細一些,比如說我要第一個時間段執(zhí)行什么動作,第二個時間段執(zhí)行什么動作(換到flash中說,就是第一幀我要執(zhí)行什么動作,第二幀我要執(zhí)行什么動作),這樣我們用Transition就很難實現(xiàn)了,此時我們也需要這樣的一個“關鍵幀”來控制。那么CSS3的Animation就是由“keyframes”這個屬性來實現(xiàn)這樣的效果。下面我們一起先來看看Keyframes:
Keyframes具有其自己的語法規(guī)則,他的命名是由”@keyframes”開頭,后面緊接著是這個“動畫的名稱”加上一對花括號“{}”,括號中就是一些不同時間段樣式規(guī)則,有點像我們css的樣式寫法一樣。對于一個”@keyframes”中的樣式規(guī)則是由多個百分比構成的,如“0%”到”100%”之間,我們可以在這個規(guī)則中創(chuàng)建多個百分比,我們分別給每一個百分比中給需要有動畫效果的元素加上不同的屬性,從而讓元素達到一種在不斷變化的效果,比如說移動,改變元素顏色,位置,大小,形狀等,不過有一點需要注意的是,我們可以使用“fromt”“to”來代表一個動畫是從哪開始,到哪結束,也就是說這個 “from”就相當于”0%”而”to”相當于”100%”,值得一說的是,其中”0%”不能像別的屬性取值一樣把百分比符號省略,我們在這里必須加上百分符號(“%”)如果沒有加上的話,我們這個keyframes是無效的,不起任何作用。因為keyframes的單位只接受百分比值。
Keyframes可以指定任何順序排列來決定Animation動畫變化的關鍵位置。其具體語法規(guī)則如下:
- keyframes-rule: '@keyframes' IDENT '{' keyframes-blocks '}';
- keyframes-blocks: [ keyframe-selectors block ]* ;
- keyframe-selectors: [ 'from' | 'to' | PERCENTAGE ] [ ',' [ 'from' | 'to' | PERCENTAGE ] ]*;
把上面的語法綜合起來
- @keyframes IDENT {
- from {
- Properties:Properties value;
- }
- Percentage {
- Properties:Properties value;
- }
- to {
- Properties:Properties value;
- }
- }
或者全部寫成百分比的形式:
- @keyframes IDENT {
- 0% {
- Properties:Properties value;
- }
- Percentage {
- Properties:Properties value;
- }
- 100% {
- Properties:Properties value;
- }
- }
其中IDENT是一個動畫名稱,你可以隨便取,當然語義化一點更好,Percentage是百分比值,我們可以添加許多個這樣的百分比,Properties為css的屬性名,比如說left,background等,value就是相對應的屬性的屬性值。值得一提的是,我們from和to 分別對應的是0%和100%。這個我們在前面也提到過了。到目前為止支技animation動畫的只有webkit內(nèi)核的瀏覽器,所以我需要在上面的基礎上加上-webkit前綴,據(jù)說Firefox5可以支持css3的 animation動畫屬性。
我們來看一個實例:
- @-webkit-keyframes 'test' {
- 0% {
- margin-left: 100px;
- background: green;
- }
- 40% {
- margin-left: 150px;
- background: orange;
- }
- 60% {
- margin-left: 75px;
- background: blue;
- }
- 100% {
- margin-left: 100px;
- background: red;
- }
- }
這里我們定義了一個叫“test”的動畫,他的動畫是從0%開始到100%時結束,從中還經(jīng)歷了一個40%和60%兩個過程,上面代碼具體意思是:test動畫在0%時元素定位到left為100px的位置背景色為green,然后40%時元素過渡到left為150px的位置并且背景色為orange,60%時元素過渡到left為75px的位置,背景色為blue,最后100%結束動畫的位置元素又回到起點left為100px處,背景色變成red。假設置我們只給這個動畫有10s的執(zhí)行時間,那么他每一段執(zhí)行的狀態(tài)如下圖所示:
Keyframes定義好了以后,我們需要怎么去調(diào)用剛才定義好的動畫“test”
CSS3的animation類似于transition屬性,他們都是隨著時間改變元素的屬性值。他們主要區(qū)別是transition需要觸發(fā)一個事件(hover事件或click事件等)才會隨時間改變其css屬性;而animation在不需要觸發(fā)任何事件的情況下也可以顯式的隨著時間變化來改變元素css的屬性值,從而達到一種動畫的效果。這樣我們就可以直接在一個元素中調(diào)用animation的動畫屬性,基于這一點,css3的animation就需要明確的動畫屬性值,這也就是回到我們上面所說的,我們需要keyframes來定義不同時間的css屬性值,達到元素在不同時間段變化的效果。
下面我們來看看怎么給一個元素調(diào)用animation屬性
- .demo1 {
- width: 50px;
- height: 50px;
- margin-left: 100px;
- background: blue;
- -webkit-animation-name:'wobble';/*動畫屬性名,也就是我們前面keyframes定義的動畫名*/
- -webkit-animation-duration: 10s;/*動畫持續(xù)時間*/
- -webkit-animation-timing-function: ease-in-out; /*動畫頻率,和transition-timing-function是一樣的*/
- -webkit-animation-delay: 2s;/*動畫延遲時間*/
- -webkit-animation-iteration-count: 10;/*定義循環(huán)資料,infinite為無限次*/
- -webkit-animation-direction: alternate;/*定義動畫方式*/
- }
CSS Animation動畫效果將會影響元素相對應的css值,在整個動畫過程中,元素的變化屬性值完全是由animation來控制,動畫后面的會覆蓋前面的屬性值。如上面例子:因為我們這個demo只是在不同的時間段改變了demo1的背景色和左邊距,其默認值是:margin-left:100px;background: blue;但當我們在執(zhí)行動畫0%時,margin-left:100px,background:green;當執(zhí)行到40%時,屬性變成了:margin-left:150px;background:orange;當執(zhí)行到60%時margin-left:75px;background:blue;當動畫 執(zhí)行到100%時:margin-left:100px;background: red;此時動畫將完成,那么margin-left和background兩個屬性值將是以100%時的為主,他不會產(chǎn)生疊加效果,只是一次一次覆蓋前一次出將的css屬性。就如我們平時的css一樣,最后出現(xiàn)的權根是最大的。當動畫結束后,樣式回到默認效果。
相關文章
- 這篇文章主要介紹了css3的動畫特效之動畫序列(animation) 的相關資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-22
CSS3與動畫有關的屬性transition、animation、transform對比(史上最全
這篇文章主要介紹了CSS3與動畫有關的屬性transition、animation、transform對比,通過瀏覽器兼容性,用法和對比更深刻的展示了彼此之間的異同,具體操作步驟大家可查看下文2017-08-18CSS3 animation實現(xiàn)簡易幻燈片輪播特效
這篇文章主要為大家詳細介紹了CSS3 animation實現(xiàn)簡易幻燈片輪播特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-27CSS3中動畫屬性transform、transition和animation屬性的區(qū)別
最近在項目中用到了CSS3中的動畫屬性。無奈對于css3幾個新加的屬性不太熟悉,常常容易搞混。所以從網(wǎng)站研究了點資料,總結一下,方便有需要的朋友們可以參考學習。2016-09-25- 這篇文章主要為大家詳細介紹了CSS3中Animation動畫屬性用法,教大家如何使用animation動畫,感興趣的小伙伴們可以參考一下2016-07-04
- 這篇文章主要介紹了CSS3 animation實現(xiàn)逐幀動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-02
CSS3中的Transition過度與Animation動畫屬性使用要點
這篇文章主要介紹了CSS3中的Transition過度與Animation動畫屬性使用要點Transition和Animation能被用來制作基本的頁面圖片動態(tài)效果,當然進一步的控制還是需要JavaScript的2016-05-20利用css3-animation實現(xiàn)逐幀動畫效果
這篇文章主要介紹了利用css3-animation實現(xiàn)逐幀動畫效果的相關資料,感興趣的小伙伴們可以參考一下2016-03-10CSS3的transition和animation的用法實例介紹
transition用于設定一個元素的兩個狀態(tài),不同的狀態(tài)可以用偽類,下面與大家分享下CSS3的transition和animation的用法,需要的朋友可以參考下2014-08-20CSS3中利用animation屬性創(chuàng)建雪花飄落特效
在CSS3中我們可以使用animation屬性來創(chuàng)建復雜的動畫效果,本文就要借助它實現(xiàn)雪花飄落特效,功能代碼如下,希望對大家學習css3有所幫助2014-05-14