Animation
@keyframes
使用,因可定義多影格,所以適用較細微的動畫,Transform
Transition
animation
需搭配關鍵影格 @keyframes
使用。@keyframes
內部結構有兩種寫法:
from
與 to
:只能定義頭語尾的影格變化。%
:可以定義更多階段的影格變化。/*方式一:使用 @keyframes 定義,後面customname為自訂名稱,搭配 form to 頭尾的撰寫方式 */
@keyframes customname {
/* 定義每個階段的影格變化 */
from {
/* 定義元素在該影格所套用的樣式 */
..
}
to {
..
}
}
/*方式二:使用 @keyframes 定義,後面customname為自訂名稱,搭配%的撰寫方式 */
@keyframes customname {
/* 定義每個階段的影格變化 */
0% {
/* 定義元素在該影格所套用的樣式 */
..
}
50% {
..
}
100% {
..
}
}
這邊只列出一些常用的屬性
animation-name
→ 要執行的 animation 名稱。animation-duration
→ 執行過程秒數。animation-play-state
→ 播放狀態,預設是 running
。
pause
搭配 :hover
。animation-timing-function
→ 動畫的加速速率。animation-delay
→ 延遲多少時間發動 animation。animation-iteration-count
→ 動畫要重複播放幾次。
infinite
為一直持續跑animation-fill-mode
→ 動畫未播放或動畫完成時,要停在哪個影格 ( 呈現的樣子 )。
none
預設值,動畫執行前或之後不會對元素產生任何樣式。forward
停留在最後一個影格位置( 結束時的狀態 )。backwards
留在第一個影格位置 ( 開始時的狀態 )。both
擁有 forward
與 backwards
兩者功能,依據開始或結束決定呈現的狀態。animation-direction
→ 是否要循環交替反向播放動畫。
normal
預設值,動畫正常播放reverse
動畫反向播放alternate
動畫在奇數時正向播放,偶數值反向播放。alternate-reverse
動畫在奇數時反向播放,偶數值正向播放。@keyframes
,並自訂名稱
animation
載入影格
animation
需對應一個 @keyframes
自訂名 ( animation-name:@keyframes 自訂名;
)。註 :如果不想要使用 animation-fill-mode:both;
,可於 @keyfarmes
中的開始與結束數值寫一樣並搭配 animation-iteration-count : infinite;
,就會很順的重複跑。 Codepen 範例
from
與 to
讓物件移至右方再回來原點%
讓物件繞一圈正方形transition-duration
: 動畫播放的時間。transition-timing-function
:動畫執行過程的速度變化。transition-delay
:延遲多少時間再發動動畫。transition-property
:要更精確地掌控,可定義哪些 CSS 屬性有轉場的動畫效果
all
: 預設,所有 CSS 都要轉場。none
: 沒有任何 CSS 要轉場。property
:屬性值可以是要轉場的 CSS 屬性名稱,以逗號區隔,屬性名稱例如 width
、height
。ease
: 緩慢開始 → 中間變快 → 慢慢結束。linear
:從開始到結束的速度一致。ease-in
:緩慢開始。ease-out
:緩慢結束。ease-in-out
:緩慢開始和緩慢的結束。steps(int,start|end)
:逐格動畫,沒有過度效果,而是一幀一幀的變化,所以指定格數越多動畫看起來會越滑順。
int
為指定間格數。start|end
可選,若選 start
表示開始值不動。cubic-bezier(n, n, n, n)
:為二次貝茲曲線,利用兩個控制點決定一個曲線,可搭配 cubic-bezier.com 來使用。
n
值可填 0 ~ 1 之間的數字。詳細動畫效果可參考此篇文章 CSS transition 各種速率
transition-property: width;
,明確指定只有寬度要轉場效果,可見滑鼠滑入時高度是沒有轉場效果的。translate
移動:
translate(X軸, Y軸) | translateX() | translateY() | translateZ() | translate3d()
translateX()
、 translateY()
可縮寫為 translate(X軸, Y軸)
。scale
縮放:
scaleX() | scaleY() | scaleZ() | scale3d()
。rotate
旋轉:
rotateX() | rotateY() | rotateZ() | rotate3d()
。skew
傾斜:
skew(X軸, Y軸)
。以 opacity
、transform
、display
、visibility
屬性為例。
opacity
transform
visibility
display
如果要做動畫效果會建議使用會佔據空間的屬性,這樣當某元素執行動畫效果時,不會影響其他元素的位置變得大家都在動,使用者體驗會比較好。