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

前 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 生成器:在简写中写 loremloremN,Emmet 自动展开为 30 词(或 N 词)的 Lorem Ipsum 文案。Alice 的 3 段正文可以这么写:

TEXT 📖 仅展示
article>(p>lorem)*3

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

隐式标签名完整规则:在特定的父元素语境下,省略标签名时 Emmet 会自动切换为合理的子元素标签——ul/ol 内隐式为 litable 内隐式为 trtr 内隐式为 tdselect 内隐式为 optiondl 内隐式为 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 生成器,可以用 loremlipsum 作为关键字(功能相同)。

(1) loremloremN 简写

简写 词数 展开
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">
ulol li ul>.item<ul><li class="item">
tabletbodytheadtfoot tr table>.row<table><tr class="row">
theadtbodytfoot th / td(视上下文) table>thead>.cell<th class="cell">
tr td table>tr>.cell<td class="cell">
selectoptgroup option select>.opt<option class="opt">
dl dt / dd(依位置) dl>.term<dt class="term">
无父元素(CSS 上下文) 智能推导(按属性名) fz16font-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 loremlipsum 有什么区别?
A 完全等价。Emmet 同时支持 loremlipsum 两个关键字作为 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 个词。词数单位不依赖字符长度,所以 lorem5lorem50 的视觉长度差异很大——前者 5 词约 28 字符,后者 50 词约 280 字符。
Q 隐式标签规则只对 HTML 默认标签生效吗?CSS 上下文也能用吗?
A HTML 上下文有完整的隐式标签规则集(见 ## 4 速查表)。CSS 上下文使用"属性名智能推导"——fz16 智能推导为 font-size: 16pxm10 智能推导为 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.jsonform 的默认展开是 <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%

🙏 帮我们做得更好

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

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