我想創建像這樣薩斯:從一個變量
$multi: foo, bar, baz
與類變量和多類選擇我要創建的組合選擇,像這樣:
.foo, .bar, .baz {}
我用的縮進語法(不知道這是否重要)。我想要從變量生成的組合選擇器的原因:我需要根據在那裏定義的類數來進行計算。請不要提出像(使用擴展!)這樣的建議,因爲這將需要我再創建一個課程。我需要能夠接近或完全符合常規的組合選擇器輸出。
我想創建像這樣薩斯:從一個變量
$multi: foo, bar, baz
與類變量和多類選擇我要創建的組合選擇,像這樣:
.foo, .bar, .baz {}
我用的縮進語法(不知道這是否重要)。我想要從變量生成的組合選擇器的原因:我需要根據在那裏定義的類數來進行計算。請不要提出像(使用擴展!)這樣的建議,因爲這將需要我再創建一個課程。我需要能夠接近或完全符合常規的組合選擇器輸出。
Compass offers a built-in sprite mixin that does just this.如果你不想使用所有的指南針,你可以look into their source看看他們是如何做的。
我有同樣的問題,因爲OP,這是第一個搜索結果我發現,所以現在我已經想通了,我會後我的解決方案,這些問題即使爲1.5歲。
下面是我發現的:爲了使用變量作爲選擇器,您使用SASS interpolation,它與逗號分隔的字符串完美配合。但是,如果你想保存你的選擇是一個list
(這樣你可以在上面使用列表功能,例如length($multi)
)變量,插值將產生一個畸形的選擇。
所以,簡單的解決方法是先定義變量列表,那麼當你需要使用它作爲一個選擇,該列表轉換成一個逗號分隔的字符串:
$multi: ".foo", ".bar", ".baz"
$multi-selector: ""
@each $selector in $multi
@if $multi-selector != ""
$multi-selector: $multi-selector + ", "
$multi-selector: $multi-selector + $selector
#{$multi-selector}
//CSS properties go here
您可能希望抽象列表到逗號分隔字符串功能集成到一個功能(注:上海社會科學院的join
功能無法做到這一點,它連接兩個列表成爲一個新的)。這裏是一個可能實現:
@function unite($list, $glue: ", ")
@if length($list) == 1
@return $list
$string: ""
@each $item in $list
@if $string != ""
$string: $string + $glue
$string: $string + $item
@return $string
此時原代碼可以儘量精簡:
$multi: ".foo", ".bar", ".baz"
#{unite($multi)}
//CSS properties go here
我很抱歉編輯你的答案,我認爲它會讓你的答案與我的更改副本。所以請否認這些變化,因爲我已經削減了您的答案的第一部分,這非常有用。 – Able 2014-06-22 08:02:20
(代碼前面的答案)酷的功能!有用。我只是想添加一些SCSS語法,給一個機會,人們使用它:
@function unite($list, $glue: ", ") {
@if length($list) == 1 {
@return $list;
} @else {
$string: "";
@each $item in $list {
@if $string != "" { $string: $string + $glue; }
$string: $string + $item;
}
@return $string;
}
}
此時原代碼可以儘量精簡:
$multi: ".foo", ".bar", ".baz"
#{unite($multi)}
//CSS properties go here
這將是,如果更多的幫助你指定了你需要做的「計算」。請解釋爲什麼你需要「以接近或精確到正規的綜合選擇輸出」 – maxbeatty 2012-02-01 07:38:59
的類是精靈....所以我有有富,酒吧和巴茲的圖像的一部分的精靈。我有一個循環,將第一個類設置爲特定的背景,然後最後一個循環繼續,第一個循環停止,基本上按順序處理精靈而不必手動管理它。現在我不得不定義變量設置,然後手動指定組合選擇器,只是因爲Sass不會讓我做我想做的事情。 – xckpd7 2012-02-02 15:33:23