当前位置: 首页 > Web前端 > CSS

深入研究BFC

时间:2023-03-31 12:53:47 CSS

前言关于BFC,可能很多人都耳熟能详,但也有一些人可能是第一次听说。熟悉的朋友不妨复习一下,查漏补缺。对于不是很熟悉的人,仔细阅读后,应该能够对BFC的概念、作用和用法有更深入的了解。希望对大家有所收获。什么是BFC?BFC的全称是blockformattingcontext,中文意思是“块级格式化上下文”。是一个独立的渲染区域,规定了内部如何布局,内外元素互不影响。与之对应的还有IFC,即inlineformattingcontext,中文是“行内格式化上下文”。不是本文的重点,感兴趣的童鞋可以自行查看。如何形成BFC?根元素float的值不为none,overflow的值为auto,scroll或hiddendisplay的值为table-cell、table-caption、inline-block中的任意一个,position的值为非relative或者static其中,最常见的就是overflow:hidden,float:left/right,position:absolute。换句话说,每次看到这些属性,就意味着元素和BFC已经创建。BFC的功能是什么?使用BFC防止垂直边距重叠使用BFC清除浮动使用BFC实现自适应布局使用BFC防止浮动元素覆盖BFC有什么特点?特点一:BFC中的元素是垂直放置的,从上往下依次排列。我们通常说的盒子是由margin、border、padding、content组成的。其实每种类型的四个边都定义了一个盒子,如图所示,分别是contentbox,paddingbox,borderbox,marginbox。这四种类型的框总是存在的,即使它们的值为0。margin-box决定了包含块中块框与相邻块框之间的垂直距离。从顶部开始一个接一个地放置可以理解为通常的风格,即块级一个接一个地放置div。特点二:BFC中相邻的两个元素会塌陷元素垂直方向的距离由margin决定。属于同一BFC的两个相邻元素的边距将重叠。示例代码如下:

ABC

abc

p{color:#fff;背景:#f66;宽度:200px;行高:100px;文本对齐:居中;margin:100px;}效果图:在上面的例子中,两个P之间的距离应该是100px,但实际上是50px。主要原因是保证金已经崩盘。如果遇到这种情况,只需要用其中一个P外面的div包裹两个P,然后触发外面div的BFC,防止两个P的边距重叠。也就是说,使用BFC可以防止垂直边距重叠。特征3:在BFC中,marginbox和borderbox的左边是parent和child接触的。每个元素的边距框的左侧接触包含块的边框框的左侧(对于从左到右的格式,否则)。即使存在浮动也是如此。示例代码如下:ABC
.child{color:#fff;背景:#f66;宽度:200px;行高:50px;text-align:center;}.wrap{浮动:左;边框:10px实心#fcc;margin:50px;}效果图:给子div添加float,浮动的结果,如果不清除float,父div不会子div会被包裹起来,但还是在父div的范围内。子div的两侧触及父div边框框的两侧。除非设置保证金拉开距离,否则这个规则一直是规则。特点四:BFC区域不会与浮动框重叠。示例代码如下:
.aside{width:100px;高度:150px;向左飘浮;背景:#f66;}.child{高度:200px;溢出:隐藏;//触发主框的BFCbackground:#fcc;}.wrap{width:500px;}效果图:上面的asidebox有一个floating属性覆盖了子框的内容,子框不清除旁边盒子的浮动。只做了一个动作,就是触发自己的BFC,然后就不再被asidebox覆盖了。所以BFC的区域不会和浮动框重叠。即使用BFC可以防止被浮动元素覆盖。特点五:BFC内外要素互不影响。BFC在页面上是一个隔离的、独立的容器。容器内部的子元素不会影响外部元素,反之亦然。示例代码如下:ABC

content

内容

内容

内容

内容

.wrap{height:200px;背景:#AAA;}.main{浮动:左;宽度:100px;高度:100px;背景:#f66;}.child{颜色:#fff;左填充:200px;line-height:50px;}效果图:在上面的例子中,主框形成了BFC,BFC是一个独立的渲染区域,无论ABC元素的位移如何变化,都不会影响到外面的元素。特点六:BFC计算高度时,浮动元素也参与计算。示例代码如下:ABCabc.wrap{overflow:隐;宽度:250px;border:5pxsolid#f66;}.child{float:left;宽度:100px;边框:5px实心#fcc;line-height:100px;}效果图:从上面的例子可以看出,为了清除内部浮动,我们可以触发wrap生成BFC,即使用BFC清除浮动。那么wrap计算高度的时候,wrap里面的浮动元素child也会参与计算。最后,如果本文对您有帮助,请点赞关注!!!大家来吧。.更多优质文章,请访问GitHub博客。欢迎来到星!!!