Rails预编译资产 - 响应式CSS的最佳实践

时间:2013-01-25 03:47:29

标签: ruby-on-rails-3.2 conditional asset-pipeline production precompile

这些是我的页面包含的样式(最重要的是返回获取生产错误)

<link href="/assets/foundation.css" rel="stylesheet" type="text/css" />
<link href="/assets/app.css" rel="stylesheet" type="text/css" />
<link href="/assets/full_size.css" media="screen and (min-width: 761px)" rel="stylesheet" type="text/css" />
<link href="/assets/mobile_size.css" media="screen and (max-width: 760px)"   rel="stylesheet" type="text/css" />

<link href="/assets/application-b0a44b2bbc0d3c94d855fbb830c2098d.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/assets/application-cd6a361c13ee838fceb09ecb2c58c467.js" type="text/javascript"></script>

我的网站具有响应性,所以我希望根据屏幕尺寸包含所需的样式。有没有办法单独预处理我的CSS,使它看起来像这样:

<link href="/assets/foundation-b0a44b2bbc0d3c94d855fbb830c2098d.css" rel="stylesheet" type="text/css" />
<link href="/assets/app-b0a44b2bbc0d3c94d855fbb830c2098d.css" rel="stylesheet" type="text/css" />
<link href="/assets/full_size-b0a44b2bbc0d3c94d855fbb830c2098d.css" media="screen and (min-width: 761px)" rel="stylesheet" type="text/css" />
<link href="/assets/mobile_size-b0a44b2bbc0d3c94d855fbb830c2098d.css" media="screen and (max-width: 760px)"   rel="stylesheet" type="text/css" />

然后就不需要application.css了,也把它组合在一起打破了我的CSS。我的网站在开发方面看起来不错:)

现在我在config / application.rb中设置了config.assets.enabled = false,压缩css会更好吗,它会自己包含它吗?

这有点类似于这个问题,除了我不喜欢任何答案。当然有一个简单的解决方案。 Using Rails 3.1 assets pipeline to conditionally use certain css

1 个答案:

答案 0 :(得分:1)

我认为你在使用资产管道方面走错了方向。如果您要使用管道,则只需保留application.css - 这是一个清单文件,用于包含css文件。我的建议是从视图中移动link href=并使用清单文件(application.css),如下所示:

*= require_self
*= require foundation
*= require mobile_size

....
*= require_tree

现在包括的是预编译的css文件(注意哈希前缀),每次修改资产时,哈希前缀都会改变。

.js文件的情况也是如此 - 您必须将它们包含在application.js清单文件中。

编辑:使用SASS(3.2)和媒体查询(如this CSS-tricks article中所述,关于@penner)的想法在这种情况下很适合。