Emmet: 嵌套:子级 `>` 与兄弟 `+` 操作符构建 HTML 树形结构

HTML 是一棵树:每个标签要么是另一个标签的子级(嵌套在里面),要么是兄弟(同级相邻)。>+ 就是这两个关系的简写。

1. 你将学到


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

(1) 痛点:手写嵌套 HTML 又慢又乱

Alice 在一家电商公司工作,最近要写一个产品落地页(landing page)。整个页面就 4 个区块:顶部导航条、英雄区(hero)、3 张特性卡片、页脚。她打开编辑器准备手写,结果一上来就面对 5 层的嵌套:

HTML
<body>
  <header>
    <nav>
      <ul>
        <li><a href=""></a></li>
      </ul>
    </nav>
  </header>
  ...
</body>

每写一层就要考虑"我现在在哪个标签里",每写一个 </li> 都要回头检查闭合顺序。她算了一下:写完这个 60 行的页面嵌套结构,需要花 15 分钟;其中 8 分钟花在"找正确的闭合位置"上。手写嵌套不仅慢,而且容易错——一不留神 </div> 就闭合错行了。

(2) >+ 的解法

Emmet 用两个操作符表达"父子"和"兄弟"关系,写法和 CSS 选择器一致——Alice 用一行简写就能展开整个导航:

TEXT 📖 仅展示
body>header>nav>ul>li*5>a

> 表示"嵌套一层",*5 表示"重复 5 次",每个 li 都自动带一个 a。从 5 层嵌套到一行简写,从 15 分钟到 8 秒。学完本课之后,你将能用 >+ 在一行内表达任意深度、任意分支的 HTML 树形结构。

(3) 收益

>+ 是 Emmet 的地基——后面要学的爬升 ^、乘法 *、分组 () 都是在它俩基础上叠加。掌握这两个操作符之后,Alice 写嵌套结构的速度提升 10 倍;写完就自动展开,没有"闭合顺序错乱"的烦恼。后续 4 课会逐层叠加 ^ * () . # $,学会本课是后面 4 课的前置条件。


3. 嵌套操作符 >:父元素直接包含子元素

> 表示下钻——简写中下一个元素是前一个元素的直接子节点。它是 Emmet 表达"父子嵌套"的核心符号,写法和 CSS 的子选择器完全一致。

简写片段 含义 视觉位置
div>span spandiv 的直接子节点 spandiv 往里缩一层
div>section>p psection 的子节点,sectiondiv 的子节点 缩进 2 层
nav>ul>li 3 层嵌套 缩进 3 层
💡 提示: > 不会改变前一个元素的位置,只会决定后续元素往哪一层"下钻"。一旦写了 >,所有后续元素(直到出现 ^ 或离开子树)都会在那一层。

(1) 单层嵌套示意

📝 说明: 上述树状图按本教程规范 §7(Mermaid 预算)要求已移除——仅 Lesson 06 允许使用 1 张 Mermaid 图。请结合上文 > 嵌套表与下文 + 兄弟表对比理解:> 形成父子关系(缩进一层),+ 形成平级兄弟(缩进相同)。

两个子元素都通过 > 进入 div,所以 pspan平级的兄弟(但它们是 div 的子节点)。


4. 兄弟操作符 +:同层级相邻元素

+ 表示兄弟——简写中下一个元素与前一个元素在同一层级,但位置上紧邻。它对应 CSS 的相邻兄弟选择器(Adjacent Sibling Selector)。

简写片段 含义 视觉位置
h1+p ph1 同级相邻 两者缩进相同
div+div 两个 div 平级 形成兄弟链
nav+main+aside 3 个兄弟平级 典型的三栏布局
📌 重点: +> 一起出现时,> 才是"下钻"信号,+ 只是"平级追加"。例如 a>b+c 表示:先下钻到 a 内部生成 b,然后留在 a追加 c,最终结构是 <a><b></b><c></c></a>


5. 实战示例

下面 5 个示例覆盖了 >+ 的全部核心场景——从最基础的"父子"到多层混合的"复杂树"。

▶ 示例:单层嵌套 nav>ul>li(难度⭐)

3 层垂直嵌套,最直观的"父子"演示。

缩写:

HTML
nav>ul>li

展开:

HTML
<nav>
  <ul>
    <li></li>
  </ul>
</nav>

输出:

TEXT 📖 仅展示
一个 3 层嵌套的导航骨架:nav 包 ul,ul 包 li。`>` 每出现一次就往里"缩进"一层。这个简写虽然简单,但展示了 Emmet 表达"父子"的最基本方式——所有更复杂的结构都是在这个基础上叠加其他操作符。

▶ 示例:兄弟元素 h1+p(难度⭐)

+ 让两个标签平级相邻。

缩写:

HTML
h1+p

展开:

HTML
<h1></h1>
<p></p>

输出:

TEXT 📖 仅展示
两个标签缩进相同、紧挨着出现在同一层。这种结构常用于文章页:标题下面紧跟段落。`+` 不会创建新的"外层容器",它只是把元素以兄弟方式放在前一个元素旁边。

> 下钻,+ 平级追加——一行写完 5 层混合结构。注意 pfooter 都属于 main 的子节点(+ 不会跳出当前层)。

缩写:

HTML
div>header>h1+nav+main>p+footer

