技術

CSS 動畫怎麼做?從基礎到進階的完整入門指南

#CSS#動畫#網頁設計#前端開發#教學
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() 計算動態位置
  • transformleft/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 動畫最佳實踐

性能優化技巧

  1. 優先使用 transform 和 opacity

    • 這些屬性不會觸發重新佈局,性能最佳
    • 避免動畫 width、height、top、left 等屬性
  2. 合理設置動畫時長

    • 微互動:100-300ms
    • 頁面切換:300-500ms
    • 裝飾動畫:1-3秒
  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 動畫技巧,你就能為網站創造出既美觀又實用的動畫效果!記住,好的動畫應該服務於用戶體驗,而不是單純的炫技。

你可能還會喜歡

資源

網頁設計師要用什黬Chrome擴充?2025年30款必備推薦

#Chrome擴充功能#網頁設計工具#設計師工具#工作效率
資源

最好用的AI文案生成工具有哪些?2025年7款必備推薦

#AI工具#文案寫作#設計工具#人工智慧
行銷

SEO網頁設計怎麼做?2025年AI時代搜尋優化完整指南

#SEO#搜尋優化#AI行銷#Core Web Vitals
技術

什麼是RWD響應式網頁設計?完整學習指南與實作技巧

#RWD#響應式設計#SEO#網頁設計