Emmet: Lorem Ipsum 与隐式标签细节:占位文案生成与隐式规则汇总

最后更新:2026-10-13

前 9 课你学会了 Emmet 的全部 HTML 结构 + 文本 + 编号操作符,已经能写出任意嵌套、任意属性、任意编号、任意文案的 HTML。但还有两个"省字"的杀手锏没用——Lorem Ipsum 自动生成占位文案和隐式标签名的完整规则。前者让你 1 秒生成 30 词 Lorem 文本(不用手敲),后者让你在 ul/table/select 等父元素语境下省去 li/tr/td/option 这些标签名。本课把这两个机制讲透,作为 Phase 3 的收官。

1. 你将学到


2. 一个前端开发者的真实故事

(1) 痛点:占位文案 + 标签名重复,拖慢开发

Alice 在做博客模板的设计稿还原。她需要展示一个标准的"博客文章页"——标题、作者信息、正文 3 段、侧边栏标签云。但她不知道正文该写什么(设计稿阶段还没真实内容),又不想用乱码填充(看起来不真实)。

她先试着从 lipsum.com 复制 30 词 Lorem Ipsum 文本,粘贴到第一个 <p>。然后第二个 <p> 又复制一份(不一样的内容),粘贴。3 个段落复制了 3 次,浪费了 3 分钟。更糟的是:第二天她又要做同样的事情,再复制一遍——重复劳动。

更要命的是侧边栏的"标签云"——15 个 <a> 链接,每个指向 #tag-design、#tag-css 等。她手敲:

HTML
<a href="" id="tag-design">#design</a>
<a href="" id="tag-css">#css</a>
<!-- ... 13 more lines -->

15 行 HTML 花了 5 分钟。

最后是表格部分——5 行 4 列的"数据展示表格"。她想:表格里每行每列都长得一样,能不能只写 class 名(如 .row、.cell)让 Emmet 自动填上 <tr>、<td>?答案是肯定的(第 06 课已经讲过),但她还想要"在 select 里只写 .opt 自动变 <option>"、"在 dl 里只写 .term 自动变 <dt>"——这些场景她还没系统学过。

(2) Lorem + 隐式标签的解法

Emmet 提供两个互补机制解决 Alice 的问题:

Lorem Ipsum 生成器:在简写中写 lorem 或 loremN,Emmet 自动展开为 30 词(或 N 词)的 Lorem Ipsum 文案。Alice 的 3 段正文可以这么写:

TEXT
article>(p>lorem)*3

3 个 <p>,每个包含 30 词独立 Lorem 文案(不重复)。

隐式标签名完整规则:在特定的父元素语境下,省略标签名时 Emmet 会自动切换为合理的子元素标签——ul/ol 内隐式为 li、table 内隐式为 tr、tr 内隐式为 td、select 内隐式为 option、dl 内隐式为 dt/dd。Alice 的"标签云"可以这么写:

