clear:left 的作用是让当前元素上边界下移至所有左浮动元素下边界之下,仅影响自身位置计算,不改变浮动元素或撑开父容器。
clear:left 不是用来“修复浮动”的,而是让当前元素避开左侧浮动元素的顶部区域;它只移动自己,不改变浮动元素、也不撑开父容器。
它不是“把左边的浮动清掉”,而是告诉浏览器:“我的上边界,必须下移到所有 float:left 元素的下边界之下”。这个动作只影响当前元素的位置计算,和浮动元素本身无关。
float:left 元素,clear:left 会让当前元素下移,直到它顶部不再和其中任何一个重叠float:right 元素完全无感知——哪怕右边也堆着浮动块,它照样无视display:flow-root 或 overflow:hidden),内部浮动已被包裹,此时加 clear:left 往往没视觉变化典型场景是“局部避让”:你只担心被左边浮动干扰,但右侧仍需保持自由布局流。
clear:both 会破坏右侧排版)→ 给按钮加 clear:left
clear:left,更轻量clear:right 更自然;但若混用 LTR 内容与右浮动工具栏,clear:left 反而可能误伤右侧对齐很多人加了 clear:left 却没效果,问题往往不在属性本身,而在上下文。
立即学习“前端免费学习笔记(深入)”;
span、a 这类默认 display:inline 的元素直接设 clear:left —— 无效。必须先设 display:block 或改用 div 等块级标签clear:left 加在浮动元素自己身上(如 .logo { float:left; clear:left; })—— 没意义,浮动元素不响应 clear
zoom:1 或 height),clear:left 可能计算错位;安全起见,搭配 .clearfix 类或直接用现代 BFC 方案这是最容易混淆的一点:哪怕你给子元素加了 clear:left,只要父容器没触发 BFC,高度依然塌陷。因为 clear 只调整自身位置,不参与父容器高度计算。
display:flow-root、overflow:hidden 或伪元素 ::after 清除display:flow-root,子元素按需加 clear:left
clear:left 一劳永逸——它只是布局微调工具,不是浮动问题的终极解法