可以根据(SVG)图像的可用性在Sass / Compass(使用Middleman)中创建条件循环吗?

时间:2013-01-10 12:55:53

标签: compass-sass sass middleman

是否可以根据(SVG)图像的可用性在Sass / Compass(使用Middleman)中创建条件循环?

我有多达150张图片(svg),每张图片都将用作导航链接的背景。但是,图像的数量是非连续的,这意味着一些中断。例如,有1.svg,2.svg,4.svg(缺少3.svg)。这种情况贯穿始终。

现在我可以创建一个涵盖所有可能性的循环:

@for $i from 1 through 150 {
    .icon_#{$i} {
        background-image: inline-image("svg/#{$i}.svg");
    }
}

如果我通常编译它产生多余的CSS代码(不存在的图像的规则),这就完成了工作。

然而,Middleman使用这个'cover all'循环抛出错误,如果图像丢失(不够公平),则不会编译CSS。这让我想到了......

由于Compass有图像帮助器,我是否可以添加其他逻辑,只有在图像存在时才生成样式?我的第一个想法是使用Compass image-width()帮助器(例如,如果width == 0不继续),但这不适用于SVG。

任何人都可以想到这样做的方法吗?或者这简直难以置信?

2 个答案:

答案 0 :(得分:0)

您可以在循环前面的顶部添加一个sass变量并声明所有图像编号。即:

$svgs: 1, 2, 4, 15, ... 150

然后你的循环将是:

@for $i in $svgs {
    .icon_#{$i} {
        background-image: inline-image("svg/#{$i}.svg");
    }
}

这不是最好的解决方案,因为我确定你并不想输入多达150个号码。而且它不太可维护。但这是一个选择。

答案 1 :(得分:0)

通过对Ruby的一点了解,您可以调整现有的解决方案来实现您的目标:

https://stackoverflow.com/a/10456412/901944