HTML速写之Emmet语法规则

缩写语法

Emmet 使用类似于 CSS 选择器的语法来描述元素的结构与属性。

嵌套操作符

> (子元素)

可以使用 > 运算符将元素嵌套在彼此内部

较准确的含义是:使用 **>** 运算符,您将下降生成的树,所有兄弟元素的位置将根据最深的元素解析

div>ul>li

表现为:

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

+ (兄弟元素)

使用 + 运算符将元素以相同层级放在同一父元素上

div+p+bq

表现为:

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

^ 返回上层

  • 使用 ^运算符,您可以爬上树的一个层次,并更改上下文
div+div>p>span+em^bq

表现为:

<div></div>
<div>
    <p><span></span><em></em></p>
    <blockquote></blockquote>
</div>
// 此时的上下文返回到两个div所在的这一层了
  • 当然了,^ 也可以多个并用,有几个 ^ 就返回几层
div+div>p>span+em^^bq

表现为:

<div></div>
<div>
    <p><span></span><em></em></p>
</div>
<blockquote></blockquote>
// 此时上下文已经返回到最外层了

这里要注意,最多返回到跟第一个元素同级的,以上面的例子,^^ 已经返回到了最外层,跟 ^^^ 的效果是一样的

* 乘法

使用 ***** 操作符,您可以定义应该输出多少次该元素,跟我们加减乘除里的乘法含义相近

ul>li*5

表现为:

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

()分组

() 操作符对复杂的子元素进行分组,简而言之,每个()中都是一个独立的子元素

适用于某个子元素比较复杂的情况

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>

可以将分组当作 Document Fragments,后续元素将与分组第一个元素同级。

分组嵌套,并且使用 * 操作法:

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

使用分组后,可以用一个缩写来生成整个页面,不过不建议这么做。[1]

属性操作符(Attribute operators)

顾名思义,就是HTML中的属性,因为我们的页面不光有单纯的HTML,还有各式各样的属性,操作或者创建这些属性就需要用到属性操作符了

ID 和 Class

Emmet使用类似于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>

那我们在实际开发中可能除了常用的属性外,还会用一些自定义的属性,那如果创建呢?

自定义属性(Custom attributes)

您可以使用类似CSS中的符号 [attr="xxx"] 向元素添加自定义属性

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

表现为:

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

需要说明的是:

  1. 方括号内的属性数量不限,如果你喜欢,可以一直加
  2. 如果不是默认属性值的话会生成插入占位 比如:div[title colspan] 会变成 <div title="" colspan=""> 前提是编辑器支持这样的写法
  3. 属性值可以使用单引号或者双引号都可以
  4. 属性值如果不包含空格可以省去引号

$编号(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>

如果想实现00x的格式,该怎么办呢?

可以连写多个$就可以生成带有前导的编号了

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

理论上,应该表现为[2]

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

如果想改变起点,不从1开始,可以使用 @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>

当然了,你也可以将多种修饰符混合使用[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>

Text: {}文本

可以使用大括号 {}为元素添加文本,就类似于模板的插入符

div{hello world}

表现为:

<div>hello world</div>

需要注意的是{text}类似于独立元素(例如div,p)。不过当它紧跟在元素后面时就有特殊的含义了

比如 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>

在第二个例子中的b标签是在a标签内。这就是不同点:当{text}紧跟在元素后面时,它没有改变父元素的上下文

可以再用一个比较复杂的例子来说明:

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

表现为:

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

在上面的例子里,我们为了让p标签包含Click me,所以用 > 进入子结构,因为现在的上下文已经是p标签的子结构,所以a标签也在p标签内

如果我们想让 pa 在同一层级,同时两者都包含文本的话,我们应该怎么做呢?

p{click me}+a{here}+{ to continue}

表现为:

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

这样p和a都在同一层级,就满足要求咯~

注意事项

以上所有的语法,都不能出现空格,除非是在特定的括号中。因为Emmet在遇到空格时,就认为已经结束,会停止解析。

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

推荐阅读更多精彩内容