BFC机制

BFC(Block Formatting Context):块格式化上下文

BFC是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关系和相互做用。当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照必定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。好比浮动元素会造成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。这里有点相似一个BFC就是一个独立的行政单位的意思。也能够说BFC就是一个做用范围。能够把它理解成是一个独立的容器,而且这个容器的里box的布局,与这个容器外的绝不相干。
引自:http://www.javashuo.com/article/p-rytdiolz-w.html

简单来说,BFC提供了一个独立的布局环境,BFC中的元素布局不受外部元素的影响,也不会影响到外部元素。

※触发BFC的几种方式

1、给元素设置浮动 float: left | right

2、给元素设置脱离文档流的定位 position: absolute | fixed

3、给元素设置内容溢出 overflow: hidden | scroll |auto

4、给元素设置 display: flex | inline-block | table-cell

※几种常见问题

1、父级外边距折叠塌陷问题

嵌套的块级元素,父子元素紧贴的那一边会合并,作用在父元素上。所以给子元素设置margin-top时,父子元素会一起下移。

例:
嵌套的父子div块级元素,给子元素设置margin

父元素也受到了margin-top的影响

解决方案一、给父级1px的边框

.father{border: 1px solid transparent; /*transparent:设置边框透明*/
}
.son{margin-top: 50px;
}

解决方案二、给父级1px内边距

.father{padding-top:1px;
}
.son{margin-top: 50px;
}

解决方案三、不用margin-top,改用父级内边距padding

.father{padding-top: 50px;/*可能会撑大父元素,所以设置盒子宽高为算进边框的宽高,固定盒子大小*/box-sizing: boder-box;
}

解决方案四、给父元素设置overflow:hidden; (触发bfc)

父元素会变成独立的空间

.father{overflow: hidden;
}
.son{margin-top: 50px;
}

解决方案五、将子元素转换为行内块元素

.son{display: inline-block; /*嵌套的块级元素会塌陷,所以转化为行内块*/margin-top: 50px;
}

解决方案六、有浮动、固定、绝对定位的盒子不存在塌陷问题(触发bfc)

relative也会发生塌陷

/*加给父元素或子元素都可以*/
.father{float: left;  /*设置浮动*/margin-top: 50px;
}.father{position: absolute;  /*绝对定位*/margin-top: 50px;
}.father{position: fixed;  /*固定定位*/margin-top: 50px;
}

2、margin 纵向重叠及合并解决

两个盒子,上面的盒子margin-bottom: 50px; 下面的盒子margin-top: 100px; 则两个盒子纵向距离为100px。
例:

<style>.first{width: 200px;height: 200px;background-color: aqua;margin-bottom: 50px;}.second{width: 200px;height: 200px;background-color: coral;margin-top: 100px;}
</style><div class="first"></div>
<div class="second"></div>

想要纵向边距为两者之和的方法:

解决方案一、直接给其中一个盒子的外边距设为两者之和

<style>.second{width: 200px;height: 200px;background-color: coral;margin-top: 150px;}
</style>

解决方案二、触发bfc,分别给两个盒子套一个父元素,为父元素设置overflow: hidden;

    <style>.father{overflow:hidden;}.first{width: 200px;height: 200px;background-color: aqua;margin-bottom: 50px;       }.second{width: 200px;height: 200px;background-color: coral;margin-top: 100px;}</style><div class="father"><div class="first"></div></div><div class="father"><div class="second"></div></div>

3、清除浮动带来的父元素塌陷

当设置子元素为浮动时,子元素脱标,不占有原位置,父元素会塌陷,不再具有原来的宽高,会改变布局。
例:
正常嵌套的父子元素:

<style>.father{width: 400px;/* 未设置高度,高度由子元素撑起来 */background-color: aqua;padding: 20px;}.son{width: 100px;height: 100px;background-color: lightcoral;}</style><div class="father"><div class="son"></div></div>


当设置子元素为float:left

解决方案一、父元素固定宽高
设置父元素的高度,就不必由子元素撑起来,不会受子元素脱标影响

优点:简单代码量少,没有兼容问题

缺点:内部元素高度不确定的情况下无法使用

解决方案二、添加新元素

clear:left:清除float:left对元素造成的影响

clear:right:清除float:right对元素造成的影响

clear:both:清除float:leftfloat:right对元素造成的影响

.clear_element{clear: both;
}
<div class="father">...<div class="clear_element"></div>
</div>

添加一个新元素div,设置属性清除浮动clear: both;

缺点:添加了无语义的html元素,不便后期维护

解决方案三、添加伪元素(需设置为块级元素)

.father::after{content: "";   /*内容为空*/display:block; /*::after默认添加行内元素,需设置为块元素*/clear: both;   /*清除浮动*/
}

