【发布时间】:2013-01-24 19:57:53
【问题描述】:
我有一个 SCSS 项目,它通过 Compass 建立在 Foundation 之上。它定义了一组 sass 变量,然后根据这些变量定义了一堆规则:(我的项目有更多的变量设置和导入语句;这被简化了。)
vars.scss:
$foo = #fafafa
$bar = 14px;
// rules using $foo and $bar
@import '_rules';
然后我使用 compass 编译 vars.scss,对于那组 sass 变量来说一切都很好。但是,我还希望能够以不同的方式为我的应用程序设置主题,并通过定义一组可以覆盖原始变量的新变量来生成不同的主题:
vars.scss:
$foo = #fafafa
$bar = 14px;
@import 'otherVars';
@import '_rules';
当我有 70 多个主题时,我无法手动编辑文件。 (对于我的应用而言,拥有这么多主题是必要的。)我真正想要的是能够执行以下操作:
vars.scss:
$foo = #fafafa
$bar = 14px;
@import '{{otherVars}}';
@import '_rules';
然后我可以这样称呼:
compass --otherVars themes/theme2
这样就很容易抽出所有主题,因为我可以为每个主题调用一次compass。
SCSS 允许您这样做吗?我看了一下,好像不是这样的。
我目前的解决方法是将原来的vars.scss拆分成前缀和后缀:
_app_prefix.scss:
$foo = #fafafa
$bar = 14px;
_app_suffix.scss:
@import '_rules';
app.scss:
@import '_app_prefix';
// no overrides by default
@import '_app_suffix';
要为特定主题覆盖它,您需要创建一个如下所示的文件:
theme2.scss:
@import '_app_prefix';
// only override $foo - let the original value of $bar stand
$foo = #ebebeb;
@import '_app_suffix';
这可行,但有点痛苦并引入了额外的样板。
我的下一个问题是想要有额外的@import 'rules_foo' 语句,这些语句也需要动态构造。所以我的总体幻想是这样的:
vars.scss:
$foo = #fafafa
$bar = 14px;
@import '{{otherVars}}';
@import '_rules';
{{ @import 'additional_rules' for additional_rules in rules }}
我可以打电话:
compass --otherVars themes/theme2 --rules "rules_1" "rules_2" "rules_3"
(很明显,这有点手忙脚乱,但希望你能明白。)
有没有办法做到这一点?还是我必须求助于把手或其他模板语言?
【问题讨论】:
标签: compass-sass sass