【问题标题】:In Rails, how can I include a style sheet from the asset pipeline as a <style> tag?在 Rails 中,如何将资产管道中的样式表包含为 <style> 标记?
【发布时间】:2013-08-23 03:49:48
【问题描述】:

每个人都知道如何使用stylesheet_link_tag链接 到样式表,但我实际上想在页面本身中包含整个样式表。 (不,这通常不是一个很好的做法,但在这种情况下是有意义的。)

stylesheet_include_tag 不存在,一位在 Rails 中比我更坏的同事说没有简单的方法。

问题:
是否真的可以使用资产管道并且仍然将 CSS 或 JavaScript 文件的内容(从 Sass 或 CoffeeScript 编译!)嵌入到 .haml 视图中?怎么样?


添加为清晰起见:

我希望我的布局能够包含以下内容:

= stylesheet_link_tag "base"
= stylesheet_embed_tag "page-specific-styles/foo"

并让它生成输出 HTML:

<link rel="stylesheet" href="/base.css" />
<style type="text/css">.foo { color: red; }</style>

更新

如果你 set your initalizer correctly 可以在 Haml 中使用 Sass,但我似乎无法从这个上下文中使用 @import "foo",其中 foo.css.sass 是资产管道中的样式表。请注意,@import "compass"(假设您有指南针 gem)确实有效。

这看起来像 (haml):

%style
  :sass
    @import "foo"

Rails 给出了一个错误,即“foo”无法找到,即使它声称正在查看 app/assets/stylesheets(这是 foo.css.sass 所在的位置)。

所以,这感觉更接近了,但仍然不完全在那里。

【问题讨论】:

  • 如果我理解正确,您希望将实际的 CSS 包含到 .haml 视图中。
  • @David 是的。我将扩展问题以明确这一点。
  • 你会不会考虑使用content_for :head 块,或者我认为你可以像&lt;%= stlyesheet_include_tag 'some_stylesheet' %&gt; 一样明确地调用它,但我的意思是它是.haml 我相信你不会嵌入ruby 标签使它只是=stylesheet_include_tag 'some_stylesheet 我可能错了。但是有两种方法我建议你有两个。希望它有所帮助。
  • H 从你的编辑我完全相信你可能想要使用 rails layout content_for 块 - railscasts.com/episodes/8-layouts-and-content-forguides.rubyonrails.org/…
  • 你真的必须有一个特殊情况,才能使用这样的解决方法:-)。但无论如何,我会像@sameera207 所说的那样去做。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 asset-pipeline ruby-on-rails-4


【解决方案1】:

如果我正确理解您的问题,您可以将您的 CSS 代码添加到普通的 Ruby 视图文件(作为部分),例如 styles.html.erb

然后在您想要的任何条件下将其添加到您的页面,我认为这是查看它的最简单方法。

【讨论】:

  • 对,我也想到了,这将是最简单的,但仅当我不需要像扩展其他 Sass 文件那样使用 Sass 功能,因为我明白了。
  • 就代码重用而言,显然这不会削减它。
【解决方案2】:

来自http://blog.phusion.nl/2011/08/14/rendering-rails-3-1-assets-to-string/

YourApp::Application.assets.find_asset('api.css').source

在哈姆里

%style
    =raw YourApp::Application.assets.find_asset('foo.css').source

注意事项:

我认为这需要在生产中进行资产编译,这可能非常昂贵。

【讨论】:

  • 太棒了!毫无疑问,一些缓存可以完全消除这种性能开销
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2012-02-18
  • 1970-01-01
  • 2011-08-31
相关资源
最近更新 更多