第7天 简述你对BFC规范的理解
是CSS中的一个渲染机制,BFC就相当于一个盒子,内部的元素与外界的元素互不干扰。它不会影响外部的布局,外部的布局也不会影响到它。
float的值不是none
overflow的值不是visible
内部的盒子会在垂直方向上一个接一个的放置
<div style="width:60px;height:60px;">
<div style="margin:20px;width:20px;height:20px;"></div>
</div>
以上两个盒子产生的布局效果:内部盒子并不居中,而是上边框紧贴着外部盒子
对外部盒子采用BFC规则,可以解决问题,方法之一:增加一个overflow:auto样式:
<div style="width:60px;height:60px;background: green;overflow: auto">
<div style="margin:20px;width:20px;height:20px;background: red"></div>
</div>
上面的两个盒子布局,由于外部是BFC元素,所以内部盒子会完全居中显示
BFC 全称“块级格式化上下文”(Block Formatting Context),对应的还有 IFC。BFC 类似一个“结界”,如果一个 DOM 元素具有 BFC,那么它内部的子元素不会影响外面的元素;外面的元素也不会影响到其内部元素。
最常见的例子就是清除 float
的 overflow: hidden;
属性。overflow: hidden;
会触发元素的 BFC,因此其内部的 float
元素不会影响到外部元素的布局。
触发 BFC 的条件:
<html>
根元素float
不为 none
overflow
为 auto
,scroll
,hidden
display
的值为 table-cell
, table-caption
,inline-block
中任何一个position
的值不为 static
和 relative
BFC 可以实现更加健壮的自适应布局。
参考文章:《CSS 世界》
overflow:auto
和display:flow-root
。display:flow-root
可以无副作用的创建一个 BFC,其它的条件有它本来的职责可能会产生副作用。
- 是CSS中的一个渲染机制,BFC就相当于一个盒子,内部的元素与外界的元素互不干扰。它不会影响外部的布局,外部的布局也不会影响到它。
形成条件(任意一条)
- float的值不是none
- position 的值不是static或者relative
- display的值是inline-block,table-cell,flex,table-caption或者inline-flex
- overflow的值不是visible
特性
- 内部的盒子会在垂直方向上一个接一个的放置
- 对于同一个BFC的俩个相邻的盒子的margin会发生重叠,与方向无关。
- 每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此
- BFC的区域不会与float的元素区域重叠
- 计算BFC的高度时,浮动子元素也参与计算
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
bfc与元素margin重叠没有关系,参考:https://demo.crazyming.com/?link=topic/d7/bfc.html
特性
- 计算BFC的高度时,浮动子元素也参与计算
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
- BFC的区域不会与float的元素区域重叠
形成条件
- html 根元素
- float的值不是none
- position 的值不是static或者relative
- display的值是inline-block,table-cell,table-caption,flex,inline-flex
- overflow的值不是visible
应用场景
- 解决浮动子元素导致父元素,高度坍塌的问题
- 解决文字环绕在float 四周的情况
- 解决边距重叠问题 (父子,兄弟,空元素等)
bfc与元素margin重叠没有关系,参考:https://demo.crazyming.com/?link=topic/d7/bfc.html
块级格式化上下文
计算BFC的高度时,浮动元素也计算在内。
给浮元素触发BFC。解决高度塌陷问题。
如何触发BFC
HTML本身就是BFC
多列容器(元素的 column-count 或 column-width 不为 auto,包括 column-count 为 1)
column-span 为 all 的元素始终会创建一个新的BFC)。
子元素不影响外界,反之亦然
以下之一会形成BFC:
块格式化上下文(BlockFormattingContext,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
通俗来讲
•BFC是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。
•如果一个元素符合触发BFC的条件,则BFC中的元素布局不受外部影响。
创建BFC
(1)根元素或包含根元素的元素
(2)浮动元素float=left|right或inherit(≠none)
(3)绝对定位元素position=absolute或fixed
(4)display=inline-block|flex|inline-flex|table-cell或table-caption
(5)overflow=hidden|auto或scroll(≠visible)
可以看看我写的这篇关于BFC博客:从Float谈谈BFC
什么是BFC
块级格式化上下文
BFC的特性(作用)
同属于一个BFC的两个块级盒子,在垂直方向上会发生margin重叠。
给其中一个盒子放入另外一个BFC中,解决margin重叠
浮动元素是一个单独的BFC。两个BFC之间不会影响。
解决浮动元素浮在其它元素表面上的问题。一般用于图文环绕。
计算BFC的高度时,浮动元素也计算在内。
给浮元素触发BFC。解决高度塌陷问题。
如何触发BFC
HTML本身就是BFC
浮动元素
绝对定位元素(absolute/fixed)
overflow取值不为visible
display:
flex
inlineblock
grid
flow-root
table等等
Most helpful comment
是CSS中的一个渲染机制,BFC就相当于一个盒子,内部的元素与外界的元素互不干扰。它不会影响外部的布局,外部的布局也不会影响到它。
形成条件(任意一条)
float的值不是none
overflow的值不是visible
特性
内部的盒子会在垂直方向上一个接一个的放置