CSS3动画使用教程

6 阅读5分钟

你想要一份更详细、更系统的CSS3动画(animation)使用教程,我会从基础概念到实战案例,一步步拆解CSS3动画的核心用法,让你能轻松上手并灵活运用。

CSS3 动画(animation)全教程

CSS3动画是通过​​@keyframes​​定义关键帧,再通过​​animation​​属性将动画应用到元素上,能实现比​​transition​​更复杂、更灵活的动态效果,且无需JavaScript参与。

一、核心概念理解

在开始写代码前,先理清两个核心部分:

  1. @keyframes(关键帧) :定义动画的"关键状态",比如起始、中间、结束时元素的样式。
  2. animation 属性:将定义好的关键帧动画应用到元素上,并设置动画的时长、循环、速度等规则。

二、基础语法与步骤

步骤1:定义关键帧(@keyframes)
/* 格式:@keyframes 动画名称 { 关键帧规则 } */
@keyframes 动画名称 {
  /* 0% 表示动画开始(也可以用 from 替代) */
  0% {
    /* 起始样式 */
    transform: translateX(0);
    opacity: 0;
  }
  /* 50% 表示动画进行到一半 */
  50% {
    /* 中间样式 */
    transform: translateX(100px);
    opacity: 1;
  }
  /* 100% 表示动画结束(也可以用 to 替代) */
  100% {
    /* 结束样式 */
    transform: translateX(200px);
    opacity: 0;
  }
}
步骤2:应用动画(animation 属性)
/* 给元素添加动画 */
.animated-box {
  width: 100px;
  height: 100px;
  background: #007bff;
  
  /* 核心:animation 复合属性(推荐) */
  /* 格式:动画名称 时长 速度曲线 延迟 循环次数 方向 填充模式 播放状态 */
  animation: 动画名称 2s ease 0.5s infinite alternate forwards running;
  
  /* 也可以拆分为单个属性(便于理解和调试) */
  /* animation-name: 动画名称;          // 必选:指定关键帧名称 */
  /* animation-duration: 2s;            // 必选:动画时长(默认0,无效果) */
  /* animation-timing-function: ease;  // 可选:速度曲线(默认ease) */
  /* animation-delay: 0.5s;             // 可选:延迟播放(默认0) */
  /* animation-iteration-count: infinite; // 可选:循环次数(默认1,infinite无限) */
  /* animation-direction: alternate;    // 可选:播放方向(默认normal) */
  /* animation-fill-mode: forwards;     // 可选:动画结束后样式(默认none) */
  /* animation-play-state: running;     // 可选:播放状态(默认running,paused暂停) */
}

三、关键属性详解(必掌握)

1. 速度曲线(animation-timing-function)

控制动画的播放速度,常用值:

/* 常用值示例 */
.animated-box {
  /* linear:匀速(最常用) */
  animation-timing-function: linear;
  /* ease:慢→快→慢(默认) */
  /* ease-in:慢→快 */
  /* ease-out:快→慢 */
  /* ease-in-out:慢→快→慢(比ease更平缓) */
  /* 自定义贝塞尔曲线(精准控制) */
  /* animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1); */
}
2. 播放方向(animation-direction)

控制动画是否反向播放:

.animated-box {
  /* normal:正常播放(默认),从0%→100% */
  /* alternate:交替播放,奇数次正向(0%→100%),偶数次反向(100%→0%) */
  /* reverse:反向播放(100%→0%) */
  /* alternate-reverse:反向交替播放 */
  animation-direction: alternate;
}
3. 填充模式(animation-fill-mode)

控制动画开始前/结束后的元素样式:

.animated-box {
  /* none:默认,动画结束后回到初始样式 */
  /* forwards:动画结束后,保持最后一帧样式 */
  /* backwards:动画延迟期间,保持第一帧样式 */
  /* both:同时应用forwards和backwards */
  animation-fill-mode: forwards;
}
4. 播放状态(animation-play-state)

常用于通过:hover、JS控制动画暂停/播放:

.animated-box {
  animation: move 2s infinite;
}
/* 鼠标悬停时暂停动画 */
.animated-box:hover {
  animation-play-state: paused;
}

四、实战案例(直接复用)

案例1:呼吸灯效果(透明度变化)
/* 定义关键帧 */
@keyframes breathe {
  0% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.5;
    transform: scale(1.1);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

/* 应用动画 */
.breathe-box {
  width: 80px;
  height: 80px;
  background: #ff6700;
  border-radius: 50%;
  /* 匀速、无限循环 */
  animation: breathe 2s linear infinite;
}
案例2:加载动画(旋转+多元素)
<!-- HTML结构 -->
<div class="loader">
  <div class="loader-item"></div>
  <div class="loader-item"></div>
  <div class="loader-item"></div>
</div>
/* 定义旋转关键帧 */
@keyframes load {
  0% {
    transform: translateY(0);
    opacity: 0.8;
  }
  50% {
    transform: translateY(-20px);
    opacity: 0.2;
  }
  100% {
    transform: translateY(0);
    opacity: 0.8;
  }
}

.loader {
  display: flex;
  gap: 8px;
  justify-content: center;
  align-items: center;
  height: 100px;
}

.loader-item {
  width: 12px;
  height: 30px;
  background: #007bff;
  border-radius: 6px;
  animation: load 1.2s ease infinite;
}
/* 给每个小球设置不同延迟,实现错落效果 */
.loader-item:nth-child(2) {
  animation-delay: 0.2s;
}
.loader-item:nth-child(3) {
  animation-delay: 0.4s;
}
案例3:文字渐入动画
@keyframes text-fade {
  0% {
    transform: translateY(20px);
    opacity: 0;
  }
  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

.fade-text {
  font-size: 24px;
  animation: text-fade 0.8s ease forwards;
  /* 初始状态隐藏 */
  opacity: 0;
}

五、使用注意事项

  1. 性能优化:优先使用​​transform​​和​​opacity​​属性做动画(浏览器硬件加速,无重绘),避免用​​width​​、​​height​​、​​top​​、​​left​​(会触发频繁重排,卡顿)。
  2. 兼容性:现代浏览器(Chrome/Firefox/Safari/Edge)均支持CSS3动画,无需加前缀;如需兼容老旧浏览器(如IE10-),可加前缀​​-webkit-​​(如​​@-webkit-keyframes​​、​​-webkit-animation​​)。
  3. 动画暂停:通过​​animation-play-state: paused​​暂停动画,比重新设置时长为0更优雅。

总结

  1. 核心结构:CSS3动画由​​@keyframes​​(定义关键帧)和​​animation​​(应用动画)两部分组成,​​animation-duration​​是必选属性(否则无动画效果)。
  2. 常用属性:​​animation-iteration-count: infinite​​(无限循环)、​​animation-direction: alternate​​(交替播放)、​​animation-fill-mode: forwards​​(保持结束样式)是高频组合。
  3. 性能原则:动画优先操作​​transform​​和​​opacity​​,避免触发页面重排,保证动画流畅。

你可以把这些案例代码复制到HTML文件中运行,修改关键帧的样式、动画时长、速度曲线等参数,直观感受不同设置的效果,很快就能熟练掌握。如果想实现某个特定的动画效果(比如弹跳、滑动、闪烁),可以告诉我,我会针对性给出代码。