【问题标题】:Rails Precompiling Assets - Best Practice for responsive cssRails 预编译资产 - 响应式 css 的最佳实践
【发布时间】:2013-01-09 00:23:15
【问题描述】:

这些是我的页面包含的样式(顶部的样式在生产中返回错误)

<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

【问题讨论】:

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


    【解决方案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)的想法非常适合这种情况。

    【讨论】:

    • 虽然 media="screen and (max-width: 760px)" 不会保留附加到我的 css 样式表的逻辑
    • 什么意思?如果您在清单中包含其中一种样式的定义,则资产管道应遵循您的逻辑。
    • 将我所有的 css 样式表组合成一个会破坏我的 css。您的浏览器有条件地包含我的 css,具体取决于屏幕的大小。由于您的屏幕大于 760 像素,因此永远不会包含该样式表。样式 mobile_size.css 会覆盖 full_size.css 中的样式
    • 您可能会考虑在您的项目中使用 SASS .The reference 一些基本指令可以为您提供如何避免此覆盖问题的想法。
    • css-tricks.com/media-queries-sass-3-2-and-codekit 我认为这就是答案,你应该把它扔进答案,因为这是你的主意。
    猜你喜欢
    • 2012-04-23
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多