如何在Rails 3.1中管理CSS样式表资产?

时间:2011-05-23 19:45:53

标签: ruby-on-rails sass ruby-on-rails-3.1 sprockets

我正在学习Rails 3.1中的新资产管道。我遇到的一个特殊问题是Sprockets将所有找到的CSS样式表混合成一个巨大的样式表。我理解为什么这比手动合并样式表和缩小生产更有利。但我希望能够有选择地级联样式表,而不是将所有规则全部混合在一起。例如,我想:

master.css

由Rails应用程序中的所有页面加载,但我想要

admin.css只能由admin section / namespace中的页面/视图加载。

如何利用Rails 3.1结合样式表并将其缩小用于生产的好方法,还具有以前的灵活性,即每个布局只能加载某些样式表组合?

或者应该通过在布局中向body标签添加一个类来完成 -

body class =“admin”

然后酌情定位样式规则。使用SASS范围选择器这可能是一个合理的解决方案。

5 个答案:

答案 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 端

相关问题