我正在学习Rails 3.1中的新资产管道。我遇到的一个特殊问题是Sprockets将所有找到的CSS样式表混合成一个巨大的样式表。我理解为什么这比手动合并样式表和缩小生产更有利。但我希望能够有选择地级联样式表,而不是将所有规则全部混合在一起。例如,我想:
master.css
由Rails应用程序中的所有页面加载,但我想要
admin.css只能由admin section / namespace中的页面/视图加载。
如何利用Rails 3.1结合样式表并将其缩小用于生产的好方法,还具有以前的灵活性,即每个布局只能加载某些样式表组合?
或者应该通过在布局中向body标签添加一个类来完成 -
body class =“admin”
然后酌情定位样式规则。使用SASS范围选择器这可能是一个合理的解决方案。
答案 0 :(得分:8)
这就是我解决造型问题的方法:(原谅Haml)
%div{:id => "#{params[:controller].parameterize} #{params[:view]}"}
= yield
这样我就会启动所有特定于页面的 .css.sass 文件:
#post
/* Controller specific code here */
&#index
/* View specific code here */
&#new
&#edit
&#show
通过这种方式,您可以轻松避免任何冲突。
希望这对一些人有所帮助。
答案 1 :(得分:2)
我的网站上有关于此的帖子: Leveraging Rails 3.1, SCSS, and the assets pipeline to differentiate your stylesheets
并查看另一个问题的答案:Using Rails 3.1 assets pipeline to conditionally use certain css
希望这有帮助。
祝你好运, 拉塞
答案 2 :(得分:1)
@nathanvda:肯定......
我们使用多个布局文件。所以在我们的app / views / layouts中,我们实际上忽略了应用程序布局并使用了3个自定义布局,而不是只有application.html.haml(我们使用HAML):
admin.html.haml(仅限管理员部分视图)
registered.html.haml(仅在用户视图中注册/签名)
unregistered.html.haml(仅在用户视图中未注册/未签名)
因此,在我的admin.html.haml文件的顶部,我将把样式表链接标记添加到单独的admin.scss(我们使用SCSS)清单。该清单将为管理部分加载任何必要的子样式表。这允许我们仅为管理部分指定规则,同时还使用常见样式。例如,我们在整个站点中使用jquery-ui,因此与jquery-ui相关联的样式位于他们自己的样式表中,我们将它们包含在所有3个css清单文件的清单中。
此解决方案不会为您提供可以缓存的单个CSS文件,但它最终会为您提供3个CSS文件,每个文件都可以缓存。这允许在组织CSS规则时在性能和一些灵活性之间进行权衡,因此我们不必担心CSS规则冲突。
答案 3 :(得分:0)
到目前为止,我一直在做的方法是拥有两个单独的文件夹a /和u /,其中a /是admin视图,u /是用户视图。然后在布局中,我指向带有assets / u / application.css(js)的相应application.css。每次都要移动自动生成的文件有点痛苦,但要比清单中单独要求每个文件少得多。
答案 4 :(得分:0)
我使用类似
的东西application.html.erb “>
show.html.erb
content_for:body_id do page_specific_body_id 端