在Sass mixin中跳过可选参数

Chr*_*rce 31 sass mixins

我有这个mixin来处理一个简单的CSS3线性渐变:

@mixin linear-gradient($from, $to, $dir: bottom, $dir-webkit: top, $ie-filters: false) {
    background-color: $to;
    background-image: -webkit-linear-gradient($dir-webkit, $from, $to);
    background-image: linear-gradient(to $dir, $from, $to);
    @if $ie-filters == true and $old-ie {
         filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($from)}', endColorstr='#{ie-hex-str($to)}');
    }
}
Run Code Online (Sandbox Code Playgroud)

$dir 是'方向'的缩写.

如果我需要制作$ie-filters'true'并且我不需要更改$dir/ $dir-webkit默认值,我仍然需要重新声明它们,这显然不是非常干燥和最佳,所以我必须这样做:

@include linear-gradient(#7a7a7a, #1a1a1a, bottom, top, true);

当我想要这样做时:

@include linear-gradient(#7a7a7a, #1a1a1a, true);

调用mixin时如何以这种方式跳过参数?

PS如果你想知道$dir-webkitWebkit 的论点,因为它仍然没有处理新的渐变语法(参见:http://generatedcontent.org/post/37949105556/updateyourcss3 - > 新的渐变语法),方向需要与标准语法相反.

mar*_*kus 55

从SASS 3.1开始,您可以传递命名参数来执行此操作:

@include linear-gradient($from: #7a7a7a, $to: #1a1a1a, $ie-filters: true);
Run Code Online (Sandbox Code Playgroud)

其余的将是默认的.

  • 也许你不明白我的答案.这就是你如何使用你的值来调用mixin.只要传递命名参数,就可以省略其他两个参数. (4认同)
  • 什么?我刚刚向您展示了它是如何工作的,这正是您所问的。您想跳过第三个和第四个参数,这就是它的完成方式。 (3认同)
  • 抱歉,伙计,我愚蠢地将代码片段中的“@include”误读为“@mixin”,所以我认为您在实际 mixin 中声明了“$from”和“$to”的默认值。一整天都在 mixin 中工作,所以大脑有点疲惫。无论如何一切都很好。干杯。 (2认同)