BFC——概念、触发条件、该选择哪种方法触发

71 阅读3分钟

概念

  1. BFC的意思是,块级格式化上下文。它属于CSS三种布局模型(流动模型-Flow、浮动模型-Float、层模型-Layer)中的流动模型(Flow)
  • 它是页面中的一块渲染区域,并且有着一套属于自己的渲染规则
  • 内部的元素会在垂直方向上一个接一个的放置
  • 对于同一个BFC(也就是同属于一个BFC容器里边)的两个相邻容器的margin会发生重叠现象,并且是以margin数值较大的为准。但是该现象只发生在垂直方向上的margin,水平方向上的margin不会发生重叠
  • 每个元素的左边外边距的计算起点是从这个元素的左边框的内侧(也就是这个距离要包含元素左边框宽度)开始计算的
  • BFC区域不会和float区域重叠
  • 计算BFC的高度时,浮动元素参与计算
  • BFC是页面中的一个具有隔离的独立容器,容器里的子元素不会影响到外边的元素,反之亦然
  1. BFC的目的是形成一个相对于独立外界的空间,让内部的子元素不会影响到外部的元素

触发BFC的条件

  • body根元素
  • 浮动元素:就是float为none的元素
  • 绝对定位元素:position为adsolute或者fixed
  • overflow的值为visible,而是为auto、scroll、hidden
  • display的值为inline-block、table-cell、table-caption、flex、grid

触发BFC的方法

  1. 设置元素浮动(不推荐)
  • 使用这种方式,虽然能够撑开父元素,但是会导致父元素的宽度丢失
  • 并且使用这种方式会导致下边的元素上移,不能解决问题
  1. 设置元素为inline-block(不推荐)
  • 因为会导致宽度丢失,并且会出现三像素的空白问题
  1. 将元素的overFlow的值设置为一个不会visible的值
  • 将这个值设置为hidden的副作用是最小的
  1. 使用绝对定位
  • 但是这样元素会脱离文档流,会导致父元素的宽度丢失,并且会导致下边的元素上移

需要利用BFC的应用场景

  1. 出现了margin重叠的问题
  • 两个元素之间发生了margin重叠(塌陷)的问题,所以,我们可以给这两个元素之间的其中一个的外层包裹一容器,并给这个容器开启BFC(overFlow:hidden)
  1. 清除一个元素的内部浮动
  • 这个元素的父元素发生了高度塌陷的问题,因为这个元素是个浮动元素,这时我们可以给父元素开启BFC模式(overFlow:hidden),因为在BFC模式下,盒子进行高度计算时,也会把浮动元素的高度计算进去
  1. 实现自适应多栏布局(利用BFC元素不会和Float元素重叠的特性)
  • 两栏布局

  • 如果左边(右边)的元素是浮动元素时,另一边的元素会与浮动元素重叠,这是我们就可以给这个元素开启BFC模式,这样就不会与浮动元素重叠了,并且还会根据这两个的父元素宽度进行自适应

  • 多栏布局