CSS 動畫怎麼做?從基礎到進階的完整入門指南
 
 快速解答
CSS 動畫主要有兩種方法:transition(過渡)用於簡單的狀態變化如 hover 效果,animation 搭配 @keyframes 用於複雜的動畫序列。掌握這兩個屬性就能製作大部分的網頁動畫。
為什麼要學習 CSS 動畫?
CSS 動畫是現代網頁設計的核心技能之一,能讓靜態頁面瞬間變得生動有趣。無論是微妙的淡入效果,還是複雜的互動動畫,都能大幅提升用戶體驗。
本指南將帶你從最基礎的概念開始,逐步掌握 CSS 動畫的各種技巧。每個範例都包含完整的程式碼說明,讓你不只會用,更能理解背後的原理。
CSS 動畫的兩種方式
CSS 動畫主要有兩種實現方式:
- Transition(過渡):適合簡單的狀態變化
- Animation(動畫):適合複雜的動畫序列
讓我們從最基礎的透明度動畫開始!
透明度動畫:淡入淡出效果
將滑鼠懸停在第一個方塊上,點擊第二個方塊重新播放
透明度動畫程式碼解析
上方範例展示了三種不同的透明度動畫實現方式:
1. Transition 淡化效果
.fade-transition {
  opacity: 1;
  transition: opacity 0.5s ease-in-out;
}
.fade-transition:hover {
  opacity: 0.3;
}2. Animation 呼吸效果
.fade-animation {
  animation: breathing 2s ease-in-out infinite;
}
@keyframes breathing {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.6; transform: scale(1.05); }
}3. 淡入動畫
.fade-in {
  opacity: 0;
  animation: fadeIn 1.5s ease-out forwards;
}
@keyframes fadeIn {
  0% { opacity: 0; transform: translateY(20px); }
  100% { opacity: 1; transform: translateY(0); }
}關鍵概念:
- transition:定義屬性變化的過渡效果
- @keyframes:定義動畫的關鍵影格
- animation:應用動畫到元素上
- forwards:動畫結束後保持最後一影格的狀態
位移動畫:滑動與彈跳效果
點擊任意動畫元素可重新播放該動畫
位移動畫程式碼解析
位移動畫是創造動感效果的基礎,以下是三種常用的位移動畫:
1. 左右滑動動畫
.slide-box {
  animation: slideLeftRight 3s ease-in-out infinite;
}
@keyframes slideLeftRight {
  0%, 100% { left: 10px; }
  50% { left: calc(100% - 70px); }
}2. 彈跳動畫
.bounce-box {
  animation: bounce 2s ease-in-out infinite;
}
@keyframes bounce {
  0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
  40% { transform: translateY(-30px); }
  60% { transform: translateY(-15px); }
}3. 旋轉滑動組合
.spin-slide-box {
  animation: spinSlide 4s ease-in-out infinite;
}
@keyframes spinSlide {
  0% { left: 10px; transform: rotate(0deg); }
  25% { left: calc(100% - 70px); transform: rotate(180deg); }
  75% { left: 10px; transform: rotate(360deg); }
}重點技巧:
- 使用 calc()計算動態位置
- transform比- left/top性能更好
- ease-in-out讓動畫更自然
複合動畫:多重效果組合
使用控制按鈕來操作動畫播放,體驗不同的動畫控制方式
複合動畫程式碼解析
複合動畫結合多種效果,創造出豐富的視覺體驗:
1. 彩虹旋轉球
.rainbow-spinner {
  background: linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1);
  background-size: 300% 300%;
  animation: rainbowSpin 3s ease-in-out infinite;
}
@keyframes rainbowSpin {
  0% { 
    transform: rotate(0deg) scale(1);
    background-position: 0% 50%;
  }
  50% { 
    transform: rotate(180deg) scale(0.8);
    background-position: 100% 50%;
  }
  100% { 
    transform: rotate(360deg) scale(1);
    background-position: 0% 50%;
  }
}2. 脈衝波紋效果
.pulse-wave {
  animation: pulseWave 2s ease-out infinite;
}
.pulse-wave::before,
.pulse-wave::after {
  content: '';
  position: absolute;
  border: 2px solid #8b5cf6;
  border-radius: 50%;
  animation: ripple 2s ease-out infinite;
}
@keyframes ripple {
  0% { transform: scale(1); opacity: 1; }
  100% { transform: scale(2.5); opacity: 0; }
}3. JavaScript 動畫控制
// 暫停/播放動畫
element.style.animationPlayState = 'paused'; // 暫停
element.style.animationPlayState = 'running'; // 播放
// 重置動畫
element.style.animation = 'none';
element.offsetHeight; // 強制重排
element.style.animation = 'animationName 2s ease infinite';
// 調整動畫速度
element.style.animationDuration = '1s'; // 加快速度CSS 動畫最佳實踐
性能優化技巧
- 
優先使用 transform 和 opacity - 這些屬性不會觸發重新佈局,性能最佳
- 避免動畫 width、height、top、left 等屬性
 
- 
合理設置動畫時長 - 微互動:100-300ms
- 頁面切換:300-500ms
- 裝飾動畫:1-3秒
 
- 
使用 will-change 優化 
.animated-element {
  will-change: transform, opacity;
}用戶體驗考量
支援無障礙設計
@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}提供動畫控制
- 對於循環動畫,提供暫停選項
- 避免過於頻繁或刺眼的動畫
- 確保動畫有明確的開始和結束狀態
掌握這些 CSS 動畫技巧,你就能為網站創造出既美觀又實用的動畫效果!記住,好的動畫應該服務於用戶體驗,而不是單純的炫技。
 
  
  
 