2012-04-25 19 views
9

我正在使用sass和指南針,我正在嘗試爲匹配給定模式的圖像創建css類。 預期的/生成的CSS大多是這樣的:獲取sass /羅盤文件列表

.class1 { background-image: url(class1.png); } 
.class2 { background-image: url(class2.png); } 

雖然有可能在我的情況下使用指南針精靈功能(http://compass-style.org/help/tutorials/spriting/)不方便(因爲它會生成新文件)作爲圖像它們本身就是精靈畫面。

所以能夠做到像

@each $clazz in listFiles("images/*") { 
    .#{$clazz} { 
    background-image: url('#{$clazz}.png'); 
    } 
} 

將是巨大的。 有沒有或多或少簡單的方法來做到這一點?

回答

21

您可以通過用您自己的自定義Ruby功能補充內置的SASS/Compass功能來實現此目的。 (見標題爲在SASS參考here「添加自定義功能」一節。)只要定義一個Ruby的文件(比如說,「列表files.rb」)與您的自定義代碼如下所示:

module Sass::Script::Functions 
    def listFiles(path) 
     return Sass::Script::List.new(
      Dir.glob(path.value).map! { |x| Sass::Script::String.new(x) }, 
      :comma 
     ) 
    end 
end 

然後,你可以包括你的指南針配置文件這個文件(比如,「config.rb」):

require File.join(File.dirname(__FILE__), 'list-files.rb') 

,並獲得在你的SASS的樣式表,就像你想:

@each $clazz in listFiles("images/*") { 
    .#{$clazz} { 
    background-image: url('#{$clazz}.png'); 
    } 
} 

然後,您可以使用compass compile -c config.rb進行編譯,正常情況下。

+0

這使我的完整文件路徑列表(即images/filename1.png)。有沒有簡單的方法來獲得紅寶石新手的基名? – morewry 2012-11-27 00:49:53

+5

@morewry當然,只要使用Ruby的[File.basename](http://www.ruby-doc.org/core/File.html#method-c-basename)方法:'Sass :: Script :: String.new (File.basename(X))'。 – hopper 2012-11-27 13:45:46

+2

你也可以使用'Sass :: Script :: String.new(File.basename(x,「。*」))'來得到沒有擴展名的文件名。 – 2013-11-09 09:02:11