html结构崩溃主因是语义错乱、嵌套过深(≥6层)、节点爆炸及标签滥用,导致浏览器解析异常,使css和js失效;作为唯一主内容区,不得重复或嵌套,因其是语义锚点。

排版崩溃不是CSS写错了,而是HTML结构本身已经扛不住了——语义错、嵌套深、节点多、标签滥用,浏览器解析时直接“懵”,后续样式和JS全成无根浮萍。
为什么不能重复或嵌套在里
<main></main>是页面唯一主内容区的语义锚点,不是另一个
- 重复使用
<main></main>会触发W3C验证警告,部分辅助技术可能跳过第二个<main></main>或报错 - 把它塞进
<header></header>或<nav></nav>里,等于告诉机器“导航栏就是主要内容”,逻辑崩坏,焦点流错乱 - 动态插入内容时,如果新模块也带
<main></main>,旧的还没移除,DOM里就出现两个<main></main>——JS选择器document.querySelector('main')返回的永远是第一个,后续操作全偏移
嵌套超过三层就该警惕了
不是“不能嵌套”,而是每多一层,就多一次DOM查找开销、一次样式继承计算、一次重排风险。尤其在列表渲染、卡片组件里,很容易滚雪球。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 检查开发者工具的Elements面板,看有没有连续3层以上
<div>套着<code><div>再套<code><div> <li>常见陷阱:<code><section></section>里包<div class="wrapper">,里面再套<code><div class="inner">——其实<code><section></section>自身就能当容器,加class足矣 - Flex/Grid布局能替代90%的包裹层,比如用
display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))直接撑起卡片流,不用任何额外<div> <h3>DOM节点超50个时,必须分块或虚拟化</h3> <p>单个容器下子元素超过50个,不是“有点慢”,而是渲染引擎开始降级处理:样式计算变慢、滚动卡顿、键盘Tab焦点跳变、甚至某些低端安卓WebView直接卡死。</p> <ul> <li>列表页、评论流、商品网格都是高危场景;别等用户滑到第100条才发现问题</li> <li>用<code><section></section>把长列表按逻辑切分,比如每20条包一层,既保持语义,又让DOM树更平衡 - 真要渲染几百项?别硬塞DOM,用IntersectionObserver + 动态加载,或直接上虚拟滚动(如
react-window或原生scroll-driven animations配合content-visibility: auto)
图片没设宽高属性,就是埋了个抖动雷
没width和height的<img>或<iframe></iframe>,加载前浏览器完全不知道占位空间。图片一进来,下面所有内容被往下顶,用户正在看的文字突然消失又回来——这不是动画,是排版崩溃。
- 哪怕用
aspect-ratio: 16/9也比不设强,但最稳还是显式写width和height -
<picture></picture>里每个<source></source>都得配对应尺寸,否则切换时照样抖 - SVG作为
<img>引入时,若原始文件没声明viewBox或宽高,也要手动补width/height,不然缩放失真+布局跳变
真正难的不是写对某个标签,而是每次敲<div>前问一句:这个容器,有没有不可替代的语义或布局职责?没有,就删掉。</div>










