如上图,给父元素设置边框不能把两个浮动的子元素包裹起来,俗称高度塌陷。解决高度塌陷最常用的方式就是-清除浮动
使用清除浮动解决高度塌陷有这么几种方案:
- 我们可以在box2后面再加一个box3,并把box3的clear属性设置为both;代码如下:
|
|
这种方式多加了一个div。我们也可以另一种方式去更优雅的实现它。
- 使用伪类:
|
|
跟第一种方式原理一样,只不过是巧妙的利用了伪类。
需要注意的是:伪类里的display属性不可以写inline,因为inline撑不起父元素。
然后,ie6、7、8不支持伪类:after,所以我们设置 *zoom:1
来触发 ie6、7 的 haslayout 属性.(haslayout是关于ie低版本浏览器排版的一个属性,类似高级浏览器的BFC属性.)
我们还可以使用另一种神秘的方式去解决高度塌陷。总结了一下,分为四小类:
- 设置父元素float不为none;
|
|
- 设置父元素position为fixed或absolute;
|
|
- display为inline-block, table-cell, table-caption, flex, inline-flex;
|
|
- overflow不为visible;
|
|
其实自由最后一类对父元素的设置还算无毒无害,应用场景最多。
但是说了这么多,你知道为什么这四种方式可以解决父元素的高度塌陷吗?知道最好,如果不知道说明你已定不了 解BFC的概念,BFC(Block formatting context)直译为”块级格式化上下文”。它是一个只有Block-level box参与独立的渲染区域。
BFC一个很重要的特性就是:计算BFC的高度时,浮动元素也参与计算。 利用这条特性,我们只要将父元素触发为 BFC就可以了。触发条件当然就是上述四条。