TEXT
ul.tag-cloud>(li.tag*3>a{#tag-$})

隐式标签让 70% 的标签名都不必重复输入。

Alice 用 Lorem + 隐式标签重写整个博客文章页:

TEXT
section.blog>(header>h1{博客标题: Emmet 提速 5 倍}+p.meta{作者 Alice · 2026-07-30})+(article>(p>lorem)*3)+(aside>ul.tag-cloud>(li.tag*3>a{#tag-$}))

Alice 验证之后惊呼:"3 段 Lorem 从 3 分钟降到 1 秒,15 个标签链接从 5 分钟降到 3 秒,标签名输入减少 70%。Emmet 在'占位文案 + 语义化标签'场景的提效是 50 倍以上。"

(3) 收益

Lorem Ipsum 和隐式标签规则是 Emmet 的"省字核心"。前者让你跳过"复制粘贴占位文案"步骤,后者让你跳过"重复输入常见标签名"。学完本课,Alice 写 3 段 Lorem 只要 1 秒,15 个标签链接只要 3 秒;同时这一课也是 Phase 3 的收官——下一阶段(Phase 4)将进入 CSS 简写,把 Emmet 的能力从 HTML 扩展到 CSS。


3. Lorem Ipsum 占位文案生成器

Lorem Ipsum 是排版行业的标准占位文案,自 1500 年起就被用于排版演示。Emmet 内置了 Lorem 生成器,可以用 lorem 或 lipsum 作为关键字(功能相同)。

(1) lorem 与 loremN 简写

简写 词数 展开
lorem 30 30 词 Lorem Ipsum 文案(默认长度)
lorem5 5 5 词 Lorem Ipsum 文案
lorem50 50 50 词 Lorem Ipsum 文案
lorem100 100 100 词 Lorem Ipsum 文案
📌 重点: lorem 后面紧跟的数字直接作为词数参数(如 lorem5 = 5 词)。如果不带数字,默认 30 词。词数单位按"空格分隔"计算,不按字符。实际展开内容在不同编辑器中可能略有差异(VSCode、WebStorm 都使用相同的 30 词基础段落),但词数严格按要求。

(2) Lorem 与其他操作符的组合

简写 展开结构 用途
p>lorem 1 个 <p> 含 30 词 Lorem 单一占位段落
p>lorem5 1 个 <p> 含 5 词 Lorem 短描述占位
(p>lorem)*3 3 个 <p>,每段独立 30 词 博客正文占位
p*3>lorem 3 个 <p>,每段独立 30 词(等价于上一行) 多段占位
ul.generic-list>lorem10.item*4 4 个 <li class="item">,每条 10 词 列表占位(官方案例)
article>section*3>p>lorem 3 个 <section>,各含 1 段 Lorem 章节占位

4. 隐式标签名:完整规则汇总

第 03 课和第 06 课已经讲过隐式标签名的概念。本课系统化整个规则集,并补全所有常见场景。

(1) 隐式标签速查表

父元素上下文 隐式标签 示例
无父元素(HTML) div .item → <div class="item">
ul、ol 内 li ul>.item → <ul><li class="item">
table、tbody、thead、tfoot 内 tr table>.row → <table><tr class="row">
thead、tbody、tfoot 内 th / td(视上下文) table>thead>.cell → <th class="cell">
tr 内 td table>tr>.cell → <td class="cell">
select、optgroup 内 option select>.opt → <option class="opt">
dl 内 dt / dd(依位置) dl>.term → <dt class="term">
无父元素(CSS 上下文) 智能推导(按属性名) fz16 → font-size: 16px
📌 重点: 上表是 Emmet 官方隐式规则全集。除了这些明确规则,其他父元素语境下省略标签名仍默认推断为 div。这就是"上下文隐式 vs 默认 div"的二元规则。

(2) 隐式规则常见场景对比

简写 展开 说明
.item(裸写) <div class="item"> 无父元素 → div
ul>.item <ul><li class="item"></li></ul> ul 上下文 → li
table>.row <table><tr class="row"></tr></table> table 上下文 → tr
table>tr>.cell <table><tr><td class="cell"></td></tr></table> tr 上下文 → td
select>.opt <select><option class="opt"></option></select> select 上下文 → option
dl>.term+.def <dl><dt class="term"></dt><dd class="def"></dd></dl> dl 上下文 → dt / dd
div>.item <div><div class="item"></div></div> div 不是列表父元素,仍默认 div

(3) 隐式 + class + id 组合

隐式标签可以与 .class #id [attr] 自由组合:

简写 展开 说明
ul>.item*3 3 个 <li class="item"> 隐式 + class + 乘法
table>#row1>.cell <table><tr id="row1"><td class="cell"></td></tr></table> 隐式 + id + class 跨层
select>#pick>.opt*3 <select id="pick"><option class="opt"></option>...</select> 隐式 + id + 跨层
dl>.term*3 3 个 <dt class="term"> dl 上下文 + class
⚠️ 注意: 隐式标签只在简写中"省略标签名"时生效。如果简写中显式写了标签名(如 div.item),隐式规则不生效,永远是 <div class="item">。这点第 03 课 FAQ 已强调。


5. 实战示例

下面 5 个示例覆盖 Lorem 和隐式标签的核心场景——从基础 Lorem 到指定词数,从多段到隐式 + class。

▶ 示例:基础 Lorem p>lorem(难度⭐)

1 个段落,30 词 Lorem Ipsum 文案——设计师最常用的占位符。

缩写:

HTML
p>lorem

展开:

HTML
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non quis exercitationem culpa nesciunt nihil aut nostrum explicabo reprehenderit optio amet ab temporibus asperiores quasi cupiditate. Voluptatum ducimus voluptates voluptas?</p>

输出:

TEXT
解析:lorem 是 Emmet 的占位文案生成器关键字。默认输出 30 词(按空格分隔计算)的 Lorem Ipsum 文案。p>lorem 把 lorem 放在 p 内,结果是单段 30 词的占位段落。实际词数因编辑器实现略有差异(VSCode/WebStorm 都用相同的 30 词基础段落)。如果想要其他长度,用 loremN 语法(如 lorem5 = 5 词)。

▶ 示例:指定词数 p>lorem5(难度⭐)

5 词 Lorem——短描述占位(如卡片副标题、按钮提示)。

缩写:

HTML
p>lorem5

展开:

HTML
<p>Lorem ipsum dolor sit amet.</p>

输出:

TEXT
解析:lorem5 中的 5 是词数参数。Emmet 输出 5 词 Lorem(恰好是 "Lorem ipsum dolor sit amet."——这是 Lorem Ipsum 的前 5 个词)。这个长度适合短描述场景:卡片副标题、按钮提示语、tagline。如果需要更长但比 30 词少,可以用 lorem10、lorem20 等。最大词数没有硬性上限(lorem1000 也能展开),但生成大量文本会减慢编辑器响应。

▶ 示例:多段落 Lorem (p>lorem)*3(难度⭐⭐)

3 个 <p>,每段独立的 30 词 Lorem——博客文章正文占位。

缩写:

HTML
(p>lorem)*3

展开(节选):

HTML
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui dicta minus molestiae vel beatae natus eveniet ratione temporibus aperiam harum alias officiis assumenda officia quibusdam deleniti eos cupiditate dolore doloribus!</p>
<p>Ad dolore dignissimos asperiores dicta facere optio quod commodi nam tempore recusandae. Rerum sed nulla eum vero expedita ex delectus voluptates rem at neque quos facere sequi unde optio aliquam!</p>
<p>Tenetur quod quidem in voluptatem corporis dolorum dicta sit pariatur porro quaerat autem ipsam odit quam beatae tempora quibusdam illum! Modi velit odio nam nulla unde amet odit pariatur at!</p>

输出:

TEXT
解析:(p>lorem)*3 让 p>lorem 这个模板重复 3 次,每次生成独立的 30 词 Lorem 文案(Emmet 的 lorem 是生成器而非固定文本)。3 段分别引用 Lorem Ipsum 库中的不同段落,文案不重复。这等价于 p*3>lorem——Emmet 解析 p*3>lorem 时也会让 p 重复 3 次,每次插入独立 lorem。括号的作用是让语义更清晰:在分组内重复 3 次整个段落模板。

▶ 示例:隐式 + class 汇总 ul>.item*3 + table>(.row>.cell*3)*2 + select>option*3(难度⭐⭐)

3 种隐式标签场景对照——1 个示例展示 ul、table、select 三个父元素的隐式规则。

缩写(3 个独立展开):

HTML
ul>.item*3

展开:

HTML
<ul>
  <li class="item"></li>
  <li class="item"></li>
  <li class="item"></li>
</ul>

缩写:

HTML
table>(.row>.cell*3)*2

展开:

HTML
<table>
  <tr class="row">
    <td class="cell"></td>
    <td class="cell"></td>
    <td class="cell"></td>
  </tr>
  <tr class="row">
    <td class="cell"></td>
    <td class="cell"></td>
    <td class="cell"></td>
  </tr>
</table>

缩写:

HTML
select>option*3

展开:

HTML
<select name="" id="">
  <option value=""></option>
  <option value=""></option>
  <option value=""></option>
</select>

输出:

TEXT
解析:三个缩写展示隐式标签的三大主战场。ul>.item*3:ul 是列表父元素,省略标签名时自动推断为 li,3 个 li 共享 class="item"。table>(.row>.cell*3)*2:table 上下文下 .row 隐式为 tr,.cell 隐式为 td,2 行 3 列的表格无需写任何 tr/td。select>option*3:select 上下文下省略标签名时自动推断为 option。注意:select 默认带 name="" 和 id=""(Emmet 预设),option 默认带 value=""——这些是 HTML5 标签的最小化属性。

▶ 示例:表单 + 隐式 form#login>(input[type=text name=user]+input[type=password name=pwd]+button{登录})(难度⭐⭐)

登录表单一行写完——隐式 + class + id + 属性 + 文本填充的组合。

缩写:

HTML
form#login>(input[type=text name=user]+input[type=password name=pwd]+button{登录})

展开:

HTML
<form id="login" action="">
  <input type="text" name="user">
  <input type="password" name="pwd">
  <button>登录</button>
</form>

输出:

TEXT
解析:本例综合了 Phase 1-3 的全部操作符——# (id)、> (嵌套)、+ (兄弟)、. (class)、[attr] (属性)、{} (文本填充)、() (分组)。form#login 给 form 加 id="login"(form 默认带 action="");括号内 3 个兄弟元素:input[type=text name=user]、input[type=password name=pwd]、button{登录}。button 默认无 type 属性(HTML5 button 默认 submit 行为,但显式 type 更清晰)。这是 Phase 3 收官的标准综合,展示了 Emmet 在表单场景的全部能力。

6. 完整示例:博客文章页 + Lorem + 隐式 + 编号

把 Lorem、隐式标签、{text}、$ 编号组合起来——一个完整的"博客文章页"骨架用一行简写写完。

▶ 示例:博客文章页骨架(难度⭐⭐)

缩写:

HTML
section.blog>(header>h1{博客标题: Emmet 提速 5 倍}+p.meta{作者 Alice · 2026-07-30})+(article>(p>lorem)*3)+(aside>ul.tag-cloud>(li.tag*5>a{#tag-$}))

展开:

HTML
<section class="blog">
  <header>
    <h1>博客标题: Emmet 提速 5 倍</h1>
    <p class="meta">作者 Alice · 2026-07-30</p>
  </header>
  <article>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui dicta minus molestiae vel beatae natus eveniet ratione temporibus aperiam harum alias officiis assumenda officia quibusdam deleniti eos cupiditate dolore doloribus!</p>
    <p>Ad dolore dignissimos asperiores dicta facere optio quod commodi nam tempore recusandae. Rerum sed nulla eum vero expedita ex delectus voluptates rem at neque quos facere sequi unde optio aliquam!</p>
    <p>Tenetur quod quidem in voluptatem corporis dolorum dicta sit pariatur porro quaerat autem ipsam odit quam beatae tempora quibusdam illum! Modi velit odio nam nulla unde amet odit pariatur at!</p>
  </article>
  <aside>
    <ul class="tag-cloud">
      <li class="tag"><a href="" id="tag-1">#tag-1</a></li>
      <li class="tag"><a href="" id="tag-2">#tag-2</a></li>
      <li class="tag"><a href="" id="tag-3">#tag-3</a></li>
      <li class="tag"><a href="" id="tag-4">#tag-4</a></li>
      <li class="tag"><a href="" id="tag-5">#tag-5</a></li>
    </ul>
  </aside>
</section>

输出:

TEXT
解析:本例是 Phase 3 收官的完整综合——同时调用了 Lorem 生成器、隐式标签(ul→li)、文本填充 {博客标题: Emmet 提速 5 倍}、编号 $-(tag-1 到 tag-5)。括号嵌套 3 层:外层 (header>...) + (article>...) + (aside>...) 让三块成为 section 的兄弟;内层 (p>lorem)*3 让 article 内有 3 段独立 Lorem;最内层 (li.tag*5>a{#tag-$}) 让每个 li 含 1 个 a,a 的 id 和文本都带 $- 编号。整个博客文章页 HTML 从 30+ 行手写降到 1 行 Emmet 简写。

❓ 常见问题

Q lorem 和 lipsum 有什么区别?
A 完全等价。Emmet 同时支持 lorem 和 lipsum 两个关键字作为 Lorem Ipsum 生成器入口,输出相同的占位文案。这是历史遗留——lipsum 是 Lorem Ipsum 网站 lipsum.com 的缩写,lorem 是行业通用名。两者可以互换使用,编辑器和版本之间不会有差异。推荐统一用 lorem(更短、更通用)。
Q lorem5 真的是 5 个词吗?还是字符数?
A 是词数(按空格分隔计算)。lorem5 展开为 5 个英文单词 Lorem ipsum dolor sit amet.。如果词数包含标点(如 Lorem, ipsum.),Emmet 按"空格分隔的 token"计算,仍是 5 个词。词数单位不依赖字符长度,所以 lorem5 和 lorem50 的视觉长度差异很大——前者 5 词约 28 字符,后者 50 词约 280 字符。
Q 隐式标签规则只对 HTML 默认标签生效吗?CSS 上下文也能用吗?
A HTML 上下文有完整的隐式标签规则集(见 ## 4 速查表)。CSS 上下文使用"属性名智能推导"——fz16 智能推导为 font-size: 16px,m10 智能推导为 margin: 10px。CSS 的"隐式"不是"省略标签名",而是"省略属性名,根据值推导属性名"。这是 Emmet 在 CSS 简写中的核心机制,将在 Phase 4(CSS 简写基础)系统讲解。
Q 能自定义隐式标签吗?比如想让 nav 内的 .item 隐式为 a?
A 可以通过 snippets.json 自定义。Emmet 的 snippets.json 是 JSON 格式的扩展配置文件,允许用户覆盖默认的标签展开(如让 select 默认带 multiple)和定义新的简写(如 vue → <div data-vue>)。但隐式标签规则的扩展需要在编辑器层(如 VSCode 的 Emmet 配置)进行,且不同编辑器的实现路径不同。本课仅作概念介绍,Phase 5(编辑器 Actions)会简单涉及 snippets.json。
Q 上面的 form#login 示例展开后只有 action="" 没有 method="",是漏写了吗?
A 不是漏写。Emmet 官方 snippets.json 给 form 的默认展开是 <form action="" method=""></form>(两个空属性都带上)。但主流编辑器(VSCode、WebStorm)的 Emmet 插件层在输出时省略了值为空的 method=""——因为空 method 在 HTML5 中等价于 "get"(默认值),冗余。所以你看到的是渲染后的实测结果,不是 Emmet 规范本身的输出。如果在纯命令行(如 emmet-cli)跑同样的简写,会得到带 method="" 的完整版本。记住这个差异,能帮你排查"为什么不同编辑器展开结果不一样"。

📖 小节


📝 作业

  1. 基础题(难度⭐):用一行 Emmet 简写分别展开为:(a) 一个段落 p>lorem(30 词 Lorem);(b) 一个 8 词段落 p>lorem8;(c) 一个下拉框 select>option*5(5 个 option,验证隐式)。
  2. 进阶题(难度⭐⭐):写一个"卡片网格"——一个 section 内含 6 张卡片,每张卡片有标题、3 词描述、按钮。要求:(a) 描述用 lorem3 生成;(b) 标题用 {Card $} 文本填充 + 编号;(c) 按钮用隐式标签 + {详情}。完全用一行 Emmet 简写,并解释为什么 lorem3 和 {Card $} 不会互相干扰。
  3. 挑战题(难度⭐⭐⭐):编写一个完整的"博客首页"骨架,包含:(a) header 含 logo + 3 个导航链接(用 nav>ul>li*3>a{导航 $});(b) main 内 3 篇文章卡片,每篇文章有标题、作者、3 段 Lorem;(c) aside 含标签云(5 个标签,用 ul.tag-cloud>li.tag*5>a{#tag-$});(d) footer 含版权信息 {© 2026 web-tutorial.com}。全部用一行 Emmet 简写(可以用 + 连接各块,或用括号分组),验证展开结果,并对比手写 HTML 50+ 行 vs 一行 Emmet 简写的时间差异。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