这篇文章首发于我的博客,转载可注明出处。
前端开发过程中总避免不了要写一些HTML和CSS,于是Emmet应运而生,它可以极大的简化我们写代码的流程,提高书写的效率。
Emmet(以前名为Zen Coding)是一套面向文本编辑器的插件,它允许通过内容辅助高速度的编写和编辑HTML、XML、XSL和其他结构化的代码格式。Emmet目前支持多种编辑器,包括一些主流编辑器和IDE,在线编辑器以及第三章插件的的支持。
我用vim来安装和使用Emmet,安装方法见emmet-vim的github文档。
安装好后,用 vim index.html
新建文件,键入
html:5
按一下
(先按Ctrl+y
,松开后再按,
),或者一些编辑器只需要按下Tab
就可以了,然后就会惊奇发现,生成了下面的代码。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title>
head>
<body>
body>
html>
原本需要三四分钟的头部被我们几秒搞定了。
再来试一试这个命令
div.hander+div#main$0.column*3^div.footer
发现很轻松就生成了一个圣杯布局的html结构。
<div class="hander">div>
<div id="main1" class="column">div>
<div id="main2" class="column">div>
<div id="main3" class="column">div>
<div class="footer">div>
现在我们来总结一下刚刚的流程。
打开HTML文件=>键入语法命令=>按下
=>生成代码
,
需要注意的一点是Emmet的语法中不允许有空格,比如前面的命令为了好看写成
div.hander + div#main$0.column*3 ^ div.footer
**
以上全部就是Emmet的工作方式,超简洁的工作流完成重复的工作。
下面列出了HTML简写规则。
我们来逐步体验Emmet的优雅和强大。
html:5
或 !
生成HTML5的初始结构html:xt
生成HTML4过渡型html:4s
生成HTML4严格型html:xt
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>title>
head>
<body>
body>
html>
html:4s
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>title>
head>
<body>
body>
div#name.user
<div id="name" class="user">div>
div#name.user.user-adim
<div id="name" class="user user-admin">div>
div+p+a
<div>div>
<p>p>
<a href="">a>
div>ul>li
<div>
<ul>
<li>li>
ul>
div>
div>ul>li^p
一个^
表示向上一层
<div>
<ul>
<li>li>
ul>
<p>p>
div>
div>ul>li^^p
两个^
表示向上两层
<div>
<ul>
<li>li>
ul>
div>
<p>p>
ul>li*5
<ul>
<li>li>
<li>li>
<li>li>
<li>li>
<li>li>
ul>
div+div>ul>li+div
未分组,最后的div
将和li
平级
<div>div>
<div>
<ul>
<li>li>
<div>div>
ul>
div>
div+(div>ul>li)+div
分组以后最后一个div
将和第一个div
平级
<div>div>
<div>
<ul>
<li>li>
ul>
div>
<div>div>
a[href="http://bubkoo.com" title="bubkoo's blog"]
属性可以写在[ ]
内部
<a href="http://www.google.com" title="google">a>
ul>li.list-item$
一个$
可以生成递增的一位数字
<ul>
<li class="list-item1">li>
<li class="list-item2">li>
<li class="list-item3">li>
<li class="list-item4">li>
<li class="list-item5">li>
ul>
ul>li.list-item$$
一个$
可以生成递增的两位位数字
<ul>
<li class="list-item01">li>
<li class="list-item02">li>
<li class="list-item03">li>
<li class="list-item04">li>
<li class="list-item05">li>
ul>
ul>li.list-item$@3*5
后面加@N可以从数字N计起
<ul>
<li class="list-item3">li>
<li class="list-item4">li>
<li class="list-item5">li>
<li class="list-item6">li>
<li class="list-item7">li>
ul>
ul>li.list-item$@-3*5
后面加@-N可以从数字N反向计起
<ul>
<li class="list-item7">li>
<li class="list-item6">li>
<li class="list-item5">li>
<li class="list-item4">li>
<li class="list-item3">li>
ul>
div>a[href="http://www.google.com"]{google}
文本内容可以用{ }
包含起来
<div><a href="http://www.google.com">googlea>div>
link:favicon
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
link:css
<link rel="stylesheet" href="style.css" media="all">
a:link
<a href="http://">a>
form:get
<form action="" method="get">form>
form:post
<form action="" method="post">form>
input:text
<input id="" type="text" name="">
input:password
<input id="" type="password" name="">
script:src
<script src="">script>
w100
属性名加属性值,单位默认为px
width: 100px;
w100p
表示width: 100%;
w100e
表示width: 100em;
w100x
表示width: 100ex;
m10-10--20
中间加-
连接多个属性,--
中第二个-
表示负数
margin: 10px 10px -20px;
h10e+w100p
+
可连接两个属性
height: 10em;
width: 100%;
!
!important
@f
生成字体代码结构
@font-face {
font-family: ;
src: url();
}
@f+
生成加强版
@font-face {
font-family: 'FontName';
src: url('FileName.eot');
src: url('FileName.eot?#iefix') format('embedded-opentype'),
url('FileName.woff') format('woff'),
url('FileName.ttf') format('truetype'),
url('FileName.svg#FontName') format('svg');
font-style: normal;
font-weight: normal;
}
}
-foo
属性前面加-
,即可添加浏览器前缀
-webkit-font-smooth: ;
-moz-font-smooth: ;
-o-font-smooth: ;
-ms-font-smooth: ;
font-smooth: ;
另外,如果输入的缩写不在Emmet中,它将会匹配最接近的那个。
曾经沧海难为水,除却巫山不是云。用过高效编辑工具以后,对各类低效工具都感觉不足以顾了。