2013-04-22 84 views
2

我試圖循環訪問Sass中的值列表,並使用當前鍵的插值來動態輸出分別使用@include和@extend的類名稱。混合函數,函數和變量名的Sass插值

下面是一個顯示問題的筆,簡化了。 http://codepen.io/ghepting/pen/vBmLy

正如您在標記中看到的那樣,我嘗試在內插字符串的內部以及外部包含「_」。有沒有什麼我錯過了Sass支持插值的這種限制?

(注:OP的筆已經消失這不是在筆中發現的原代碼,但問題的一個粗略的估計。)

$error-light: red; 
$error-dark: darken(red, 10%); 

$success-light: green; 
$success-dark: darken(green, 10%); 

$dialogs: error, success; 

@each $d in $dialogs { 
    .#{$d} { 
    background: $#{$d}-light; 
    } 
} 
+0

密新/函數插值正在積極研發中,應包括在未來版本:https://github.com/nex3/sass/issues/626 – ghepting 2013-04-22 20:55:31

+0

問題是Sass是用於編譯爲CSS的。爲了「插入」mixin/function/var名稱,需要編譯爲Sass或「Sasass」(語法上令人敬畏的語法真棒樣式表)。 – 2016-03-01 20:21:17

回答

9

插不上這個混入或變量工作時間點。你必須想出一個不同的方式來實現你的目標。

由於薩斯3.3,你可以使用映射爲此變量:

$dialogs: 
    (error: 
     (light: red 
     , dark: darken(red, 10%) 
     ) 
    , success: 
     (light: green 
     , dark: darken(green, 10%) 
     ) 
    ); 

@each $name, $colors in $dialogs { 
    .#{$name} { 
     color: map-get($colors, dark); 
    } 
} 

而對於功能:

@function green() { 
    @return lighten(green, 10%); 
} 

@function red() { 
    @return lighten(red, 10%); 
} 

@mixin my-bg($function-name) { 
    background: call($function-name); 
} 

.foo { 
    @include my-bg('red'); 
} 
+0

你不''擴展'mixin。通常認爲插值對變量有效,如果它工作,它會看起來像這樣:'background:$ foo - #{$ bar}' – cimmanon 2013-04-22 18:00:31

+1

是的,我知道你不能擴展一個mixin - 你*包括*一個mixin,而這正是我想在這裏完成的第一行「.include - #{nth($ tests,$ i)} {@include _#{nth($ tests,$ i)};} 」。 mixin是「_something1」,佔位符是「%something1」(它本身包含_somethiing1) - 它們是相同的輸出。但是,具有不同的目的。 .include-something1將用於媒體查詢和其他「超出範圍」的能力,因爲擴展無法達到預期的效果。 – ghepting 2013-04-22 19:56:28

+0

正如我已經回答的那樣,插值對mixin不起作用。無論輸出是否相同都無關緊要,這是無效的:'@include _#{nth($ tests,$ i)};' – cimmanon 2013-04-22 20:04:56