有条件地加载具有可变覆盖的Sass样式表

时间:2014-02-07 00:19:19

标签: ruby-on-rails sass asset-pipeline

在我们的应用程序中,我们有不同的诊所,所有患者页面都嵌套在一个有品牌的诊所。我们有100多个诊所,所以我宁愿在我的= stylesheet_link_tag #{@clinic.name}_theme文件中没有类似application.html.haml的内容,并且有一个类似

的主题文件
// clinic_a.css.sass
a
  color: red

// clinic_b.css.sass
a
  color: blue

我宁愿在我的所有Sass文件中使用颜色变量,然后在单独的工作表中定义这些变量,这些变量可以根据诊所进行调用(例如,参见params)。所以:

// application.css.sass
a
  color: $link_color

h1
  color: $neutral_color

// clinic_a.css.sass
$link_color: #faa
$neutral_color: #ccc

// clinic_b.css.sass
$link_color: #96c7c7
$neutral_color: #bababa

问题是,似乎变量必须首先出现在资产管道中,因此必须在application.css.sass文件中的其他文件之前声明它们。但显然,该文件无法访问params或任何内容。

如何根据params确定要加载哪些变量文件,然后在我的application.css.sass文件及其中包含的文件中对其进行评估?

修改

需要明确的是,这必须与Rails的资产管道配合使用。

1 个答案:

答案 0 :(得分:-1)

我不会加载不同的样式表,我会使用sass中的@if函数来有条件地分配变量:

EXAMPLE
p {
  @if 1 + 1 == 2 { border: 1px solid;  }
  @if 5 < 3      { border: 2px dotted; }
  @if null       { border: 3px double; }
}