CSS3 轉場效果
/* 哪個物件要執行動畫 */
animation: 動畫名稱 播放時間 速度函式 延遲播放時間 次數 方向 填充模式
/* 細項全名 */
animation-name: my-animation; // 動畫名稱,可以用逗號套用多個 @keyframes
animation-duration: 1s; // 播放時間
animation-timing-function: linear | ease-in-out; // 速度函式
animation-delay: 0.5s; // 延遲多久開始執行
animation-iteration-count: infinite | number; // 播放次數
animation-direction: normal | alternate (來回播放) |
reverse(從 100% 跑回 0 %) | alternate-reverse; // 方向
animation-fill-mode: none | forwards | backwards | both; // 填充模式,動畫執行前後,目標如何套用 CSS Animation
animation-play-state: paused | running; // 定義動畫執行或停止
/* 動畫內容 */
@keyframes 動畫名稱 {
0%{...}
100%{...}
}
CSS 動畫指的是使用以 CSS 定義為主的動畫效果,又可以分成以下兩類:
- CSS3 轉場/過渡(transitions):
- 主要以開始狀態、結束狀態與持續期間(duration)三種參數,以及可指定的漸變函數(transition timing function),將 DOM 元素或網頁上的物件進行轉變。
- CSS3 動畫(animations):
- 又稱為關鍵影格(Keyframe)動畫,可以加入關鍵影格,提供許多動畫片段的組合。
以 CSS 定義為主的動畫相較於使用 JavaScript 程式為主的動畫有一些好處:
- 簡單,對於一些簡單的動畫特效, 不需要撰寫程式就可以製作出動畫。
- 低消費,對於電腦資源的消耗非常低。
- 最佳化,瀏覽器對於 CSS 動畫可以提供最佳化,動畫可以運作得相當順暢。
CSS3 轉場與 CSS3 動畫的"相同"之處
- 都是使用 CSS 定義,然後監聽 DOM 元素的改變作出動畫效果
- 都可以設定漸變函數(transition timing function),控制動畫的運動(效果展現)的曲線
- 都可以設定持續期間(duration),控制動畫持續的時間
- 都有對應的 event(事件),可以送出動畫的狀態,可讓 JavaScript 再加以監聽或控制(可程式化)
- 都可以用視覺化方式看到 CSS 屬性正在改變的狀態
CSS3 轉場與 CSS3 動畫的"不同"之處
觸發(Trigger)方式
轉場(transitions)觸發使用:hover僞(pseudo)類別為最經常使用,其他可觸發的還有:active、:focus、:checked等等,另一種方式是使用 JavaScript 語言動態加入或移除 CSS 類別,更多範例可以參考這一篇範例。
動畫(animations)不需要觸發,當你定義好後,頁面一載入就會開始進行動畫。
循環/重覆播放(Looping)
轉場(transitions)沒有指定循環播放的屬性可用。
動畫(animations)有animation-iteration-count屬性可指定循環播放的次數,或是用"infinite"指定為不停地重覆播放。
定義關鍵影格(Keyframes)/中途點
轉場(transitions)沒有這特性。動畫的撥放就是從開始到結束。
動畫(animations)可以額外定義關鍵影格(Keyframes),可以製作更複雜的動畫效果。
註: 有一個常會搞混的
transform的 CSS 的新屬性,它可以把網頁上的物件或元素進行變形、翻轉或 2d 與 3d 的效果,它並不是與動畫有關的屬性,你可以把它當成是類似字體顏色大小、透明度(opacity)的屬性。也可以搭配 CSS 動畫來使用。