展开:

HTML
<div>
  <header>
    <h1></h1>
    <nav></nav>
    <main>
      <p></p>
      <footer></footer>
    </main>
  </header>
</div>

输出:

TEXT 📖 仅展示
解析路径:div 之下是 header(>);header 之下有 h1、nav、main 三个兄弟(连续 +);最近下钻位置在 main,所以 main 内追加 p 和 footer。注意:footer 并非页面底部那个 footer——这里它成了 main 的子节点,是典型的 ">" 与 "+" 混合陷阱。要想 footer 与 header/main 平级,需要爬升符 ^(下一课学)。

▶ 示例:多层嵌套 + 乘法 article>section>p*3(难度⭐)

> 多层下钻 + *3 让最后的 p 重复 3 次。这里预览第 05 课的 * 操作符——完整的乘法规则下一课展开。

缩写:

HTML
article>section>p*3

展开:

HTML
<article>
  <section>
    <p></p>
    <p></p>
    <p></p>
  </section>
</article>

输出:

TEXT 📖 仅展示
`*3` 作用在 `p` 上,把 p 重复 3 次——注意 3 个 p 都是 section 的直接子节点,互为兄弟。`article>section` 是下钻两次(缩进 2 层),然后在 section 内部重复 3 个段落。如果想让 section 也重复,缩写应改为 `article>(section>p*3)*2`(用括号分组,第 06 课展开)。

经典的 HTML5 页面骨架——4 个顶层标签,body 是根,header/main/footer 三兄弟。

缩写:

HTML
body>header+main+footer

展开:

HTML
<body>
  <header></header>
  <main></main>
  <footer></footer>
</body>

输出:

TEXT 📖 仅展示
HTML5 标准三段式骨架:header 在上、main 在中、footer 在下,全部是 body 的直接子节点。这是大多数现代网站的"骨架简写",可以背下来作为任何页面的起点。后续在 header、main 内部再下钻填充内容即可。

6. 完整示例:一篇文章页骨架

>+ 组合起来,搭建一个语义完整的博客文章页骨架。

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

缩写:

HTML
body>header+main>article>(header>h1+p.time)+section*3>p+aside>ul>li*3+footer

展开:

HTML
<body>
  <header></header>
  <main>
    <article>
      <header>
        <h1></h1>
        <p class="time"></p>
      </header>
      <section>
        <p></p>
      </section>
      <section>
        <p></p>
      </section>
      <section>
        <p></p>
      </section>
      <aside>
        <ul>
          <li></li>
          <li></li>
          <li></li>
        </ul>
      </aside>
      <footer></footer>
    </article>
  </main>
  <footer></footer>
</body>

输出:

TEXT 📖 仅展示
解析这一行的关键:从 body 出发,先下钻到 main(>),main 内放 article(再次 >)。在 article 内用括号分组把 header(包含 h1 和 p.time)作为独立子树,再用 *3 重复 3 次 section(每个 section 内放 p)。最后用 + 平铺 aside 和 footer。注意:最外层的 footer 与 header/main 平级;article 内部还有一个 footer,缩进和顶层 footer 不同——这就是嵌套与兄弟混合的典型用法。

❓ 常见问题

Q >+ 哪个优先级高?
A > 总是先解析,遇到 > 就把后续元素塞进新一层;+ 只在当前层追加兄弟。如果要"先平铺再下钻"或"先下钻再爬升",需要用第 05 课的爬升符 ^ 或第 06 课的分组 ()
Q a>b+c 展开后 bc 是兄弟吗?
A 不是。a>b+c 展开为 <a><b></b><c></c></a>,b 和 c 都是 a 的子节点,互为兄弟,但它们都在 a 内部。+ 不会让 c 跳出 a。
Q 为什么 div>header>h1+nav+main>p+footer 里的 footer 会跑到 main 里面?
A 因为最近的 > 把上下文推进到了 main 内部,+ 默认在当前层(main 内)追加兄弟。所以 footer 成了 main 的子节点,而不是与 header/main 平级。这种"误嵌"的情况需要用爬升符 ^ 修正(第 05 课)。
Q 能不能用空格代替 >+
A 不行。空格在 Emmet 里是"停止符"(stop symbol)——Emmet 看到空格就停止解析。div pdiv>p 完全不同:前者不会展开,后者会展开成嵌套结构。如果想在编辑器里"格式化"缩写让它更好读,目前的官方方案是用括号分组(第 06 课)。

📖 小节


📝 作业

  1. 基础题(难度⭐):写出 4 个 Emmet 简写,分别展开为:(a) 一个 div 包含一个 p;(b) h1p 平级;(c) nav 包含 ulul 包含 3 个 li;(d) body 包含 headermainfooter 三兄弟。
  2. 进阶题(难度⭐⭐):分析缩写 div>(header>ul>li*2>a)+footer>p 的结构(不要急着写答案,先用纸笔画出层级),列出所有元素的父子关系。然后在编辑器中展开验证。
  3. 挑战题(难度⭐⭐⭐):用一行 Emmet 简写展开一个完整的"产品落地页"骨架——包含顶部导航、英雄区、3 张特性卡片、底部页脚;解释为什么简写里的 >+ 数量决定了最终嵌套深度,并写出至少 3 种等效的简化版本(用括号或爬升)。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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