1. 程式人生 > >【css3】CSS3動畫(animation @keyframes)

【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,剛開始的時候圖片距頂部距離為0px2.5s後圖片距頂部距離為100px5s後圖片距頂部的距離為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>