diff --git a/files/zh-cn/web/guide/css/block_formatting_context/index.md b/files/zh-cn/web/guide/css/block_formatting_context/index.md index c6b944de983a70..b88c2e6d47714f 100644 --- a/files/zh-cn/web/guide/css/block_formatting_context/index.md +++ b/files/zh-cn/web/guide/css/block_formatting_context/index.md @@ -1,50 +1,50 @@ --- -title: 块格式化上下文 +title: 区块格式化上下文 slug: Web/Guide/CSS/Block_formatting_context --- -{{ CSSRef }} +{{CSSRef}} -**块格式化上下文**(Block Formatting Context,BFC)是 Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。 +**区块格式化上下文**(Block Formatting Context,BFC)是 Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。 下列方式会创建块格式化上下文: -- 根元素(``) -- 浮动元素({{ cssxref("float") }} 值不为 `none`) -- 绝对定位元素({{ cssxref("position") }} 值为 `absolute` 或 `fixed`) -- 行内块元素({{ cssxref("display") }} 值为 `inline-block`) -- 表格单元格({{ cssxref("display") }} 值为 `table-cell`,HTML 表格单元格默认值) -- 表格标题({{ cssxref("display") }} 值为 `table-caption`,HTML 表格标题默认值) -- 匿名表格单元格元素({{ cssxref("display") }} 值为 `table`、`table-row`、 `table-row-group`、`table-header-group`、`table-footer-group`(分别是 HTML table、tr、tbody、thead、tfoot 的默认值)或 `inline-table`) -- {{ cssxref("overflow") }} 值不为 `visible`、`clip` 的块元素 -- {{ cssxref("display") }} 值为 `flow-root` 的元素 -- {{ cssxref("contain") }} 值为 `layout`、`content` 或 `paint` 的元素 -- 弹性元素({{ cssxref("display") }} 值为 `flex` 或 `inline-flex` 元素的直接子元素),如果它们本身既不是 [flex](/zh-CN/docs/Glossary/Flex_Container)、[grid](/zh-CN/docs/Glossary/Grid_Container) 也不是 [table](/zh-CN/docs/Web/CSS/CSS_table) 容器 -- 网格元素({{ cssxref("display") }} 值为 `grid` 或 `inline-grid` 元素的直接子元素),如果它们本身既不是 [flex](/zh-CN/docs/Glossary/Flex_Container)、[grid](/zh-CN/docs/Glossary/Grid_Container) 也不是 [table](/zh-CN/docs/Web/CSS/CSS_table) 容器 -- 多列容器({{ cssxref("column-count") }} 或 {{ cssxref("column-width") }} 值不为 `auto`,包括`column-count` 为 `1`) -- `column-span` 值为 `all` 的元素始终会创建一个新的 BFC,即使该元素没有包裹在一个多列容器中 ([规范变更](https://github.com/w3c/csswg-drafts/commit/a8634b96900279916bd6c505fda88dda71d8ec51), [Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=709362)) +- 文档的根元素(``)。 +- 浮动元素(即 {{ cssxref("float") }} 值不为 `none` 的元素)。 +- 绝对定位元素({{ cssxref("position") }} 值为 `absolute` 或 `fixed` 的元素)。 +- 行内块元素({{ cssxref("display") }} 值为 `inline-block` 的元素)。 +- 表格单元格({{ cssxref("display") }} 值为 `table-cell`,HTML 表格单元格默认值)。 +- 表格标题({{ cssxref("display") }} 值为 `table-caption`,HTML 表格标题默认值)。 +- 匿名表格单元格元素({{ cssxref("display") }} 值为 `table`(HTML 表格默认值)、`table-row`(表格行默认值)、`table-row-group`(表格体默认值)、`table-header-group`(表格头部默认值)、`table-footer-group`(表格尾部默认值)或 `inline-table`)。 +- {{ cssxref("overflow") }} 值不为 `visible` 或 `clip` 的块级元素。 +- {{ cssxref("display") }} 值为 `flow-root` 的元素。 +- {{ cssxref("contain") }} 值为 `layout`、`content` 或 `paint` 的元素。 +- 弹性元素({{ cssxref("display") }} 值为 `flex` 或 `inline-flex` 元素的直接子元素),如果它们本身既不是[弹性](/zh-CN/docs/Glossary/Flex_Container)、[网格](/zh-CN/docs/Glossary/Grid_Container)也不是[表格](/zh-CN/docs/Web/CSS/CSS_table)容器。 +- 网格元素({{ cssxref("display") }} 值为 `grid` 或 `inline-grid` 元素的直接子元素),如果它们本身既不是[弹性](/zh-CN/docs/Glossary/Flex_Container)、[网格](/zh-CN/docs/Glossary/Grid_Container)也不是[表格](/zh-CN/docs/Web/CSS/CSS_table)容器。 +- 多列容器({{ cssxref("column-count") }} 或 {{ cssxref("column-width") }} 值不为 `auto`,且含有 `column-count: 1` 的元素)。 +- `column-span` 值为 `all` 的元素始终会创建一个新的格式化上下文,即使该元素没有包裹在一个多列容器中([规范变更](https://github.com/w3c/csswg-drafts/commit/a8634b96900279916bd6c505fda88dda71d8ec51)、[Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=709362)) 格式化上下文影响布局,通常,我们会为定位和清除浮动创建新的 BFC,而不是更改布局,因为它将: -- 包含内部浮动 -- 排除外部浮动 -- 阻止 [外边距重叠](/zh-CN/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing) +- 包含内部浮动。 +- 排除外部浮动。 +- 阻止[外边距重叠](/zh-CN/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing)。 -> **备注:** flex/grid 容器({{ cssxref("display") }}:flex/grid/inline-flex/inline-grid)建立新的 flex/grid 格式上下文,除布局之外,它与块格式上下文类似。flex/grid 容器中没有可用的浮动子级,但排除外部浮动和阻止外边距重叠仍然有效。 +> **备注:** 弹性/网格容器({{ cssxref("display") }}:flex/grid/inline-flex/inline-grid)建立新的弹性/网格格式化上下文,除布局之外,它与区块格式化上下文类似。弹性/网格容器中没有可用的浮动子级,但排除外部浮动和阻止外边距重叠仍然有效。 ## 示例 ### 包含内部浮动 -让浮动内容和周围的内容等高。 +BFC 使得让浮动内容和周围的内容等高。 为了更好的理解 BFC,我们先看看下面这些内容。 -在下面的例子中,我们让 `
I am content inside the container.
+我是容器内的内容。
I am content inside the overflow:auto
container.
我是 overflow:auto
容器内部的内容。
I am content inside the display:flow-root
container.
我是 display:flow-root
容器内部的内容。
Normal
普通
display:flow-root