在Ruby on Rails的HAML中,如何使用:sass过滤器?

时间:2010-06-12 08:33:55

标签: ruby-on-rails haml sass

如果在Ruby on Rails上使用HAML,那么

:sass
  #someDiv
    border: 3px dashed orange

周围不会有任何<style>标记。

然后

:css
  :sass
    #someDiv
      border: 3px dashed orange

不会启用:sass过滤器,但

:css
:sass
  #someDiv
    border: 3px dashed orange

将启用:sass过滤器,但它位于<style>标记之外。那么如何使用:sass过滤器呢?我们可以在它周围手动包装<style>,但我们想要从sass生成css而不是在HAML文件中的<style>标记内生成css并不常见。

3 个答案:

答案 0 :(得分:12)

与您的问题相关的文档是haml-lang.com上的here以及sass-lang.com处的更详细说明。

我相信你缺少的是不应该在你的haml文件中使用sass。它们应放在带有.sass扩展名的public / stylesheets / sass中。它们将被编译为public / stylesheets中的.css文件,然后将其链接到您的布局中。

来自sas-lang.com链接:

  

例如,public / stylesheets / sass / main.scss将编译为public / stylesheets / main.css。

然后,您将使用stylesheet_link_tag帮助程序(或手动链接样式表):

<%= style_sheet_link_tag 'main' %>

如果你真的需要在haml中使用sass,here就是答案。你不能在haml中嵌套过滤器。你显然需要这样做:

%style(type="text/css") 
  :sass 
    div 
      color: red 

我相信this是来自haml google群组的原始回复。

答案 1 :(得分:10)

Since 4.0.0

  

:sass过滤器现在将其输出包装在样式标记中,新的:less:scss过滤器也是如此。

在4.0.0之前,只需将其包装在%style

%style
  :sass
    // so sassy! ;)

答案 2 :(得分:2)

您也可以编写自定义过滤器来生成样式标记。

下面的示例定义了一个新的':csass'过滤器。

require "haml/filters"
module Haml::Filters::Csass
  include Haml::Filters::Base
  include Haml::Filters::Sass
  lazy_require 'sass/plugin'
  def render(text)
    src = super
    "<style>#{src}</style>"
  end
end

所以你可以这样做:)

:csass
  #someDiv
    border: 3px dashed orange