技术

CSS 动画怎么做?从基础到进阶的完整入门指南

#CSS#动画#网页设计#前端开发#教学
CSS 动画教学展示图

为什么要学习 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 动画技巧,你就能为网站创造出既美观又实用的动画效果!记住,好的动画应该服务于用户体验,而不是单纯的炫技。

你可能还会喜欢

技术

Git指令大全:2025年版本控制完整教学指南 | 前端开发必学

#Git#版本控制#开发工具#指令
营销

SEO网页设计怎么做?2025年AI时代搜索优化完整指南

#SEO#搜索优化#AI营销#Core Web Vitals
指南

网页设计新手怎么入门?2025年10分钟做出你的第一个网站

#网页设计入门#新手教学#HTML基础#网站建置
资源

Figma替代方案有哪些?Penpot免费完胜!7款工具实测省钱又专业

#Figma#设计工具#UI设计#免费工具