我正在使用Rails 3.1.rc5构建我的第一个独立应用程序。我的问题是,我希望网站能根据需要有条件地呈现各种CSS文件。我正在使用Blueprint CSS,并尝试让Sprockets / Rails大部分时间呈现screen.css
,仅在打印时呈现print.css
,并且只在从Internet Explorer访问站点时呈现ie.css
。
不幸的是,在application.css
清单中的默认*= require_tree
命令会将assets/stylesheets
目录中的所有内容都包括进来,导致CSS混乱。我的当前解决方法是一种粗暴的方法,即逐个指定每个文件:
在application.css中:
*= require_self
*= require home.css
...
*= require blueprint/screen.css
在我的样式表局部文件中(使用Haml):
<!--[if lt IE 9]
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
![endif]-->
= stylesheet_link_tag "application"
= stylesheet_link_tag 'blueprint/print', media: 'print'
<!--[if lt IE8]]
= stylesheet_link_tag 'blueprint/ie'
![endif]-->
= javascript_include_tag "application"
这个代码能用但不是特别优美。我花了几个小时的时间进行搜索才找到了这个程度,但我希望还有一些更简单的方法可以实现,只是我可能错过了它们。如果我能够有选择地渲染某些目录(而不包括子目录),整个过程就会不那么死板。
谢谢!
.css
文件,那么您所有的图像都将无法显示。例如,background: url('image.png')
将被转换为路径/assets/all/image.png
(请注意路径中的all)。相反,应该使用这个:background: url('/assets/image.png)
。如果有更简单的解决方案,请发布出来。除了使用具有帮助程序方法的SASS以外,可能会正确解析路径之外,没有其他解决方法。 - MaxDir.glob(Rails.root.join('app/assets/*/*/manifest.*').to_s).map{|p| File.join(p.split(File::SEPARATOR)[-2..-1])}
来预编译所有清单。 - spyle