在Mixins中使用传递的变量作为键/值对

时间:2014-11-14 19:51:29

标签: sass mixins

我试过这个,但没有成功。我找不到合适的搜索参数。

我在SASS中创建一个mixin,允许我通过传递动画名称,从值到值来创建关键帧。这是一个例子:

@mixin keyframes($name, $from, $to) {
    @-webkit-keyframes #{$name} {
        from {
            left: $from
        }
        to {
            left: $to
        }
    }
}

这是一个较短的版本,因为我还会添加@ -moz-keyframes和@keyframes的行。我更喜欢这种方法,这样我就不必在动画中重复“从”和“到”并让mixin只是使用@content抓住它,但我也不想假设“左”是唯一的将受到影响的财产。

我想做的是将$ from和$变量视为对象,以便它们可以包含一系列键/值对。当我尝试这个时:

$mixin keyframes($name, $from, $to) {
    @-webkit-keyframes #{$name} {
        from {
            $from
        }
        to {
            $to
        }
    }
}

...我得到编译错误,因为它除了键/值对而不是变量。

有没有办法告诉SASS将$ from和$ to视为一系列键/值对?我已经尝试了#{$ from},它仍然会抛出编译错误。

谢谢!

1 个答案:

答案 0 :(得分:4)

你不能这样做,因为属性/值不是字符串。你必须使用映射来编写它,如下所示:

@mixin keyframes($name, $from, $to) {
    @-webkit-keyframes #{$name} {
        from {
            @each $prop, $val in $from {
              #{$prop}: $val;
            }
        }
        to {
            @each $prop, $val in $to {
              #{$prop}: $val;
            }
        }
    }
}

@include keyframes(foo, (top: 10px), (top: 50px));

但是,如果您的目标是编写灵活的混音,我建议不要这样做。只需写出你自己的语句:

@mixin keyframes($name) {
    @-webkit-keyframes #{$name} {
        @content
    }
}

@include keyframes(foo) {
  from {
    top: 10px;
  }

  to {
    top: 50px;
  }
}