在CSS3中,使用@keyframes規則定義的動畫並不會自動執行,我們還需要使用animation-name屬性來調用動畫,之後動畫才會生效。
語法:
animation-name:動畫名;
說明:
注意,animation-name 調用的動畫名需要和@keyframes規則定義的動畫名稱完全一致(區分大小寫),如果不一致將不具有任何動畫效果。為了浏覽器兼容性,針對Chrome和Safari浏覽器需要加上-webkit-前綴,而針對Firefox浏覽器需要加上-moz-。
舉例:
在線測試<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS3 animation-name屬性</title> <style type="text/css"> @-webkit-keyframes mycolor { 0%{background-color:red;} 30%{background-color:blue;} 60%{background-color:yellow;} 100%{background-color:green;} } @-webkit-keyframes mytransform { 0%{border-radius:0;} 50%{border-radius:50px; -webkit-transform:translateX(0);} 100%{border-radius:50px; -webkit-transform:translateX(50px);} } div { width:100px; height:100px; background-color:red; } div:hover { -webkit-animation-name:mytransform; -webkit-animation-duration:5s; -webkit-animation-timing-function:linear; } </style> </head> <body> <div></div> </body> </html>
在浏覽器預覽效果如下:
分析:
這裡我使用@keyframes規則定義了2個動畫:mycolor和mytransform。但是我們只使用animation-name調用動畫名為mytransform的動畫。因此,名為mytransform的動畫就會生效,而名為mycolor的動畫不會生效。
在mytransform動畫中,0%到50%的之間div元素border-radius屬性值實現從0變成50px,然後在50%到100%之間保持border-radius屬性值不變並且水平向右移動50px。
大家自行測試一下當mytransform定義成以下幾種方式,然後跟站長的例子比較一下有何不同?看看大家的觀察能力如何。
@-webkit-keyframes mytransform { 0%{border-radius:0;} 50%{border-radius:50px;-webkit-transform:translateX(0);} 100%{-webkit-transform:translateX(50px);} }
@-webkit-keyframes mytransform { 0%{border-radius:0;} 50%{border-radius:50px;} 100%{-webkit-transform:translateX(50px);} }
初學者往往都會有疑問,每次我們都是定義:hover偽類 定義鼠標移動到元素上時,動畫才開始,假如我們想要打開網頁的第一時間動畫就能自動執行,那該怎麼辦呢?
其實很簡單,我們去除鼠標指針停留在div元素上時的樣式,並把樣式中的代碼改寫為div元素本身的樣式,成為如下所示的代碼,則動畫將在頁面打開時就立刻進行播放。
div { width:100px; height:100px; background-color:red; -webkit-animation-name:mytransform; -webkit-animation-duration:5s; -webkit-animation-timing-function:linear; }
舉例:
在線測試<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS3 animation-name屬性</title> <style type="text/css"> @-webkit-keyframes mycolor { 0%{background-color:red;} 30%{background-color:blue;} 60%{background-color:yellow;} 100%{background-color:green;} } @-webkit-keyframes mytransform { 0%{border-radius:0;} 50%{border-radius:50px; -webkit-transform:translateX(0);} 100%{-webkit-transform:translateX(50px);} } div { width:100px; height:100px; background-color:red; -webkit-animation-name:mytransform; -webkit-animation-duration:5s; -webkit-animation-timing-function:linear; } </style> </head> <body> <div></div> </body> </html>
在浏覽器預覽效果如下:
分析:
看完這個,那麼問題又來了,假如我想要網頁打開的時候就開始執行動畫,並且想讓動畫一直持續下去,又該怎麼做呢?這個我們可以使用動畫播放次數的animation-iteration-count屬性,在後續課程我們會詳細給大家講解。