仅允许嵌套内联级元素(如、、),禁止块级元素(如、);必须作为或的直接子元素;只允许元数据元素(如、);须用SVG元素,自定义元素需符合其继承的内容模型。

HTML 元素嵌套没有“绝对标准写法”,只有符合 W3C 内容模型(content model)的合法嵌套才被解析器接受。非法嵌套不会报错,但会导致 DOM 结构异常、样式失效或可访问性问题。
哪些元素不能作为子元素出现在 <p></p> 里
<p></p> 是“短语级”(phrasing)内容容器,只允许嵌套内联级元素,比如 <span></span>、<em></em>、<strong></strong>、<a></a>、<img alt="html语句嵌套怎么写才标准_w3c嵌套规则介绍【介绍】" >。它不能包含块级元素,例如:
<div> —— 浏览器会自动闭合前面的 <code><p></p>,再开一个新<p></p>(或丢弃)-
<h2></h2>、<ul></ul>、<section></section>—— 同样触发隐式闭合,结构断裂 -
<p></p> <div>xxx</div>实际被解析为<p></p> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill10246" title="HTML Text Extract"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20dee630206.jpg" alt="HTML Text Extract" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill10246" title="HTML Text Extract">HTML Text Extract</a> <p>从HTML页面(URL、文件或标准输入)中提取主体内容文本,去除导航、页脚、广告和模板文本。可直接传递给readability_check或其他文本工具。</p> </div> <a href="/xiazai/skill10246" title="HTML Text Extract" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <div>xxx</div> <p></p> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p> - ✅ 正确:
<ul> <li>one</li> <li>two</li> </ul> - ❌ 错误:
<div><li>standalone</li></div>(<li>不能是<div> 的子元素) <li>⚠️ 注意:<code><ol></ol>和<ul></ul>也不能互相嵌套为直接子元素,但可以嵌套在<li>内部(即多层列表) - ❌
<div>、<code><p></p>、<header></header>出现在中会被浏览器移到开头(即使你没写标签) - ❌
<script></script>在中执行时,DOM 尚未构建,若操作document.body会报Cannot read property 'xxx' of null - ✅ 若需运行脚本,用
DOMContentLoaded监听,或加defer属性 -
<svg></svg>内部必须用 SVG 命名空间元素,比如<circle></circle>、<text></text>;混入<div> 会当作普通 HTML 元素渲染(可能位置错乱) <li>自定义元素若继承 <code>HTMLUnknownElement,浏览器不校验其子元素;但若扩展内置元素(如extends: "button"),则仍受原生按钮的内容模型限制(例如不能塞<div>) <li>用 <code>customElements.define()注册前,确保模板中嵌套符合预期语义,否则辅助技术(如屏幕阅读器)可能无法正确识别
<li> 必须直接放在 <ul></ul> 或 <ol></ol> 里
<li> 不是独立可渲染元素,它的语义依赖于父列表容器。单独写 <li>item</li> 是无效 HTML,在 W3C 验证器中会报 Element “li” not allowed as child of element “body”。
里只能放元数据类元素
的内容模型严格限定为“文档元数据”,浏览器只允许特定标签:如 <title></title>、<meta>、<link>、<style></style>、<script></script>(带 defer 或 type="module" 更稳妥)、<base> 等。
自定义元素和 SVG 嵌套要守规则
原生 HTML 规则不自动适用于 <svg></svg> 或自定义元素(<my-button></my-button>),但它们各自有约束:
最常被忽略的是:W3C 验证器(validator.w3.org)能立刻暴露嵌套错误,但开发者常依赖“看起来正常”就认为没问题 —— 实际上 DOM 树已变形,JS 查询、CSS 选择器、无障碍树都可能出偏差。

















