清除浮动 or 闭合浮动

写在前面

前端开发会遇到许许多多需要清除浮动的情况,clearfix想必大家也不会陌生,今天就将我所认识的清除浮动分享给大家,也便于自己以后学习记忆。由于经验所致,必然会有诸多不足,欢迎大家多多指正!

什么是清除浮动,它与闭合浮动有区别吗?

网上关于清除浮动闭合浮动的说法有很多,可能也会有一些人觉得这二者是一个意思。那我就说下我所理解的二者的区别:

  • 清除浮动:用代码来解释就是clear:both;我觉得更加贴切的叫法应该是清除浮动对自己的影响更为合适。它指的是设置clear属性的元素不会受到某一侧或者多侧外部浮动元素的影响。
  • 闭合浮动:闭合浮动在我看来会更加贴切我们日常的用法,就是消除内部元素浮动所造成的外部元素塌陷的负效应,一般来说会用一些属性来触发元素的BFC,来达到目的。

日常清除浮动的方式

清除浮动的写法有很多,但是究其原因,有以下两种:

  1. 使用清除浮动,在外部元素的末尾加上一个元素,将其设置为clear:both,再将其隐藏掉,以避免对原来样式的影响。
  2. 使用闭合浮动,用特殊的属性来触发bfc,达到使内部元素可以撑起父元素的目的

那么什么是BFC呢

块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。

我认为可以当它是一套规则,只要元素属性出发了BFC,那么他就会在元素上应用这套上下文规则。

首先我们来看看因该如何触发它
1. 根元素 <html>
2. float属性不为none
3. position为absolute或fixed
4. display为inline-block, table-cell, table-caption, flex, inline-flex
5. overflow不为visible
复制代码
在来说说触发了bfc有什么作用

总结作用如下:

  1. 不同bfc会阻止外边距的叠加

    有两个相邻p标签的margin-top和bottom都是20,那么正常情况下他们中间相临的外边距会叠加到一起,我们可以使用一个div将其中一个p包裹起来,并设置overflow:hidden那么,这两个p标签之间的就不是处在同一个bfc下,则标签外边距不会叠加,也就是会产生40的间距。

  2. 同一个bfc中,垂直方向上的外边距会叠加。

  3. bfc定义的元素,会包含浮动,也就是外元素在计算高度的时候会把浮动的内元素高度算进去。

  4. bfc定义的元素,使其子元素的外边距无法与定义bfc的父元素边框相交。

    这样也可以解释为什么他会包裹浮动子元素

  5. bfc元素不会与浮动元素发生重叠

clear:both清除浮动来实现撑起父元素的写法

     <div class="par">
        <div class="son1"></div>
        <div class="son2"></div>
    </div>
复制代码
    .par {
        width: 420px;
        background-color: aquamarine;
        border: #000 solid 1px;
    }
    .par:after {
        content: '.';
        display: block;
        clear: both;
        visibility: hidden;
        height: 0;
    }
    .son1,
    .son2 {
        height: 200px;
        width: 200px;
        float: left;
    }
    .son1 {
        background-color: chocolate;
    }
    .son2 {
        background-color: fuchsia;
    }
复制代码

一般来说,我们会写好一个类来定义clear:both,这也就是clearfix的由来,ie低版本需要设置zoom:1

使用bfc来闭合浮动

    .par {
        width: 420px;
        background-color: aquamarine;
        border: #000 solid 1px;
        overflow: hidden;
    }
    
    .son1,
    .son2 {
        height: 200px;
        width: 200px;
        float: left;
    }
    
    .son1 {
        background-color: chocolate;
    }
    
    .son2 {
        background-color: fuchsia;
    }
复制代码

是不是简单很多,但是这样却因为定义的属性改变了元素特性。所以在代码中要看需求来选择。大多数都不会有什么影响。 结合上面所说bfc规则,很容易就能想象出为什么浮动元素会撑起外部元素。

bfc还能做些什么呢?

  1. 布局 以前的布局方式类似于左侧浮动,右侧设置padding-left的方式,就额可以变为右侧不用设置padding,直接触发bfc利用第五条规则达到布局效果。
  2. 解决父元素高度塌陷(闭合内部浮动 )
  3. 解决垂直方向上兄弟元素的margin重叠
更多的用法其实都是bfc规则所实现的。就需要我们大家一起探索了。在平时代码中也为我们提供了一种解决问题的思路。

能帮到你就再好不过了,文章为个人理解,仅供参考;如有真知灼见,欢迎交流。

转载于:https://juejin.im/post/5c5027c26fb9a049f912fa10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值