将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
浏览器会自动拆开p内嵌的div、h2等块级元素,导致dom与源码不一致;应通过elements面板观察真实结构、运行document.queryselectorall('p > *')检查非法子元素、或edit as html测试跳变来识别,并用section/article替代p实现合法嵌套。

标签里塞了
、这类块级元素,浏览器会直接拆开,你写的结构和实际 DOM 完全不是一回事——重构时不能只改样式或加 display: inline,必须动结构。
怎么一眼识别哪些 p 已被浏览器悄悄拆开
别信源码缩进,信 Elements 面板里真实渲染的树形结构:
– 如果某个 div 看起来“挂在” p 下面,但点击展开后它不在 p 的子节点列表里,而是和 p 并列;
– 在控制台运行 document.querySelectorAll('p > *'),结果里出现 DIV 或 H2,说明你看到的是修复后的 DOM,原始嵌套已失效;
– 右键某个 p → “Edit as HTML”,删一个空格再回车:如果里面的内容突然“跳出去”或缩进重排,就是非法嵌套的铁证。
哪些嵌套写法一定触发自动闭合
以下写法在解析阶段就会被浏览器强制中断 p,并把后续块级元素提到外面:
– <p>文字</p>
<div>内容</div>
– <p></p>
<h2>标题</h2>
<p>段落</p>
– <p><section><p>正文</p></section></p>
– <p></p>
<ul><li>项</li></ul>
注意:img 和 a 是合法的,哪怕 a 里包了 div(HTML5 允许),但外层 p 仍不能直接包 div。
重构时该用什么替代 p 包块级结构
多数情况你根本不需要 p,只是缺个容器:
– 要语义+结构:用 <section></section> 或 <article></article> 替代外层 div,它们天然支持任意嵌套;
– 纯布局分组:用 <div class="paragraph-group">,然后通过 CSS 控制间距或背景;<br>– 图文组合场景:用 <code><figure></figure> + <figcaption></figcaption>,比硬套 p 更准确;
– 模板中动态拼接时:先组装好全部内容(含 div、h2),再整体包裹进 p —— 别在 p 标签内开 if 或循环块。
自动化检查能卡住哪些漏网之鱼
靠肉眼容易漏掉 SSR 模板、JSX 中拼接的字符串、CMS 导出的 HTML:
– 在 CI 中加 tidy -errors 或 nu-html-checker,它们会明确报出 “Element div not allowed as child of element p”;
– VS Code 配合 html-validate 插件,启用规则 no-inline-element-with-block-content;
– 提交前跑一次 W3C Validator(validator.w3.org),它能定位到具体行号和错误类型。
真正难处理的不是单点修复,而是团队里有人习惯性“套个 p 看起来整齐”,结果在 hydration 阶段因 DOM 不一致导致 React/Vue 组件错位——得从提交前 lint 和 PR 检查卡住。
怎么一眼识别哪些 p 已被浏览器悄悄拆开
别信源码缩进,信 Elements 面板里真实渲染的树形结构:
– 如果某个 div 看起来“挂在” p 下面,但点击展开后它不在 p 的子节点列表里,而是和 p 并列;
– 在控制台运行 document.querySelectorAll('p > *'),结果里出现 DIV 或 H2,说明你看到的是修复后的 DOM,原始嵌套已失效;
– 右键某个 p → “Edit as HTML”,删一个空格再回车:如果里面的内容突然“跳出去”或缩进重排,就是非法嵌套的铁证。
哪些嵌套写法一定触发自动闭合
以下写法在解析阶段就会被浏览器强制中断 p,并把后续块级元素提到外面:
– <p>文字</p>
<div>内容</div>
–
<p></p>
<h2>标题</h2>
<p>段落</p>–
<p><section><p>正文</p></section></p>–
<p></p>
<ul><li>项</li></ul>注意:
img 和 a 是合法的,哪怕 a 里包了 div(HTML5 允许),但外层 p 仍不能直接包 div。
重构时该用什么替代 p 包块级结构
多数情况你根本不需要 p,只是缺个容器:
– 要语义+结构:用 <section></section> 或 <article></article> 替代外层 div,它们天然支持任意嵌套;
– 纯布局分组:用 <div class="paragraph-group">,然后通过 CSS 控制间距或背景;<br>– 图文组合场景:用 <code><figure></figure> + <figcaption></figcaption>,比硬套 p 更准确;
– 模板中动态拼接时:先组装好全部内容(含 div、h2),再整体包裹进 p —— 别在 p 标签内开 if 或循环块。
自动化检查能卡住哪些漏网之鱼
靠肉眼容易漏掉 SSR 模板、JSX 中拼接的字符串、CMS 导出的 HTML:
– 在 CI 中加 tidy -errors 或 nu-html-checker,它们会明确报出 “Element div not allowed as child of element p”;
– VS Code 配合 html-validate 插件,启用规则 no-inline-element-with-block-content;
– 提交前跑一次 W3C Validator(validator.w3.org),它能定位到具体行号和错误类型。
真正难处理的不是单点修复,而是团队里有人习惯性“套个 p 看起来整齐”,结果在 hydration 阶段因 DOM 不一致导致 React/Vue 组件错位——得从提交前 lint 和 PR 检查卡住。










