← CSS 文本样式 CSS blur 模糊效果 →

CSS keyframes 关键帧动画

原创 2025-09-07 CSS 已有人查阅

CSS动画关键帧技术详解:从基础到高级应用

概述

在现代网页设计中,CSS动画关键帧(keyframes)技术为开发者提供了强大的动态效果实现能力。通过精细控制元素在不同时间点的样式状态,可以创造出流畅、吸引人的视觉体验,有效提升用户交互感受和页面美观度。

关键帧动画基础概念

什么是@keyframes规则

@keyframes是CSS中用于定义动画序列的核心规则,它允许开发者指定动画过程中各个关键时间点的样式状态。

@keyframes 动画名称 {
  0% {
    /* 起始状态样式 */
  }
  50% {
    /* 中间状态样式 */
  }
  100% {
    /* 结束状态样式 */
  }
}

基本动画属性

将定义好的关键帧动画应用到元素需要以下属性:

  • animation-name: 指定要使用的关键帧动画名称

  • animation-duration: 设置动画完成一个周期的时间

  • animation-timing-function: 定义动画速度曲线

  • animation-delay: 设置动画开始前的延迟时间

  • animation-iteration-count: 定义动画播放次数

  • animation-direction: 指定动画播放方向

基础示例演示

示例1:淡入淡出效果

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代码号编程学习 - 淡入淡出动画</title>
  <style>
    @keyframes fadeEffect {
      0% {
        opacity: 0;
        transform: scale(0.8);
      }
      100% {
        opacity: 1;
        transform: scale(1);
      }
    }

    .fade-element {
      width: 200px;
      height: 200px;
      background: linear-gradient(135deg, #6e8efb, #a777e3);
      border-radius: 10px;
      display: flex;
      align-items: center;
      justify-content: center;
      color: white;
      font-family: 'Arial', sans-serif;
      animation: fadeEffect 1.5s ease-in-out;
      margin: 50px auto;
    }
  </style>
</head>
<body>
  <div class="fade-element">
    <h3>欢迎学习代码号编程</h3>
  </div>
</body>
</html>

示例2:旋转动画效果

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代码号编程学习 - 旋转动画</title>
  <style>
    @keyframes rotateAnimation {
      0% {
        transform: rotate(0deg) scale(1);
        background-color: #ff6b6b;
      }
      50% {
        transform: rotate(180deg) scale(1.2);
        background-color: #4ecdc4;
      }
      100% {
        transform: rotate(360deg) scale(1);
        background-color: #ff6b6b;
      }
    }

    .rotate-box {
      width: 120px;
      height: 120px;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      color: white;
      font-weight: bold;
      animation: rotateAnimation 3s linear infinite;
      margin: 100px auto;
    }
  </style>
</head>
<body>
  <div class="rotate-box">
    代码号学习
  </div>
</body>
</html>

高级动画技术

多重动画组合

通过组合多个动画效果,可以创建更复杂的视觉体验:

@keyframes slideIn {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0);
  }
}

