【css3】CSS3動畫(animation @keyframes)
通過 CSS3,我們能夠建立動畫,這可以在許多網頁中取代動畫圖片、Flash 動畫以及 JavaScript。在講解利用@keyframes做動畫之前,我們先來看一個例子,即在一定時間內,將正方形進行移動,效果如下:
這裡先附上程式碼,後面再來解釋:
<!DOCTYPE html>
<html>
<head>
<style>
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation:mymove 5s infinite;
-moz-animation:mymove 5s infinite; /* Firefox */
-webkit-animation:mymove 5s infinite; /* Safari and Chrome */
-o-animation:mymove 5s infinite; /* Opera */
}
@keyframes mymove
{
0% {top:0px; left:0px; background:red;}
25% {top:50px; left:50px; background:blue;}
50% {top:100px; left:100px; background:yellow;}
75% {top:150px; left:150px; background:green;}
100% {top:200px; left:200px; background:red;}
}
@-moz-keyframes mymove /* Firefox */
{
0% {top:0px; left:0px; background:red;}
25% {top:50px; left:50px; background:blue;}
50% {top:100px; left:100px; background:yellow;}
75% {top:150px; left:150px; background:green;}
100% {top:200px; left:200px; background:red;}
}
@-webkit-keyframes mymove /* Safari and Chrome */
{
0% {top:0px; left:0px; background:red;}
25% {top:50px; left:50px; background:blue;}
50% {top:100px; left:100px; background:yellow;}
75% {top:150px; left:150px; background:green;}
100% {top:200px; left:200px; background:red;}
}
@-o-keyframes mymove /* Opera */
{
0% {top:0px; left:0px; background:red;}
25% {top:50px; left:50px; background:blue;}
50% {top:100px; left:100px; background:yellow;}
75% {top:150px; left:150px; background:green;}
100% {top:200px; left:200px; background:red;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
1、定義和用法
通過 @keyframes 規則,您能夠建立動畫。
建立動畫的原理是,將一套 CSS 樣式逐漸變化為另一套樣式。
在動畫過程中,您能夠多次改變這套 CSS 樣式。
以百分比來規定改變發生的時間,或者通過關鍵詞 "from" 和 "to",等價於 0% 和 100%。
0% 是動畫的開始時間,100% 動畫的結束時間。
為了獲得最佳的瀏覽器支援,您應該始終定義 0% 和 100% 選擇器。
註釋:請使用動畫屬性來控制動畫的外觀,同時將動畫與選擇器繫結。
2、瀏覽器相容情況
Internet Explorer 10、Firefox 以及 Opera 支援 @keyframes 規則和 animation 屬性。
Chrome 和 Safari 需要字首 -webkit-。
註釋:Internet Explorer 9,以及更早的版本,不支援 @keyframe 規則或 animation 屬性。
3、CSS3動畫以及語法當我們在@keyframes 中建立動畫時,請把它捆綁到某個選擇器,否則不會產生動畫效果。
通過規定至少以下兩項 CSS3 動畫屬性,即可將動畫繫結到選擇器:
- 規定動畫的名稱
- 規定動畫的時長
我們舉一個簡單的例子說明一下這個to,from以及0-100%是怎麼用的。
程式碼如下:
<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; background:red; position:relative; animation:mymove 10s infinite; -moz-animation:mymove 5s infinite; /* Firefox */ -webkit-animation:mymove 5s infinite; /* Safari and Chrome */ -o-animation:mymove 5s infinite; /* Opera */ } @keyframes mymove { 0% {top:0px;} 25% {top:100px;} 50% {top:200px;} 75% {top:300px;} 100% {top:400px;} } </style> </head> <body> <div></div> </body> </html>
說明:
名字為mymove
的@keyframes
,動畫完成需要的總時長為10s
,剛開始的時候圖片距頂部距離為0px
,2.5s
後圖片距頂部距離為100px
,5s
後圖片距頂部的距離為200px
,以此類推。
to和from可以相當於上面的0%和100%,一定要記得這裡寫0是無效的,要寫0%。0% 是動畫的開始,100% 是動畫的完成。但是為了得到最佳的瀏覽器支援,建議始終定義 0% 和 100% 選擇器。
在@keyframes
也可以組合樣式,比如:
@keyframes mymove
{
0% {top:0px; left:0px; background:red;}
25% {top:0px; left:100px; background:blue;}
50% {top:100px; left:100px; background:yellow;}
75% {top:100px; left:0px; background:green;}
100% {top:0px; left:0px; background:red;}
4、利用@keyframes製作輪播圖
效果如下:
程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
text-decoration: none;
}
ul{
list-style: none;
}
#container{
position: relative;
width: 300px;
height: 200px;
overflow: hidden;/*隱藏溢位的圖片*/
}
.pic{
width:1200px;/*4張圖的寬度*/
position: absolute;/*基於父容器進行定位*/
left:0;
animation-name: focusmap;
animation-duration: 5s;
animation-iteration-count: infinite;//動畫呼叫可以簡寫
}
@keyframes focusmap {
0%,30%{
left: 0;
}
35%,65%{
left: -300px;
}
70%,99%{
left: -600px;
}
100%{
left: -900px;
}
}
.pic li{
float: left;
background: #5dd94e;
}
.pic li img {
width: 300px;
height: 200px;
}
</style>
</head>
<body>
<div id="container">
<ul class="pic">
<li><a href="javascript:;"><img src="images/1.png" alt="pic1"></a></li>
<li><a href="javascript:;"><img src="images/2.png" alt="pic2"></a></li>
<li><a href="javascript:;"><img src="images/3.png" alt="pic3"></a></li>
<li><a href="javascript:;"><img src="images/1.png" alt="pic1"></a></li><!-- 克隆第一張 -->
</ul>
</div>
</body>
</html>