空标签法不推荐,因其语义污染、维护成本高、兼容性隐患;clear: both仅对块级兄弟元素生效,须置于浮动元素后且需height: 0等补丁;现代应优先用display: flow-root或伪元素清除。

直接加空标签 <div style="clear: both"></div> 能起作用,但它是过时且高风险的写法,不建议在新项目中使用。
为什么空标签法现在不推荐
它看似简单,实则引入三个硬伤:语义污染、维护成本高、兼容性隐患。
- 空
<div> 没有任何语义,纯为“修复布局”而存在,违背 HTML 结构即内容的原则<li>每个浮动容器都要手动加一行无意义 DOM,后期改布局时极易漏删或重复添加</li> <li>IE6/7 下若该空标签没设 <code>zoom: 1或height: 0,仍会塌陷;而现代框架(如 React/Vue)里动态渲染时,空标签还可能被优化掉 - 写在浮动子元素自己身上(如
.item { float: left; clear: both; })完全无效 - 写在父容器上(如
.parent { clear: both; })也无效,因为clear不影响子元素高度计算 - 必须加在浮动元素的**直接后续兄弟节点**上,且该节点需是块级(
display: block或table) - 若该兄弟节点有默认
margin-top或line-height,会额外撑开空白,建议显式设height: 0; font-size: 0; - 空标签必须紧跟在最后一个浮动子元素闭合标签之后,不能被其他浮动干扰
- 必须设
clear: both,且不能只靠它——还要加height: 0; overflow: hidden;防止默认行高撑开 - IE6/7 必须补
zoom: 1触发 hasLayout,否则仍塌陷 - 不能用
<span></span>这类内联元素,必须是块级标签(<div>、<code><p></p>等)真正该盯住的不是“怎么清”,而是“要不要清”
只要父容器用了
display: flex或display: grid,子元素根本不会脱离文档流,clear和clearfix全部失效且多余;如果只是图文环绕(比如<img>浮左+文字绕排),直接用float: left+shape-outside,也不需要清除。空标签法现在存在的唯一合理场景,是维护一段无法重构的 IE8 旧代码。除此之外,任何新写的 HTML 都不该再出现
<div style="clear:both"></div>。
clear: both 必须加在谁身上才有效
它只对自身生效,且仅作用于块级元素的外边距计算——不是“清掉浮动”,而是“让当前元素避开前面所有浮动”。
如果非得用空标签,怎么写才不出错
仅限老项目维护或 IE8- 场景下兜底,需同时满足以下四点:











