BFC(块级格式化上下文)
BFC是什么
BFC是一个独立的布局环境,它外部的元素布局与外界互不影响。
产生了BFC的元素内的布局环境:
- 计算该元素的高度时,浮动子元素的高度也参加计算
- BFC区域不会与非该区域内的浮动元素重叠
- 创立BFC的元素不会与它的子元素进行外边距合并,即:处于不同BFC区域的元素之间不会产生外边距合并。
造成BFC的条件
BFC渲染区域由某个HTML元素创立,以下元素会创立:
- 根元素(html元素)
- 浮动、相对与固定定位元素
- overflow不等于visible的块盒
- display为inline-block、table-cell、table-caption、flex的元素
1、个别状况下,在计算元素高度不会将其子元素中的浮动元素计算在内:
<style> * { margin: 0; padding: 0; } .main { border: 1px solid red; } .left { width: 30px; height: 30px; float: left; margin: 0 10px; background: #008c8c; text-align: center; line-height: 30px; } </style> <body> <div class="main"> <div class="left">1</div> <div class="left">2</div> <div class="left">3</div> <div class="left">4</div> </div> </body>
显示成果如下:
咱们通过设置main元素overflow:hidden让其产生BFC区域:
<style> * { margin: 0; padding: 0; } .main { border: 1px solid red; overflow: hidden; } .left { width: 100px; height: 100px; float: left; margin: 0 10px; background: #008c8c; text-align: center; line-height: 100px; } </style> <body> <div class="main"> <div class="left">1</div> <div class="left">2</div> <div class="left">3</div> <div class="left">4</div> </div> </body>
失去的成果为:
2、个别状况下,惯例流块盒在排列时会疏忽浮动元素,导致被浮动元素被笼罩,例如:
<style> * { margin: 0; padding: 0; } .item1 { width: 100px; height: 100px; float: left; background: blue; } .item2 { height: 200px; background: red; }</style><body> <div class="item1"></div> <div class="item2"></div></body>
成果如下:
通过设置item2元素的overflow:hidden让其产生BFC区域
<style> * { margin: 0; padding: 0; } .item1 { width: 100px; height: 100px; float: left; background: blue; } .item2 { height: 200px; background: red; overflow:hidden; }</style><body> <div class="item1"></div> <div class="item2"></div></body>
item2在排列的时候避开了浮动元素item1,成果如下:
3、在有时候咱们会发现,父子元素之间产生了外边距合并:
<style> * { margin: 0; padding: 0; } .parent { width: 300px; height: 300px; background: red; margin-top: 30px; margin-left: auto; margin-right: auto; } .children { width: 100px; height: 100px; background: blue; margin-top: 10px; }</style><body> <div class="parent"> <div class="children"></div> </div></body>
成果如下:
咱们通过设置parent元素的overflow:hidden使其产生BFC区域
<style> * { margin: 0; padding: 0; } .parent { width: 300px; height: 300px; background: red; margin-top: 30px; margin-left: auto; margin-right: auto; overflow:hidden; } .children { width: 100px; height: 100px; background: blue; margin-top: 10px; }</style><body> <div class="parent"> <div class="children"></div> </div></body>
成果如下:
以上这三种状况是BFC常见的利用:
- 解决浮动元素令父元素高度坍塌问题
- 解决非浮动元素被浮动元素笼罩的问题
- 解决外边距合并的问题