emmet 中 $ 仅在单个重复表达式内递增,换行或新表达式即重置;$ 输出无前导零数字,$$ 强制两位补零;跨行或多组连续编号原生不支持,嵌套中 $ 仅作用于最内层 *。

Emmet 中 $ 的基本行为:只在重复块内递增
Emmet 的 $ 不是全局计数器,它只在同一个重复表达式(如 div*3)内部按顺序生成 1、2、3。一旦换行或写新表达式,计数重置。比如:div.item$*2 展开为 <div class="item1"></div>
<div class="item2"></div>;但紧接着写 span$*2,结果仍是 <span1></span1><span2></span2>,不是 3 和 4。
$ 与 $$ 的区别:位数补零控制
单个 $ 输出无前导零的自然数(1, 2, 10);$$ 强制两位数格式(01, 02, 10)。这在生成 CSS 类名或 data 属性时很实用,避免排序错乱。例如:li.list-item$$*5 生成 <li class="list-item01">...<li class="list-item05">。注意:$$$ 是非法语法,Emmet 不支持三位及以上补零。
跨多行/多组连续编号无法原生实现
如果你希望 div$*2 + 换行 + section$*3 得到编号 1~5,Emmet 原生做不到。它把每行当作独立上下文。常见误操作是写成 div$*2+section$*3(用 + 连接),但这仍会输出 1,2,1,2,3。真正可行的替代路径只有两个:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 手动合并为单行表达式:
div$*2+section$*3改成(div$|section$)*5—— 但语法错误,Emmet 不支持这种混写 - 老实用单行:
div$*5然后手动替换前两行为div,后三行为section(适合少量) - 或放弃 Emmet,改用 VS Code 插件(如 “Increment Selection”)或正则批量处理
嵌套结构中 $ 的作用域限制
在嵌套写法里,$ 只对最内层的 * 生效。例如:ul>li.item$*3>span.text$*2,外层 li 编号是 1,2,3;每个 li 内的两个 span 都从 1 开始(即出现六次 1 和六次 2),不会累计到 4、5、6。如果真需要“全局嵌套序号”,得靠外部工具生成 HTML 后再处理,Emmet 本身不维护跨层级计数状态。
实际用的时候,先想清楚编号是否必须连续、是否跨元素类型——大多数场景下,按组独立编号反而更利于维护;强行追求 1~N 连续,后期增删中间项反而容易崩掉后续所有序号,不如留空让 JS 或 CSS 计数。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










