BFC及其背后的 float absolute inline-block
此文为经验之谈,感谢张鑫旭大佬
张鑫旭的博客javascript
BFC(Block formatting context)
BFC(Block formatting context)直译为"块级格式化上下文"。
它是一个独立的渲染区域,只有Block-level box参与,
它规定了内部的Block-level Box如何布局,而且与这个区域外部绝不相干。
BFC布局规则:
3.怎样触发BFC
- 根元素
- float属性不为none
- position为absolute或fixed
- display为inline-block, table-cell, table-caption, flex, inline-flex
- overflow不为visible
float
-
最初的目的:github
- 是为了实现 文字环绕效果。
- 虽然与 absolute 同样会脱离文档流,可是当清除浮动时候能够撑开父元素高度。
-
实现方式:wordpress
-
表现形式:布局
- 宽度收缩至最小,和absolute,inline-block表现一致。
-
如今的应用:学习
-
清除浮动带来的影响:父元素高度塌陷spa
- 一般说的清除浮动实际上是清除浮动带来的破坏,即父元素高度塌陷。
- 根据BFC的定义,BFC会隔离内部元素,因此BFC内部的浮动不会影响外部。

-
例子
absolute,fixed
- 脱离文档流使父元素高度塌陷,不可避免
- 相对于第一个非static定位的父元素直至跟元素,造成查找链
-
transform 会截断向上查找链
- 中间父元素有 transform属性的话就会基于这个定位。
-
应用:
-
不定宽高元素垂直水平居中
- 实现原理 top,left的百分比相对于定位父元素,此时是左上角居中,
- tranform:translate(-50%,-50%)的百分比相对于自身,在拉回自身一半。
-
例子
inline-block
- line-height 是行内元素占据的高度
-
图片底部有空白
- 缘由 图片默认基线对齐,离底线尚有必定距离
-
解决方案
- line-height<height
- font-size==0
- 另 一个inline-block元素,若是里面有inline内联元素,或者overflow是visible,其基线就是元素里面最后一行内联元素的基线
不然该元素的基线就是其margin底边缘。

-
例子:
- 原文地址 BFC及其背后的 float absolute inline-block
- 另外个人博客地址 blog会常常分享 最近的学习内容,项目中遇到的问题及解决方案