在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屬性,在後續課程我們會詳細給大家講解。