「當你迷惘的時候,就回到原點想一想」-中華一番 蘭飛鴻
網頁前端新手村系列文章,宗旨並不在技術本身的教導,重點放在技術與技術之間的脈胳關係。讓零碎的網頁前端技術的關鍵字,成為比較有系統性的視野。
讓一開始接觸網頁前端的新手們,有一個比較友善的系統來架構你的學習,至於技術本身的深入探討,就留給其它的高手們吧。
CSS 的 Transition 讓我們可以簡單的做出「過場動畫」,不過動畫本身的參數(開始與結束的值),是由現有的屬性決定,無法對動畫做出更多的控制。
所以,有了 Animations
@keyframe
< !important
!important
無視是否有 transition
!important
@keyframe
。transition
的方式,在一段時間之內改變 CSS 屬性值。差別是自動觸發 animations
的每一段動畫。若元素設定 display: none
時設定動畫,若又將元素設定 none
以外的 display
設定值,就重新套用動畫。(transition 的痛點)
@keyframes
[1]frames 有翻成 影格、幀 ,amination 最大的色就是將所有和動畫有關的屬性都寫在這。
語法
!important
(測試結果 firefox 符合, Chrome 不符合)from
to
,也可以是 0%
100%
,也可以混搭
from
= 0%
, to
= 100%
0%~100%
的百分比數字無效。0%
不可以寫 0
0%
或 100%
,自動抓元素本身的 CSS 設定值來當「沒有設定的動畫頭尾」jump
還是 "jump"
都是等價的,大小寫視為不同。
none
, initial
, None
(不可以取這些名字)!important
(不管它設在 keyframe 裡還是外)/* 這兩個等價 */
@keyframes foo { ... }
@keyframes "foo" { ... }
/* 這個與上面兩個不等價 */
@keyframes FOO { ... }
/* 下面的都是無效 */
@keyframes "initial" { ... }
@keyframes "None" { ... }
@keyframes initial { ... }
@keyframes None { ... }
animation-name
[1].box {
animation-name: 動畫名稱;
}
@keyframe 動畫名稱
預設值: none
(無動畫)
可用在偽元素身上
animation-duration
[1]定義: 單位動畫週期,所需要的時間
值: 時間(R+ 正實數)
預設值: 0s
設定 0s
看起來和原本樣,但是 animation 的功能還是會跑一次。
animation-timing-function
[1]值: timing function 名稱
預設值: ease
animation 的 @keyframe
變化函數。
animation-delay
[1]值: 時間(R 實數)
預設值: 0s
這個屬性控制兩件事
設定值有兩種變化
只有第一個週期的 animation 才會受此值影響
觸發動畫的關鍵
觸發動畫的關鍵,是名稱。
在 :hover
時加了名稱(其它都設定好了),保證動畫從 0%
開始播放。
但是,若是在 :hover
時加了時間(其它都設定好了),不保證動畫從 0%
開始播放。
給一段正常的原始碼
.box {
height: 100px;
width: 100px;
border: 1px solid black;
animation-duration: 5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-fill-mode: none;
}
:root:hover .box {
animation-name: colorful;
}
@keyframes colorful {
from {
background-color: #fee;
}
50% {
background-color: #efe;
}
to {
background-color: #eef;
}
}
將它改成不正常的情況
.box {
/* ... */
/* animation-duration: 5s; */
animation-name: colorful;
/* ... */
}
:root:hover .box {
/* animation-name: colorful; */
animation-duration: 5s;
}
[1]: CSS Animations Level 1 - w3.org