问题概述:

父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度,也就会导致父元素的高度塌陷

父元素的高度一旦塌陷所有元素的位置将会上移,导致整L H 1 ] @ { t个页面的布局混乱

方法1 开启父元素的BFC或hasLayout

1.1 BFC

1.1.O 5 x , N1 Block Formatting Context-块级格式化环境

1.1.2 BFC是元素的隐含属性,默认是在关闭状态的

1.1.3 可以通过一些特殊的样A O Y r =式,来开启BFC

1.1.4 开启@ } G [ \ 5 X tBFC以后元素将会具有如下特性

1.1.4.1父元素的垂直外边距不会与子元素重叠

1.1.4.2开启BFC的元素不会被浮动元素所覆盖

1.1.4.3开启BFC的元素可以包含浮动子元素

1.1.5 开启BFC的方式

1.1.5.1设置元素浮动

1n ( w q G.1.5.2设置元素绝对定位

1.1.5.3设置元素的类型为inline-block

1.1.5.4设置overflow为一个非默认值,一般都是使用overflow:hidden来开启BFC

1.2 hasLayout

1.2.1在IE6K b : z , s W中没有BFC,但是有一个和BFC类似的hasLayout

1.2.2在IE6中可以通过开启hasLayout来解决高度塌陷的问题

1.2.3副作~ U F用最小的开启方式为设置-zoom:1,当为元素设置宽度非默认值时,会自动开启hasLayout

.clearfix{
zoom:1;
}

方法2添加一个空白的div

2.1在塌陷的父元素的最后添加一个空白的div,然后对该div进行清除浮动

<div class="box1">
<div class="box2"></div>
<div></div>
</div>

2.2使用这种方式会在页面h \ n O c v J ]中添加多余的结构

方法3使用after伪类(推荐)

3.1使用after伪类,向父元素后添加一个块元素,并对其清除浮动

.clearfix:after{
content:"";
display:block;
cS * M J dlear:both;
}. a `
.clearfix{
zoomI v Q ` G B:1;
}

3.2该种方式的原理和方法2原理一样,但是不用向页面中添加对于的结构