【问题标题】:importing a CSS file from SCSS/Rails 3.2 w/sass-rails从 SCSS/Rails 3.2 w/sass-rails 导入 CSS 文件
【发布时间】:2013-10-18 12:31:45
【问题描述】:

我在 vendor/assets/stylesheets 中有一个 CSS 文件,我想在我的 application.css.scss 文件(或其他文件)中链接到它。我希望这只会渲染 @import 加上资产路径:

@import asset-path('lionbars.css', stylesheet)

但没有这样的运气:我得到了

Invalid CSS after "@import ": expected uri, was "asset-path('lio..."

要么是我语法错误,要么是因为@import doesn't accept dynamic strings,但我不确定。

所以我看到了一些选择。我可以:

  1. 如果只是语法问题,请找出适当的语法。
  2. 将我的文件重命名为 application.css.scss.erb 并将其他现有资产路径引用替换为 <%= asset_path('random/asset.png') %>。这让我的语法高亮非常混乱,而且可能不是那么有效。否则,这行得通。
  3. 将我的 css 文件重命名为 _lionbars.css.scss 并调用 @import "lionbars"。我不想这样做的两个原因,#1 一般来说我不想接触供应商的代码,#2 那里有一些 IE8 特定的东西 (<!--[if IE 8]>blahblah<![endif]-->) 不能进入 scss 文件,并且我不想分解文件(而且我仍然需要找到 IE8 代码的解决方案以及如何包含它)。

所以,我希望答案是 #1,但我不确定。有什么想法吗?

【问题讨论】:

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


【解决方案1】:

sass-rails 具有资产助手,例如 asset-path。否则,Sass 和 Compass 就没有asset-path 的任何概念。

或者,您可以在 config.rb 中使用 add_import_pathSee Compass Configuration Reference

【讨论】:

  • 是的,我正在使用 sass-rails。我提到我有其他现有的资产路径引用,它们工作得很好,我希望它在我导入 CSS 文件时也能工作。
  • 我在标题中添加了我正在使用 sass-rails 的事实。我最终使用了一个 sass-rails 明确(强调)不鼓励的解决方案,但如果你有更好的想法,请告诉我!
【解决方案2】:

正确的解决方案:@import 'lionbars'。 Sass-rails 自定义 @import 指令以自动使用资产管道。

【讨论】:

  • 这对我来说效果很好。谢谢!比 'require' 好得多,因为它允许不同的 SCSS 文件共享变量、函数、mixin 等。
【解决方案3】:

sass-rails 网站很清楚:

Sprockets 提供了一些放置在 cmets 内部的指令,称为 require、require_tree 和 require_self。 不要在您的 SASS/SCSS 文件中使用它们

...但我在开发和生产中都尝试了直接的 css 文件,并且效果很好:

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * ...
 *
 *= require_self
 *= require_tree .
 *= require lionbars
*/

所以除非有人有更好的主意,否则这就是我要做的。当 Sprockets 试图编译它时,我确实不得不将 IE8 特定的注释移动到我的布局中,但我仍然发现这比其他方法更容易。如果您有比这更好的解决方案,我会很高兴听到它!我对使用 sass-rails 页面上明确反对的解决方案并不感到兴奋。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多