学会Emmet语法,告别手打HTML和CSS
前言
有时候,写前端代码更像是一种体力活。在前端的世界,你经常需要写出重复嵌套的HTML元素,冗长的CSS样式。俗话说:不会偷懒的程序员不是好程序员,如果你还在手写HTML和CSS代码,那你必须要知道Emmet,这个可以显著加快你的代码速度的插件。
介绍
Emmet是一个可以极大加速web开发工作流的工具。Emmet为HTML/XML和CSS设计了一套便于记忆和使用的缩写,你只需要键入这些缩写,就可以自动展开成相应的代码。
安装
Emmet支持几乎所有的编辑器。包括VSCode、Sublime、Atom、WebStorm、Vim、Emacs等等。
如果你是用的是宇宙第一编辑器——VSCode,那么你不需要做任何事,因为VSCode默认集成了Emmet,不需要安装任何VSCode扩展。Emmet功能会在html
、xml
、css
、sass
、php
等类型的文件中启用。详见https://code.visualstudio.com/docs/editor/emmet#_how-to-expand-emmet-abbreviations-and-snippets
如果你是其他编辑器的用户,这里可以查看完整的支持列表,以及他们的安装方式https://emmet.io/download/
HTML
HTML框架
只需输入一个!
,就可以生成完整的HTML页面框架:
1 |
|
可以根据需要修改和添加内容。
标签
键入标签名,按下Tab就可以生成闭合的一对标签。
例如div
-><div></div>
、button
-><button></button>
除此之外,有一些元素有自己的缩写,比如说ifr
->iframe
、src
->source
等
>
元素嵌套
使用>
可以进行元素嵌套。
1 | div>ul>li |
按下Tab会展开成
1 | <div> |
+
创造兄弟节点
+
可以创造兄弟节点,如
1 | nav>em+div>span+button |
会展开成
1 | <nav> |
^
回到上一层级
^
可以回到上一层,如
1 | nav>em+div>span+div>div^^button |
*
重复元素
如ol>li*5
会生成
1 | <ol> |
()
分组
用括号可以给元素分组,搭配+
和*
很好用
1 | div>(header>ul>li*2>a)+footer>p |
会变成
1 | <div> |
而(div>img)*5
会变成
1 | <div><img src="" alt=""></div> |
添加ID、class和属性
添加ID、class和属性的语法和CSS选择器类似
1 | div#header+div.page+td[title="Hello world!" colspan=3] |
将展开成
1 | <div id="header"></div> |
$
自动标注序号
代码中插入$
的部分将自动编号,如
1 | ul>li.item$*5 |
将生成
1 | <ul> |
如果使用多个$
,编号就会有前导零
1 | <ul> |
使用@N
可以指定编号从N
开始,
1 | ul>li.item$$@7*5 |
1 | <ul> |
使用@-
可以指定编号为倒序
1 | ul>li.item$$@-*5 |
1 | <ul> |
二者也可以结合使用
1 | ul>li.item$@-7*5 |
1 | <ul> |
{}
标签内容
用{}
可以添加标签内容
1 | a[href=https://cyrus28214.top]{点我} |
将生成
1 | <a href="https://cyrus28214.top">点我</a> |
省略标签名
如果打的字还想再少一点,可以使用隐式的标签名,Emmet会根据当前环境(如在什么元素内)来智能选择标签名,如下表
上下文 | 自动选择 | 例子 | 相当于 |
---|---|---|---|
行内环境 | span |
em>.info |
em>span.info |
ul 、ol |
li |
ul>.item*5 |
ul>li.item*5 |
table 、tbody 、tfoot |
tr |
table> |
ul>li.item*5 |
tr |
td |
tr>[colspan=2] |
tr>td[colspan=2] |
select 、optgrouop |
option |
select>#opt$*5 |
select>option#opt$*5 |
其他 | div |
.content |
div.content |
生成“Lorem Ipsum”
学习前端的朋友们应该都很熟悉“Lorem Ipsum”,这段文本被大量用于各种示例网站的文本填充中。
在Emmet里,可以用lorem
生成一段示例文本,如p*4>lorem
会展开成
1 | <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos unde neque placeat ipsam sed, vero officiis nobis ratione atque possimus quidem laudantium, quia impedit quas maiores maxime reprehenderit esse ut.</p> |
CSS
Emmet使用模糊搜索来确定CSS缩写,所以你可以自己摸索一个常用写法的缩写怎么写合适。
一些常见的属性缩写例子:m1
->margin: 1px;
、p2r
->padding: 2rem;
因为是模糊搜索,所以语法很灵活,想要写成m:1
和p-2r
也可以达到一样的效果。甚至,想要写overflow: hidden;
只需要打oh
,真是解放程序员的救星hhh。
px
是默认的单位,这里,m1
会变成1px
,要指定其他单位,至少要加一个字母上去。
但是也有一些属性是没有单位的,比如说z-index
,Emmet很智能,z1
会展开成z-index: 1;
多个值的属性
多个值的属性可以用-
隔开,m1-1
->maargin: 1px 1px;
如果属性有负数,就再加一个-
,如m-10--20
->margin: -10px -20px;
颜色值
长度不够的颜色值会自动重复,如:
#1
→#111111
#e0
→#e0e0e0
#fc0
→#ffcc00
!important
只要打!
就够了,p!+m10e!
将生成
1 | padding: ; |
行为(Action)
Emmet除了缩写的展开,还支持一些行为(Action),比如转到匹配的标签、将数字增加1、计算数学表达式等等,可以在官网查看详细地使用说明。如果你使用VSCode,按下Ctrl+Shift+P并输入“Emmet”就可以查看所有action。
注意事项
请注意,任何Emmet语法都不能加空格,因为Emmet把空格作为结束符