📜  如何使用 CSS 制作平滑的弹跳动画?(1)

📅  最后修改于: 2023-12-03 14:51:51.400000             🧑  作者: Mango

如何使用 CSS 制作平滑的弹跳动画?

在开发网页时,我们经常需要加入动画效果来增强页面的交互性和吸引力。其中一种常见的动画效果就是弹跳动画。在这篇文章中,我们将使用 CSS 来制作一个平滑的弹跳动画。

实现步骤
1. HTML 结构

首先,在 HTML 中创建一个 div 元素,并为其添加样式类名,如下所示:

<div class="box"></div>
2. CSS 样式

接下来,我们需要设置 box 类的初始样式。具体来说,我们将设置其宽度、高度、背景颜色和位置等属性。

.box {
  width: 100px;
  height: 100px;
  background-color: #4285f4;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

此处,我们使用了 transform 属性将元素向左、向上移动 50% 的距离,以使其居中对齐。

3. 动画效果

现在,我们将添加动画效果。具体来说,我们需要设置 box 类在收缩到最小大小后逐渐恢复到原来大小的效果。为此,我们将使用 CSS3 的 transition 属性。

.box {
  width: 100px;
  height: 100px;
  background-color: #4285f4;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  transition: all 0.5s ease-in-out;
}

其中,all 属性表示应用动画效果的所有属性,0.5s 表示动画的持续时间,而 ease-in-out 表示动画的缓动类型。

4. 键桥帧动画

最后,我们需要添加键桥帧动画,以定义 box 类在动画中的行为。具体来说,我们将设置三个关键帧:一个表示初始状态,一个表示中间状态,一个表示最终状态。

.box {
  width: 100px;
  height: 100px;
  background-color: #4285f4;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  transition: all 0.5s ease-in-out;
  
  animation-name: bounce;
  animation-duration: 1s;
  animation-iteration-count: infinite;
}

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

此处,我们使用了 animation-name、animation-duration 和 animation-iteration-count 属性来定义动画的名称、持续时间和重复次数。而 @keyframes 规则则表示动画的关键帧。在上述代码中,我们设定了元素从下往上弹跳回到原位,过程分为三个阶段:第一阶段元素需要上弹到 50px,第二阶段它需要回到原始位置的一半左右,第三阶段它又回到了原始位置。

结论

至此,我们使用 CSS 成功制作了一个平滑的弹跳动画。您可以在您的网站中使用此动画效果来增强页面的吸引力和交互性。

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>弹跳动画</title>
  <style>
    .box {
      width: 100px;
      height: 100px;
      background-color: #4285f4;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
      transition: all 0.5s ease-in-out;
      animation-name: bounce;
      animation-duration: 1s;
      animation-iteration-count: infinite;
    }

    @keyframes bounce {
      0% {
        transform: translateY(0);
      }
      50% {
        transform: translateY(-50px);
      }
      100% {
        transform: translateY(0);
      }
    }
  </style>
</head>

<body>
  <div class="box"></div>
</body>

</html>