获取sass/compass中的文件列表

获取sass/compass中的文件列表,sass,compass-sass,Sass,Compass Sass,我正在使用sass和compass,并尝试为匹配给定模式的图像创建css类。 预期/产生的css主要如下所示: .class1 { background-image: url(class1.png); } .class2 { background-image: url(class2.png); } 虽然可以使用compass sprite功能(),但在我的例子中,这很不方便(因为它会生成新文件),因为图像本身已经是SpriteSheet了 所以能够做一些像 @each $clazz in li

我正在使用sass和compass,并尝试为匹配给定模式的图像创建css类。 预期/产生的css主要如下所示:

.class1 { background-image: url(class1.png); }
.class2 { background-image: url(class2.png); }
虽然可以使用compass sprite功能(),但在我的例子中,这很不方便(因为它会生成新文件),因为图像本身已经是SpriteSheet了

所以能够做一些像

@each $clazz in listFiles("images/*") {
  .#{$clazz} {
    background-image: url('#{$clazz}.png');
  }
}
那太好了。
有没有一种简单的方法可以做到这一点?

您可以通过使用自己的自定义Ruby函数补充内置的SASS/Compass函数来实现这一点。(请参阅SASS参考中标题为“添加自定义函数”的部分。)只需使用自定义代码定义一个Ruby文件(例如,“list files.rb”),如下所示:

module Sass::Script::Functions
def列表文件(路径)
返回Sass::Script::List.new(
Dir.glob(path.value).map!{| x | Sass::Script::String.new(x)},
:逗号
)
结束
结束
然后,您可以从compass配置文件(例如,“config.rb”)中包含此文件:

require File.join(File.dirname(\uuuuu File\uuuuu),'list files.rb')
并在您的SASS样式表中访问它,就像您希望的那样:

@列表文件(“图像/*”)中的每个$clazz{
.#{$clazz}{
背景图片:url('#{$clazz}.png');
}
}

然后可以像往常一样使用compass compile-c config.rb进行编译。

这为我列出了完整的文件路径(即images/filename1.png)。有没有一种简单的方法可以为ruby新手只获取基本名称?@morewry当然,只需使用ruby的方法:
Sass::Script::String.new(File.basename(x))
。此外,您还可以使用
Sass::Script::String.new(File.basename(x,”)
只获取文件名而不带扩展名。有没有方法使用正则表达式过滤返回的列表?