重学前端-块格式化上下文

块格式化上下文

块格式换上下文:(Block Formatting Content,BFC),页面中独立的块级渲染区域,该区域有一套渲染规则,用来约束块级盒子的布局,与本区域外无关。

触发BFC的条件

  1. 浮动元素
  2. overflow: hidden/auto/scroll
  3. 绝对定位属性的元素(position: absolute/fixed)
  4. display: inline-block/table-cell/table-caption
  5. ...

BFC约束规则

  1. 内部的盒子与block排列特点一致(一个一个竖直排列)
  2. 盒子高度计算包括浮动的子元素
  3. 属于同一个BFC的margin值会发生重叠
  4. BFC的区域不会和浮动元素的区域重合
  5. BFC是独立的渲染区域,区域内的子元素不会影响到区域外的元素,反之亦然

BFC可以解决的问题

margin重叠

margin: 盒子模型的外边距
在使用时会发现,在同一个父级盒子下,上下两个兄弟盒子如果都设置了margin值,那么在两个盒子之间会发生margin值重叠的问题(上盒子margin-bottom下盒子margin-top,上下两盒子的距离在这两个值中取较大值)

兄弟元素(点击在线coding)

如下图中上下两个兄弟元素都设置了margin: 10px,而在两个元素之间只有10px并不是20px
重学前端-块格式化上下文_第1张图片

将其中一个兄弟元素放入一个空元素中并触发BFC,形成一个独立的渲染空间,那么就不会与其他元素发生重叠问题,即解决了margin重叠的问题

//html
//css
.clear{
  overflow: hidden;
}
.father{
  border: 1px solid red;
  width: 122px;
  position: absolute;
  left: 10px;
  top: 10px;
}
.box01,
.box02{
  width: 100px;
  height: 100px;
  margin: 10px;
}
.box01{
  background-color: pink;
}
.box02{
  background-color: skyblue;
}

重学前端-块格式化上下文_第2张图片

父子元素(点击在线coding)

当父元素和子元素都设置了margin,与兄弟元素之间是一样的,对应相同类型值之间取较大值渲染
如下图所示
重学前端-块格式化上下文_第3张图片
解决方法:

  1. 父元素添加overflow: hidden/auto/scroll
  2. 设置border值
  3. 设置padding值

上述三种方式都可以使得父元素触发BFC形成独立的渲染区域,即此时将不会发生父子元素之间margin值重叠

浮动导致的高度塌陷(点击在线coding)

在BFC中,盒子的高度会将浮动元素也一并计算,进而解决了因为浮动导致的高度塌陷问题(其他解决方法点击跳转),使用方法即为将父级盒子触发BFC即可。例如:

//css
.father{
    width: 300px;
    border: 1px solid red;
}
.c01{
    width: 100px;
    height: 50px;
    background-color: pink;
    float: left;
}
.c02{
    width: 90px;
    height: 90px;
    background-color: black;
    float: left;
}
//html

此时显示为
重学前端-块格式化上下文_第4张图片
触发父元素BFC,较常使用overflow: hidden,即

//css
.father{
    width: 300px;
    border: 1px solid red;
    overflow: hidden;
}

其他无需改变,此时显示为
重学前端-块格式化上下文_第5张图片

自适应两栏布局(点击在线coding)

可以利用BFC形成两栏布局,(左侧固定,右侧自适应)

右侧盒子触发BFC,形成独立的渲染区域,与左侧浮动元素不会发生重叠,进而实现了自适应两栏布局

//html
富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善
//css
div {
  overflow: auto;
  border: 1px solid black;
  padding: 10px;
  width: 500px;
}
aside {
  margin-right: 20px;
  float: left;
  width: 200px;
  height: 100px;
  background-color: pink;
}
main {
  margin-left: 0px;
  overflow: hidden;
}

重学前端-块格式化上下文_第6张图片

相关推荐内容链接

css布局的各种FC简单介绍:BFC,IFC,GFC,FFC
BFC与IFC概念理解+布局规则+形成方法+用处
margin--MDN
七种实现左侧固定,右侧自适应两栏布局的方法
块格式化上下文--MDN
一次弄懂css的BFC

你可能感兴趣的:(重学前端-块格式化上下文)