@keyframes colorChange {
  0% { background-color: #ff6b6b; }
  50% { background-color: #4ecdc4; }
  100% { background-color: #45b7d1; }
}

.combined-animation {
  animation: 
    slideIn 1.5s ease-out,
    colorChange 3s ease-in-out infinite alternate;
}

变换动画

利用CSS3的变换功能创建立体动画效果:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代码号编程 - 动画示例</title>
  <style>
    .scene {
      perspective: 800px;
      margin: 100px auto;
      width: 200px;
      height: 200px;
    }

    @keyframes threeDRotate {
      0% {
        transform: rotateX(0) rotateY(0);
      }
      100% {
        transform: rotateX(360deg) rotateY(360deg);
      }
    }

    .cube {
      width: 100%;
      height: 100%;
      position: relative;
      transform-style: preserve-3d;
      animation: threeDRotate 6s linear infinite;
    }

    .cube-face {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 2px solid #333;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
      font-weight: bold;
      opacity: 0.8;
    }

    .front { 
      transform: translateZ(100px);
      background: #ff6b6b; 
    }
    .back { 
      transform: translateZ(-100px) rotateY(180deg);
      background: #4ecdc4; 
    }
    .right { 
      transform: translateX(100px) rotateY(90deg);
      background: #45b7d1; 
    }
    .left { 
      transform: translateX(-100px) rotateY(-90deg);
      background: #96ceb4; 
    }
    .top { 
      transform: translateY(-100px) rotateX(90deg);
      background: #feca57; 
    }
    .bottom { 
      transform: translateY(100px) rotateX(-90deg);
      background: #ff9ff3; 
    }
  </style>
</head>
<body>
  <div class="scene">
    <div class="cube">
      <div class="cube-face front">代码号</div>
      <div class="cube-face back">编程</div>
      <div class="cube-face right">学习</div>
      <div class="cube-face left">教程</div>
      <div class="cube-face top">CSS3</div>
      <div class="cube-face bottom">动画</div>
    </div>
  </div>
</body>
</html>

实际应用场景

加载动画实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代码号编程 - 加载动画</title>
  <style>
    .loading-container {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 200px;
      margin: 50px auto;
    }

    @keyframes bounce {
      0%, 100% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-30px);
      }
    }

    .loading-dot {
      width: 20px;
      height: 20px;
      margin: 0 10px;
      border-radius: 50%;
      animation: bounce 1.5s infinite ease-in-out;
    }

    .dot1 { 
      background-color: #ff6b6b; 
      animation-delay: 0s;
    }
    .dot2 { 
      background-color: #4ecdc4; 
      animation-delay: 0.2s;
    }
    .dot3 { 
      background-color: #45b7d1; 
      animation-delay: 0.4s;
    }
    .dot4 { 
      background-color: #96ceb4; 
      animation-delay: 0.6s;
    }
  </style>
</head>
<body>
  <div class="loading-container">
    <div class="loading-dot dot1"></div>
    <div class="loading-dot dot2"></div>
    <div class="loading-dot dot3"></div>
    <div class="loading-dot dot4"></div>
  </div>
</body>
</html>

按钮交互动效

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>代码号编程 - 按钮动画</title>
  <style>
    @keyframes pulse {
      0% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(79, 205, 196, 0.7);
      }
      70% {
        transform: scale(1.05);
        box-shadow: 0 0 0 10px rgba(79, 205, 196, 0);
      }
      100% {
        transform: scale(1);
        box-shadow: 0 0 0 0 rgba(79, 205, 196, 0);
      }
    }

    .animated-button {
      padding: 15px 30px;
      background: linear-gradient(135deg, #6e8efb, #a777e3);
      color: white;
      border: none;
      border-radius: 25px;
      font-size: 16px;
      font-weight: bold;
      cursor: pointer;
      transition: all 0.3s ease;
      display: block;
      margin: 100px auto;
    }

    .animated-button:hover {
      animation: pulse 1.5s infinite;
      transform: translateY(-2px);
    }
  </style>
</head>
<body>
  <button class="animated-button">开始代码号编程学习</button>
</body>
</html>

本节课程知识要点

  1. 关键帧定义:使用@keyframes规则创建动画序列,通过百分比定义不同时间点的样式状态

  2. 动画属性控制:掌握animation-durationanimation-delayanimation-iteration-count等属性的使用方法

  3. 时间函数运用:合理使用easelinearcubic-bezier()等时间函数控制动画节奏

  4. 性能优化:优先使用transformopacity属性进行动画,避免重排和重绘

  5. 响应式设计:确保动画在不同设备上都能正常显示和良好运行

注意事项

  1. 浏览器兼容性:在使用高级动画特性时,考虑添加浏览器前缀确保兼容性

  2. 用户体验:动画效果应该增强用户体验,而不是干扰用户操作

  3. 性能考虑:复杂的动画可能影响页面性能,特别是在移动设备上

  4. 可访问性:为对动画敏感的用户提供减少动画的选项

通过系统学习CSS关键帧动画技术,开发者可以在代码号编程平台(https://www.ebingou.cn/biancheng/)上创建出更加生动、吸引人的网页效果,有效提升项目的视觉质量和用户体验。

← CSS 文本样式 CSS blur 模糊效果 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号