首页 > 其他分享 >什么是BFC (Block Formatting Context)

什么是BFC (Block Formatting Context)

时间:2023-03-07 17:24:24浏览次数:35  
标签:BFC 浮动 盒子 元素 垂直 Formatting Context margin

一、什么是BFC
  1、BFC即 Block Formatting Contexts (块级格式化上下文), 是 W3C CSS2.1 规范中的一个概念。
  2、BFC是指浏览器中创建了一个独立的渲染区域,并且拥有一套渲染规则,他决定了其子元素如何定位,以及与其他元素的相互关系和作用。

二、BFC的特点
  1、具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

三、BFC布局规则
  内部的Box会在垂直方向,一个接一个地放置。
  Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  BFC的区域不会与float box重叠,而是紧贴浮动元素。
  BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  计算BFC的高度时,浮动元素也参与计算

四、哪些元素会产生BFC
  1、根元素
  2、float属性不为none
  3、position为absolute或fixed
  4、 display为inline-block, table-cell, table-caption, flex, inline-flex
  5、 overflow不为visible

五、在布局中BFC的应用场景
  (1)清除盒子垂直方向上外边距合并——盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子垂直方向的margin会发生重叠。
解决方法:
根据属于同一个BFC的两个相邻盒子垂直方向的margin会发生重叠的性质,可以给其中一个盒子再包裹一个盒子父元素,并触发其BFC功能(例如添加overflow:hidden;)这样垂直方向的两个盒子就不在同一个BFC中了,因此也不会发生垂直外边距合并的问题了。
  (2)在子元素设置成浮动元素的时候,会产生父元素高度塌陷的问题。
解决方法:
  给父元素设置overflow:hidden;的时候会产生BFC
  由于在计算BFC高度时,自然也会检测浮动的子盒子高度。所以当子盒子有高度但是浮动的时候,通过激发父盒子的BFC功能,会产生清除浮动的效果。

总结
  BFC的知识,也是需要学习前端必会的知识,可以通过实际测试,进行巩固加深记忆。

标签:BFC,浮动,盒子,元素,垂直,Formatting,Context,margin
From: https://www.cnblogs.com/limou956259/p/17188824.html

相关文章

  • Spring中context:annotation-config和context:component-scan区别
    Spring中context:annotation-config和context:component-scan区别<context:annotation-config/>注解扫描是针对已经在Spring容器里注册过的Bean,即特定的一些后置bea......
  • Context Autoencoder for Self-Supervised Representation Learning
    0.前言相关资料:arxivgithub(官方实现,其他实现)论文解读(作者解读,知乎)论文基本信息:领域:自监督表示学习发表时间:arxiv2022(2022.2.7)1.针对的......
  • odoo context上下文用法总结
    环境odoo-14.0.post20221212.tarcontext用法总结获取上下文>>>self.env.context#返回字典数据,等价于self._context{'lang':'en_US','tz':'Europe/Brussels'}>......
  • Servlet Context应用
    ServletContextweb容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,代表了当前的web应用一、共享数据:一个Servlet中保存的数据,可以在另外一个Ser......
  • EF7DbContext池
    为什么使用DbContext池?DbContext是EntityFramework中最重要的类型之一,它提供了一种连接数据库并执行查询和更新的方式。在一个ASP.NETCore应用程序中,每次请求都可能需要......
  • spring找不到配置文件applicationContext.xml
    问题描述:报错信息为Causedby:java.io.FileNotFoundException:classpathresource[applicationContext.xml]cannotbeopenedbecauseitdoesnotexisttarget目......
  • ApplicationContext和BeanFactory
    ApplicationContext和BeanFactoryBeanFactoryBeanFactory是spring的IOC容器的核心,Spring使用BeanFactory来实例化、配置和管理Bean。常用的BeanFactory核心实现有:D......
  • webapi DbContext DbSet null 警告解决
    不需要去考虑表不存在情况,也就是不需要去判断_db.Customers是否为空。因为一般来说,数据库表肯定是有的。publicclassNullableReferenceTypesContext:DbContext{......
  • getServletContext爆红
    看下依赖删除<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</ve......
  • python+playwright 学习-16.new_context上下文之非常好用的base_url 参数
    前言在做自动化测试的时候,我们经常是基于某个测试环境地址去测试某个项目,所以应该把它单独拿出来做为一个全局的配置。其它地方用相对地址就行。在pytest用例里面可以用......