块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其余元素交互的区域。git
它是一个独立的渲染区域,只有块级元素参与,它规定了内部的Block level Box如何布局,而且与这个区域外部好不相干。github
下列方式会建立BFC布局
防止margin重叠flex
<body> <p>top</p> <p>bottom</p> </body> <style> p { width: 100px; height: 100px; background: yellow; line-height: 100px; margin: 10px; text-align: center; } </style>
展示效果:spa
两个div中间的间距为10px,而不是20px,由于它们处于同一个BFC3d
解决方案为给第二个div再包一层div,设置其overflow属性,使它们处于不一样的BFC:code
<body> <p>top</p> <div> <p>bottom</p> </div> </body> <style> p { width: 100px; height: 100px; background: yellow; line-height: 100px; margin: 10px; text-align: center; } div { overflow: auto; } </style>
效果:orm
让浮动内容与周围内容等高blog
看以下例子:get
<div class="box"> <div class="float">浮动元素</div> <p>未浮动元素</p> </div> <style> .box { background-color: rgb(224, 206, 247); border: 5px solid rebeccapurple; } .float { float: left; width: 200px; height: 150px; background-color: white; border:1px solid black; padding: 10px; } </style>
产生的效果:
因为浮动,使得浮动元素的高度高于旁边的元素,解决方式为使父box生成一个BFC,以下:
<div class="box"> <div class="float">浮动元素</div> <p>未浮动元素</p> </div> <style> .box { background-color: rgb(224, 206, 247); border: 5px solid rebeccapurple; overflow: auto; } .float { float: left; width: 200px; height: 150px; background-color: white; border:1px solid black; padding: 10px; } </style>
效果以下: