2013-01-08 88 views
1

我剛剛開始使用Sass,所以請耐心等待。在Sass mixin中處理可選參數

我有這個mixin處理現代瀏覽器的px(舊IE)和rem的聲明字體大小,它也做了很好的line-height計算。

@mixin font-size($font-size, $line-height-val: "", $sledge-hammer: "" /* $sledge-hammer is for an optional `!important` keyword */) { 
    font-size: ($font-size)+px#{$sledge-hammer}; 
    font-size: ($font-size/$base-font-size)+rem#{$sledge-hammer}; 
    @if $line-height-val == "" { 
      line-height: ceil($font-size/$base-line-height) * ($base-line-height/$font-size); 
    } @else { 
      line-height: #{$line-height-val}; 
    } 
} 

它的工作原理,但我覺得可選參數($line-height-val$sledge-hammer)是沒有這樣做的最優化的方式。 $line-height-val是需要的,因爲有時我需要手動聲明line-height$sledge-hammer是需要的,因爲我需要在我的一些幫助程序類中聲明!important關鍵字。時間

90%,我只是用這樣的混入:

@include font-size(24);

其中編譯過:

font-size: 24px; 
font-size: 1.5rem; 
line-height: 1.1; 

當我需要重寫line-height我這樣做:

@include font-size(24, 1.6);

其中編譯過:

font-size: 24px; 
font-size: 1.5rem; 
line-height: 1.6; 

但是,如果我需要聲明!important關鍵字,然後我必須這樣做:

@include font-size($font-size-sml, "", !important);

其中編譯過:

font-size: 15px!important; 
font-size: 0.9375rem!important; 
line-height: 1.6; 

但感覺有趣的是,我必須使用空""作爲第二個參數,第三個參數的值總是!important這樣應該在mixin中嗎?

我只是想知道是否有更簡潔的方式來編寫這個mixin?

回答

1

您可以指定參數,當你打電話給他們這樣的:

@include font-size($font-size-sml, $sledgehammer: !important); 

你可以縮短混入參數如下:!

@mixin font-size($font-size, $line-height-val: "", $i: false /* flag for`!important` */) { 
    $important: if($i, "!important", ""); 
    font-size: ($font-size)+px #{$important}; 
    font-size: ($font-size/$base-font-size)+rem #{$important}; 
    @if $line-height-val == "" { 
      line-height: ceil($font-size/$base-line-height) * ($base-line-height/$font-size); 
    } @else { 
      line-height: #{$line-height-val}; 
    } 
} 
+0

但我可以只寫'important'這是少詳細,但真的價值總是'!重要的'所以應該在mixin,但我似乎無法得到它的工作。另外如果我像上面的例子那樣調用mixin,我會得到一個錯誤,因爲它期待着第二個參數:'$ line-height-val',因此像我說過的那樣的空雙引號感覺很有趣。 –

+0

錯誤是因爲我寫了'$ sledgehammer'而不是'$ sledge-hammer'。否則編譯好。 – cimmanon

+0

謝謝你的作品,你能解釋一下這個部分主要是做最後一個空雙引號: '$ important:if($ i,「!important」,「」);' –