2013-01-21 61 views
26

我有這樣的混入來處理簡單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)}'); 
    } 
} 

$dir是短關於「方向」。

如果我需要$ie-filters「真」,我也不需要改變$dir/$dir-webkit默認值,我還需要重新聲明他們這顯然不是很乾,最優的,所以我必須做這樣的:

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

當我只是想做到這一點:

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

如何跳過我的論點調用mixin時用這種方式?

PS如果你想知道關於$dir-webkit爭論它是Webkit的,因爲它仍然沒有處理新的梯度語法(參見:http://generatedcontent.org/post/37949105556/updateyourcss3 - >新的漸變語法),方向必須的對面標準語法。

+0

你嘗試過,傳遞null嗎? – markus

+0

剛剛嘗試過,但使用'null'時不輸出任何值:'@include linear-gradient(#f60,#c00,null,null,true);'編譯爲:'background-image:-webkit線性梯度(,#ff6600,#cc0000); background-image:線性漸變(to,#ff6600,#cc0000);' –

+0

試試這個http://bravedick.github.com/mooxins/ mixins。沒有即過濾器,順便說一句。 – bravedick

回答

44

從SASS 3.1開始,你可以通過命名參數來做到這一點:

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

其餘的將是默認的。

+0

'$ from'和'$ to'永遠不會有默認值,但即使他們這樣做,當我想跳過像我上面描述的參數時仍然沒有幫助。 –

+1

什麼?我只是告訴你它是如何工作的,這正是你所問的。你想跳過第三和第四個參數,這是如何完成的。 – markus

+4

也許你不明白我的答案。這就是你如何調用你的價值混合。只要您傳遞命名參數,您可以省略其他兩個參數。 – markus