为 @keyframes 动画创建 mixin/函数,该动画将接受更改值的参数

lla*_*err 1 sass

我想在 sass 中创建 mixin/函数来自定义我的 @keyframes 动画。看起来我可以使用这段代码来做到这一点,但是有更好的方法吗?

https://www.sassmeister.com/gist/13a4b5d4df15ca46bd484ab5758f6de0

$animation-name: 1 !global;
@mixin animate_bg($color1, $color2) {
  $animation-name: unique-id() !global;
  @keyframes #{$animation-name} {
      0% {
          background-color: $color1;
      }
      100% {
          background-color: $color2;
      }
  }
  @content
}

@include animate_bg(#007efe, #cce5ff) {
  a.finished {
    animation-duration: 0.25s;
    animation-name: $animation-name;
  }
}

@include animate_bg(#aabbcc, #ffaabb) {
  b.finished {
    animation-duration: 0.25s;
    animation-name: $animation-name;
  }
}
Run Code Online (Sandbox Code Playgroud)

产生这个CSS

@keyframes uz61m5wd4 {
  0% {
    background-color: #007efe;
  }
  100% {
    background-color: #cce5ff;
  }
}
a.finished {
  animation-duration: 0.25s;
  animation-name: uz61m5wd4;
}

@keyframes uz61m5wdd {
  0% {
    background-color: #aabbcc;
  }
  100% {
    background-color: #ffaabb;
  }
}
b.finished {
  animation-duration: 0.25s;
  animation-name: uz61m5wdd;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eis 5

.finished通过将您的类包含在 mixin 中来稍微缩小 SCSS 。但不确定这是否正是您正在寻找的。

// mixin:
@mixin animate_bg($color1, $color2, $class, $duration) {
  $animation-name: unique-id() !global;

  @keyframes #{$animation-name} {
    0% {
      background-color: $color1;
    }
    100% {
      background-color: $color2;
    }
  }

  .#{$class}.finished {
    animation-duration: $duration;
    animation-name: $animation-name;
  }
}

// using the mixin:
@include animate_bg(#007efe, #cce5ff, a, .25s);
@include animate_bg(#aabbcc, #ffaabb, b, .25s);
Run Code Online (Sandbox Code Playgroud)