乐趣区

关于前端:前端面试题之BFC

定义

BFC(Block formatting context)直译为 ” 块级格式化上下文 ”,能够了解为一个独立的区域,不受外界烦扰

合成

BFC = Box + Formatting context
Box是 CSS 布局的根本单位,一个页面由很多个 Box 组成,依据 display 属性,又分为 block-level box,其displayblock,list-item,table;另一个为 inline-level box,其displayinline,inline-block,inline-table

Formatting Context是 W3C 标准中的一个概念,它是页面中的一块渲染区域,并且有一套渲染规定,它决定了其子元素将如何定位,以及和其余元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称 BFC)Inline formatting context (简称 IFC)

BFC 是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个 BFC 中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。

布局规定

  1. 外部元素会在垂直方向搁置
  2. 元素垂直方向的间隔由 margin 决定
  3. BFC 的区域不会与 float box 重叠
  4. BFC 是页面上的一个独立容器,容器内子元素不会影响里面的元素,也不受里面影响
  5. 计算 BFC 高度时,浮动元素也参加计算

造成条件

  1. 浮动
  2. 相对或者固定定位
  3. displayinline-block/table-cell/flex/inline-flex/table-caption
  4. 设置了overflow

利用场景

margin 重叠

两个相邻的元素同时设置了 margin 时,之间的 margin 会重叠

如果想要它不重叠,给第二个 P 包一个 div,并将divoverflow:hidden造成一个BFC

这个利用场景比拟少,大多数状况下布局的时候其实是心愿它重叠的

一个常常遇到的状况,两个 div 嵌套,给外面的 div 设置 margin 后,里面的 div 也呈现了 margin, 因为两个div 之间产生了 margin 重叠,重叠的后果会使 margin 比拟小的 div 变成与另外一个 div 统一的margin

解决办法:把外层的 div 变成 BFC 即可

自适应两栏布局

基于 BFC 的区域不会与 float box 重叠 的个性,能够将左侧栏float:left,而后右侧栏变为BFC

革除浮动

基于 计算 BFC 高度时,浮动元素也参加计算

退出移动版