BFC
BFC是块级格式化上下文的简写,是一个独立的区域,内部元素的布局不受外部的影响,也不会影响外部。
BFC常常帮助我们解决开发中遇到的 外边距溢出、外边距合并、高度塌陷等问题。原理就是使他们触发BFC,创建一个自己独立的容器。
外边距溢出:指的是给一个子元素设置margin值,如果子元素紧紧沿着父盒子的上边缘,那么子元素设置的margin值会传递给父元素。
解决方法:
- 可以给父元素设置 overflow: hidden
- 给父元素设置 border-top
- 给父元素设置 padding-top
- 最好的办法是借助 伪元素 ::before,给父元素的 before 伪元素设置 content: ‘’; display: table.
外边距合并:垂直方向上排列的两个兄弟元素,给他们设置各自的 margin 值,此时它们的外边距会按照最大的那个元素设置的margin值算,不会进行累加。
解决方案:
- 给子元素设置 display: inline-block
- 给子元素设置 float: left
- 可以给子元素在嵌套一层父元素
- 核心就是使兄弟元素不在同一个BFC区域下面,将兄弟元素分别触发BFC或者将兄弟元素包在不同的div下,这些不同的div再分别触发BFC。
高度塌陷:一个父元素,一个子元素,父元素不设置高度,内容靠子元素撑开,如果给子元素设置 float,此时父元素高度为 0
解决方案:
- 给父元素设置 高度
- 给父元素设置浮动
- 推荐使用给父元素设置伪元素,设置 ::before,设置 content: ‘’; display: block; clear: both;
触发BFC的条件
- 浮动元素 float 不设置为 none
- overflow 不为 visible
- position 为 absolute 或 fixed
- display: inline-block,flex,table-cell
BFC渲染规则
- 内部的盒子会在垂直方向上,一个接着一个的排列
- 计算BFC高度的时候,浮动元素也会参与计算
- 盒子垂直方向上的距离由margin值决定,属于同一个BFC的两个相邻盒子的margin会发生合并
- BFC的区域不会与float元素的区域发生重叠
- BFC就是页面上的一个独立的容器,内部元素的如何渲染不会影响到外面元素,反之亦然
IFC
内联格式化上下文,触发条件是一个块级元素内部只包含内联元素。
应用场景:
- 触发一个IFC,给内部内联元素设置 vertical-align:middle,这样该父元素下面的其它内联子元素也会垂直居中
- 触发一个IFC,给其设置 text-align:center,可以控制内部元素水平居中