浮动过后的任何元素都成了block level element
所有内容在浮动,如果不处理,那么就会很可怕。幸运的是有一个属性叫做clear,当将它应用到一个元素时,它基本上说"停止浮动到这里"--- 这个元素和它之后的元素都不会浮动,除非你应用一个新的float到另一个元素。
clear有三个值:
对父元素的影响
* 对于其父元素来说,元素浮动之后,它将脱离正常的文档流,所以它也无法撑开其父元素, 造成其父元素的塌陷。
对其兄弟元素(非浮动)的影响
对其兄弟元素(浮动)的影响
当对div用的百分比时,然后浮动刚刚好,但是如果要为div设置border、padding等等,那么可能就会超过100%或者父级盒子的大小,因此可以为div设置box-sizing: border-box。
另外一个问题, 当你有一下布局时:
111
222
.fl {float: left}
footer {margin-top: 50px;clear: left;}
因为使用了clear: left后,所以footer不在围绕浮动元素。但是你会发现,margin-top: 50px并不起作用。为了解决这个问题, 在HTML中添加新的div元素,并且设置它的class为clearfix。此时,可以取消了footer的clear:both;如下:
111
222
.fl {float: left}
footer {margin-top: 50px;}
clearfix {clear: both;}
但是这只是简单的解决了这个问题而已。
因此概括一下清除浮动(我觉得应该叫闭合浮动更好一点儿,清除浮动只是清除了浮动,但是不能解决高度塌陷的问题)的几种方法:
.clearfix:after {
content: " ";
display: block;
clear: both;
}
All about floats
那些年我们清除过的浮动
BFC神奇背后的原理
mdn