1、{clear:both;}设置了clear 属性的元素,其上边框位置会紧贴浮动元素的 margin-bottom 边界位置渲染,使包含浮动元素的容器高度正常。所以适用于浮动元素后面容器之内有个非浮动元素,或是额外添加一个新的空元素。
2、.after-clear-float :after{content:""; display:block; clear:both;}利用伪类添加新元素,原理同上,所以只适用于父容器最后一级子元素是浮动的,即浮动元素后面没有非浮动元素把它和父容器隔开。只是IE6/7不支持:after 伪元素。
3、{overflow:hidden;}或overflow:auto;创建了overflow 样式值为非visilbe的元素,实际上是创建了 CSS 2.1 规范定义的 Block Formatting Contexts,会重新计算其内部元素位置,从而获得确切高度。这样父容器也就包含了浮动元素高度。这个名词过于晦涩,在 CSS 3 草案中被变更为名词 Root Flow,顾名思义,是创建了一个新的根布局流,这个布局流是独立的,不影响其外部元素的。测试时当子元素同时混有浮动元素和非浮动元素时效果并不好。IE6/7 中并不被支持。
4、{display:table}或{display:table-cell}当元素 display 值被设定为 table 或 table-cell 时,同样也创建了 CSS 2.1 规范定义的 Block Formatting Contexts。这样父容器也就包含了浮动元素高度。IE6/7 中并不被支持。
5、使用表格类元素作为浮动元素容器。把浮动元素匡在td里就木有浮动问题,而且木有兼容问题。当使用 TABLE TD TH 等 TABLE 系列标签时, 元素的 display 值实际上说是 display: table 系列,这同样也创建了 CSS 2.1 规范定义的 Block Formatting Contexts。这样父容器也就包含了浮动元素高度。同时在 IE 6/7 中,TABLE TD TH 等 TABLE 系列标签天然拥有 haslayout 特性。
6、浮动父元素。虽然这种方式并没有兼容问题,但实际使用中并不推荐。因为很容易推断出,页面中只要有一个浮动元素,使用该方法清理浮动将不可避免的使页面所有元素都浮动才可以达到预期效果。
7、触发 hasLayout。下面是原文的这部分内容:
样例:
新闻热点
疑难解答