1. 程式人生 > >關於transition和animation的區別

關於transition和animation的區別

       transition和animation都是可以做出動畫效果的css3的元素,剛剛開始接觸,覺得既然都是可以做動畫效果不可能是沒有區別的,一定有各自的獨到用處。

       先來看看transition,transition是css3的過渡元素,它擁有以下屬性,如下表:

           上表顯示了過渡的全部屬性,及其用法。好像也沒有與今天的主題太搭上邊,下面開始表演。transition過渡屬性有以下幾個特性:

  1. 過渡屬性只有當滑鼠經過時候才會作用
  2. 過渡屬性沒有中間的過程,動畫是一步到位
  3. 過渡屬性一次滑鼠經過只可以發生一次,不能重複發生動畫

        以上可以看的出來transition擁有自己的不足之處,animation就是為了補足過渡元素的不足的。但是同樣transition過渡也是擁有自己的好處,它可以對一些動畫起到潤滑的作用,不至於讓一些簡單的動畫看起來那麼生硬,下面舉個栗子:

來寫一個按鈕動畫,相關程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>動態按鈕用transition來過渡</title>
    <style>
        .button{
            border:none;
            background-color:red;
            color:white;
            padding:15px 20px;
            font-size:15px;
            cursor:pointer;
            border-radius:5px;
            width:150px;
         }
        .button span{
           position: relative;
           display: inline-block;
           transition: .5s;
         }
       .button span::after{
           content: "»";
           opacity:0;
           right:-20px;
           position: absolute;
   
         }
       .button:hover span{
           padding-right: 25px;
    
        }
       .button:hover span:after{
           opacity: 1;
           right: 0;
           transition: .5s;
        }
    </style>
</head>
<body>
    <button class="button"><span>我是按鈕</span></button>
</body>
</html>

      這樣可以很好的看出按鈕的動畫效果過渡的很自然,因為有transition這個過渡元素,所以對於簡單的動畫就有著其過渡的效果。

     再來看看animation動畫效果,先看下錶:

      上表顯示的是animation的全部的元素屬性,annimation有下面的 特點:

  1. 動畫是一幀一幀的繪製的
  2. 可繪製複雜動畫
  3. 需要配合@keyframes來使用

    下面來舉個栗子說明:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>變色</title> 
<style> 
div
{
	width:100px;
	height:100px;
	background:red;
	animation:myfirst 3s;
}

@keyframes myfirst
{
	0%   {background:red;}
	25%  {background:yellow;}
	50%  {background:blue;}
	100% {background:green;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>

​

​

      上面的程式碼展示了animation的用法的特點,支援多幀動畫效果。

      不足之處,請多多指教。