BFC(Block Formatting Context),中文译成 “块级格式上下文”。标准解释:
Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents. – w3c
首先,我们要理解什么是 block boxes
(块盒子)。block boxes 和块级元素是不一致的。
标准中,是这样阐述的。每个 block-level element (块级元素) 产生 block-level box (块级盒)。block-level boxes 是参与到 BFC 的盒子。除了 table boxes,block-level box 也是 block container box (块容器盒),block container box 要么包含 block-level boxes,要么创建 IFC 从而包含 inline-level box。并非所有的 block container boxes 是 block-level boxes。block-level boxes,同时也是 block containers 的就是 block boxes。好绕!标准就是这么绕人的。
所以,我们理解: 浮动的、绝对定位的元素和块容器(比如 inline-blocks, table-cells 这些)都不是 block boxes,block boxes 是那些 overflow
不是 visible
的,两者共同为它们的内容创建了一个 BFC。
Formatting Context 是 W3C CSS2.1 规范中的一个概念它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 BFC 和 Inline formatting context (简称 IFC)。CSS3 还增加了 GFC 和 FFC。