我正在尝试使用模型User
中定义的字段color_preferred来更改背景颜色。
/ * file example.css.scss.erb * /
$color: <%= @user.color_preferred %>;
body {
background-color: $color;
color: #333;
font-family: verdana, arial, helvetica, sans-serif;
font-size: 13px;
line-height: 18px; }
是否可以从sass文件中访问ruby实例变量? TK。 拉法。
答案 0 :(得分:3)
我相信,这是不可能的。 Sass在部署时编译(在Rails 3.1中),之后它是一个静态文件。这也没有任何意义。 css文件应该独立于用户并且可以长时间安装。
如果用户选择了首选颜色,为什么不在布局中插入样式标记并覆盖css中定义的默认样式?
答案 1 :(得分:1)
是。您可以通过扩展Sass::Script::Functions来实现此目的。只需创建一个ruby文件,添加该位,然后将其加载到脚本的环境中(即/ config / initializers /):
module Sass::Script::Functions
def var(name)
assert_type name, :String, :name
@environment.var(name.value)
end
declare :var, :args => [:string]
end
然后你可以做这样的事情:
$button-primary-bg: #000;
$button-secondary-bg: #123;
$button-tertiary-bg: #abc;
$button-names: (primary, secondary);
@each $name in $names {
.button-#{$name} { background: var("button-#{$name}-bg"); }
}
答案 2 :(得分:0)
这是可能的,但它涉及黑客攻击Sass并深入其中。更好的方式就像iGel所说的那样,根据用户的喜好创建不同的“主题”并将其包含在您的身体中。
假设你有一个main.css和一些主题颜色(根据用户的选择说不同的身体背景)
= stylesheet_include_tag 'main'
= stylesheet_include_tag "#{@user.color_preferred}"
然后你有一些预制的颜色,如blue.sass,red.sass,green.sass等。
很容易生成这些,因为您可以像在示例中一样使用变量,除非您必须重现它以支持不同的颜色。