css3动画保持状态不变

02da78f581930d621e16b8da3f7f2371.png

css3动画在动作结束时保持该状态不变的解决办法

animation-fill-mode : none | forwards | backwards | both;

1、none:不改变默认行为。

2、forwards :当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。

3、backwards:在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。

4、both:向前和向后填充模式都被应用。

b1ca7c86952086bec609bd611594cb40.png

CSS 动画不会在第一个关键帧播放之前或在最后一个关键帧播放之后影响元素,比如下面的例子,0.3s播放完动画之后元素会停留在0的位置,而不是100px的位置,而且元素是红色的。

<head>
  <style>
    @keyframes move {
      0% {
        transform: translate3d(0, 0, 0);
        background: green;
      }
      100% {
        transform: translate3d(100px, 0, 0);
        background: yellow;
      }
    }
    .box {
      width: 100px;
      height: 100px;
      background: red;
      animation: move 0.3s;
    }
</style>
</head>
<body>
  <div class="box"></div>
</body>

animation-fill-mode 属性能够覆盖这种行为。

在不播放动画时(在开始之前,结束之后,或两者都结束时),animation-fill-mode 属性规定目标元素的样式。

下面的例子让 <div> 元素在动画结束时保留来自最后一个关键帧的样式值,元素最后停留在100px的位置,而且元素是红色的。

.box {
  width: 100px;
  height: 100px;
  background: pink;
  animation: move 0.3s;
  animation-fill-mode: forwards;
}

下面的例子在动画开始之前(在动画延迟期间)使 <div> 元素获得由第一个关键帧设置的样式值:

<head>
  <style>
    @keyframes move {
      0% {
        transform: translate3d(0, 0, 0);
        background: green;
      }


      100% {
        transform: translate3d(100px, 0, 0);
        background: yellow;
      }
    }


    .box {
      width: 100px;
      height: 100px;
      background: red;
      animation: move 0.3s;
      animation-delay: 2s;
      animation-fill-mode: backwards;
    }
</style>
</head>


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

动画设置的delay延迟时间是2s,所以动画之前先由红色变成绿色,然后2s之后开始动画从绿色变成黄色经过0.3s。由于backwards是开始应用第一帧,所以动画结束之后又会变成红色然后回到0的位置。

下面的例子在动画开始之前使 <div> 元素获得第一个关键帧设置的样式值,以及在动画结束时保留最后一个关键帧的样式值:

<head>
  <style>
    @keyframes move {
      0% {
        transform: translate3d(0, 0, 0);
        background: green;
      }


      100% {
        transform: translate3d(100px, 0, 0);
        background: yellow;
      }
    }


    .box {
      width: 100px;
      height: 100px;
      background: red;
      animation: move 0.3s;
      animation-delay: 2s;
      animation-fill-mode: both;
    }
</style>
</head>


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

设置了both属性,动画之前先由红色变成绿色,然后2s之后开始动画从绿色变成黄色经过0.3s,最后停留在100px的位置,元素也是黄色的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值