Emmet(zen coding)文档(一)[译文]

Emmet其实就是原先的zen coding。我一直想好好深入学习呢,sublime我都配好了。今天抽空翻译下官方文档吧。主要还是举例,翻译有删减,但力求正确。

依照官方文档的类别划分为:

好了,下面细细讲讲每个部分的内容。

缩略词

缩略词语法

Emmet使用的语法类似于css选择器,比如我们常见的">","+",以及属性选择器等等。这些将在Emmet中变得很常见。

元素

元素是啥?就是有内容的html标签。当然,这些称谓总是让人觉得麻烦(楼主自己插的话)。

你没必要再像以前那样在编辑器中完整地输入元素,比如,你可以这么简写,Emmet可以帮你转化成

你需要的标签:div → <div></div>foo → <foo></foo>等等。

操作符的嵌套规则:

假如你熟悉css的选择器,那么下面这些示例对你来说,非常容易理解:

子选择器:>

输入:

div>ul>li

就会生成:

<div>
    <ul>
        <li></li>
    </ul>
</div>

紧邻选择器:+

输入:

div+p+bq

生成:

<div></div>
<p></p>
<blockquote></blockquote>

上三角符:^

你知道:

div+div>p>span+em 

会被转化成:

<div></div>
<div>
    <p><span></span><em></em></p>
</div>

那么使用“^”符号呢,你就可以跳到上一级。这个上一级是啥意思捏,我的理解是上一个“>”选择器的那一级。

示例:

div+div>p>span+em^bq

输出为:

<div></div>
<div>
    <p><span></span><em></em></p>
    <blockquote></blockquote>
</div>

当然,你也可以使用多个“^”,如下:

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

将会输出为:

<div></div>
<div>
    <p><span></span><em></em></p>
</div>
<blockquote></blockquote>

PS:这个示例,有点误导啊,其实如果为了这个结果,只需要两个“^”就OK了,三个多余了。

请猜测,这个输入会输出什么结果呢?

div.test>span+(em>i)+^bq

分组:()

上面给出的一个猜测结果的例子就使用了分组,如果不用分组的话,转化结果就错误咯。

括号()通常用来在复杂的缩写中对子节点树进行分组:

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

扩展为:

<div>
    <header>
        <ul>
            <li><a href=""></a></li>
            <li><a href=""></a></li>
        </ul>
    </header>
    <footer>
        <p></p>
    </footer>
</div>

If you’re working with browser’s DOM, you may think of groups as Document Fragments: each group contains abbreviation subtree and all the following elements are inserted at the same level as the first element of group.(尼玛,这段话真长,我都不知道怎么翻译了。)

你可以使用()分组,并使用*来把分组连接起来:

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

生成为:

<div>
    <dl>
        <dt></dt>
        <dd></dd>
        <dt></dt>
        <dd></dd>
        <dt></dt>
        <dd></dd>
    </dl>
</div>
<footer>
    <p></p>
</footer>

With groups, you can literally write full page mark-up with a single abbreviation, but please don’t do that.(使用分组,你可以只用一个单独的缩完成整个页面的标记,但是不建议这么做)

属性操作符:

ID 和CLASS

这个很简单啊,我就不翻译他们的啰嗦话了,直接上代码示例:

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

输出:

<div id="header"></div>
<div class="page"></div>
<div id="footer" class="class1 class2 class3"></div>

属性:

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

输出:

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

属性值其实还可以写单引号,也可以不用写。html5就是这样的规范。属性值为空的话,就不写属性值了。

Item numbering(项目序号,列表项序号):$

使用*可以重复元素,那么使用$则可以给它们编号。把$符放在元素名称,属性名称或者属性值后,输出重复元素的当前编号。

ul>li.item$*5

输出:

<ul>
    <li class="item1"></li>
    <li class="item2"></li>
    <li class="item3"></li>
    <li class="item4"></li>
    <li class="item5"></li>
</ul>

你也可以使用多个$,相当于给数字前缀加0。

ul>li.item$$$*5

输出为:

<ul>
    <li class="item001"></li>
    <li class="item002"></li>
    <li class="item003"></li>
    <li class="item004"></li>
    <li class="item005"></li>
</ul>

更改编号的基数和方向(排序):

使用@修饰符,表示默认升序(不用它,只用$也是默认升序),@-则表示降序,@修饰符要跟在$符后面,基数默认为1:

ul>li.item$@-*5

转化为:

<ul>
    <li class="item5"></li>
    <li class="item4"></li>
    <li class="item3"></li>
    <li class="item2"></li>
    <li class="item1"></li>
</ul>

若是要改变基数,就直接在@后面加上基数数字即可,但是基数数字是要在升降序修饰符后面的(升序默认没有,降序为“-”)。例如:

ul>li.item$@3*5

生成:

<ul>
    <li class="item3"></li>
    <li class="item4"></li>
    <li class="item5"></li>
    <li class="item6"></li>
    <li class="item7"></li>
</ul>

看吧,基数是从3开始的,默认升序。对应的,降序的例子为:

ul>li.item$@-3*5

生成:

<ul>
    <li class="item7"></li>
    <li class="item6"></li>
    <li class="item5"></li>
    <li class="item4"></li>
    <li class="item3"></li>
</ul>

文本: {}

元素一般既包括了属性和属性值,还包括了文本内容。文本内容怎么填充呢?

答案就是使用 { }。

a{Click me}

生成:

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

注意, {text}被用来解析为一个单独的元素(就好比,div,p),当把它卸载元素后面是,有特殊含义。比如,a{text}和a>{text}将会产生同样的输出,但是a{click}+b{here}和a>{click}+b{here}就不一样了。

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

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

所以,尼玛还是规矩点写吧,想输出<a href="">text</a>就用a{text},别发骚,脱裤子放屁用a>{text}。

好了,为了加深理解,我们不用">"操作符,来看看下面这个例子:

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

生成:

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

缩写注意事项:

有些人为了让自己的缩写变得更具有可读性,就给元素和操作符之间加了空格,比如:

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

结果,尼玛悲催了,不起作用啊。因为空格符在Emmet中被当做停止符来解析的。

还有些二货用户呢,错误地以为,每个缩写应当换行,额,你爱写哪里写哪里!

下面是视频demo,我就不管啦。

  • 缩写并不是模板语言,所以不具有可读性,它们可以迅速扩展和移除
  • 你没必要去写复杂的缩写。你有那功夫去思考,时间都特码浪费好多了

------------------华丽丽的分割线-----------------------

好了,今天先翻译到这里。

题外话:

确实啊,谁会一下子就写出一个复杂的缩写呢?我也是一段一段的写啊。看一眼psd,就特码能写出牛逼闪闪,可扩展,语义也很不错的代码,不容易啊!

posted @ 2013-05-29 16:35  xmlovecss  阅读(825)  评论(2编辑  收藏  举报