BFC的概念及作用

在了解什么是BFC之前,首先得明白什么是Box , Formatting Context (一个决定如何渲染文档的容器)的概念

 

Box: CSS布局的基本单位

Box是 CSS 布局的对象和基本单位, 直观点来说, 就是一个页面是由很多个 Box组成的, 元素的类型和display属性, 决定这个BOX的类型, 不同类型的BOX, 会参与不同的Formatting Context, 因此BOX内的元素会以不同的方式渲染, 其盒子的类型分别为:

  • block-level box:display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;
  • inline-level box:display 属性为 inline, inline-block, inline-table 的元素,会生成 inline-level box。并且参与 inline formatting context,若为block-level box 设置inline-block则会产生BFC
  • run-in box: css3 中才有, 这儿先不讲了

Formatting Context :是W3C CSS2.1规范中的一个概念,它是页面中的一块渲染区域, 并且有一套渲染规则,他觉得了子元素如何定位, 以及和其他元素关系和相互作用

最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。

  CSS2.1 中只有 BFC 和 IFCCSS3 中还增加了 GFC 和 FFC。

BFC 定义: BFC(Block formatting context)直译为“块级格式上下文”, 它是一个独立渲染区域,只有BLOCK-LEVEL BOX参与, 他规定内部的BLOCK-LEVEL BOX如何布局, 并与这个区域外部不相干

 BFC布局规则:

  1. 内部的Box会在垂直方向,一个接一个地放置。
  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  4. BFC的区域不会与float box重叠。
  5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  6. 计算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. 自适应两栏布局,根据BFC布局规则第3条:每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。因此,虽然存在浮动的元素aslide,但main的左边依然会与包含块的左边相接触。根据BFC布局规则第四条:BFC的区域不会与float box重叠。我们可以通过通过触发main生成BFC, 来实现自适应两栏布局.main {
      overflow: hidden;
    BFC后,这个新的BFC不会与浮动的aside重叠。因此会根据包含块的宽度,和aside的宽度,自动变窄。

转载于:https://www.cnblogs.com/longsf/p/10438078.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bitcount java_java-Long.bitCount()如何找到设置的位数?

让我们以255为例.我们将这些位组合在一起.首先,我们从255开始,为0b1111.1111(二进制为8 1)第一行代码是:i i - ((i > > > 1) & 0x5555555555555555L);这条线正在梳理每对1.由于我们有8个1,所以我们希望组合成对,并得到2,2,2,2之类的东西.由于它是二进…

Luogu P2463 [SDOI2008]Sandy的卡片

题目链接 \(Click\) \(Here\) 真的好麻烦啊。。事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦。。(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\)) 这个题最开始我想的是\(RMQ\)遍历每一个…

java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

1 日志路径带来的痛点Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径.本文借鉴 Tomcat 的…

常用数据结构

字典:即map,映射,通过key>value的方式直接查找与之对应的值,实现一般是hash表或二叉树跳跃表:本质是链表,只不过将数据进行提取分层,将总数据置为底层,提取2、4、的倍数为第一二层…

java jasypt_Jasypt

软件简介Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,SpringSecurity(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1…

ZABBIX监控JAVA日志文件

最近开发人员有一个需求,监控java程序的报错日志,如日志中包含“ERROR”关键字的信息,就邮件告警,以下是具体实现方法。 一、创建模板以上是已经创建好的模板,名为“Template App Java logs”创建应用集二、创建监控项…

如何快速把音乐转成MP3格式

身边有这样一群朋友经常搞音乐,仿佛生活的乐趣只有音乐,不能也能理解,谁没有点自己的爱好呢?但是如果想要在茫茫人海中成为佼佼者,并不是这么容易的,但是我们要在速度上赢更多的人,所以写了这篇…

new URI(zk_servers_1) 路径包含下划线无法获取host的问题

spring cloud gateway使用zookeeper作为注册中心调用其它服务的时候报了下面这个错误: ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范围_JAVAEE之内置对象和属性范围

内置对象和属性范围四种属性范围九个内置对象1.内置对象如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似于这样的对象,我们叫做jsp的内置对象&#x…

JavaWeb学习笔记(九)--HttpServletResponse

web服务器接收到客户端的HTTP请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。 request和response对象既然代表请求和响应,那我们要获取客户端提交过来的数据,只需要找request对象即可。要…

java html5 上传_HTML5结合ajax实现文件上传以及进度显示

基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活, 本来打算使用jquery插件进行异步文件上传,比如uploadfy但是需要额外的支持,也有人用iframe模仿异步上传机制,感觉都比较别扭。…

7天玩转机器学习

7天玩转机器学习 人工智能时代,数据迎来大爆发,数据对于提升业务价值的重要性与日俱增。但面对海量数据,传统分析方法已经显得无能为力,而机器学习的成熟为企业带来了强大的分析引擎,可在众多领域帮助企业挖掘数据价值…

centos 6.5 yum java_Centos6.5 yum 安装jdk1.8

centos 6.5 安装卸载jdk-- 查看有没有预装jdk版本java -version-- 查看已安装的版本rpm -qa|grep java-- 卸载预装版本 rpm -e --nodeps 命令卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安装的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//筛选符合条件的记录Aggregation…

一次面试总结(记录)

1,从一个数组里找重复出现次数最多的一个数?2,常用的linux命令3.垃圾收集器有哪些 ?垃圾收集算法?4,线上服务器变慢了你是如何定位问题并处理的?5,你自己实现一个本地缓存,淘汰最久未使用,你怎么设计6,用栈实现计算器7,剔除二叉树…

java 累加 0-9 a-z_JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

一、获得0-9,a-z,a-z范围的随机字符串/*** java获得0-9,a-z,a-z范围的随机数* param length 随机数长度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 扩展开发】Zephir 基础篇

上一篇 《Zephir 简介》 简单介绍了环境搭建,编写了一个的简单示例。这一篇继续介绍 Zephir 基础。 基本语法Zephir 中,每个文件都必须有且只有一个类,每个类都必须有一个命名空间,目录结构必须与所使用的类和命名空间的名称相匹配…

java常见排序算法有哪些_Java中常用的6种排序算法详细分解

排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排序算法:1. 选择排序选择排序的基本思想是遍历数组的过程中&…

python range函数

这个函数很简单,就不写例子了,看看语法,拿来即用 python range() 函数可创建一个整数列表,一般用在 for 循环中。 函数语法 range(start, stop[, step]) 参数说明: start: 计数从 start 开始。默认是从 0 开始。例如ra…

java tomcat重启linux_Linux下tomcat重启

进入Tomcat下的bin目录cd/user/local/tomcat/bin关闭tomcat./shutdown.sh查看tomcat是否关闭ps -ef|grep java显示以下信息,则Tomcat还未关闭root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file/usr/loca…