2011-10-07 83 views
19

让说你有一个像这样的阴影混入:是否有可能在sass中超载mixins?

@mixin box-shadow($offset, $blur, $color) 
{ 
    -moz-box-shadow: $offset $offset $blur $color; 
    -webkit-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 

是否有可能重载混入的东西,如:

@mixin box-shadow($offset, $blur) 
{ 
    @include box-shadow($offset, $blur, #999); 
} 

还是我必须为混入使用不同的名字呢?

+0

仅作为小费,在管理供应商的前缀sass很难,网页浏览器不断更新,很难保证我们的代码在每次更新时都能正常运行,所以我推荐使用[autoprefixer](http://stackoverflow.com/questions/20150621/sass-mixin-for- animation-keyframe-which-includes-multiple-stages-and-transform-p/20166008#20166008) –

回答

20

你不能重载,但典型的做法是设置默认值。

/* this would take color as an arg, or fall back to #999 on a 2 arg call */ 
@mixin box-shadow($offset, $blur, $color: #999) { 
    -webkit-box-shadow: $offset $offset $blur $color; 
    -moz-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 
+0

甜......但这基本上是超载:)。 –

+3

@Tomas虽然它适用于你的情况,但它并不是真的超载:重载将允许你有两个单独的mixin这个'border-radius($ radius);'和'border-radius($ top-corners,$ bottom -corners)' – Armstrongest

+4

这也不能解释当现有的mixin是供应商库的一部分,你不能或不想修改。 –

2

如果您需要调整供应商混入稍微可以将其复制到另一个文件 - 包括原后 - 并在那里对其进行编辑,以及供应商的原始将被忽略。

@import "_their-mixins"; 
@import "_our-mixins"; 

警告 - 这可能取决于其处理器所使用。在写它使用gruntgrunt-contrib-compass

+1

是的,咕噜它 - 吞咽不 – mate64

2

@ numbers1311407的解决方案是正确的伟大工程,但你可以使用@each指令生成一个较短的混入时间:

@mixin box-shadow($offset, $blur, $color: #999) { 
    @each $prefix in -moz-, -webkit-, null { 
    #{$prefix}box-shadow: $offset $offset $blur $color; 
    } 
}