常用清除浮动的几个方法

古城微笑少年丶 2022-05-31 13:10 311阅读 0赞

浮动是我们在平时布局时经常用到的一种方式,不过也因此而带来一些问题,比如浮动会造成浮动元素的父元素高度“坍塌”的问题,那么这篇文章就来介绍几种常用的解决由浮动带来的一些问题。

浮动造成的父元素高度“坍塌”

  1. <style>
  2. .container{
  3. background: #2aabd2;
  4. }
  5. .fl{
  6. float: left;
  7. }
  8. .item{
  9. background: #a6d5ec;
  10. }
  11. </style>
  12. <div class="container">
  13. <div class="fl item">我设置了float:left,向左浮动,我的父元素没有高度了。</div>
  14. </div>

效果如下:

20180226101822511

可以看到盒模型中的高度是0

  • 给父元素设置一个固定高度:

code:

  1. <style>
  2. .container{
  3. background: #2aabd2;
  4. }
  5. .fl{
  6. float: left;
  7. }
  8. .item{
  9. background: #a6d5ec;
  10. }
  11. .height50{
  12. height: 50px;
  13. }
  14. </style>
  15. <div class="container height50">
  16. <div class="fl item">我设置了float:left,向左浮动,我的父元素设置了固定高度50px。</div>
  17. </div>

20180226102135243

原理:浮动子元素不能撑开父元素的高度,那么手动设置父元素的高度自然就解决了这个问题。

优点:简单易懂,代码简单。

缺点:仅在父元素固定高度的时候可用。

  • 结尾添加空div标签再利用clear这个属性。

code:

  1. <style>
  2. .container{
  3. background: #2aabd2;
  4. width: 1000px;
  5. }
  6. .fl{
  7. float: left;
  8. }
  9. .fr{
  10. float: right;
  11. }
  12. .item{
  13. background: #a6d5ec;
  14. border: 1px solid red;
  15. }
  16. .clear{
  17. clear: both;
  18. }
  19. </style>
  20. <div class="container">
  21. <div class="fl item">我设置了float:left,向左浮动</div>
  22. <div class="fl item">我设置了float:right,向右浮动</div>
  23. <div class="clear"></div>
  24. </div>

20180226103156207

可以看到结尾添加了一个空的div标签设置clear:both,那么父元素的高度自然也就有了,这儿需要注意,这里的空标签div需要加在这个container的最后一个,先让浮动浮起来,不然若是将这个clear元素放在前面的话,那左右两边就不能浮动了。

比如如下所示:

  1. <div class="container">
  2. <div class="fl item">我设置了float:left,向左浮动</div>
  3. <div class="clear"></div>
  4. <div class="fl item">我设置了float:right,向右浮动</div>
  5. </div>

这儿将空标签div放在了中间,那么右边的浮动div是会换行的,因为clear:both不准他的两侧有浮动元素。而左浮动元素的是在.clear元素之前解析的。需要注意。

20180226103724688

原理:添加一个空标签div,然后利用clear这个属性的特点清除浮动,让父元素获得高度。

优点:比较简单,浏览器支持好,不容易出现毛病。

缺点:需要手动添加一个空标签,不太好,要是浮动多的话,会出现很多不需要的结构。解析这些结构也是需要花费性能的

  • 用伪元素:after

这种方法是第二种方法的进化版。方法二说了要在容器的最后手动添加一个空标签,我么可以利用为元素的特点来帮助我们实现自动添加空白元素然后实现清楚浮动的特点,效果如下所示:

  1. <style>
  2. .container{
  3. background: #2aabd2;
  4. width: 1000px;
  5. }
  6. .fl{
  7. float: left;
  8. }
  9. .fr{
  10. float: right;
  11. }
  12. .item{
  13. background: #a6d5ec;
  14. border: 1px solid red;
  15. }
  16. .cf:after{
  17. content:"";
  18. visibility:hidden;
  19. height:0;
  20. display:block;
  21. clear:both;
  22. }
  23. </style>
  24. <div class="container cf">
  25. <div class="fl item">我设置了float:left,向左浮动</div>
  26. <div class="fl item">我设置了float:right,向右浮动</div>
  27. </div>

20180226104522143

优点:兼容性好,一般都会采用这个方式来清除浮动,也不会有荣誉的dom结构。

缺点:可能就是代码样式略多了一点吧。

  • 利用BFC布局的特点来清除子元素的浮动

    有关BFC布局,我在另一篇文章中有详细的说明,在这儿就不在赘述BFC的知识了,有需要了解的小伙伴可以移驾: http://blog.csdn.net/weixin_38080573/article/details/79360324

原理:BFC能够根据子元素来自适应高度,即便这个子元素是浮动元素。

优点:也比较优雅,是解决浮动的一个好方法

缺点:可能需要对BFC有一定的了解。

其实这个也很简单,我们只需要知道BFC布局有这个能够根据子元素来自适应高度,即便这个子元素是浮动元素特点,那么接下来我们只需要想着如何触发容器的BFC布局就好了,那围绕着触发容器的BFC又可以衍生出N中方法来清除浮动,其实背后的原理都是利用BFC的可以闭合子元素浮动的特点罢了。

效果如下所示:

  1. <style>
  2. .container{
  3. background: #2aabd2;
  4. width: 1000px;
  5. }
  6. .fl{
  7. float: left;
  8. }
  9. .fr{
  10. float: right;
  11. }
  12. .item{
  13. background: #a6d5ec;
  14. border: 1px solid red;
  15. }
  16. .bf{
  17. overflow: hidden;
  18. }
  19. </style>
  20. <div class="container bfc">
  21. <div class="fl item">我设置了float:left,向左浮动,但是我父元素触发了BFC布局</div>
  22. <div class="fl item">我设置了float:right,向右浮动,但是我父元素触发了BFC布局</div>
  23. </div>

20180226110957568

好了,这边文章总结了可以清除浮动的几种方法,各有优缺,大家可以按需求选择使用,不过一般常用的还是第三种比较常用。

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读

    相关 清除浮动方法

    1. 浮动        浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。        由于浮动框不在文档的普通流中,所以文档的普通流中

    相关 清除浮动方法

    1.浮动元素下加空div 为了统一样式,我们新建一个样式选择器class命名为“.clear”,并且对应选择器样式为“clear:both”,然后我们在父级“</div>”

    相关 清除浮动方法

    浮动是我们在平时布局时经常用到的一种方式,不过也因此而带来一些问题,比如浮动会造成浮动元素的父元素高度“坍塌”的问题,那么这篇文章就来介绍几种常用的解决由浮动带来的一些问题。

    相关 清除浮动方法

    浮动产生负作用 1.背景颜色不能使用 子元素float ,如果父元素设置了background,而父级不能被撑开,所以导致背景颜色不能显示 2.边框不能撑开 如果父

    相关 清除浮动方法

    标准流:盒子会各占整行位置。子盒子若是标准流,父盒子虽然没有高度,但是会撑开父盒子高度。   浮动:盒子浮了起来,不会占据原来的位置,若父盒子没有定义高度,则不会撑开父盒子,