A block formatting context (BFC) is a part of a visual CSS rendering of a web page. It's the region in which the layout of block boxes occurs and in which floats interact with other elements.
A block formatting context is created by at least one of the following:
- The root element of the document (
<html>
). - Floats (elements where
float
isn'tnone
). - Absolutely positioned elements (elements where
position
isabsolute
orfixed
). - Inline-blocks (elements with
display: inline-block
). - Table cells (elements with
display: table-cell
, which is the default for HTML table cells). - Table captions (elements with
display: table-caption
, which is the default for HTML table captions). - Anonymous table cells implicitly created by the elements with
display: table
,table-row
,table-row-group
,table-header-group
,table-footer-group
(which is the default for HTML tables, table rows, table bodies, table headers, and table footers, respectively), orinline-table
. - Block elements where
overflow
has a value other thanvisible
andclip
. - Elements with
display: flow-root
. -
<button>
elements and button<input>
types defaulting todisplay: flow-root
. - Elements with
contain: layout
,content
, orpaint
. - Flex items (direct children of the element with
display: flex
orinline-flex
) if they are neither flex nor grid nor table containers themselves. - Grid items (direct children of the element with
display: grid
orinline-grid
) if they are neither flex nor grid nor table containers themselves. - Multicol containers (elements where
column-count
orcolumn-width
isn'tauto
, including elements withcolumn-count: 1
). -
column-span: all
, even when thecolumn-span: all
element isn't contained by a multicol container.
Formatting contexts affect layout because an element that establishes a new block formatting context will:
- contain internal floats.
- exclude external floats.
- suppress margin collapsing.
Flex and grid containers, defined by setting an element's (display
to flex
, grid
, inline-flex
, or inline-grid
, establishes a new flex or grid formatting context. These are similar to block formatting context except there are no floating children available inside a flex or grid container, but these formatting contexts do exclude external floats and suppress margin collapsing.