2011-10-07 3 views
19

みましょうあなたは、このようなのような影のためのミックスインを持っていると言う:ミックスインのオーバーロードが可能ですか?

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

または私はミックスインのために別の名前を使用する必要があります:

@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; 
} 

はそれはのようなもので、そのミックスインをオーバーロードすることは可能ですか?

+0

をWebブラウザは絶えず更新されており、各アップデートで正しく動作するようにコードを修正するのは難しいので、[autoprefixer](http://stackoverflow.com/questions/20150621/sass-mixin-for-アニメーションキーフレーム - 複数ステージと変換 - を含む - 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あなたのケースでは機能しますが、それは本当に過負荷ではありません。オーバーロードすると、この 'border-radius($ radius);と' border-radius($ top-corners、$ bottom) -corners) ' – Armstrongest

+4

これは、既存のmixinがあなたが変更できない、または変更したくないベンダーライブラリの一部であることも考慮していません。 –

2

あなたはベンダーのミックスインを微調整する必要がある場合は、わずかに、あなたは別のファイルにコピーすることができ、そこにそれを編集し、ベンダーのオリジナルは無視されます。

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

警告 - これは、あなたが使用しているプロセッサに依存してもよいです。執筆の時点では、それはgruntを使用して素晴らしい作品とgrunt-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; 
    } 
} 
関連する問題