在Rails 3.1.0项目中,我的公司有一些可自定义的属性,如background_color和link_color。我希望能够像这样设置一些Sass变量:
$background_color: <%= @company.background_color %>
$link_color: <%= @company.link_color
...
这不起作用,因为当Sass做其事时@company
为零。我不确定如何以动态的方式解决这个问题(可以创建公司并且可以更改颜色并立即更新视图)。有什么建议吗?
答案 0 :(得分:1)
我可以想到几个方法脱颖而出:
@import
仅为CSS提供服务。通过控制器提供样式表非常简单,所以没什么好说的。这可能有点难看和麻烦。
对于第二个,你需要添加一些额外的CSS类:
.custom-bg {
background-color: some-default-bg;
}
.link-fg {
color: some-default-fg;
}
/*...*/
然后任何需要使用自定义背景颜色的元素都需要通常的CSS类和custom-bg
;其他可配置值需要类似的恶作剧。要提供自定义CSS,您可以使用标准ERB部分将<style>
元素内联到HTML中,也可以通过控制器(通过<style src="...">
或@import
)提供CSS。所以你要用HTML中的旧学校多个CSS课程来伪造SASSy的优点。
还有JavaScript。您需要某种方法来识别需要调整颜色的元素,然后使用以下内容直接调整它们:
$('.need-custom-background').css('background-color', '...');
答案 1 :(得分:0)
我认为您可以像在那里一样做一些事情,但是您需要将文件的扩展名更改为“.css.scss.erb”
答案 2 :(得分:0)
为了跟进这一点,我确实创建了一个样式表控制器,但是为了让Sass解析和资产管道加载路径都正常工作而设计得相当干净。我最终倾销并重新组织样式,因此我可以为每个公司生成一个静态样式表,并在公司更新时重新生成并上传到S3。
答案 3 :(得分:0)
好吧,如果您指的是像通过控制器加载的模型之类的动态对象,那么您就不能做到,至少不是很容易。这是因为与HTML ERB模板不同,SASS模板通常只渲染一次并静态提供,除非代码中发生某些更改或通过rake重新编译它们(取决于您的环境配置)。但是您可以访问一些辅助方法,全局对象,并在其中使用一些红宝石,方法是使用“ erb”扩展名重命名该文件,例如application.css.scss.erb
。参见
如果您需要基于动态加载的对象(例如模型)的样式,则可以...
@import 'partial_name_with_no_path'
将首先搜索导入的SASS文件文件夹,然后再回到顶层-您可以进行配置也是如此)。