⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

CSS 动画 — 让网页动起来

CSS 动画详解 · 难度:进阶 · +15XP

CSS 动画详解

CSS @keyframes 动画可以创建元素从一个样式到另一个样式的平滑过渡。与 transition 不同,animation 不需要用户交互即可运行,且支持多步骤、循环和反向播放。

@keyframes 关键帧

使用 @keyframes 定义动画的各阶段样式。可以用百分比(0%到100%)或 from/to 关键字。

@keyframes slideIn {
  0% {
    transform: translateX(-100%);
    opacity: 0;
  }
  50% {
    opacity: 0.5;
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } }

@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

animation 属性

animation 是一个简写属性,包含 8 个子属性:

子属性说明常用值
animation-name动画名称由 @keyframes 定义的名称
animation-duration单次持续时间1s, 500ms, 2s
animation-timing-function速度曲线ease, linear, ease-in-out
animation-delay开始前延迟0s, 500ms
animation-iteration-count重复次数1, 3, infinite
animation-direction播放方向normal, reverse, alternate
animation-fill-mode结束状态none, forwards, backwards, both
animation-play-state播放状态running, paused

完整动画示例

/* 滑入 + 淡入动画 */
.slide-in {
  animation-name: slideIn;
  animation-duration: 0.5s;
  animation-timing-function: ease-out;
  animation-fill-mode: forwards;
}

/* 简写形式 */ .slide-in { animation: slideIn 0.5s ease-out forwards; }

/* 无限旋转 */ .spinner { animation: spin 1s linear infinite; }

/* 脉冲效果 */ .btn:hover { animation: pulse 0.3s ease-in-out; }

animation 简写顺序

/* 顺序: name duration timing-function delay iteration-count direction fill-mode play-state */
animation: slideIn 2s ease-in-out 0s 1 normal forwards;

/* 常用简写组合 */ animation: fadeIn 1s ease; /* 单次播放 */ animation: bounce 1s ease infinite; /* 无限循环 */ animation: spin 2s linear infinite; /* 持续旋转 */ animation: pulse 0.5s ease-in-out alternate; /* 来回交替 */

实用动画效果集

/* 淡入 */
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* 弹跳 */ @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } }

/* 抖动 */ @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-10px); } 75% { transform: translateX(10px); } }

???? 练习

  1. 创建一个元素从左侧滑入并淡出的入场动画
  2. 用 animation 实现一个持续旋转的加载图标
  3. 给按钮添加点击时的脉冲缩放效果
  4. 使用 animation-delay 让列表项依次出现(逐条动画)
  5. 尝试 alternate 方向让元素来回弹跳

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0