sass - 为动画创建一个 SASS mixin

标签 sass

我想创建一个允许动态调整百分比的 mixin。我有点被绊倒了,希望得到一些指点。

这是我想要实现的目标:

   @keyframes slide-1 {
    0%   {transform: translate3d(0, 0, 0);}
    50%  { }
    100% {transform: translate3d(-100%, 0, 0);}
}

@keyframes slide-2 {
    0%   {transform: translate3d(0, 0, 0);}
    50%  { }
    100% {transform: translate3d(-200%, 0, 0);}
}

Mixin 将采用百分比参数 - 我假设动画名称?就像是:
@keyframes $animation-name {
    0%   {transform: translate3d(0, 0, 0);}
    50%  { }
    100% {transform: translate3d($percentage, 0, 0);}
}

最佳答案

您可以在 .sass 文件顶部的某个位置添加 mixin,就在它被调用之前。或者您可以从外部文件中包含它。

@mixin animation-mixin($name, $from, $to) {
  @keyframes #{$name} {
    0% {transform: translate3d($from, 0, 0); opacity: 0;}
    100% {transform: translate3d($to, 0, 0); opacity: 1;}
  }
}

调用 mixin 并传递这 3 个值 $name , $from , $to像这样:
@include animation-mixin(slide-1, 0, 100%);
@include animation-mixin(slide-2, 0, 200%);

它会被翻译成这样:
@keyframes slide-1 {
  0% {
    transform: translate3d(0, 0, 0);
    opacity: 0;
  }
  100% {
    transform: translate3d(100%, 0, 0);
    opacity: 1;
  }
}
@keyframes slide-2 {
  0% {
    transform: translate3d(0, 0, 0);
    opacity: 0;
  }
  100% {
    transform: translate3d(200%, 0, 0);
    opacity: 1;
  }
}

演示

HTML
<div class="box-1"></div>
<div class="box-2"></div>

SASS
.box-1,
.box-2 {
  height: 20px;
  width: 20px;
  margin: 5px;
}
.box-1 {
  background-color: blue;
  animation: slide-1 2s ease infinite;
}
.box-2 {
  background-color: red;
  animation: slide-2 2s ease infinite;
}

@mixin animation-mixin($name, $from, $to) {
  @keyframes #{$name} {
    0% {transform: translate3d($from, 0, 0); opacity: 0;}
    100% {transform: translate3d($to, 0, 0); opacity: 1;}
  }
}

@include animation-mixin(slide-1, 0, 100%);
@include animation-mixin(slide-2, 0, 200%);

关于sass - 为动画创建一个 SASS mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183991/

相关文章:

css - Sass 中的多个框阴影声明

html - 如何在 Sass 中正确使用 BEM

css - 使用 SCSS 添加多个类的样式?

html - 如何删除没有空格的堆叠列表项上的双边框

jquery - 创建动态 SASS 变量来更改 Ionic 2 选项卡菜单?

reactjs - 选择器 ":global .class"不纯(纯选择器必须至少包含一个本地类或 id)

css - scss 加入类

css - 以正确的顺序在 3 列中显示 flex block

css - 覆盖基础按钮

css - "@import ' bourbon/bourbon' "是否与导入单个 mixins 一样有效?