7

如果在 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 而不是在<style>HAML 文件中的标记内。

4

3 回答 3

13

与您的问题相关的文档位于haml-lang.com,更详细的解释位于sass-lang.com

我相信您缺少的是 sass 不应在您的 haml 文件中使用。它们应该放在 public/stylesheets/sass 中,扩展名为 .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,这里就是答案。您不能在 haml 中嵌套过滤器。你显然需要做这样的事情:

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

我相信是来自 haml 谷歌群组的原始回复。

于 2010-06-12T09:47:54.053 回答
11

从 4.0.0 开始

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

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

%style
  :sass
    // so sassy! ;)
于 2012-11-02T02:27:51.203 回答
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
于 2011-07-23T02:28:13.773 回答