haml语法

元素名: %

百分号字符放在每一行的开头,后面紧跟一个标签名,标签名后加一个空格,后跟要在此标签内部显示的文本,例如:

%one
  %two
    %three Hey there

将被编译为:

<one>
  <two>
    <three>Hey there</three>
  </two>
</one>

说明:%特殊符号在每个标签名的开头,onetwothree为标签名,标签three后有一个空格,Hey there是要在标签three内部显示的文本。Haml编译后,会自动生成开始标签和结束标签。

属性:

标签的属性使用大括号{}包裹起来,:后紧跟该标签的属性,=>后紧跟该标签属性的值,看一个例子:

%html{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en", :lang => "en"}

将被编译为:

<html xmlns=‘http://www.w3.org/1999/xhtml‘ xml:lang=‘en‘ lang=‘en‘></html>

属性可以写在多行,属性与属性之间用逗号,分隔,例子:

%script{:type => "text/javascript",
        :src  => "javascripts/script_#{2 + 7}"}

编译后:

<script src=‘javascripts/script_9‘ type=‘text/javascript‘></script>

说明:#{...}这种写法,{...}中的是表达式或者变量,最终的值是表达式或者变量的值。

:class:id属性

:class:id属性可以被定义为一个Ruby的数组,数组中的元素最终会被join方法连接为字符串。:class指定的数组中的元素会被" "空格连接,而:id指定的数组会被"_"字符串连接。例子:

%div{:id => [@item.type, @item.number], :class => [@item.type, @item.urgency]}

等价于

%div{:id => "#{@item.type}_#{@item.number}", :class => "#{@item.type} #{@item.urgency}"}

说明:可以看到,:id指定的数组[@item.type, @item.number]的元素被"_"下划线字符串连接成"#{@item.type}_#{@item.number}"@符号后跟的是变量。变量或表达式的值为false的的元素将会被移除,剩下的才会被转换为字符串,例如:

%div{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] } Contents

根据变量和表达式最终的值是true还是falseclass会有不同的编译结果:

<div class="numeric sort ascending">Contents</div>
<div class="numeric">Contents</div>
<div class="sort descending">Contents</div>
<div>Contents</div>

根据@item.type是否是numeric还是null@[email protected]是否为真,@sortdirascending还是descending,会得到不同的结果。

另一个例子:

.item{:class => @item.is_empty? && "empty"}

可能的编译结果:

class="item"
class="item empty"
简洁形势

之前的例子可以使用简洁的写法:

