CSS中的@keyframes规则详解
字数 968 2025-12-05 07:59:03

CSS中的@keyframes规则详解

1. 知识描述
@keyframes是CSS动画的核心规则,用于定义动画序列中的关键帧(关键状态)。它不直接应用到元素上,而是通过animation-name属性引用,控制元素在一段时间内的样式变化过程。每个@keyframes规则包含:

  • 一个自定义的名称(动画名称)
  • 多个百分比关键帧(如0%、50%、100%)或from/to关键字
  • 每个关键帧内包含该时间点应有的CSS样式

2. 基本语法结构

@keyframes 动画名称 {
  0% { /* 起始状态样式 */ }
  50% { /* 中间状态样式 */ }
  100% { /* 结束状态样式 */ }
}
  • 百分比表示动画进度的相对时间点
  • from等价于0%,to等价于100%
  • 百分比不一定按顺序排列,浏览器会自动按数值排序执行

3. 关键帧的写法细节
3.1 基本百分比写法

@keyframes slide-in {
  0% {
    transform: translateX(-100%);
    opacity: 0;
  }
  60% {
    transform: translateX(10px);
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}

说明:元素从左侧完全隐藏开始,60%时稍微向右弹跳,最后停在原位

3.2 from/to简写

@keyframes fade {
  from { opacity: 0; }
  to { opacity: 1; }
}

仅适用于简单起止动画

3.3 多属性同时变化

@keyframes complex {
  0% {
    transform: scale(0.5) rotate(0deg);
    background: red;
  }
  100% {
    transform: scale(1.5) rotate(360deg);
    background: blue;
  }
}

注意:所有可动画属性均可使用

4. 关键帧规则详解
4.1 关键帧重复定义处理

@keyframes test {
  0% { left: 0; }
  50% { left: 100px; }
  0% { top: 0; } /* 合并到0%关键帧中 */
  50% { top: 50px; } /* 合并到50%关键帧中 */
}

浏览器会将相同百分比的关键帧合并,最终0%帧同时有left:0和top:0

4.2 关键帧缺失处理

@keyframes partial {
  0% { opacity: 0; }
  100% { opacity: 1; }
  /* 未定义50%状态,浏览器会自动插值计算 */
}

如果未定义0%或100%,浏览器会使用元素原始样式或前一个关键帧

4.3 关键帧权重冲突

@keyframes conflict {
  0% { color: red; }
  50% { color: green; }
  100% { color: blue; }
  75% { color: yellow; } /* 覆盖之前的定义?不,这是新时间点 */
}

不同百分比的关键帧不会冲突,相同百分比才会合并

5. 实际应用示例
5.1 弹跳动画实现

@keyframes bounce {
  0%, 20%, 50%, 80%, 100% {
    transform: translateY(0);
  }
  40% {
    transform: translateY(-30px);
  }
  60% {
    transform: translateY(-15px);
  }
}

通过多个相同百分比创建弹跳停留效果

5.2 打字机效果

@keyframes typing {
  from { width: 0 }
  to { width: 100% }
}
@keyframes blink {
  0%, 100% { border-color: transparent }
  50% { border-color: black }
}

组合多个@keyframes创建复杂动画

6. 与animation属性配合
@keyframes必须与animation属性配合使用:

.element {
  animation: slide-in 2s ease-in-out 1s 3 alternate forwards;
  /* 对应:动画名称 时长 缓动 延迟 次数 方向 填充模式 */
}

7. 重要特性

  • @keyframes规则没有层叠性,同名规则不会覆盖,而是同时生效
  • 可以在一个元素上应用多个@keyframes动画
  • 支持所有可动画属性,包括自定义属性
  • 关键帧内的!important会被忽略
  • 性能优化:避免在@keyframes中修改布局属性(如width/height)

8. 浏览器支持与回退

  • 现代浏览器完全支持
  • 可配合@supports检测支持情况
  • 回退方案:使用transition实现简单动画

总结:@keyframes是CSS动画的时间轴定义工具,通过精确定义关键时间点的样式状态,让浏览器自动计算中间帧,实现平滑的动画效果。掌握其语法规则和特性,能够创建从简单到复杂的各种动画效果。

CSS中的@keyframes规则详解 1. 知识描述 @keyframes是CSS动画的核心规则,用于定义动画序列中的关键帧(关键状态)。它不直接应用到元素上,而是通过animation-name属性引用,控制元素在一段时间内的样式变化过程。每个@keyframes规则包含: 一个自定义的名称(动画名称) 多个百分比关键帧(如0%、50%、100%)或from/to关键字 每个关键帧内包含该时间点应有的CSS样式 2. 基本语法结构 百分比表示动画进度的相对时间点 from等价于0%,to等价于100% 百分比不一定按顺序排列,浏览器会自动按数值排序执行 3. 关键帧的写法细节 3.1 基本百分比写法 说明:元素从左侧完全隐藏开始,60%时稍微向右弹跳,最后停在原位 3.2 from/to简写 仅适用于简单起止动画 3.3 多属性同时变化 注意:所有可动画属性均可使用 4. 关键帧规则详解 4.1 关键帧重复定义处理 浏览器会将相同百分比的关键帧合并,最终0%帧同时有left:0和top:0 4.2 关键帧缺失处理 如果未定义0%或100%,浏览器会使用元素原始样式或前一个关键帧 4.3 关键帧权重冲突 不同百分比的关键帧不会冲突,相同百分比才会合并 5. 实际应用示例 5.1 弹跳动画实现 通过多个相同百分比创建弹跳停留效果 5.2 打字机效果 组合多个@keyframes创建复杂动画 6. 与animation属性配合 @keyframes必须与animation属性配合使用: 7. 重要特性 @keyframes规则没有层叠性,同名规则不会覆盖,而是同时生效 可以在一个元素上应用多个@keyframes动画 支持所有可动画属性,包括自定义属性 关键帧内的 !important会被忽略 性能优化:避免在@keyframes中修改布局属性(如width/height) 8. 浏览器支持与回退 现代浏览器完全支持 可配合@supports检测支持情况 回退方案:使用transition实现简单动画 总结 :@keyframes是CSS动画的时间轴定义工具,通过精确定义关键时间点的样式状态,让浏览器自动计算中间帧,实现平滑的动画效果。掌握其语法规则和特性,能够创建从简单到复杂的各种动画效果。