第一次在同事的屏幕上看到他用几个字母就生成了一大段HTML结构时,我盯着屏幕愣了三秒。那是我2015年刚入行前端时最震撼的时刻——原来代码可以像变魔术一样写。Emmet这个看似简单的工具包,彻底改变了我对编码效率的认知。七年过去了,我依然保持着每分钟60次以上的Emmet操作频率,这让我在竞标项目时总能比对手快30%完成原型开发。
div>ul>li*5这样的表达式就像乐高说明书:
> 表示父子关系,相当于HTML的嵌套+ 表示兄弟关系,相当于并列元素* 是乘法器,我常用它快速生成测试用的列表项^ 是升级符,能跳出当前嵌套层级实际案例:nav>ul>(li>a[href="#"]{菜单$})*5 会生成完整的导航菜单结构,带有序号和链接属性。我在电商项目里用这个模式批量生成过200+商品分类菜单。
方括号里的属性可以玩出很多花样:
input[type="text"][placeholder="请输入"] 生成标准输入框div[data-id="item$"]*3 生成带自增ID的数据容器a[href="https://example.com" target="_blank"] 带新窗口打开的链接有个冷知识:VS Code里可以用Tab在多个属性值间跳转修改,比鼠标操作快3倍。
Emmet的CSS缩写像速记密码:
m10-20 → margin: 10px 20px;p5e! → padding: 5em !important;bdrs50% → border-radius: 50%;我整理过全套属性对照表,比如:
| 缩写 | 全写 |
|---|---|
| fx | flex |
| jc | justify-content |
| ai | align-items |
| tac | text-align: center |
用Emmet可以3秒生成HTML5骨架:
! → Tab 生成完整文档结构,我修改了VS Code的snippet让它自动包含我的标准meta标签和favicon链接。
团队协作时,我们用这个模板:
code复制header>nav>ul>(li>a[href="#$"]{Section $})*5^^main.container>(section#sec$*3>h2{Title $}+p>lorem30)^footer
Bootstrap栅格系统可以这样生成:
.row>.col-md-4*3 配合 div[class="row mb-3"]>div[class="col-sm-6 col-md-4"]*3 能快速构建复杂响应式布局。
我的移动优先工作流:
对于Vue/React组件:
div.card>(img[src="/img/$.jpg"]+h3{Title}+p>lorem15) 生成卡片组件在React JSX中需要修改触发字符(VS Code设置):
json复制"emmet.triggerExpansionOnTab": true,
"emmet.includeLanguages": {
"javascript": "javascriptreact"
}
在settings.json添加:
json复制"emmet.extensionsPath": "~/emmet",
然后创建自定义snippets.json:
json复制{
"html": {
"snippets": {
"vue": "<template><div class='container'>|</div></template>"
}
}
}
不触发补全:
JSX语法异常:
javascript复制// 需要关闭自闭合标签转换
"emmet.syntaxProfiles": {
"javascript": "jsx",
"jsx": {
"self_closing_tag": true
}
}
性能优化:
"emmet.showExpandedAbbreviation": "never"Ctrl+Space手动触发建议用Stopwatch做的对照实验:
| 操作类型 | 传统方式 | Emmet | 效率提升 |
|---|---|---|---|
| 创建10个li项 | 28s | 3s | 833% |
| 构建Bootstrap卡 | 45s | 8s | 462% |
| 编写媒体查询 | 1m10s | 15s | 366% |
这些年在真实项目中的体会:
VS Code的进阶配置:
json复制{
"emmet.includeLanguages": {
"vue-html": "html",
"razor": "html"
},
"emmet.variables": {
"lang": "zh-CN",
"charset": "UTF-8"
}
}
WebStorm用户建议:
Emmet | CSS | Properties中的单位偏好团队规范建议:
btn-pri表示主按钮)我的项目目录结构示例:
code复制/emmet
├── team-snippets.json
├── css-abbr.md
└── cheatsheet.pdf
进阶资源推荐:
Cheat Sheet章节Emmet 2.0源码研究emmet-challenge代码游戏保持效率的秘诀:每周花10分钟练习新的缩写组合,我至今仍能发现新的效率技巧。比如最近发现的ul>li.item$$@-*5可以生成倒序编号列表,这在分页组件中非常实用。