1:为毛要清除浮动?
1)因为浮动会脱离标准流,导致父元素撑不开,会出现一条直线的奇怪模样;
解决方法
第1种方法 标签的伪元素 :: after ::before{ contnet:" " ; clear:both ; display:block; }
第2种方法可以给父元素 添加overflow: hidden;
为什么overflow: hidden可以清除浮动呢?其实是我们添加overflow时创建了BFC(块级格式化上下文).
一个BFC可以被显示触发,只需满足一下条件之一:
1.float 的值不为 none;
2.overflow 的值不为 visible;
3.position 的值为 fixed/absolute;
4.display 的值为 table-cell/table-caption/inline-block/flex/inline-flex.
在计算BFC高度时,浮动元素高度也参与计算,因此div.container在计算高度时也把#div1的高度计算在内,因此会出现这种"清除浮动"的效果,把#div1包含在内.
-----什么是BFC模式
三、BFC模式应用场景
1.高度坍塌(容器塌陷)看以下情景 :
可以看到父元素的高度为0,子元素浮动后不能撑开父元素的高度造成容器塌陷这时只需给父元素设置
overflow: hidden;
zoom:1; /*兼容IE9以下*/
2.阻止外边距margin叠加
当两个块级元素margin做如下设置时 :
.div1 {
width: 100px;
height: 100px;
background-color: blue;
margin-bottom: 100px;
/*overflow: hidden;
zoom:1; 兼容IE9以下*/
}
.div2 {
width: 100px;
height: 100px;
background-color: #ff0000;
margin-top: 50px;
/*float: left*/
}
marin会以大的为主,即实际两个div产生的margin只有100px,这时打开注释的代码,使其变为BFC模式你会发现margin不再折叠。
3.防止浮动元素遮住文档流中元素
当3列布局采用浮动的方法时难免会产生遮挡情况
.left {
width: 200px;
height: 800px;
background-color: blue;
float: left;
}
.right {
width: 200px;
height: 800px;
background-color: green;
float: right;
}
.center {
width: 500px;
height: 800px;
background-color: #ff0000;
/*overflow: hidden;*/
}
此时给中间元素设置overflow:hidden属性即可清除浮动。
链接:https://www.jianshu.com/p/790ba6cb7392
来源:简书
第3种方法通过属性clear:both;达到清除浮动的目的;
元素浮动后,只需要在浮动元素添加多一个块级元素,并添加clear: both;属性,便可以达到清除浮动的目的。
总结公式
.clearfix:after{ content:""; display:table; height:0; visibility:both; clear:both; } .clearfix{ *zoom:1; /* IE/7/6*/ }