Emmet-前端开发神器

Emmet是一款编辑器插件,支持多种编辑器支持。在前端开发中,Emmet 使用缩写语法快速编写 HTML、CSS 以及实现其他的功能,极大的提高前端开发效率。

下载地址http://emmet.io/download/

缩写

Emmet使用特殊的表达式Abbreviations,也就是缩写:这种特殊的表达式会被Emmet解析并转义成结构化的代码块。Emmet使用类似CSS选择器的语法来描述元素在DOM树节点的位置和属性。

例如

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

会被转义成

<div id="page">
    <div class="logo"></div>
    <ul id="navigation">
        <li><a href="">Item 1</a></li>
        <li><a href="">Item 2</a></li>
        <li><a href="">Item 3</a></li>
        <li><a href="">Item 4</a></li>
        <li><a href="">Item 5</a></li>
    </ul>
</div>

HTML元素

在Emmet中可以使用元素名例如 divp 生成HTML标签。Emmet没有预设任何标签名,所以可以使用任何可用名称来生成HTML标签:div → <div></div>foo → <foo></foo>

嵌套操作符

嵌套操作用来生成元素的DOM树中的兄弟节点或子节点

child:>

使用 > 生成元素子节点

    div>ul>li

会被转义成

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

Sibling: +

使用 ** + ** 生成元素兄弟节点

div+p+bq

会被转义成

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

Climb-up: ^

使用** ^ **在元素父节点生成新的元素节点

操作符** ^ 的作用和 > **刚好相反

用** > **可以在子级生成新的节点

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>

用n个** ^ **,就可以在第n父级生成新的节点

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

会被转义成

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

**Multiplication: * **

使用** * **生成多个相同元素

ul>li*5

会被转义成

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

Grouping: ()

圆括号** () **是Emmet的高级用法,用来实现比较复杂的DOM结构

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>

还可以嵌套使用圆括号** () **

(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>

属性操作符

属性操作符用来修改元素的属性

ID 和 CLASS

Emmet给元素添加ID和CLASS的方法和CSS的语法类似

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>

自定义属性

使用[attr]标记来添加自定义属性

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

会被转义为

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

元素编号

使用** $ **操作符可以对重复元素进行有序编号

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>

还可以用多个** $ **定义编号的格式

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>

更灵活的编号方式

使用** @ **修饰符可以改变编号的格式

例如:

在** $ 后面添加 @- **可以改变编号顺序

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>

在** $ 后面添加 @N **可以改变编号基数

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>

还可以组合使用上面的修饰符

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>

文本操作符

Emmet使用** Text:{} **给元素添加文本内容

a{Click me}

会被转义为

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

注意: {text} 在Emmet中是被当成单独的元素来解析的,但当和其他元素结合使用时会有特殊的含义

例如:
** a{click} ** 和** a>{click **
会输出相同的结果,但
** 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>{click}+b{here} 中,<b> 元素是<a>元素的子节点。这个就是区别:当 {text} **直接写在元素后面时,并不会改变父元素的上下文。

下面是一个更复杂的案例:

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

会被转义为

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

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

则会被转义为

<p>Click </p>
<a href="">here</a> to continue
`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容