获取sass/compass中的文件列表
我正在使用sass和compass,并尝试为匹配给定模式的图像创建css类。 预期/产生的css主要如下所示:获取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
.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,”)
只获取文件名而不带扩展名。有没有方法使用正则表达式过滤返回的列表?