本文介绍: 属性规定当动画播放时(当动画完成时,或当动画一个延迟未开始播放时),要应用到元素样式默认情况下,CSS 动画在第一个关键帧播放完之前不会影响元素,在最后一个关键帧完成后停止影响元素属性重写行为
CSS3 animationfillmode详解
定义

animation-fill-mode 属性规定当动画播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素样式
默认情况下,CSS 动画在第一个关键帧播放完之前不会影响元素,在最后一个关键帧完成后停止影响元素。animation-fill-mode 属性重写行为

语法

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

详解

假设如下这样一个动画例子

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    <title>Document</title>
    <style>
      .box {
        width: 200px;
        height: 200px;
        background-color: red;
        transform: translateY(0);
      }
      .box.on {
        animation: move 1s;
      }

      @keyframes move {
        from {
          transform: translateY(-50px);
        }
        to {
          transform: translateY(50px);
        }
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
  </body>
</html>

使用图片来表示 translateY 的值与时间的关系(注意看绿色的部分):

  • 横轴为表示 时间,为 0 时表示动画开始的时间,也就是向 box 加上 on 类名的时间,横轴一格表示 0.5s
  • 纵轴表示translateY的值,为 0 时表示 translateY 的值为 0,纵轴一格表示 50px
  1. animation-fill-mode: none;
    在这里插入图片描述
    意思就是说在动画开始之前或动画完成之后,none都不应用动画中的初始值
  2. animation-fill-mode: forwards;
    在这里插入图片描述
    意思就是说在动画开始之前,forwards应用动画中的初始值,在动画结束之后,停留在动画最后一帧。
  3. animation-fill-mode: backwards;
    在这里插入图片描述
    意思就是说在动画完成之后,backwards应用动画中的结束值,在动画开始之前,应用动画中的初始值
  4. animation-fill-mode: both;
    在这里插入图片描述
    意思就是说在动画开始之前以及结束之后,both应用动画中的初始值结束值。
属性
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * { margin: 0; padding: 0; }
        body {
            width: 300px;
            height: 150px;
            border: 1px solid #000;
            margin: 50px 0 0 100px;
        }
        .box {
            width: 150px;
            height: 150px;
            background-color: red;
            transform: translateX(0);
            animation: move 1s;
            animation-fill-mode: none;
            animation-delay: 2s;
        }
        @keyframes move {
            from {
                transform: translateX(50px);
                background-color: blue;
            }
            to  {
                transform: translateX(150px);
                background-color: blue;
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

当元素未播放动画或已经播放完成后的元素的样式如下
在这里插入图片描述

也就是说,它只设置动画结束后的属性值,而不设置延迟动画期间的。

下面使用一个例子分别使用animation-direction的几个属性查看它们的区别

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * { margin: 0; padding: 0; }
        body {
            width: 300px;
            height: 790px;
            border: 1px solid #000;
            margin: 50px 0 0 100px;
        }
        .box {
            width: 150px;
            height: 150px;
            background-color: red;
            transform: translateX(0);
            margin-bottom: 10px;
        }
        .box1 { animation: move 4s 3s backwards 2 normal; }
        .box2 { animation: move 4s 3s backwards 2 alternate; }
        .box3 { animation: move 4s 3s backwards 2 reverse; }
        .box4 { animation: move 4s 3s backwards 2 alternate-reverse; }

        @keyframes move {
            from {
                transform: translateX(50px);
                background-color: blue;
            }
            to  {
                transform: translateX(150px);
                background-color: blue;
            }
        }
    </style>
</head>
<body>
    <div class="box box1"></div>
    <div class="box box2"></div>
    <div class="box box3"></div>
    <div class="box box4"></div>
    <div class="box box5"></div>
</body>
</html>

动画未开始前是如下效果
在这里插入图片描述

结束动画后:
在这里插入图片描述

也就是说,它只设置动画在延迟期间第一次迭代的关键帧的属性值,而不设置结束动画后的,与forwards相反

  • both
    动画遵循 forwards backwards 规则。也就是说,动画会在两个方向扩展动画属性,它会即设置动画在延迟期间第一次迭代的关键帧的属性值,也设置结束动画后的属性值。
    将上个例子中的animation-fill-mode属性都给改变,设置成both
    那么延迟期间的效果如上图一样:
    在这里插入图片描述
    结束动画后的效果如下,就是它原本的动画根据设置的值改变后的最后一帧的值:
    在这里插入图片描述
    参考文献1
    参考文献2

原文地址:https://blog.csdn.net/qq_40864647/article/details/129043742

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_15663.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注