Emmet(Zen Coding)官方文档 之二 缩写

【说明】本系列博文是依据 Emmet 官方文档翻译的,部分内容已经在博主之前的博文中节选过,为方便已经收藏过之前博文的朋友,没有删除这些博文,仅将其完整的收录于本系列中。

缩写

缩写是 Emmet 的核心:这些特殊的表达式在运行时被解析并翻译成结构化的代码块,比如 HTML。缩写的语法看上去很像带有用于生成代码的扩展的 CSS 选择器。许多 web 程序员已经知道如何使用它。

如下缩写

点击(此处)折叠或打开

  1. #page>div.logo+ul#navigation>li*5>a{Item $}



将生成:

点击(此处)折叠或打开

  1. <div id="page">
  2.     <div class="logo"></div>
  3.     <ul id="navigation">
  4.         <li><a href="">Item 1</a></li>
  5.         <li><a href="">Item 2</a></li>
  6.         <li><a href="">Item 3</a></li>
  7.         <li><a href="">Item 4</a></li>
  8.         <li><a href="">Item 5</a></li>
  9.     </ul>
  10. </div>


只需要按一个键。在很多编辑器(如 Eclipse、 Sublime Text 2 Espresso 等)中插件需要 tabstop 标记,所以只要在想要生成代码的地方按下 Tab 键,就会很快递归地生成代码。

缩写是优化的(但不限于)生成 HTML 和 XML 的方法,它可以使书写繁琐的标记变得轻而易举。可以通过掌握语法来释放 Emmet 缩写的威力。

缩写语法

Emmet 使用类似于 CSS 选择器的语法描述元素在生成的文档树中的位置及其属性。

元素

可以使用元素名(如 div 或者 p)来生成 HTML 标签。Emmet 没有预定义的有效元素名的集合,多宝平台可以把任何单词当作标签来生成和使用:div → 

, foo → <foo></foo> 等。

嵌套运算符

嵌套运算符用于以缩写的方式安排元素在生成文档树中的位置:将其放在内部或成为相邻的元素。

子: >

可以使用 > 运算符指定嵌套元素在另一个元素内部:

点击(此处)折叠或打开

  1. div>ul>li


生成的结果为:

点击(此处)折叠或打开

  1. <div>
  2.     <ul>
  3.         <li></li>
  4.     </ul>
  5. </div>

兄弟: +


使用 + 运算符将相邻的其它元素处理为同级:

点击(此处)折叠或打开

  1. div+p+bq


生成的结果为:

点击(此处)折叠或打开

  1. <div></div>
  2. <p></p>
  3. <blockquote></blockquote>

上升: ^


使用 > 运算符将会降低所有后续所有元素在生成树中的级别,多宝每一级的兄弟元素也被解析成相同深度的元素:

点击(此处)折叠或打开

  1. div+div>p>span+em


将生成:

点击(此处)折叠或打开

  1. <div></div>
  2. <div>
  3.     <p><span></span><em></em></p>
  4. </div>

使用 ^ 运算符,能够提升元素在生成树中的一个级别,并同时影响其后的元素:

点击(此处)折叠或打开

  1. div+div>p>span+em^bq



将生成:

点击(此处)折叠或打开

  1. <div></div>
  2. <div>
  3.     <p><span></span><em></em></p>
  4.     <blockquote></blockquote>
  5. </div>


可以连续使用多个 ^ 运算符,每次提高一个级别:

点击(此处)折叠或打开

  1. div+div>p>span+em^^^bq


将生成:

点击(此处)折叠或打开

  1. <div></div>
  2. <div>
  3.     <p><span></span><em></em></p>
  4. </div>
  5. <blockquote></blockquote>


重复: *

使用 * 运算符可以定义一组元素:

点击(此处)折叠或打开

  1. ul>li*5


将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li></li>
  3.     <li></li>
  4.     <li></li>
  5.     <li></li>
  6.     <li></li>
  7. </ul>


分组: ()

括号用于在复杂的 Emmet 缩写中处理一组子树:

点击(此处)折叠或打开

  1. div>(header>ul>li*2>a)+footer>p


将生成:

点击(此处)折叠或打开

  1. <div>
  2.     <header>
  3.         <ul>
  4.             <li><a href=""></a></li>
  5.             <li><a href=""></a></li>
  6.         </ul>
  7.     </header>
  8.     <footer>
  9.         <p></p>
  10.     </footer>
  11. </div>


如果想与浏览器 DOM 协同工作,可能想要对文档片段分组:每个组包含一个子树,所有的后续元素都插入到与组中第一个元素相同的级别中。

能够在组中嵌套组并且使用 * 运算符绑定它们:

点击(此处)折叠或打开

  1. (div>dl>(dt+dd)*3)+footer>p


将生成:

点击(此处)折叠或打开

  1. <div>
  2.     <dl>
  3.         <dt></dt>
  4.         <dd></dd>
  5.         <dt></dt>
  6.         <dd></dd>
  7.         <dt></dt>
  8.         <dd></dd>
  9.     </dl>
  10. </div>
  11. <footer>
  12.     <p></p>
  13. </footer>


使用分组,可以使用单个缩写逐个写出整页的标签,不过尽量不要这么做。

属性运算符

属性运算符用于编辑所生成的元素的属性,在 HTML 和 XML 中可以快速地为生成元素添加 class 属性。

ID 和 CLASS

在 CSS 中,可以使用 elem#id 和 elem.class 注解来达到为元素指定 id 或 class 属性的目的。在 Emmet 中,可以使用几乎相同的语法来为指定的元素添加这些属性:element:

点击(此处)折叠或打开

  1. div#header+div.page+div#footer.class1.class2.class3


生成:

点击(此处)折叠或打开

  1. <div id="header"></div>
  2. <div class="page"></div>
  3. <div id="footer" class="class1 class2 class3"></div>


自定义属性

可以使用 [attr] 注解(就像在 CSS 中一样)来为元素添加自定义属性:

点击(此处)折叠或打开

  1. td[title="Hello world!" colspan=3]


将生成:

点击(此处)折叠或打开

  1. <td title="Hello world!" colspan="3"></td>


  • 能够在方括号中放置许多属性,
  • 可以不为属性指定值: td[colspan title] 将生成 <td colspan="" title=""> ,如果你的编辑器支持,可以使用 tab 来跳到每个空属性中填写。
  • 属性可以用单引号或双引号作为定界符。
  • 如果属性不包含空格,不需要用定界符括住它:td[title=hello colspan=3] 是正确的。

编号: $

使用 * 运算符可以重复生成元素,如果带 $ 就可以为它们编号。把 $ 放在元素名、属性名或者属性值中,将为每个元素生成正确的编号:

点击(此处)折叠或打开

  1. ul>li.item$*5


将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li class="item1"></li>
  3.     <li class="item2"></li>
  4.     <li class="item3"></li>
  5.     <li class="item4"></li>
  6.     <li class="item5"></li>
  7. </ul>

使用多 $ 可以填充前导的零:

点击(此处)折叠或打开

  1. ul>li.item$$$*5

将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li class="item001"></li>
  3.     <li class="item002"></li>
  4.     <li class="item003"></li>
  5.     <li class="item004"></li>
  6.     <li class="item005"></li>
  7. </ul>

改变编号的基数和方向

使用 @ ,可以改变数字的走向(升序或降序)和基数(例如起始值)。

在 $ 后添加 @- 来改变数字走向:

点击(此处)折叠或打开

  1. ul>li.item$@-*5

将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li class="item5"></li>
  3.     <li class="item4"></li>
  4.     <li class="item3"></li>
  5.     <li class="item2"></li>
  6.     <li class="item1"></li>
  7. </ul>

在 $ 后面添加 @N 改变编号的基数:

点击(此处)折叠或打开

  1. ul>li.item$@3*5

将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li class="item3"></li>
  3.     <li class="item4"></li>
  4.     <li class="item5"></li>
  5.     <li class="item6"></li>
  6.     <li class="item7"></li>
  7. </ul>

这些附加的运算符可以同时使用:

点击(此处)折叠或打开

  1. ul>li.item$@-3*5

将生成:

点击(此处)折叠或打开

  1. <ul>
  2.     <li class="item7"></li>
  3.     <li class="item6"></li>
  4.     <li class="item5"></li>
  5.     <li class="item4"></li>
  6.     <li class="item3"></li>
  7. </ul>

文本: {}

可以用花括号向元素中添加文本:

点击(此处)折叠或打开

  1. a{Click me}

将生成:

点击(此处)折叠或打开

  1. <a href="">Click me</a>

注意,这个 {text} 是被当成独立元素解析的(类似于 div, p ),但当其跟在其它元素后面时则有所不同。例如, a{click} 和 a>{click} 产生相同的输出,但是 a{click}+b{here} 和 a>{click}+b{here} 的输出就不同了:

点击(此处)折叠或打开

  1. <!-- a{click}+b{here} -->
  2. <a href="">click</a><b>here</b>

  3. <!-- a>{click}+b{here} -->
  4. <a href="">click<b>here</b></a>

在第二示例中, <b> 元素放在了 <a> 元素的里面。差别如下:当 {text} 写在元素的后面,它不影响父元素的上下文。下面是展示这种差别的重要性的较复杂的例子:

点击(此处)折叠或打开

  1. p>{Click }+a{here}+{ to continue}

生成:

点击(此处)折叠或打开

  1. <p>Click <a href="">here</a> to continue</p>

在这个例子里, 我们用 > 运算符明确的将 Click here to continue 下移一级,放在 

 元素内,但对于 a 元素的内容就不需要了,因为 <a> 仅有 here 这一部分内容,它不改变父元素的上下文。

作为比较,下面是不带有 > 运算符的相同缩写:

点击(此处)折叠或打开

  1. p{Click }+a{here}+{ to continue}

生成:

点击(此处)折叠或打开

  1. <p>Click </p> <a href="">here</a> to continue

缩写格式的注意事项

当熟悉了 Emmet 的缩写语法后,可能会想要使用一些格式来生成更可读的缩写。例如,在元素和运算符之间使用空格间隔:

点击(此处)折叠或打开

  1. (header > ul.nav > li*5) + footer

但是这种写法是错误的,因为空格是 Emmet 停止缩写解析的标识符

请多用户误以为每个缩写都应写在新行上,但是他们错了:可以在文本的任意位置键入和扩展缩写。

(此处原文使用脚本做了一段示例,限于博客的体例,我没有办法将原文的示例脚本放在本文中,因此用截屏工具录下了一段屏幕,放在此处,有兴趣的朋友,可以去原文地址去看原文中的示例)

这也就是为什么当想要停止解析和扩展时,Emmet 需要一些标志的原因。如果你仍然认为复杂的缩写需要一些格式使其更易读:

  • 缩写不是模板语言,它们不需要”易读“,它们必须”可快速扩展和移动“。
  • 不需要写复杂的缩写。不要认为在 web 编程中”键入“是最慢的运算。想快速找出构建单个的复杂缩写比构造和键入一些较短较简单的缩写更慢。

元素类型

在 HTML 和 XML 文档中,当展开缩写时,所有缩写部分都实时转换成 HTML/XML 标签。但是某些标签——如 a 或者 img——转换成带有预定义属性的元素: <a href=""> 的 <img src="" alt="" />。Emmet 怎么知道什么时候添加所需的属性呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值