%html(xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en")
%a(title[email protected]title href=href) Stuff

等价于

%a{:title => @title, :href => href} Stuff

简洁的写法由于没有逗号分隔属性,因此,不能使用复杂的表达式。要使用表达式,最好使用非简洁写法,并且你可以混用简洁与非简洁形势,例子:

%a(title[email protected]title){:href => @link.href} Stuff

使用#{}来插入表达,例子:

%span(class="widget_#{@widget.number}")

简洁形势也可以多行书写:

%script(type="text/javascript"
        src="javascripts/script_#{2 + 7}")
布尔属性

诸如input标签的checkedoptionsselected属性,例子:

html写法

<input selected>

haml写法:

%input{:selected => true}

xhtml中,会被编译为:

<input selected=‘selected‘>

将布尔属性设置为false

%input{:selected => false}

编译后:

<input>

简洁写法:

%input(selected)

设置为true或者false:

%input(selected=true)
ClassID.#

类似CSS中的classid选择器,使用.后跟class名来表示标签的class,使用#后跟id名来表示标签的id。多个class可以链式写法,例子:

%div#things
  %span#rice Chicken Fried
  %p.beans{ :food => ‘true‘ } The magical fruit
  %h1.class.otherclass#id La La La

编译后

<div id=‘things‘>
  <span id=‘rice‘>Chicken Fried</span>
  <p class=‘beans‘ food=‘true‘>The magical fruit</p>
  <h1 class=‘class otherclass‘ id=‘id‘>La La La</h1>
</div>

另一个例子:

%div#content
  %div.articles
    %div.article.title Doogie Howser Comes Out
    %div.article.date 2006-11-05
    %div.article.entry
      Neil Patrick Harris would like to dispel any rumors that he is straight

编译后

<div id=‘content‘>
  <div class=‘articles‘>
    <div class=‘article title‘>Doogie Howser Comes Out</div>
    <div class=‘article date‘>2006-11-05</div>
    <div class=‘article entry‘>
      Neil Patrick Harris would like to dispel any rumors that he is straight
    </div>
  </div>
</div>
HTML5自定义data属性

例子:

%a{:href=>"/posts", :data => {:author_id => 123}} Posts By Author

编译后

<a data-author-id=‘123‘ href=‘/posts‘>Posts By Author</a>

注意:authod_id的下划线被连字符-替换了,如果不希望这样的行为,可以设置hamlhyphenate_data_attrs optionfalse,输出结果为:

<a data-author_id=‘123‘ href=‘/posts‘>Posts By Author</a>

使用HTML5的自定义data属性,根据存储的数据,可以根据数据来选择性的添加某些属性,class等。

默认的标签为div

由于div标签经常被使用,因此在不指定标签名的时候,默认的标签为div。例子:

#collection
  .item
    .description What a cool item!

等价于

%div#collection
  %div.item
    %div.description What a cool item!

编译后

<div id=‘collection‘>
  <div class=‘item‘>
    <div class=‘description‘>What a cool item!</div>
  </div>
</div>
<>符号

>,移除标签两侧的空白;

<,移除标签内部的空白。

它们放置的位置在标签后,classid、属性后。例子:

%blockquote<
  %div
    Foo!

编译后

<blockquote><div>
  Foo!
</div></blockquote>

另一个例子:

%img
%img>
%img

编译后

<img /><img /><img />

又一个例子:

%img
%pre><
  foo
  bar
%img

编译后

<img /><pre>foo
bar</pre><img />
Doctype: !!!

描述HTML文档类型,例子:

!!! XML
!!!
%html
  %head
    %title Myspace
  %body
    %h1 I am the international space station
    %p Sign my guestbook

编译后

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Myspace</title>
  </head>
  <body>
    <h1>I am the international space station</h1>
    <p>Sign my guestbook</p>
  </body>
</html>

通过以下方式定义不同的文档类型

!!!
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
!!! Strict
XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
!!! Frameset
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
!!! 5
XHTML 5
<!DOCTYPE html>
!!! 1.1
XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
!!! Basic
XHTML Basic 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
!!! Mobile
XHTML Mobile 1.2
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
!!! RDFa
XHTML+RDFa 1.0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
注释

HTML注释:/,例子:

%peanutbutterjelly
  / This is the peanutbutterjelly element
  I like sandwiches!

编译后

<peanutbutterjelly>
  <!-- This is the peanutbutterjelly element -->
  I like sandwiches!
</peanutbutterjelly>

前置的/可以注释整个缩进的代码块,例子:

/
  %p This doesn‘t render...
  %div
    %h1 Because it‘s commented out!

编译后

<!--
  <p>This doesn‘t render...</p>
  <div>
    <h1>Because it‘s commented out!</h1>
  </div>
-->

条件注释:/[],例子:

/[if IE]
  %a{ :href => ‘http://www.mozilla.com/en-US/firefox/‘ }
    %h1 Get Firefox

编译后

<!--[if IE]>
  <a href=‘http://www.mozilla.com/en-US/firefox/‘>
    <h1>Get Firefox</h1>
  </a>
<![endif]-->

Haml注释:-#

注释的内容再最终编译后不会显示,例子:

%p foo
-# This is a comment
%p bar

编译后

<p>foo</p>
<p>bar</p>

也可以注释嵌套的内容,所有嵌套的内容最终都不会显示。

%p foo
-#
  This won‘t be displayed
    Nor will this
                   Nor will this.
%p bar

编译后

<p>foo</p>
<p>bar</p>

上述就是脱离Ruby语言的一些用法,一般使用也够用了,还有些用法需要Ruby语言支持。

时间: 2024-08-29 12:18:46

haml语法的相关文章

了解前端的框架知识

构建工具(自动) Grunt.js:生态强大,发展速度快,有大量可选插件: Gulp.js:流式项目构建工具: Browserify.js:Node.js模块,主要用于改写现有的CommonJS模块,使得浏览器端也可以使用这些模块: Uglify.js:JavaScript解析器.压缩工具和代码美化库. 软件包管理工具 Homebrew (Mac OS):Apple Mac OS下的软件安装工具: Apt:Debian.Ubuntu等系列Linux系统的软件包管理工具,可用来安装.删除.升级软件

[转载]Frontend Knowledge Structure

https://github.com/JacksonTian/fks http://code.csdn.net/news/2819224 本文为大家整理了一系列关于JavaScript的常用工具,包括常用工具.前端和后端工具,从测试到构建,内容丰富,值得收藏.下面是根据推荐工具整理的思维导图. 点此看大图 常规工具 脚手架工具 Yeoman:它旨在为开发者提供一系列健壮的工具.程序库和工作流,帮助开发者快速构建漂亮的Web应用. 构建工具(自动) Grunt.js:生态强大,发展速度快,有大量可

[转]Haroopad Markdown 编辑器代码语法高亮支持

代码语法高亮 书写格式为: ` ` ` language_key if (condition){ return true } ` ` ` 在 ` ` ` (三个反引号)之间的是代码,其中language_key的值,请参考 支持的语言和缩写标记 例如,将language_key用JavaScript替换,效果如下: if (condition){ return true } 支持的语言和缩写标记 Language language_key 1C 1c ActionScript actionscr

[转]SCSS 和 SASS 和 HAML 和CoffeeScript

Asset Pipeline 提供了内建直接使用 Sass 撰写 CSS 的功能. 你也许会生出这样的疑惑:什么是 Sass? Why should I care? Sass (Syntactically Awesome Stylesheets) 原先是内建在 Haml 中的一个副功能. 利用缩排设计避免製造难以 debug 的 syntax error Haml 要谈 Sass,就不得不先来谈 Haml 这个 project. Haml 全名为 HTML Abstract Markup Lan

花了两天时间学习了 sass, less, stylus的基本语法和简单使用, 谈谈感受.

1. 变量的问题 1.1变量的表示 sass有个$var, less有@var, stylus 的var直接就是var=值, 也可以使用$var 1.2 变量的赋值 sass, $var: value, less: @var: value stylus: var=10 2. 缩进的问题 sass, less均不需要缩进, 缩进无关 stylus也可以不用缩进, 使用默认的css花括号, 也可以使用缩进, 如果缩进不匹配就麻烦了 3. 宿主的问题 sass, 原来是用在ruby界的, 是haml的

js 模板引擎 jade使用语法

Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 · 代码默认经过编码处理以增强安全性 · 编译及运行时的上下文错误报告 · 命令行编译支持 · HTML5模式(使用!!!5文档类型) · 可选的内存缓存 · 联合动态和静态标记类 · 利用过滤器解析树的处理 · 支持 Express JS · 利用each透明的循环objects,arrays甚

[转载]SCSS 和 SASS 和 HAML 和CoffeeScript

原文链接:http://hlee.iteye.com/blog/1236971 Asset Pipeline 提供了内建直接使用 Sass 撰写 CSS 的功能. 你也许会生出这样的疑惑:什么是 Sass? Why should I care? Sass (Syntactically Awesome Stylesheets) 原先是内建在 Haml 中的一个副功能. 利用缩排设计避免製造难以 debug 的 syntax error Haml 要谈 Sass,就不得不先来谈 Haml 这个 pr

Github Pages 代码语法高亮支持的语言和语法分析器

Github Pages 现只支持使用 Rouge 来代码语法高亮了. 从 Rouge 项目 中摘录支持的语言和语法分析器如下,以便查阅. apache: extend previous fix to apache and cmake lexers apiblueprint: Add a lexer for API Blueprint apple_script: utf-8 rampage biml: Initial BIML syntax highlighting support c: mak

SqlServer给一个表增加多个字段语法

添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table XunHu add MaleCount varchar(50) null, FemaleCount varchar(50) null, SubadultCount varchar(50) null, LarvaeCount varchar(50) null, TraceType varchar(50