VSCode的Emmet缩写功能通过简短语法规则快速生成HTML/CSS代码,如div#id.class生成带ID和类的div,m10展开为margin:10px;支持嵌套、重复、自定义缩写,并可通过settings.json扩展,大幅提升前端开发效率。

VSCode 的 Emmet 缩写功能,说白了,就是把那些又长又重复的 HTML/CSS 代码,用几个字符的“魔法咒语”瞬间变出来。它能让你在编写前端代码时,双手几乎不用离开键盘,大大减少敲击次数和上下文切换的烦恼,效率提升肉眼可见。对我而言,它不是一个可选项,而是编写前端代码的标配。
解决方案
利用 VSCode 的 Emmet 缩写功能,其实就是学习一套简短的语法规则,然后键入这些规则,再按下
Tab键(或
Enter,取决于上下文和设置),Emmet 就会自动展开成完整的代码结构。这套规则涵盖了 HTML 标签、ID、类名、属性,以及 CSS 属性和值。比如,想创建一个带有 ID 和类的 div,你只需要敲
div#myId.myClass,然后
Tab,瞬间就成了
。CSS 方面,输入
m10展开成
margin: 10px;,
p20-30变成
padding: 20px 30px;,这种即时反馈和代码补全的快感,一旦习惯了,就真的回不去了。它内置在 VSCode 里,通常开箱即用,无需额外安装插件。
VSCode Emmet 缩写有哪些常用的 HTML 技巧?
在 HTML 编写上,Emmet 的强大之处在于它能让你像搭积木一样快速构建页面结构。这不仅仅是少敲几个字那么简单,它更像是一种思维模式的转变,从“我要写一个 div”变成“我要一个 div 里面有 ul,ul 里有 3 个 li,每个 li 里再放一个链接”。
比如,最基础的:
立即学习“前端免费学习笔记(深入)”;
更进一步,结合 ID 和 Class:
div#header
:div.container
:div#main.wrapper
:
嵌套与兄弟元素:
ul>li
:div+p
:header+main+footer
:
重复元素:
ul>li*5
:生成一个ul
里面包含 5 个li
。div.item*3
:生成 3 个带有item
类的div
。
带文本内容的元素:
p{Hello World}:Hello World
a[href="https://example.com"]{Visit Us}:Visit Us
结合起来,你可以这样:
div.wrapper>header+main>section.content>article*2>h2{Title $}+p{Paragraph $}
这个缩写会生成一个 wrapper类的大 div,里面有
header和
main。
main里有一个
content类别的
section,
section里有两个
article,每个
article都包含一个
h2标题(带序号)和一个
p段落(带序号)。这种复杂的结构,手动敲得人头皮发麻,Emmet 几秒钟搞定。
如何高效利用 Emmet 缩写编写 CSS 样式?
Emmet 在 CSS 领域的表现同样出色,它将常用的 CSS 属性和值简化到了极致,让你在样式文件中飞速穿梭。很多时候,你甚至不需要记住完整的属性名,几个字母就能搞定。
一些高频使用的缩写:
m
:margin: ;
p
:padding: ;
d
:display: ;
pos
:position: ;
bgc
:background-color: ;
bd
:border: ;
fl
:float: ;
fz
:font-size: ;
lh
:line-height: ;
w
:width: ;
h
:height: ;
结合数值和单位: Emmet 智能识别数字和常见的单位。
m10
:margin: 10px;
p20-30
:padding: 20px 30px;
(上下20px,左右30px)w100p
:width: 100%;
h50v
:height: 50vh;
fz16
:font-size: 16px;
lh1.5
:line-height: 1.5;
c#f00
:color: #f00;
bg#eee
:background: #eee;
特殊的缩写,比如定位:
posa
:position: absolute;
posr
:position: relative;
t0
:top: 0;
l0
:left: 0;
一些复合属性的缩写:
bd1s#ccc
:border: 1px solid #ccc;
bsd
:box-shadow: ;
使用 Emmet 编写 CSS 时的关键在于,你不需要先打属性名再打冒号,直接打缩写然后
Tab,Emmet 会自动补全冒号和分号,并将光标定位到值的位置,大大减少了来回切换的动作。例如,当你需要给一个元素设置样式:
.card {
dfl // display: flex;
jcfs // justify-content: flex-start;
aic // align-items: center;
m10 // margin: 10px;
p15 // padding: 15px;
bgc#f9f9f9 // background-color: #f9f9f9;
bd1s#ddd // border: 1px solid #ddd;
br5 // border-radius: 5px;
}这种编写方式,熟练之后,你会发现写 CSS 简直像在打字游戏。
Emmet 缩写在 VSCode 中如何自定义和扩展?
Emmet 虽然强大,但它也不是万能的,总有些时候,默认的缩写不符合你的习惯,或者你需要一些特定的、项目相关的缩写。VSCode 提供了很好的自定义和扩展机制。
主要通过修改 VSCode 的
settings.json文件来实现。你可以在这里添加自定义的 Emmet 规则。打开命令面板(
Ctrl+Shift+P或
Cmd+Shift+P),输入
Preferences: Open User Settings (JSON)。
在
settings.json中,你可以找到或添加
emmet.syntaxProfiles和
emmet.preferences等配置项,但最常用的自定义方式是
emmet.extensionsPath和
emmet.snippets。
1. emmet.snippets
:直接在 settings.json
中定义少量自定义缩写
这个配置项允许你为特定的语言模式(比如
html或
css)添加自定义的缩写。
{
"emmet.snippets": {
"html": {
"defs": "- ${1}
- ${2}
这里我定义了
defs来快速生成定义列表,
btn来生成一个带有 Bootstrap 风格的按钮,并提供了几种类名选项。CSS 中则定义了
dflex来快速生成一个居中的 flex 容器,
fsz来快速设置字体大小。
$符号用于定义光标停止的位置,
$1是第一个停止点,
${1:默认值} 可以提供默认值。|option1,option2|则是一个下拉选项列表。
2. emmet.extensionsPath
:通过外部文件扩展 Emmet
如果你有大量自定义缩写,或者想在多个项目之间共享,将它们放到外部文件中是更好的选择。
首先,创建一个文件夹,比如
~/.emmet(macOS/Linux)或
C:\Users\YourUser\.emmet(Windows)。 然后,在
settings.json中指向这个路径:
{
"emmet.extensionsPath": [
"C:\\Users\\YourUser\\.emmet" // Windows 示例
// 或者 "/Users/youruser/.emmet" // macOS 示例
]
}在这个文件夹里,你可以创建
snippets.json文件,结构和
emmet.snippets类似:
// snippets.json
{
"html": {
"mycard": "${1:Header}${2:Body}"
},
"css": {
"gridc": "display: grid; grid-template-columns: repeat(${1:2}, 1fr); gap: ${2:10}px;"
}
}这样,Emmet 就会加载这些自定义的缩写了。
3. emmet.includeLanguages
:在非标准文件类型中启用 Emmet
有时候,你可能在 Vue 的
settings.json中添加:
{
"emmet.includeLanguages": {
"vue-html": "html",
"javascriptreact": "html",
"typescriptreact": "html",
"blade": "html" // Laravel Blade 模板
}
}这告诉 VSCode,在
vue-html模式下,Emmet 应该使用
html的规则来展开。
自定义 Emmet 的过程,有点像给自己量身定制一套工具。它能让你的工作流更加顺畅,但也要注意,不要过度自定义,以免在团队协作时造成困扰,或者离开你的开发环境就寸步难行。找到那个最适合自己的平衡点,才是最重要的。











