第203题:介绍一下 BFC 布局规则?
BFC 是 Block Formatting Context 的缩写,译为 块级格式化上下文。说白了就是块级元素的布局渲染规范。触发 BFC 的 block 是遵循此规范的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
BFC 是 Block Formatting Context 的缩写,译为 块级格式化上下文。说白了就是块级元素的布局渲染规范。触发 BFC 的 block 是遵循此规范的。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
BFC 布局规则
什么是 BFC
既 Block Formatting Context(块级格式化上下文),是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。
BFC 的触发条件
即,存在以下几种方案可创建 BFC:
float
值不为none
position
属性为absolute
,fixed
display
值为inline-blocks
,table-cells
,table-captions
等)overflow
的值不为visible
(visiable
是默认值。内容不会被修剪,会呈现在元素框之外)BFC布局规则
margin
决定,属于同一个 BFC 的两个相邻 Box 的上下margin
会发生重叠;float
重叠;BFC 作用
自适应两栏布局
阻止元素被浮动的元素覆盖,自适应成两栏布局
清除内部浮动
解决浮动元素不占高度的问题(浮动元素未被包裹在父容器)
解决 margin 重叠
为了防止 margin 重叠, 可以使多个 box 分属于不同的 BFC 时
阻止元素被浮动元素覆盖
CSS 格式化上下文
Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
在 CSS 中除了 BFC (块级格式化上下文),还有 IFC、GFC、FFC等,这些统称为CSS 格式化上下文 ,也被称作 视觉格式化模型 。而 CSS 视觉格式化模型是用来处理文档并将它显示在视觉媒体上的机制。
简单地说, CSS 格式化上下文 就是用来控制盒子的位置,即实现页面的布局 。
IFC:行内格式上下文
行内格式化上下文(Inline Formatting Context),简称 IFC 。主要用来规则行内级盒子的格式化规则。
IFC 的line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响)
IFC 的行盒的高度是根据包含行内元素中最高的实际高度计算而来。主要会涉及到CSS中的
font-size
、line-height
、vertical-align
和text-align
等属性。行内元素从包含块顶端水平方向上逐一排列,水平方向上的
margin
、border
、padding
生效。行内元素在垂直方向上可按照顶部、底部或基线对齐。当几个行内元素不能在一个单独的行盒中水平放置时,他们会被分配给两个或更多的(Vertically-stacked Line Box)垂直栈上的行盒,因此,一个段落是很多行盒的垂直栈。这些行盒不会在垂直方向上被分离(除非在其他地方有特殊规定),并且他们也不重叠。
那么IFC一般有什么用呢?
vertical-align
属性决定垂直方向上的对齐方式。text-align
决定。ef="https://github.com/sisterAn/blog">float 元素则会被放置在行盒和包含快边缘的中间位置。
GFC(GrideLayout formatting contexts):网格布局格式化上下文
Grid 格式化上下文(Grid Formaatting Context),俗称 GFC 。和FFC有点类似,元素的
display
值为grid
或inline-grid
时,将会创建一个Grid容器。该完完全全器为其内容创建一个新的格式化上下文,即Grid格式化上下文。这和创建BFC是一样的,只是使用了网格布局而不是块布局。那么GFC有什么用呢,和table又有什么区别呢?首先同样是一个二维的表格,但GridLayout会有更加丰富的属性来控制行列,控制对齐以及更为精细的渲染语义和控制。
FFC(Flex formatting contexts):自适应格式上下文
Flex格式化上下文(Flexbox Formatting Context)俗称 FFC 。当
display
取值为flex
或inline-flex
,将会创建一个Flexbox容器。该容器为其内容创建一个新的格式化上下文,即Flex格式化上下文。可惜这个牛逼的属性只有谷歌和火狐支持,不过在移动端也足够了,至少safari和chrome还是OK的,毕竟这俩在移动端才是王道。
不过要注意的是,Flexbox容器不是块容器(块级盒子),下列适用于块布局的属性并不适用于Flexbox布局:
column-*
属性不适用于Flexbox容器float
和clear
属性作用于Flex项目上将无效,也不会把让Flex项目脱离文档流vertical-algin
属性作用于Flex项目上将无效::first-line
和::first-letter
伪元素不适用于Flexbox容器,而且Flexbox容器不为他们的祖先提供第一个格式化的行或第一个字母原文
一个独立的隔离容器, 容器内外的元素互不干扰
触发BFC的条件:
1、根元素, html (body)
2、浮动元素,float值不为none
3、display值为inline-block,table-cell,flex, inline-flex
4、overflow的值不为visible
5、position属性为absolute,fixed
BFC的作用:
1、解决margin重叠
2、解决浮动元素环绕
3、解决浮动元素不占高度的问题(浮动元素未被包裹在父容器)
4、自适应布局
https://zhuanlan.zhihu.com/p/25321647