BFC解决高度塌陷

定义:BFC(Block Formatting Context)全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素设置了float:left,overflow:hidden或position:absolute样式,就会为这个块级元素生产一个独立的块级上下文,使这个块级元素内部的排版完全独立。

作用:独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,就是说包含块会把浮动元素的高度也计算在内,所以就不用清除浮动来撑起包含块的高度。

 

隐藏属性BFC默认为关闭的,开启元素的BFC后,元素将有如下特性:
1.父元素的垂直外边距不会和子元素的重叠
2.开启BFC的元素不会被浮动元素覆盖
3.开启BFC的元素可以包含浮动的子元素

 

开启BFC的方式:
1:设置元素浮动
2.设置元素的绝对定位
3.通过display设置为inline-block
4.设置overflow为非默认值visable的任意值,hidden的副作用最小(较常用)

<style type="text/css">
.box1 {
  border: #5F9EA0 solid 5px;
}

.box2 {
  width: 200px;
  height: 200px;
  background-color: yellow;
}

.box3 {
  width: 200px;
  height: 200px;
  background-color: red;
}
</style>

<div class="box1">

  <div class="box2"></div>
</div>
<div class="box3"></div>

 

没有发生高度塌陷的样式:没有发生高度塌陷的样式

 

为box2设置float:left后,高度塌陷:
在这里插入图片描述

 

一、为box1设置float:left
高度虽然不塌陷,可以撑开父元素,但父元素的宽度部分丢失,且其下面的兄弟元素box3向上移动,不可以解决问题.不可取

 

 

 

 

二、为父元素box1设置 display: inline-block;

这种方式虽然可以撑开父元素,但仍>然会造成父元素宽度的丢失,可以解决问题,但不可取

 

 

 

 

三、为父元素box1设置overflow:hidden

高度塌陷问题解决,且副作用最小,可以采用

 

 

 

 

但是在**IE6中并不支持BFC,故BFC不能兼容IE6,**但可以通过IE6中的另一个隐藏属性hasLayout来做到类似的效果,通常使用zoom:1来开启hasLayout ,其中zoom:数字 ,数字表样式放大倍数
代码如下:

<style type="text/css">
.box1 {
  border: #5F9EA0 solid 5px;
  /* float: left; */
  /* display: inline-block; */

  overflow: hidden;
  zoom: 1;
}

.box2 {
  width: 200px;
  height: 200px;
  background-color: yellow;
  float: left
}

.box3 {
  width: 200px;
  height: 200px;
  background-color: red;
}
</style>


<div class="box1">

  <div class="box2"></div>

</div>

<div class="box3"></div>

posted @ 2020-02-22 17:23  Leo_Charlie  阅读(877)  评论(0编辑  收藏  举报