CSS動畫新手入門:5分鐘學會讓網頁動起來的魔法

快速解答
CSS動畫使用兩大核心屬性:`transition` 處理平滑變化,`@keyframes` 製作複雜動畫。從 hover 效果的 transition 開始學習,再進階到彈跳、旋轉等 keyframes 動畫。
為什麼要學CSS動畫?
想像一下:你進入一個網站,按鈕會微微發光、圖片輕柔地淡入、文字優雅地滑進畫面…這些小小的動畫細節讓整個網站瞬間生動了起來!
CSS動畫就像是網頁的魔法,不需要複雜的JavaScript,只要幾行CSS程式碼,就能讓靜態的網頁變得有趣又專業。
如果你想進一步掌握更多CSS技巧,也可以參考我們的CSS垂直置中完全指南,那同樣是很多開發者會遇到的經典問題。
學會CSS動畫你可以:
- 製作吸引眼球的按鈕效果
- 讓內容以優雅的方式出現
- 為網站增添專業感
- 提升用戶體驗和互動性
CSS動畫的兩大核心概念
1. @keyframes(動畫腳本)
把它想成電影的分鏡腳本,定義動畫從開始到結束的每個關鍵時刻:
@keyframes slideIn {
0% { /* 動畫開始:在左側 */
transform: translateX(-100px);
}
100% { /* 動畫結束:回到原位 */
transform: translateX(0);
}
}
2. animation(播放器控制)
就像影片播放器的控制面板,決定怎麼播放這個動畫:
.my-element {
animation: slideIn 2s ease-in-out;
/* 播放slideIn動畫,持續2秒,緩進緩出 */
}
7個動畫控制參數(超簡單理解版)
把CSS動畫想成一部電影,每個參數就是控制播放的按鈕:
1. animation-name(選電影)
作用: 決定要播放哪個動畫 比喻: 就像Netflix上選擇要看哪部電影
animation-name: fadeIn; /* 選擇名為fadeIn的動畫 */
2. animation-duration(播放時長)
作用: 動畫播放多久 比喻: 電影是90分鐘還是180分鐘?
animation-duration: 3s; /* 播放3秒 */
3. animation-timing-function(播放速度感覺)
作用: 動畫的快慢節奏感 比喻: 是平穩播放,還是開頭慢後面快?
animation-timing-function: ease-in-out; /* 開頭慢→中間快→結尾慢 */
常用選項:
ease
- 自然感(預設,像人走路的節奏)linear
- 勻速感(像機器人走路)ease-in
- 漸快感(像車子起步)ease-out
- 漸慢感(像車子煞車)ease-in-out
- 完美感(最自然的節奏)
4. animation-delay(延遲播放)
作用: 等幾秒再開始播放 比喻: 定時播放功能
animation-delay: 1s; /* 等1秒後再開始 */
5. animation-iteration-count(重播次數)
作用: 播放幾次 比喻: 單次播放還是循環播放?
animation-iteration-count: 3; /* 播放3次 */
animation-iteration-count: infinite; /* 無限循環 */
6. animation-direction(播放方向)
作用: 正播、倒播、還是來回播? 比喻: 電影的播放方向
animation-direction: normal; /* 正常播放 */
animation-direction: reverse; /* 倒著播放 */
animation-direction: alternate; /* 正播→倒播→正播... */
animation-direction: alternate-reverse;/* 倒播→正播→倒播... */
7. animation-fill-mode(播放結束後停在哪)
作用: 動畫結束後,元素保持什麼樣子? 比喻: 電影結束後,停在片頭還是片尾畫面?
animation-fill-mode: none; /* 回到原本樣子 */
animation-fill-mode: forwards; /* 停在動畫結束的樣子 */
animation-fill-mode: backwards; /* 立刻顯示動畫開始的樣子 */
animation-fill-mode: both; /* 結合forwards和backwards */
實戰演練:三個超實用動畫範例
範例1:淡入效果(最基礎)
學完動畫基礎後,你可能還想了解其他重要的CSS技術。例如CSS垂直置中技巧,這也是前端開發的經典難題。 用途: 讓內容優雅地出現
/* 1. 定義動畫腳本 */
@keyframes fadeIn {
from { opacity: 0; } /* 從透明 */
to { opacity: 1; } /* 到不透明 */
}
/* 2. 套用到元素 */
.fade-in-text {
animation: fadeIn 2s ease-out;
}
✨ 淡入效果演示
範例2:滑入效果(常用於卡片)
用途: 讓元素從側邊滑進來
@keyframes slideInLeft {
from {
transform: translateX(-50px);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
.slide-in-card {
animation: slideInLeft 1.5s ease-out;
}
🎯 滑入效果演示
範例3:彈跳按鈕(互動效果)
用途: 讓按鈕更吸引注意
@keyframes bounce {
0%, 20%, 50%, 80%, 100% {
transform: translateY(0);
}
40% {
transform: translateY(-10px);
}
60% {
transform: translateY(-5px);
}
}
.bounce-button:hover {
animation: bounce 1s ease-in-out;
}
🎪 彈跳按鈕演示
左邊按鈕懸停觸發,右邊按鈕點擊觸發
一行搞定!CSS動畫簡寫語法
不想寫那麼多行?CSS提供超方便的簡寫語法:
/* 完整寫法(7行) */
animation-name: slideIn;
animation-duration: 2s;
animation-timing-function: ease-in-out;
animation-delay: 0.5s;
animation-iteration-count: 1;
animation-direction: normal;
animation-fill-mode: forwards;
/* 簡寫語法(1行) */
animation: slideIn 2s ease-in-out 0.5s 1 normal forwards;
記憶口訣: 名稱 時間 節奏 延遲 次數 方向 結束狀態
常見問題解答
Q:動畫不夠流暢怎麼辦?
A: 使用 transform
而非改變 width
、height
:
/* ❌ 較慢 */
@keyframes grow {
from { width: 100px; }
to { width: 200px; }
}
/* ✅ 較快 */
@keyframes grow {
from { transform: scaleX(1); }
to { transform: scaleX(2); }
}
Q:怎樣避免動畫干擾閱讀?
A: 尊重用戶的系統設定:
/* 如果用戶不喜歡動畫,就關閉動畫 */
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
}
}
Q:手機上動畫會lag嗎?
A: 選擇效能好的屬性:
- ✅ 推薦:
transform
、opacity
- ❌ 避免:
width
、height
、top
、left
動畫設計的黃金法則
1. 時間感要自然
- 快速動畫:0.2s - 0.5s(按鈕回饋)
- 中等動畫:0.5s - 1s(頁面切換)
- 慢速動畫:1s以上(強調效果)
2. 不要過度使用
原則: 動畫是調味料,不是主菜!
- 重要元素才加動畫
- 一個頁面不超過3-4個動畫同時播放
- 動畫要有目的性(引導注意、提供回饋)
3. 考慮用戶感受
- 提供關閉動畫的選項
- 避免閃爍或過於激烈的效果
- 在慢速裝置上測試效果
下一步:開始實作!
建議練習步驟:
- 先從淡入效果開始 - 最簡單也最實用
- 嘗試滑入效果 - 為卡片或圖片添加動感
- 製作按鈕hover效果 - 提升互動體驗
- 組合多個動畫 - 創造更豐富的效果
⚡ 動畫時間感對比
記住: 最好的學習方式就是動手做!不用害怕出錯,每一個專業的前端工程師都是從簡單的淡入動畫開始的。
現在就打開你的程式碼編輯器,讓你的第一個CSS動畫動起來吧!🎬✨