首页 > 其他分享 >BFC(块级格式化上下文)

BFC(块级格式化上下文)

时间:2022-11-11 11:11:27浏览次数:35  
标签:BFC 块级 格式化 color 元素 100px background 浮动

BFC在MDN上面是这样定义的:

块格式化上下文(Block Formatting Context,BFC)是 Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

BFC可以看作是个隔离的容器。触发了BFC的情况下,内部元素的布局,不会影响外部元素。

那么什么情况下才会触发BFC呢?常用的有以下几种:

1、根元素

2、overflow值不为visible、clip的块元素

3、display:inline-block的行内块元素

4、position为absolute,fixed值的元素

5、浮动元素:float的值不为none

6、display:flow-root

7、弹性元素,即display:flex

8、网格元素:display:grid

9、contain值为 layoutcontent 或 paint 的元素。

BFC能解决什么呢?

1、包含内部浮动

2、排除外部浮动

3、阻止外边距重叠

针对上面三个问题,我们一个一个来看,首先看怎么包含内部浮动:

<div class="item">
  <div class="float-left">这是浮动的内容</div>
  <div>这是盒子里面正常的内容</div>
 </div>

  

.item{
  background-color: #ccc;
}
.float-left{
  height: 50px;
  float: left;
  border: 1px solid red;
}
         

展示的效果如下:

 

 

 如果我们在父容器上增加个overflow:hidden或者auto就会触发BFC,然后就是这种效果:

 

 

 

再来看看排除外部浮动具体是怎么回事:

我们先明确一个概念:正常文档流中建立的 BFC 不得与元素本身所在的块格式化上下文中的任何浮动的外边距重叠,也就是说如果一个元素建立了BFC,另外一个元素没有建立BFC,这两个元素就可能会存在外边距重叠的情况。看代码:

<div class="item">
  <div class="float-left">这是浮动的内容</div>
  <div class="content">这是盒子里面正常的内容这是盒子里面正常的内容这是盒子里面正常的内容这是盒子里面正常的内容这是盒子里面正常的内容</div>
 </div>

  

.item{
   background-color: #ccc;
   overflow: hidden;
}
.float-left{
   height: 50px;
   float: left;
   border: 1px solid red;
   background-color: yellow;
}
.content{
    background-color: green;
}

  效果如下:

 

 

 

 

 如果我们给content这容器也触发一下BFC,看的效果就是这样的:

 

 

最后我们再来看看阻止外边距重叠是怎么回事:

直接上代码:

<div class="item1"></div>
<div class="item2"></div>

  

.item1{
   width: 100px;
   height: 100px;
   margin-bottom: 100px;
   background-color: red;
}
.item2{
   width: 100px;
   height: 100px;
   margin-top: 100px;
   background-color: green;
}

  没有触发BFC的话,上下两个div的外边距是重叠的,只有100px距离,效果如下:

 

 如果我们触发BFC会变成什么样呢?请看下图:

 

 通过在item的外层各自增加一层,然后用display:flow-root属性触发BFC,这样就可以阻止外边距的重叠。

 

标签:BFC,块级,格式化,color,元素,100px,background,浮动
From: https://www.cnblogs.com/brucefq/p/16879940.html

相关文章

  • [JavaScript]格式化时间
    转载自网络 constformatDate=(time,fmt)=>{vardate=newDate(time);varformat=fmt||'YY-MM-DDhh:mm:ss'varyear=date.getFullYear(......
  • 推荐一款个人感觉比较好用的 JSON 格式化 chrome 插件-JSON-handle
    ​​插件下载地址​​,记得打开VPN。JSON数据展示效果如下图,个人感觉还不错,就是加载起来可能会稍微慢一点,但并不影响我对它的好感。可以展开,收起。右上角有个小方框,点一下......
  • Python xlsx 导出格式化
    前言Python文件导出最简单方法是pandas中的to_excel。如何生成具有一定简单格式的文本?个人感觉xlsxwriter无论是文档还是使用方法个人感觉都很赞。目标适用web文件流导......
  • Linux学习笔记(8)——正则表达式与文件格式化处理
    正则表达式与文件格式化处理正则表达式与文件格式化处理一、什么是正则表达式?二、基础正则表达式2.1语系对正则表达式的影响2.2grep的一些高级选项2.3基础正则......
  • 字符串类型如何格式化保留小数点后两位【ToString("0.00")】
    废话都不想写了,直接上图遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法也就是str.ToStr......
  • 【转载】Python格式化4种方式
    Python格式化字符串的4种方式一:%号    %号格式化字符串的方式从Python诞生之初就已经存在时至今日,python官方也并未弃用%号,但也并不推荐这种格式化方式。 #1、格......
  • source insight 使用Uncrustify来格式化代码
    参考 ​​http://myswirl.blog.163.com/blog/static/5131864220106295590650/​​1.下载 ​​http://sourceforge.net/projects/uncrustify/​​,下载解压......
  • vc++ 将文件大小格式化
    都是些简单的代码,用的时候方便些。staticCStringgetFormatSize(floatsize){CStringstr;if(size<1024)str.Format("%fK",size/1024);elseif(size<1048576......
  • 如何基于原名称批量重命名(格式化)文件(夹)名
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 现在需要把这些文档的文件名处理,格式为:4位数字-6位数字-10位数字,办法如下:打开工具 切换到......
  • 什么是BFC,BFC的作用,以及怎么触发BFC
    什么是BFC:块级格式化上下文BFC的作用:BFC其实就是规定了网页布局的规范  1.BFC就是页面上的一个独立容器,容器里面的元素不会影响到外面的元素  解释:BFC的基......