我有一个 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';
应用程序.scss:
@import '_app_prefix';
// no overrides by default
@import '_app_suffix';
并为特定主题覆盖它,您将创建一个如下所示的文件:
主题2.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"
(显然,这有点手忙脚乱,但希望你能明白。)
有没有办法做到这一点?还是我将不得不求助于把手或其他一些模板语言?