::after能清除浮动是因为它生成的内容位于父容器末尾并触发clear: both,而::before在开头无法约束后续浮动;必须配合content: “”、display: table和clear: both才有效。
为什么::after能清除浮动,而不是::before
因为::after生成的内容默认插入在父容器的末尾,刚好压在浮动元素之后;而::before插在开头,对后续浮动毫无约束力。关键不是“伪元素”本身,而是它所处的位置和触发的clear行为。
必须配合content: ""(空字符串也行,但不能省略),否则伪元素不渲染,clear就无效。另外,display推荐用table或block,避免inline导致clear失效。
::after清除浮动的标准写法与必要参数
最简可靠写法如下,缺一不可:
.clearfix::after {
content: "";
display: table;
clear: both;
}
注意点:
立即学习“前端免费学习笔记(深入)”;