首頁 web前端 css教學 關於css3裡的transition和animation區別介紹

關於css3裡的transition和animation區別介紹

Mar 16, 2017 am 10:06 AM

** 做了很久的專案了,transition和animation兩個css3屬性經常被用到實際專案當中,想想把它整理出來。如下:

1:先介紹transition:

a,在做專案中常會遇見這樣的情景,例如一個按鈕,當滑鼠移入進去的時候改變按鈕背景顏色以及字體顏色,此時我們通常會這麼做:

.btn{width: 80px;height: 25px;border: 1px solid #333;color:#333;text-align: center;line-height: 25px;} 
.btn:hover{background:green;color:white;}
登入後複製

關於css3裡的transition和animation區別介紹

關於css3裡的transition和animation區別介紹

#b,我們會發現背景以及字體顏色是瞬間改變的,是不是會顯得特別生硬呢

此時transition就登場了,見程式碼:


.btn{width: 80px;height: 25px;border: 1px solid #333;color:#333;text-align: center;line-height: 25px;} 

.btn:hover{background:green;color:white;transition:0.4s;}
登入後複製


c,加入transition後我們會發現按鈕背景顏色以及字體顏色具備時間漸進的過程,直到結束。

這個漸進是怎麼來的呢,沒錯,就是0.4s,

談及0.4s,就要扯到transition的各項屬性了,在此我不打算細緻地都寫進部落格來,因為是完全可以自己查閱資料的。

(1:上述的0.4s是transition其中一個屬性的簡寫: transition-duration

 transition-duration 顧名思義,表示動畫 持續的時間,也就是上面的0.4s了。知道一個事物所具備的運動具有這幾種:

     (a  linear:勻速

     (b  ease-in:加速

     

##     (d  cubic-bezier

函數

:自訂速度模式(幾乎不用)

 

#上面程式碼中就簡單單只寫了transition: 0.4s;為什麼具備有一個運動呢?

(3:是這樣子的,transition有一個屬性叫做transition-timing-function,預設是ease,它運動的形式是逐漸放慢的。

不簡寫就是 transition: 0.4s ease

 

d,我們看到,按鈕hover之後,hover樣式裡所有css描述的變化都具備有transition所描述的動畫。該怎麼做呢?它指定了動畫中只背景顏色具備這個時段的動畫。

e,我們在實際專案中會發現,有時候我們需要一個動畫具備有一個延遲的展現,不希望他立即就產生動畫

此時,transition的又一個屬性就出來了,transition-delay

見程式碼:

transition: 0.4s background ease-in
登入後複製


我們會發現,此時這個按鈕的背景字體動畫是在1秒鐘之後才開始的。

1:transition需要一個

事件

來觸發,例如hover,所以沒辦法在網頁載入時自動發生

2:  transition是一次性的,不能重複發生,除非一再觸發。

3: transition只能定義開始

狀態

和結束狀態,不能定義中間狀態,也就是說只有兩個狀態。

4:一條transition規則,只能定義一個屬性的變化,不能涉及多個屬性。

 


(為了表達清晰,上述4個限制是我引用阮一峰大神博客裡的簡介)

 

為了突破這些限制,animation出來了。

 

2:animation:

 a),先不詳細解釋animation的各項屬性了,我們直接來showing代碼吧

transition: 0.4s 1s;
登入後複製

 

 上面的程式碼會產生這樣的效果,請見截圖:

關於css3裡的transition和animation區別介紹關於css3裡的transition和animation區別介紹

b),当鼠标移入p的时候,p会发生一系列的样式改变(截图无法表现过程),在2秒的时间完成背景颜色以及宽高的变化,并无限制重复这个两秒的动画,是因为什么呢?

 

 c),我准备作这样的解释,此时,你需要做一个animation动画只需要3点

 1. 需要一个承载动画的元素,如p

 2. 当前的元素写一个animation的css,其中定义你所需要这个动画产生的效果。(你暂时不需要知道如何编写这个动画内部的css)

 3. 编写一个动画进程,以@keyframes关键字来定义,而这个动画的进程有一个名字,如change,

  ----------》你可以把这个进程理解成一个函数,@keyframes对应的就是function,而change对应的就是函数名字-----------》最终等待被调用。

 

 好了,明白了以上三点,我们就可以来剖析animation的庐山真面目了。

 a)我们接着再来看这段代码:

animation: 2s change infinite;
    

@keyframes change {
       0% { background: orange; }
       50% { background: pink;width: 200px; }
       100% { background: red;height: 300px; }
}
登入後複製


 

1. 我们先来看这个“所谓的函数change”

    (1):这个change是animation其中的一个属性,叫做动画名字-----》 animation-name:change;

2. 我们再来看这个“百分比”

     (1):这个百分比你只要理解它是这个这个动画在多少时间内完成的一系列样式改变的进度。这个进度你可以描绘这个元素你想改变的的样式属性(可以定义多种)

     (2):当然也可以这样写:

@keyframes change {
            from { background: orange; }
            50% { background: pink;width: 200px; }
            to { background: red;height: 300px; }
}
登入後複製


 

 3.看完了动画制作的过程,现在我们来看如何调用这个动画:见代码:


.c:hover{animation: 2s change infinite;}
登入後複製


 (1),机智的你肯定看到了2s,是的没错,就是它让动画2秒完成。和transition一样,它是animation的一个属性,

                               叫做:animation-duration: 2s;

 (2),机智的你肯定看到了change,是的没错,就是如此调用这个“动画函数”的.只需要在当前元素animation的css样式里写入就可以了。

 

  (3),刚刚前面我们说了,这段代码会在鼠标移入p元素后2秒的时间完成背景颜色以及宽高的变化,并无限制重复这个两秒的动画

     *:注意看到无限制三个字,

     *:无限制怎么来的呢?此时这段代码只剩下infinite了。

      *:不用想,他也是animation其中之一属性:叫做 animation-iteration-count: infinite;

      *:这个属性是用来定义这个动画应该播放多少次,infinite代表的无限制(无数次),当然你也可以在让它播放一个定值的数次,比如3次


animation-iteration-count: 3;
登入後複製


 在这里,你只需要在animation里的css里写入次数就可以了:


.c:hover{animation: 2s change 3;}
登入後複製


 

 

 4:这个动画虽然已经介绍完了,但是我们会发现动画在两秒钟后又会恢复原样(初始状态):

關於css3裡的transition和animation區別介紹

此时我们想让动画两秒执行完毕之后保持在结束状态,这该怎么办了,此时animation的另一个属性就派上用场了

                                                                        -------------》animation-fill-mode:forwards;

在这里,你只需要在animation里的css里写入forwards就可以了:


.c:hover{animation: 2s change 3 forwards;}
登入後複製


2秒动画结束后就会是这样:

關於css3裡的transition和animation區別介紹 

 

 

 5:同样的,animation也和transition一样具备延时动画的属性:

                    ------------》animation-delay: 1s;

同样的animation简写写法如下,代表鼠标移入p内,1秒后动画开始


.c:hover{animation: 2s 1s change 3 forwards;}
登入後複製


 

6:同样的,animation也和transition一样具备动画以何种速度呈现的属性:默认是ease,它运动的形式是逐渐放慢的。

                ------------------》animation-timing-function: ease;

    

     (a  linear:匀速

     (b  ease-in:加速

     (c  ease-out:减速

     (d  cubic-bezier函数:自定义速度模式(几乎不用)

 

****要改变运动形势只要添加相应的速度代表参数了,见代码:


.c:hover{animation: 2s 1s change 3 forwards linear;}
登入後複製


 

7:animation还有一个属性我就不打算细写了,--------》animation-direction,默认情况下是normal,

  它是用来改变动画播放不仅只可以从结束状态跳回到起始状态这种形式。

 

8:上面说过,animation浏览器一加载便可以自动触发:


.c{width: 100px;height: 100px;margin: 200px 0 300px 300px;background: orange; animation: 2s change forwards;}
登入後複製


** 此时你会发现,浏览器一运行这个p就开始动画了。至于什么时候触发,那就要看项目具体需求了。

 

结语:自此,css3中的两大动画transition和animation就介绍完了。如有错误,欢迎指正。

 

以上是關於css3裡的transition和animation區別介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

See all articles