正常情况下:
当一个父盒子设置了宽度,没有设置高度,底下的一个子盒子设置了宽高,
父盒子的高度是子盒子的高度
![](https://img-blog.csdnimg.cn/img_convert/4ea812b4a59307ade4290c826450b685.png)
![](https://img-blog.csdnimg.cn/img_convert/8adec0200d87122d7c0318e2b1281875.png)
![](https://img-blog.csdnimg.cn/img_convert/78a4f22b6a890dd88c86279b63ce6090.png)
![](https://img-blog.csdnimg.cn/img_convert/b276a5efe1d5bc07b411dd39bfa4d7a4.png)
浮动情况下
父盒子设置了宽度没有设置高度,里面的子盒子设置了宽高,并且加了左浮动,父盒子的高度是为0(高度塌陷)
![](https://img-blog.csdnimg.cn/img_convert/2c317dc8fb24004a13506bd7e8a91113.png)
![](https://img-blog.csdnimg.cn/img_convert/ec2ffa6c5631854e4bdee89d9dd5f35a.png)
![](https://img-blog.csdnimg.cn/img_convert/74bc318cf6ec5c69d12e9edfd14eb0ec.png)
![](https://img-blog.csdnimg.cn/img_convert/df720b01ec4884048ddbc00afe77bab9.png)
如果在父盒子下面加个p标签,p标签的文字会和父盒子并列
![](https://img-blog.csdnimg.cn/img_convert/74b5f9b6f547b2369bc1d564fe4e14e3.png)
![](https://img-blog.csdnimg.cn/img_convert/19f9b0454528d19922c105ac24cc6fed.png)
原因:因为父盒子没有高度,而且子盒子浮动了,脱离了标准流,但是父盒子的宽度还在,所以p标签和父盒子是并列
解决方案:
1、额外标签法:也称为隔墙法,是W3C推荐的做法
会在浮动元素的末尾添加一个空标签。例如<div style="clear:both" ></div>
优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化较差
添加的新的空标签必须是块级元素
2、父级添加overflow属性或者<br />
给父元素添加overflow属性,将属性值设置为hidden、auto和scroll
优点:代码简洁
缺点:无法显示溢出的部分
3、父级添加after伪元素
:after方式是额外标签法的升级版,也是给父亲添加
.clearfix:after{
content:"";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix{
/* ie6,7 专有*/
*zoom:1;
}
优点:没有增加标签,结构更简单(百度,淘宝,网易)
缺点:照顾低版本浏览器
4、父级添加双伪元素
也是给父元素添加
/* 清除浮动 */
.clearfix:before,
.clearfix:after{
content:'';
display:table;
}
/* 真正清除浮动的标签 */
.clearfix:after{
clear:both;
}
.clearfix{
*zoom:1;
}
优点:代码更简洁(小米,腾讯)
缺点:照顾低版本浏览器