2014-09-10 40 views
3

我正在尝试使用SASS mixin在动画中自动使用供应商前缀。这是混入:Sass mixins没有替换变量

@mixin keyframes($name) { 
    @-o-keyframes $name { @content }; 
    @-moz-keyframes $name { @content }; 
    @-webkit-keyframes $name { @content }; 
    @keyframes $name { @content }; 
} 

现在,如果我有这样的:

@include keyframes(test) { 
    from { 
     opacity: 0; 
    } 
    to { 
     opacity: 1; 
    } 
} 

产生的CSS是这样的:

@-o-keyframes $name { ... } 
@-moz-keyframes $name { ... } 
@-webkit-keyframes $name { ... } 
@keyframes $name { ... } 

SASS根本就不是$nametest更换。这是一个已知的错误还是有解决方法?我找不到与此问题相关的任何内容。顺便说一句,我使用的是SASS 3.4.1版。

回答

7

变化$name#{$name}中混入

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

Demo

+0

这工作,但它是一个错误吗?文档没有提到这一点。 – jangxx 2014-09-10 16:29:07

+0

它实际上[是规范的一部分](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#interpolation_) – 2014-09-10 16:32:47

+3

是的,但根据文档,它应该工作,而不必做插值: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#mixin-arguments(这个问题突然出现在我的项目上..你的回答解决了这个问题,但我想知道为什么会发生这种情况) – 2014-10-11 10:06:06