解决方案四、触发父元素bfc

.father{overflow: hidden; /*可以设置为 hidden  auto scroll*/
}

优点:仅用css实现,代码少,浏览器支持好;

缺点:可能会使超出的部分无法显示

什么是BFC机制,如何触发BFC(消除浮动带来的父元素塌陷、垂直方向margin重叠、嵌套块级元素父元素margin塌陷)相关推荐

  1. 什么是BFC?如何触发BFC

    什么是BFC? BFC(Block formattin context), 直译:"块级格式化上下文".在页面上形成一个隔离的独立容器,容器里面的子元素不会影响外面的元素.反之亦是 ...

  2. 什么是BFC,如何触发BFC,BFC的作用

    BFC:块级格式化上下文 理解:BFC属于普通流,相当于一块独立的渲染区域,BFC看成是元素的一种属性, 当元素拥有了BFC属性后,这个元素就可以看做成隔离了的独立容器.容器内的元素不会影响容器外的元 ...

  3. CSS中的BFC机制

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

  4. BFC是什么?BFC的四种理解方式

    一 .BFC的解释:         块级格式化上下文,是一块独立的渲染区域,BFC的特性容器里面的元素不会影响外边元素布局,当然外部的元素也不能影响内部元素的布局 二​​ .原理: ①.内部的box ...

  5. BFC是什么?BFC可以做什么?

    BFC是什么 一.规范解释:块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交 ...

  6. 对 BFC 规范(块级格式化上下文:block formatting context)的理解?

    相关知识点: 块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒 子的区域,也是浮动元素与其他元素的交互限定区域. ...

  7. css三大特性权重计算BFC(块级格式化上下文)盒子模型

    系列文章目录 文章目录 系列文章目录 前言 一.css三大特性 1.继承性 2.层叠性 3.优先级 二.权重计算 1.引入库 2.读入数据 三.BFC(块级格式化上下文) 1.引入库 2.读入数据 总 ...

  8. BFC机制与浮动定位脱离文档流

    BFC机制与浮动定位脱离文档流 BFC块格式化上下文 --w3c规定的一种独立渲染区域 渲染流程基本上四个步骤: 1.计算CSS样式 2.构建Render Tree 3.Layout – 定位.大小, ...

  9. BFC机制关联浮动与脱离标准流

    脱离标准流的方式 1:浮动2:绝对定位3:固定定位, 脱离标准流之后定位的元素,会覆盖浮动的元素, 故此定位的比浮动的脱标等级高. 且在清除脱标带来的影响中,浮动的元素,可以被除浮动的方式来解决对父盒 ...

最新文章

  1. python 脚本撞库国内“某榴”账号
  2. 交换机工作原理、MAC地址表、路由器工作原理详解
  3. 极客新闻——04、WiFi万能钥匙万玉权:管理应该是“自下而上”
  4. 微信分享,二次分享(移动web端)
  5. 简单记录一下fabric版本1.4的环境搭建,
  6. 2-Authentication Framework Chain of Trust
  7. Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
  8. java system_java System类
  9. MVC 用户权限HttpContext.User.IsInRole()
  10. 一文了解阿里云CDN HTTP2.0
  11. oracle比较两个字段相似度,比较两个字符串的相似度
  12. php pdo query 空判断,检查空结果(php,pdo,mysql)
  13. Python的第三方库openpyxl
  14. 写给Android开发者的混淆使用手册
  15. 年月日_时间单位年月日是怎么得来的?
  16. JSEclipse安装后无法打开js文件_如何在你的 PC 上 下载并配置 Node.js
  17. 多样加密功能全面升级细数猖獗作恶“五宗罪”
  18. 钝    生_拔剑-浆糊的传说_新浪博客
  19. 阿拉伯数字与中文大写转换excel公式
  20. 每周读书#14 - 彷徨之刃

热门文章

  1. word中如何设置页码从任意页开始算起(图文版)
  2. 【统计和图形分析】上海道宁为您带来测试、分析、改进和控制自身服务、交易和制造流程的强大工具——SigmaXL
  3. 男士身高180厘米,体重多少合适
  4. vue-cli 初始化创建 vue2.9.6 项目路由守卫、封装axios、vuex
  5. C语言malloc函数的功能及用法
  6. SecureCRT crt.Screen.WaitForString用法
  7. Firefox切换标签页快捷键
  8. EVE安装与简单使用教程
  9. 霍尼韦尔、康斐尔、山特维克可乐满、丹佛斯、希尔顿、诺和诺德等最新资讯 | 跨国企业在中国...
  10. MATLAB中.mat文件转为excel(.xlsx)