在Rails 3.1资产管道中调用媒体特定css的正确方法

And*_*vey 20 css ruby-on-rails asset-pipeline

如果使用Rails 3.1资产管道,调用特定媒体(即打印,屏幕等)css的正确/ rails /最佳实践方法是什么?我知道之前已经问过这个问题,但我看到的所有解决方案看起来都非常糟糕,而不是我所期待的优雅的Rails解决方案.

据我所知,建议的方法是设置stylesheets文件夹,如下所示:

assets
-stylesheets
--application.css
--application-print.css
--print
---custom-print.css
--screen
---custom-screen.css
Run Code Online (Sandbox Code Playgroud)

application.css的内容是

/*
*= require_self
*= require_tree ./screen
*/
Run Code Online (Sandbox Code Playgroud)

application-print.css的内容是

/*
*= require_self
*= require_tree ./print
*/
Run Code Online (Sandbox Code Playgroud)

然后在布局中包含以下内容

<%= stylesheet_link_tag 'application', media = 'screen, projection' %>
<%= stylesheet_link_tag 'application-print', media = 'print' %>
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止一切顺利.

但是,在我的情况下,custom-print.css正在屏幕上应用,并且没有css应用于打印输出.

此外,这种方法似乎影响从css调用的图像.即不是在资产/图像中查找图像,而是在资产/样式表/屏幕中查找图像.这里可能还有其他东西,因为它似乎只是受到影响的javascript css.我会做更多的检查和报告.

所以我的问题是,你如何在Rails资产管道中处理媒体特定的css?什么被认为是最佳实践?我做错了什么?

谢谢你的时间!

ful*_*lor 16

问题是方法调用的语法.

stylesheet_link_tag 'application', :media => 'screen, projection'
stylesheet_link_tag 'application-print', :media => 'print'
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您分配了一个名为的局部变量 media

  • 你也可以使用`@media print {...}`(IE9 +).另外,对于生产,你可能需要在`config/production.rb`中添加`config.assets.precompile + =%w(application-print.css)`(就像我必须为Heroku做的那样). (4认同)