css动画之keyframes入门

CSS 动画通过 @keyframes 规则和动画属性来实现。@keyframes 定义了动画的关键帧,而动画属性则控制动画的执行方式。

1. @keyframes 定义动画

@keyframes 用于定义动画的关键帧,指定元素在不同时刻的样式变化。

语法:

@keyframes animationName {
  0% {
    /* 初始状态 */
    transform: translateX(0);
  }
  50% {
    /* 中间状态 */
    transform: translateX(100px);
  }
  100% {
    /* 结束状态 */
    transform: translateX(0);
  }
}
  • 0% 表示动画的起始位置(即初始时的样式)。
  • 50% 表示动画的中间位置(即动画进行到一半时的样式)。
  • 100% 表示动画的结束位置(即动画结束时的样式)。

你可以用百分比来定义多个关键帧,或者使用 fromto 关键词替代 0%100%

@keyframes move {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(100px);
  }
}

2. animation 属性

要在元素上应用动画,你需要使用 animation 相关的属性。

animation-name

指定要应用的动画名称,这个名称需要与 @keyframes 的名称一致。

animation-name: move;
animation-duration

定义动画的持续时间,单位可以是秒(s)或毫秒(ms)。例如:

animation-duration: 2s; /* 动画持续 2 秒 */
animation-timing-function

控制动画的速度曲线,决定动画的过渡是平滑的还是有加速/减速效果。常见值有:

  • linear: 线性过渡,整个动画的速度保持一致。
  • ease: 先慢后快再慢,默认值。
  • ease-in: 动画开始时较慢,后面逐渐加速。
  • ease-out: 动画开始时较快,最后逐渐减速。
  • ease-in-out: 动画开始和结束时较慢,中间较快。
  • steps(n, start/end): 将动画分割为 n 个阶段,startend 指定步进位置。
animation-timing-function: ease-in-out;
animation-delay

设置动画开始前的延迟时间,单位是秒或毫秒。比如:

animation-delay: 1s; /* 延迟 1 秒后开始动画 */
animation-iteration-count

指定动画的循环次数。可以是具体的数值,或者使用 infinite 让动画无限循环。

animation-iteration-count: 3; /* 动画循环 3 次 */
animation-iteration-count: infinite; /* 无限循环 */
animation-direction

控制动画的播放方向:

  • normal: 正常播放(默认值)。
  • reverse: 反向播放。
  • alternate: 正常播放一次后反向播放一次。
  • alternate-reverse: 反向播放一次后正常播放一次。
animation-direction: alternate; /* 每次循环交替方向播放 */
animation-fill-mode

定义动画在执行之前和之后,元素的样式应该如何呈现:

  • none: 默认值,动画不影响元素的初始或最终状态。
  • forwards: 动画结束时保持最后一帧的状态。
  • backwards: 在动画延迟期间,应用第一个关键帧的样式。
  • both: 同时应用 forwardsbackwards
animation-fill-mode: forwards; /* 动画结束时保持最终状态 */
animation-play-state

控制动画的播放或暂停。可以使用 paused 来暂停动画,或者使用 running 来继续播放动画。

animation-play-state: paused; /* 动画暂停 */

3. 综合应用例子

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS Animation Example</title>
  <style>
    /* 定义动画 */
    @keyframes move {
      0% {
        transform: translateX(0);
      }
      50% {
        transform: translateX(100px);
      }
      100% {
        transform: translateX(0);
      }
    }

    /* 应用动画 */
    .box {
      width: 100px;
      height: 100px;
      background-color: blue;
      animation-name: move;
      animation-duration: 2s;
      animation-timing-function: ease-in-out;
      animation-delay: 1s;
      animation-iteration-count: infinite;
      animation-direction: alternate;
      animation-fill-mode: forwards;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

动画属性解释:

  • animation-name: move;:指定应用的动画为 move
  • animation-duration: 2s;:动画持续 2 秒。
  • animation-timing-function: ease-in-out;:动画开始和结束时较慢,中间较快。
  • animation-delay: 1s;:动画开始前延迟 1 秒。
  • animation-iteration-count: infinite;:动画无限循环。
  • animation-direction: alternate;:每次动画交替方向。
  • animation-fill-mode: forwards;:动画结束后保持最后一帧的状态。

4. 动画的简写

你也可以使用简写形式将所有动画属性结合成一个 animation 声明:

.box {
  animation: move 2s ease-in-out 1s infinite alternate forwards;
}

这段代码的顺序是:

  1. 动画名称:move
  2. 持续时间:2s
  3. 速度曲线:ease-in-out
  4. 延迟时间:1s
  5. 循环次数:infinite
  6. 方向:alternate
  7. 结束状态:forwards

通过这些内容,你可以实现非常复杂和灵活的 CSS 动画效果。你可以尝试调整不同的属性值,创建各种有趣的动画效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值