什么时候我们需要清除浮动呢?
在进行页面css布局的时候,有时候给容器内的元素添加浮动的时候,容器的高度会变成零或者其他一些错误从而导致整个页面布局混乱。
这主要是因为当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局。这个现象叫浮动溢出
为了解决浮动溢出的现象,所以我们需要对浮动进行清除
清除浮动的几种主要方法
方法一:设置clear:both属性
当浮动溢出的容器内,如果容器内元素全部都是要设置浮动,那么在容器内的最后新加一个空的<div></div>
标签,对这个标签进行属性添加clear:both
,如果容器内的最后一个元素不必浮动,在最后一个元素的css添加clear:both
也可。
使用这种方法清除了浮动,父元素自动检测子盒子最高的高度,然后与其同高。
优点:通俗易懂,方便
缺点:添加无意义标签,语义化差
不建议使用。
方法二:使用CSS的overflow属性触发BFC规则
给容器添加overflow属性,overflow: hidden;
或者overflow: auto;
优点:代码简洁
缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素
不建议使用。
方法三:使用after伪元素清除浮动
.fu:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
content: "";
display: block;
height: 0;
clear:both;
visibility: hidden;
}
.fu{
*zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
<body>
<div class="fu">
<div class="big">big</div>
<div class="small">small</div>
<!--<div class="clear">额外标签法</div>-->
</div>
<div class="footer"></div>
</body>
优点:符合闭合浮动思想,结构语义化正确
缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.
推荐使用
方法四:使用before和after双伪元素清除浮动
.clearfix:after,.clearfix:before{
content: "";
display: table;
}
.clearfix:after{
clear: both;
}
.clearfix{
*zoom: 1;
}
优点:代码更简洁
缺点:ie6-7用zoom:1触发hasLayout.
方法五:给浮动的元素的容器添加浮动
给浮动元素的容器也添加上浮动属性floar:left
即可清除内部浮动
缺点:使其整体浮动,影响布局
不推荐使用
参考链接①https://zhuanlan.zhihu.com/p/94697222