清除浮动的方式有哪些及优缺点

    在现在的实际工作当中我已经很少用浮动来布局了,真的很少,刚开始学习的时候用的还蛮多,现在Flex布局,标准文档流以及 定位 已经可以满足大部分的布局需求了。

浮动带来的问题是盒子塌陷问题,所以我们就来解决这个问题吧

    什么是盒子塌陷?

    外部盒子本应该包裹住内部的浮动盒子,结果却没有。

    问题出现的原因

        父元素只包含浮动元素,那么它的高度就会塌缩为零(前提就是你们没有设置高度(height)属性,或者设置了为auto,就会出现这种情况,如果父元素不包含任何的可见背景,这个问题会很难被注意到。

        因为子元素设置了float属性,而float属性会把元素从标准文档流中抽离,直接结果就是外部盒子丢了两个孩子,因为内部没有其它盒子了,所以外部盒子只包裹文本节点内容,却把两个内部盒子扔在外面了。

        解决方案

        1、上面分析了问题出现的原因,不难找到第一种解决方案(既然孩子丢了,那就去找呗)——给外部盒子也添加浮动,
把外部盒子也从标准文档流中抽离,让它和孩子们见面。
        缺点:可读性差,不易于维护(别人很难理解为什么要给父元素也添上float),而且可能需要调整整个页面布局。

        2、在外部盒子内最下方添上带clear属性的空盒子
可以是div也可以是其它块级元素,把<div style="clear:both;"></div>放在盒内底部,用最下面的空盒子清除浮动,把盒子重新撑起来。
        缺点:引入了冗余元素

        3、用overflow:hidden清除浮动
给外部盒子添上这个属性就好了,非常简单。
        缺点:有可能造成溢出元素不可见,影响展示效果。

        4、用after伪元素清除浮动
给外部盒子的after伪元素设置clear属性,再隐藏它这其实是对空盒子方案的改进,一种纯CSS的解决方案,不用引入冗余元素。
        .clearfix {*zoom: 1;}
        .clearfix:before,.clearfix:after {display: table;line-height: 0;content: "";}
        .clearfix:after {clear: both;}
        这也是bootstrap框架采用的清除浮动的方法。

    题外话
    其实还有一种最直接的办法:给每个盒子规定width和height,要多大给多大即可。但这并不算什么解决方案,因为这样的布局不是内容自适应的,但如果页面内容极少发生变动,这也是一个不错的方案,因为它的兼容性是毋庸置疑的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,353评论 1赞 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 29,221评论 1赞 45
  • 这篇文章极好,以至于让我受益良多,就一字没有改动的转发过来一丝冰凉老师的文章 需要注意的是,display:tab...
    新晋小牛牛阅读 1,175评论 0赞 2
  • 浮动,从诞生那天起,它就是个特别的属性——既为网页布局带来新的方法,却又随之产生一系列的问题。当然,随着时间的推移...
    郝特么冷阅读 957评论 0赞 6
  • 这生命像凄冷的冰雪 蜿蜒在漆黑的天空里发亮 那些贪睡的人们春去的梦 不知道那是他们的幻想 你们也曾看见太阳的光热 ...
    碎语阅读 352评论 0赞 4

友情链接更多精彩内容