早期 CSS 佈局常用 float 浮動,父容器無法自動撐開高度(高度塌陷)。為解決此問題,演進出多種 Clearfix 技術。本文梳理從「空標籤法」到現代 display: flow-root 的完整演進。
.clear { clear: both; line-height: 0; }
在浮動元素後插入 <div class="clear"></div>。缺點:語義化差、增加無意義 DOM 節點、大型頁面產生大量空標籤。
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { display: inline-table; } /* IE/Mac */
* html .clearfix { height: 1%; } /* IE6 trigger hasLayout */
*+html .clearfix { height: 1%; } /* IE7 trigger hasLayout */
.clearfix { display: block; } /* 結束 IE/Mac hack */
:after 插入隱形塊級元素清除浮動。:after,需 zoom:1 或 height:1% 觸發 hasLayout。.clearfix:before,
.clearfix:after { content: ""; display: table; }
.clearfix:after { clear: both; }
.clearfix { *zoom: 1; } /* IE6/7 */
display: table 建立匿名 table-cell,形成 BFC(塊級格式化上下文),自然包含浮動。:before 解決 margin collapsing(外邊距塌陷)問題。.clearfix:after {
content: "\200B"; /* Unicode Zero Width Space */
display: block;
height: 0;
clear: both;
}
.clearfix { *zoom: 1; }
\200B 替代 content: ".",避免某些情況下顯示小圓點。visibility: hidden,代碼更短。.container { display: flow-root; }
.container { overflow: hidden; } /* 或 auto */
box-shadow、transform、下拉選單等超出容器內容會被裁切或出現滾動條。.container { display: flex; } /* 或 grid */
Clearfix 經歷了「空標籤 → 偽元素 Hack → BFC 科學化 → 原生屬性」四個階段。理解 BFC 原理(display: table、overflow、flow-root、flex 均可建立 BFC)才能根據專案環境做最優選擇。現代開發建議優先使用 Flex/Grid 避免浮動,次選 flow-root,最後才是 Clearfix Hack。