我们在很多地方都见过BFC这个词,或许能够知道大概意思,但是有时候它的具体原理以及作用会记得很模糊,下面就对BFC这个概念深入学习下。

  块级格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染部分,它是块级元素布局出现的区域,也是浮动层元素进行交互的区域,该区域是独立存在的,即BFC内部元素外部元素之间不会相互影响。

  BFC能够解决的问题

  1. 解决浮动定位

  2. 解决外边距合并

  3. 清除浮动

  4. 自适应多栏布局

  5. ......

  BFC的创建方式

  1. html元素或者包含html的元素

  2. 设置浮动属性的元素(display:none除外)

  3. 设置绝对定位属性的元素(absolute或者fixed)

  4. display为inline-block、table-cell、table-caption的元素

  5. 设置overflow属性的元素(visible除外)

  6. 弹性盒子(flex布局)

  7. 栅栏布局元素(grid布局)

  BFC存在的一些约束

  • 内部Box会在垂直方向上一个接一个的放置
  • 垂直方向上的距离由margin决定(或者:处于同一个BFC的两个相邻Box的margin会发生重叠(塌陷),与方向无关)
  • 每个元素的左外边距与包含块的左边界接触(从左到右),即使浮动元素也是如此。(说明BFC中子元素不会超出他的包含块,而position为absolute的元素可以超出他的包含块边界)
  • BFC的区域不会与float的元素区域重叠
  • 计算BFC的高度时,浮动子元素也要参与计算
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素和外部元素之间不会相互影响

  BFC的应用

  1.解决外边距合并

<!-- before:两个p元素处在同一BFC区域 -->
<style>
p{
width:100px;
height:100px;
margin:20px;
text-align:center;
line-height:100px;
background-color:lime;
}
</style>
<body>
<p>top</p>
<p>bottom</p>
</body>

  

<!-- after:让处在同一BFC区域的p元素处于不同的BFC区域 -->
<style>
div{
position:absolute; /* 让div成为BFC区域 */
}
</style>
<body>
<p>top</p>
<div><p>bottom</p></div>
</body>

  

  2.解决浮动定位(让BFC区域内的浮动元素和其他未浮动元素等高)

<!-- before -->
<style>
#box{
margin: 50px;
background-color:#888;
border: 1px solid red;
}
.float{
float: left;
width: 200px;
height: 200px;
background-color:lime;
}
</style>
<div id="box">
<div class="float">浮动元素</div>
<div>未浮动元素</div>
</div>

  

<!-- after -->
<style>
#box{
margin: 50px;
background-color:#888;
border: 1px solid red;
overflow:hidden; /* 创建BFC */
}
.float{
float: left;
width: 200px;
height: 200px;
background-color:lime;
}
</style>
<div id="box">
<div class="float">浮动元素</div>
<div>未浮动元素</div>
</div>

  

  到这里,BFC的原理及应用就分析的差不多了,后续有新的理解再进行更新,谢谢!!!

  原文摘自https://muyiy.vip/question/css/39.html

  

CSS—BFC原理解析与应用的更多相关文章

  1. <HTML/CSS>BFC原理剖析

    本文讲了BFC的概念是什么: BFC的约束规则:咋样才能触发生成新的BFC:BFC在布局中的应用:防止margin重叠(塌陷,以最大的为准): 清除内部浮动:自适应两(多)栏布局. 1. BFC是什么 ...

  2. BFC原理解析

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

  3. 经典CSS实现三角形图标原理解析

    前言: 在写这篇文章之前,我也看过很多前端大神写的代码,But,都只是粘贴代码和给出显示效果,对于初学者来说大家都喜欢刨根问底,为什么要这样做呢? 接下来就让我给大家分享一下我对CSS实现三角形的理解 ...

  4. CSS中包含块原理解析

    CSS包含块原理解析 确定CSS中的包含块也确定就是元素的父元素.关键是:看元素是如何定位的.确定包含块很重要,比如设置百分比.另外也可以进行样式的继承等等. 分两个情况: 相对定位和静态定位 静态定 ...

  5. CSS实现三角形图标原理解析

    CSS实现三角形图标原理解析: border边框语法: border 四条边框设置border-left 设置左边框,一般单独设置左边框样式使用border-right 设置右边框,一般单独设置右边框 ...

  6. CSS 盒模型、解决方案、BFC 原理讲解--摘抄

    PS:内容比较基础,目的只是覆盖面试知识点,大佬可以 history.back(-1) W3C 标准盒模型 & IE 怪异盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模 ...

  7. Atitit.html css  浏览器原理理论概论导论attilax总结

    Atitit.html css  浏览器原理理论概论导论attilax总结 1.1. 浏览器是怎样工作的:渲染引擎,HTML解析(连载二)1 2. 5.1.1 DOM标准 1011 3. <We ...

  8. BFC 原理

    BFC:Block-level box           +   Forating  +           Context; ------->块元素          决定其子元素如何定位, ...

  9. Webpack & The Hot Module Replacement热模块替换原理解析

    Webpack & The Hot Module Replacement热模块替换原理解析 The Hot Module Replacement(HMR)俗称热模块替换.主要用来当代码产生变化 ...

随机推荐

  1. Maven exclusions(排除依赖)

    在写pom的时候,我们写的一个依赖往往会依赖于其他的包,而这些包可能是过时的不安全的,因此需要排除并重新引用安全的版本,先在依赖这个项目的pom中去除想排除的依赖,再添加指定版本的依赖. pom的依赖 ...

  2. Linux md5sum 命令

    Linux md5sum 命令 通过 Linux 的 md5sum 命令,可以对指定的文件,计算出唯一的一个MD5值(128bit). 通过比较文件前后的MD5值,可以判断文件是否发生变化(是否被修改 ...

  3. 前端构建工具gulp使用 (转)

    http://www.cnblogs.com/starof/p/5194622.html 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 ...

  4. maven创建分model的工程

    创建parentmvn archetype:generate -DgroupId=com.hikvision -DartifactId=aocp-parent -DarchetypeArtifactI ...

  5. ORACLE11G报错汇总

    ============安装类================= 安装Oracle 11g R2的过程中,在新建数据库实例时出现了该错误,如果选择"忽略"就会出现ora-28000 ...

  6. 转:获取windows凭证管理器明文密码

    1.运行cmdkey /list查看windows保存凭证 方法1.mimikaz mimikatz vault::cred 2.利用powershell尝试获取 windows 普通凭据类型中的明文 ...

  7. androidstudio出包问题--Warning: there were 1 unresolved references to classes or interfaces.

    问题:存在unresolved的类或接口导致打包失败 Warning: there were 1 unresolved references to classes or interfaces. You ...

  8. [转帖]NM_CONTROLLED的含义以及网卡配置参数

    NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. ...

  9. 【0.4】mysql版本特性(5.6-8.0)【转】

    转自:http://blog.itpub.net/15498/viewspace-2650661/ MySQL 5.6 1).支持GTID复制 2).支持无损复制 3).支持延迟复制 4).支持基于库 ...

  10. 通过模板创建一个ABP项目

    ⒈下载 进入ABP模板页面,选择模板后下载 ⒉运行 1.初始化数据库 修改xxxx.Migrator.xxxx.Web.Host appsettings.json中的连接字符串 2.还原数据库 在Nu ...