兩者作用完全不同,常被混淆是因為都能讓父元素「包住」浮動子元素,但機制不同:
| 屬性 | 主要作用 | 副作用/限制 |
|---|---|---|
overflow: hidden | 剪切超出盒子的內容,**觸發 BFC(塊級格式化上下文)**,從而包含內部浮動 | 會隱藏溢出內容(如陰影、下拉菜單、absolute 定位元素超出部分) |
clear: both | 強制當前元素下移,直到左右兩側無浮動元素,**不觸發 BFC** | 需額外添加空標簽或偽元素,不影響溢出顯示 |
.clearfix::after {
content: "";
display: table; /* 或 block */
clear: both;
}
.clearfix { *zoom: 1; } /* IE6/7 觸發 hasLayout */
將 .clearfix 加在父容器上,語義清晰、無副作用、兼容性佳。
<div class="clear"></div>,維護成本低。現代佈局首選 display: flex 或 grid,天然包含浮動、無外邊距塌陷,徹底避開此類問題。