首頁 web前端 html教學 比較css3中transition和animation的區別與聯繫

比較css3中transition和animation的區別與聯繫

Jul 19, 2017 am 09:58 AM
animation css3 transition

** 做了很久的專案了,transitionanimation兩個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;}
登入後複製

 

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:.4s;}
登入後複製

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

這個漸進是怎麼來的呢,沒錯,就是.4s,(簡寫,為0.4s,

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

 transition-duration 顧名思義,表示動畫持續的時間,也就是上面的0.4s了。顏色的動畫。具備這幾種:

     (a  linear:勻速

     (b  ease-in:加速

    減速

     (d  cubic-bezier函數:自訂速度模式(幾乎不用)

 

上面程式碼中就簡單單只寫了transition:0.4s;為什麼具備有一個運動呢?形式是逐漸放慢的。 #d,

我們看到,按鈕hover之後,hover樣式裡所有css描述的變化都具備有transition所描述的動畫。解釋的有點繞口,我們直接上程式碼解釋吧:

1)若是只想讓背景顏色具備一個時間段的變化,我們該怎麼做呢?

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

2)我們在上面這句程式碼中看到了background,是的沒錯,就是因為它指定了動畫中只背景顏色具備這個時間段的動畫。

它是transition其中一個屬性的簡寫,叫做:

transition-property#,顧名思義,指定屬性。

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

<span class="token property">此時,transition的又一個屬性就出來了,<span class="token punctuation"></span>transition-delay</span>

#見程式碼:

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

我们会发现,此时这个按钮的背景字体动画是在1秒钟之后才开始的。

 

----》   transition虽然简单好用,但是我们会发现它受到各种限制。

1:transition需要一个事件来触发,比如hover,所以没法在网页加载时自动发生

2:  transition是一次性的,不能重复发生,除非一再触发。

3: transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。

4:一条transition规则,只能定义一个属性的变化,不能涉及多个属性。

 

(为了表达清晰,上述4条限制是我引用阮一峰大神博客里的简介)

 

为了突破这些限制,animation出来了。

 

2:animation:

 a),先不详细解释animation的各项属性了,直接来看代码吧

     .c{width: 100px;height: 100px;margin: 200px 0 300px 300px;background: orange; }
        .c:hover{animation: 2s change infinite;}

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

 

 上面的代码会产生这样的效果,见截图:

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

 

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

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

 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其中的一个属性,叫做动画名字-----》 <span class="token property"><span style="background-color: #ff6600">animation-name</span><span class="token punctuation">:change;</span></span>

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的一个属性,

                               叫做:<span class="token property">animation-duration<span class="token punctuation">: </span></span>2s;

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

 

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

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

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

      *:不用想,他也是animation其中之一属性:叫做 <span class="token property">animation-iteration-count<span class="token punctuation">: infinite;</span></span>

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

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

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

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

 

 

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

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

                                                                        -------------》<span class="token property"><span style="background-color: #ff6600">animation-fill-mode</span><span class="token punctuation">:forwards<span class="token punctuation">;</span></span></span>

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

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

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

 

 看看两者区别:

Transition作用是指定了某一个属性(如width、left、transform等)在两个值之间如何过渡,他包括transition-property、transition-duration、transition-timing-function、transition-delay等。 如果某一个元素指定了Transiton,那么当其某个属性改变的时候就会按照Transition指定的方式进行过渡,动画就这么产生了。 Animation也是通过指定某一个属性(如width、left、transform等)在两个值之间如何过渡来实现动画的,与Transition不同的是,Animation可以通过keyframe显式控制当前帧的属性值,而Transition只能隐式来进行(不能指定每帧的属性值),所以相对而言Animation的功能更加灵活。另外一个区别是Animation通过模拟属性值改变来实现动画,动画结束之后元素的属性没有变化;而Transition确实改变了元素的属性值,动画结束之后元素的属性发生了变化;这一点,这在实际应用中会产生很大的区别,也决定了二者各有春秋。 Animation模块包括了animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count、animation-play-state等属性。 其实说这么多,一句话就是:Transform和width、left一样,定义了元素很多静态样式,只不过通过Transition和Animation指定如何改变不同的属性值,才实现了动画。

 

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

                    ------------》<span class="token property">animation-delay<span class="token punctuation">: 1s<span class="token punctuation">;</span></span></span>

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

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

 

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

                ------------------》<span class="token property">animation-timing-function<span class="token punctuation">: ease<span class="token punctuation">;</span></span></span>

    

     (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;}
登入後複製

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

 

结语:自此,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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

純CSS3怎麼實現波浪效果? (程式碼範例) 純CSS3怎麼實現波浪效果? (程式碼範例) Jun 28, 2022 pm 01:39 PM

純CSS3怎麼實現波浪效果?這篇文章就來跟大家介紹一下使用 SVG 和 CSS 動畫來製作波浪效果的方法,希望對大家有幫助!

如何加速Windows 11中的動畫效果:2種方法解析 如何加速Windows 11中的動畫效果:2種方法解析 Apr 24, 2023 pm 04:55 PM

當微軟推出Windows11時,它帶來了許多變化。其中一項變更是增加了使用者介面動畫的數量。有些使用者想要改變事物的出現方式,他們必須想辦法去做。擁有動畫讓使用者感覺更好、更友善。動畫使用視覺效果使電腦看起來更具吸引力和響應能力。其中一些包括幾秒鐘或幾分鐘後的滑動菜單。電腦上有許多動畫會影響PC效能、減慢速度並影響您的工作。在這種情況下,您必須關閉動畫。本文將介紹使用者可以提高在PC上的動畫速度的幾種方法。您可以使用登錄編輯程式或您執行的自訂檔案來套用變更。如何提高Windows11動畫的

CSS小技巧:利用transition保留hover狀態 CSS小技巧:利用transition保留hover狀態 Sep 27, 2022 pm 02:01 PM

如何保留 hover 的狀態?以下這篇文章跟大家介紹一下不借助javascript保留hover狀態的方法,希望對大家有幫助!

如何使用CSS實現元素的旋轉背景圖動畫效果 如何使用CSS實現元素的旋轉背景圖動畫效果 Nov 21, 2023 am 09:05 AM

如何使用CSS實現元素的旋轉背景圖動畫效果背景圖動畫效果可以增加網頁的視覺吸引力和使用者體驗。本文將介紹如何使用CSS實現元素的旋轉背景圖動畫效果,並提供具體的程式碼範例。首先,我們需要準備一張背景圖,可以是任何你喜歡的圖片,例如一張太陽或電風扇的圖片。將該圖片儲存並命名為“bg.png”。接下來,建立一個HTML文件,並在文件中新增一個div元素,將其設定為

巧用CSS實現各種奇形怪狀按鈕(附代碼) 巧用CSS實現各種奇形怪狀按鈕(附代碼) Jul 19, 2022 am 11:28 AM

這篇文章帶大家看看怎麼使用 CSS 輕鬆實現高頻出現的各類奇形怪狀按鈕,希望對大家有幫助!

css怎麼隱藏元素但不佔空間 css怎麼隱藏元素但不佔空間 Jun 01, 2022 pm 07:15 PM

兩種方法:1、利用display屬性,只要為元素加上「display:none;」樣式即可。 2.利用position和top屬性設定元素絕對定位來隱藏元素,只需為元素加上「position:absolute;top:-9999px;」樣式。

css3怎麼實現花邊邊框 css3怎麼實現花邊邊框 Sep 16, 2022 pm 07:11 PM

在css中,可以利用border-image屬性來實作花邊邊框。 border-image屬性可以使用圖片來建立邊框,即給邊框加上背景圖片,只需要將背景圖片指定為花邊樣式即可;語法「border-image: url(圖片路徑) 向內偏移值圖像邊界寬度outset 是否重複;」。

原來利用純CSS也能實現文字輪播與圖片輪播! 原來利用純CSS也能實現文字輪播與圖片輪播! Jun 10, 2022 pm 01:00 PM

怎麼製作文字輪播與圖片輪播?大家第一想到的是利用js,其實利用純CSS也能實現文字輪播與圖片輪播,下面來看看實作方法,希望對大家有幫助!

See all articles