在config.rb中为scss文件创建scss变量

时间:2014-04-22 09:37:40

标签: ruby ruby-on-rails-3 sass compass-sass

如何在Config.rb中为SCSS文件[COMPASS项目]

定义SCSS变量

我的用例

在Config.rb文件中类似

a = true

在style.scss中,我喜欢使用像

这样的变量
@if a == true{
     background: #fff;
} 
@else {
   background: #000;
}

其中一个解决方案 http://worldhousefinder.com/?p=124141

但它对我不起作用。

2 个答案:

答案 0 :(得分:1)

你不能/不应该这样做。您将预编译您的资产,因此无法动态适应变化的变量。这可能适用于你的config.rb变量,但这是一个糟糕的模式,你每次更改变量时都必须重新编译你的资产,如果你在sass中检查,这就会失败。

更简单的方法是在元素(正文)上添加类.active .inactive。或者根据登录的用户输出内联css,例如自定义颜色等。

你想做什么?这听起来像你要做的事情来检查你是否在生产或开发?在这种情况下,您可以执行以下操作:

<body class='<%= "development" if Rails.env == 'development' %>'>

甚至

<body <%= "style='background-color: red;'" if Rails.env == 'development' %>

你永远不需要在你的css和javascript中使用ruby,如果你发现自己这么做,你可能会以错误的方式接近它。至少这是我在多次尝试这么做之后发现的。

P.S。 data-attributes是一种将变量等传递给javascript的非常有效的方法

答案 1 :(得分:0)

首先,您是否看过variablesmixins

如果你真的试图将外部变量传递给SASS,你必须明白它在编译CSS时不知道你的配置文件。 According to Nathan Weizenbaum(Haml的主要开发者之一),最好的方法是创建自定义 user-defined functions

如果你走那条路(再次引用内森):

  

您需要确保自己的样式表   每当数据发生变化时都会重新生成。您可以通过致电来完成此操作   Sass::Plugin.force_update_stylesheets