注意:该视频原版位于Vimeo,但是要看的话需要翻[和谐]墙先,地址在这里:,上面的视频是我费尽周折从Vimeo上下载下来上传到优酷的,上传后质量竟被大打折扣了,囧。youtube上也有一份视频,是基于Aptana的演示,一样很精彩:。PS:貌似youtube要比Vimeo翻[和谐]墙容易些,不过如何翻[和谐]墙不在本站讨论范围。
如果你想跳转到详细介绍和使用指南,请看一下演示页面并立刻下载你适用的插件:
Demo (使用 Ctrl + , 展开缩写,需要JavaScript支持) 下载(完全支持) (跨平台); Coda, via (Mac); Espresso, via (Mac); 下载(部分支持,只支持展开缩写) (只能用于Mac机,Windows可以使用E-text编辑器替代); ; ; ; ;现在让我们看一下这些工具是如何工作的吧。
展开缩写展开缩写功能将类似CSS的选择器转换为XHTML代码。术语缩写可能会有点儿难以理解。为什么不直接称之为CSS选择器呢?嗯,首要原因是语义化:选择器意为选择一些东西,但是在这里我们事实上是生成 一些东西,是写一个长代码的较短的替代。其次,它只是使用真实的CSS选择器语法的一个小的子集,并添加了一些新的操作符。
这里是一个支持的属性和操作符的列表:
E元素名称(div, p);
E#id使用id的元素(div#content, p#intro, span#error);
E.class使用类的元素(div.header, p.error.critial). 你也可以联合使用class和idID: div#content.column.width;
EN子代元素(divp, div#footerpspan);
E+N兄弟元素(h1+p, div#header+div#content+div#footer);
E*N元素倍增(ul#navli*5a);
E$*N条目编号 (ul#navli.item-$*5);
正如你能看到的,你已经知道如何使用Zen Coding了:只是些一个简单的仿CSS选择器(呃,缩写抱歉),就像这样
div#header>img.Logo+ul#nav>li*4>a
然后调用展开缩写行为。
这里有两个新增的操作符:元素倍增和条目编号。比如,如果你想生成5个li元素,你可以简单的写位li*5。它也将同样重写全部子代元素。如果你想写4个li元素,每个里面都有一个a标签,你就可以简单的写为li*4a,这样会生成以下HTML代码:
lia href=""/a/lilia href=""/a/lilia href=""/a/lilia href=""/a/li
最后一个条目编号用于当你想用索引标记重复的元素的情况。假设你想生成class为item1、item2和item3的3个div元素。你可以写成这样的缩写,div.item$*3:
div class="item1"/divdiv class="item2"/divdiv class="item3"/div
只需在你想要索引出现的任何class或id属性上添加一个美元符号即可,而且想要多少都可以。那么,这样
div#i$-test.class$$*5
会被转换成为:
div id="i1-test" class="class111"/divdiv id="i2-test" class="class222"/divdiv id="i3-test" class="class333"/divdiv id="i4-test" class="class444"/divdiv id="i5-test" class="class555"/div
你会看到,当你写a的缩写的时候,输出是a href="/a。或者,如果你写img,输出就是img src=" alt=" /。
Zen Coding是如何知道什么时候应该为生成的标签添加默认的属性或者跳过关闭标签的?有一个专门的文件,名为描述了输出元素。这是一个简单的JSON文件,描述每种语言的缩写(是的,你可以为不同的句法定义缩写,比如HTML、XSL、CSS等)。通用的语言缩写定义看起来就像这样:
'html': { 'snippets': { 'cc:ie6': '<!--[if lte IE 6]>nt${child}|n<![endif]-->',...}, 'abbreviations': { 'a': '<a href=""></a>', 'img': '<img src="" alt="" />',...}}元素类型
Zen Coding有两个主要的元素类型:片段(snippets) 和 缩写(abbreviations)。片段就是随意的代码碎片,而缩写是标签定义。通过片段,你可以写出你想要的任何代码,它也会照你写的格式输出;但是你必须手动的格式化它(使用n 和t实现换行和缩进) 并将${child}变量放到你想要输出子元素的地方,就像这样:cc:ie6style。如果你不使用${child}变量,子元素将会输出于代码片段的后面。
有了缩写,您必须编写标记定义,而且语法是非常重要的。通常,你必须写一个简单的带有所有默认的属性的标签,比如: a href="/a。当Zen Coding被加载后,它会解析一个标签定义到一个描述该标签的名字、属性(包括它们的顺序)以及该标签是否为空的特定的对象中。所以,如果你写img src=" alt=" /,你会告诉Zen Coding这个标签必须是空的,然后扩展缩写行为就会在输出之前为它使用特定的规则。
对于片段和缩写,你可以添加一个管道符号,它告诉Zen Coding当缩写被展开的时候光标会被定位到哪里。默认的,Zen Coding 将光标放在空属性的引号中间以及开始和关闭标签的中间。
例子那么,这里解释一下当你写了一个缩写并召唤展开缩写行动时发生的事情。首先,它将一个完整的缩写分开为独立的元素:这样diva 会被分成div 和a 元素,当然也会维持他们的关系。然后,每个元素,解析器先在代码片段内而后在缩写中寻找定义。如果它找不到,将会使用元素的名字作为新的标签,并为其添加缩写中定义的id和class。比如,如果你写mytag#example,解析器在片段或缩写中找不到mytag定义,它就会输出mytag id=examplemytag。
我们制作了很多和。你会发现学习使用Zen Coding可以增加你的生产力。
HTML 标签对匹配器对于HTML编码者的另一个非常常见的任务是寻找一个元素的标签对。例如你想选择整个div id=content标签并将其移动到其它地方或者删除它。或者有可能你在寻找一个关闭标签并想知道它属于那个开始标签。
不幸的是,很多现代开发工具在该功能方面有所欠缺。那么我就决定写一个我自己的标签对匹配器作为Zen Coding的一部分。不过它依然在beta阶段并尚存一些问题,但它可以工作的很不错并很快。不是浏览整个文档(像通常的那种HTML标签对匹配器的做法),它从光标的当前位置开始寻找相关的标签。这使得它非常快并且上下文无关:它甚至可以用于这段JavaScript代码片段:
var table = '<table>'; for (var i = 0; i < 3; i++) {table += '<tr>'; for (var j = 0; j < 5; j++) {table += '<td>' + j + '</td>';}table += '</tr>';}table += '</table>';使用缩写包裹
这真的是一个很酷的特性,它将缩写和标签对匹配器的功能合并到一起了。你有多少才发现你需要添加一个包裹元素以修正一个浏览器bug?或者你需要添加一个装饰,比如一个背景图片或者边框到一个块级内容?你必须写开始标签,临时打断你的代码,找到相关的点然后关闭标签。这就是使用缩写包裹能帮助你的地方。
该功能相当简单:它要求你输入缩写,然后执行适当的展开缩写行动并将你期望的文本放到你缩写的最后一个元素里面。如果你没有选择任何文本,它就会启动标签对匹配器并使用结果。它同样能搞清楚你的光标的位置:标签的内容里面或者是开始和关闭标签中间。依赖于它的位置,它会包裹标签的内容或标签本身。
缩写包裹为包裹个别行引入了一个特定的缩写句法。简单跳转到倍增操作符后面的数字,比如:ul#navli*a。当Zen Coding 发现一个使用未定义的倍增数的时候,它会将它作为一个重复元素:你的章节中有多少行,它就会输出多少次,并将每行的内容放到重复元素的最后一个子元素里面。
如果你在这段文本外面包裹这段缩写div#headerul#navigationli.item$*aspan:
About UsProductsNewsBlogContact Up
你将会得到以下结果:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)div id="header"ul id="navigation"li class="item1"a href=""spanAbout Us/span/a/lili class="item2"a href=""spanProducts/span/a/lili class="item3"a href=""spanNews/span/a/lili class="item4"a href=""spanBlog/span/a/lili class="item5"a href=""spanContact Up/span/a/li/ul/div
你可以看到,Zen Coding是一个强大的文本处理工具。
快捷键Ctrl+,展开缩写
Ctrl+M匹配对
Ctrl+H使用缩写包括
Shift+Ctrl+M合并行
Ctrl+Shift+?上一个编辑点
Ctrl+Shift+?下一个编辑点
Ctrl+Shift+?定位匹配对
这些快捷键是可以自定义的。
在线演示你已经学到很多关于Zen Coding如何工作以及它是如何使你的编码更容易了。现在为什么不自己尝试一下呢?因为Zen Coding是用纯JavaScript开发并迁移到Python,它甚至可以用于浏览器内部,这令它成为引入到CMS的首选。
(使用 Ctrl + , 展开缩写,需要JavaScript支持) 支持的编辑器Zen Coding并不依赖某个特定的编辑器。它是一个只处理文本的出色的组件:它获取文本、做一些处理并放回新的文本(或索引,用于标签匹配)。Zen Coding由JavaScript和Python编写,所以它实际上可以运行于任何平台。在Windows,你可以运行JavaScript版本,而Mac和Linux 分支可以使用Python版。
如果让你的编辑器支持Zen Coding,你需要写一个特定的可以在你的编辑器和Zen Coding之间转换数据的插件。问题是一个编辑器可能不会完整的支持Zen Coding因为它本身的插件系统。比如,通过使用脚本输出替换当前行很容的就支持了展开缩写功能,但是它不能处理标签对匹配因为没有标准的方法请求TextMate来选择内容。
完全支持 (跨平台); Coda, via (Mac); Espresso, via (Mac); 部分支持(只支持展开缩写) (只能用于Mac机,Windows可以使用E-text编辑器替代); ; ; ; ;Aptana是我主要的开发环境,它使用一个JavaScript版本的Zen Coding。它也包含很多其它的我用于日常工作的工具,所以任何一个新的Zen Coding版本都将会首先对Aptana可用,然后部署到Python并兼容其它的编辑器。
Coda和Espresso 插件被杰出的 (TEA) 平台支持,由开发。原始的源代码,但我还是制作了以整合Zen Coding的特性。
总结很多尝试过Zen Coding的人都说它改变了他们写页面的方式。当然还有很多事情要做,还有很多的编辑器需要被支持以及一些文档要写。请浏览 以及以寻找你的问题的答案。希望你喜欢Zen Coding!
附:Zen coding的具体用法遗憾的是, 本文 猜你喜欢