CSS——什么是BFC?

news/2024/7/16 10:18:45

昨天晚上看了BFC,写笔记记录一下。

CSS规范中对 BFC 的描述

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

浮动,绝对定位元素,非块盒的块容器(例如,inline-blocks,table-cells和table-captions)和'overflow'不为'visible'的块盒会为它们的内容建立一个新的块格式化上下文

在一个块格式化上下文中,盒在竖直方向一个接一个地放置,从包含块的顶部开始。两个兄弟盒之间的竖直距离由'margin'属性决定。同一个块格式化上下文中的相邻块级盒之间的竖直margin会合并

在一个块格式化上下文中,每个盒的left外边(left outer edge)挨着包含块的left边(对于从右向左的格式化,right边挨着)。即使存在浮动(尽管一个盒的行盒可能会因为浮动收缩),这也成立。除非该盒建立了一个新的块格式化上下文(这种情况下,该盒自身可能会因为浮动变窄)

MDN 对 BFC 的描述

一个块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。

一个块格式化上下文由以下之一创建:

  • 根元素或其它包含它的元素
  • 浮动元素 (元素的 float 不是 none)
  • 绝对定位元素 (元素具有 position 为 absolute 或 fixed)
  • 内联块 (元素具有 display: inline-block)
  • 表格单元格 (元素具有 display: table-cell,HTML表格单元格默认属性)
  • 表格标题 (元素具有 display: table-caption, HTML表格标题默认属性)
  • 具有overflow 且值不是 visible 的块元素,
  • display: flow-root
  • column-span: all 应当总是会创建一个新的格式化上下文,即便具有 column-span: all 的元素并不被包裹在一个多列容器中。

一个块格式化上下文包括创建它的元素内部所有内容,除了被包含于创建新的块级格式化上下文的后代元素内的元素。

块格式化上下文对于定位 (参见 float) 与清除浮动 (参见 clear) 很重要。定位和清除浮动的样式规则只适用于处于同一块格式化上下文内的元素。浮动不会影响其它块格式化上下文中元素的布局,并且清除浮动只能清除同一块格式化上下文中在它前面的元素的浮动。

张鑫旭对 BFC 的描述

http://www.zhangxinxu.com/wordpress/2015/02/css-deep-understand-flow-bfc-column-two-auto-layout/

BFC全称”Block Formatting Context”, 中文为“块级格式化上下文”。啪啦啪啦特性什么的,一言难尽,大家可以自行去查找,我这里不详述,免得乱了主次,总之,记住这么一句话:BFC元素特性表现原则就是,内部子元素再怎么翻江倒海,翻云覆雨都不会影响外部的元素。所以,避免margin穿透啊,清除浮动什么的也好理解了

emmmmm,全部没看懂!

妈的,BFC 到底是什么?

先思考一个问题:

请问:什么是色情?

联邦最高法院大法官斯图尔特更有一句名言:

我不知道什么是色情,不过,我看了之后,就能知道

I know it when I see it

类似地:

  1. 我不知道什么是 BFC
  2. 但是你写出样式,我就知道这是不是 BFC

BFC 就是这样的东西(堆叠上下文也是)

  1. 它没有定义
  2. 它只有特性/功能

功能1:爸爸管儿子

用 BFC 包住浮动元素。(这 TM 不是清除浮动,.clearfix 才是清除浮动)

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    .baba{
      border: 10px solid red;
      min-height: 10px;
      /*触发BFC的条件*/
      /* display: flow-root;  */
      /*display: inline-block;*/
      /*float: left;*/
      /*position: absolute;*/
      overflow: auto;
      
    }
    .erzi{
      background: green;
      float:left;
      width: 300px;
      height: 100px;
    }
  </style>
</head>

<body>
  <div class="baba">
    <div class="erzi">
    </div>
  </div>
</body>

</html>
复制代码

演示地址:http://js.jirengu.com/rozaxufetu/1/edit?html,css,output

功能2:兄弟之间划清界限

用 float + div 做左右自适应布局

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    .gege{
      width: 100px;
      min-height: 600px;
      border: 3px solid red;
      float: left;
      margin-right: 20px;
    }
    .didi{
      min-height: 600px;
      border: 5px solid green;
      display: flow-root;
    }
  </style>
</head>
<body>
  <div class="gege">gege</div>
  <div class="didi">1234</div>
</body>
</html>
复制代码

演示地址:http://js.jirengu.com/felikenuve/1/edit?html,css,output

转载于:https://juejin.im/post/5ce423d45188252dba29241c


http://www.niftyadmin.cn/n/4072645.html

相关文章

Windows XP Nlite 2007珍藏版 BY 丘比特

Windows XP Nlite 2007珍藏版 BY 丘比特 图片&#xff1a; 图片&#xff1a; 图片&#xff1a; 图片&#xff1a; 2007-12-26 23:03 本光盘是本人专为老机、网吧及封装母盘所做的Windows" class"t_tag">Windows XP SP2精简版&#xff0c;及配套使用的软件工具…

【php设计模式】单例模式

实现单例的三个关键点&#xff1a; 1、使用一个静态成员来保持一个单例实例 2、一个私有的构造方法使得该类只能在类的内部方法中被实例化 3、在实例化对象的静态方法中&#xff0c;先判断静态变量是否已经被赋值&#xff0c;如果赋值则返回该静态成员如果没有则重新实例化赋值…

如何用ps做计算机科学系的logo,PS教你制作一个精致的大众汽车LOGO图文教程

这个教程将向你展示&#xff0c;如何运用图层样式、径向渐变工具和多边形套索工具&#xff0c;来描摹传说中的大众形象标志。一起来看看吧我们的教程被分为两个简要的阶段&#xff1a;1. 创建圆形球面2. 绘制 “VW”徽标(大众Logo的主形——译者注)作者PSD源文件&#xff1a;微…

开关IIS不重启电脑

开关IIS不重启电脑 有时候我们在WEB程序如&#xff1a;ASP,中无意中使用到了一个死循环&#xff0c;或者在测试 DLL组件时&#xff0c;挂了。这时候IIS就停止了响应&#xff0c;我们要继续我们的工作啊&#xff0c;重启IIS服务吧。 然而这个进程还在执行&#xff0c;Internet 服…

Django(一)持续更新中

一、Django基本流程和命令行工具 1. 安装Django 1pip3 install django2. 在当前目录新建一个mysite项目 1django-admin.py startproject mysite startproject命令创建一个目录&#xff0c;包含以下文件&#xff1a; __init__.py # 空文件&#xff0c;让Python把该目录当成一个…

HTC是HTML Component的缩写

HTC是HTML Component的缩写&#xff0c;是IE5及后续版本浏览器所支持的客户端组件。据我个人理解&#xff0c;HTC就是一组以DHTML为基础封装了客户端行为的脚本&#xff0c;每HTC以*.htc的文件存储&#xff0c;一个HTC是一个客户端“类”。 编写HTC最重要的一点是知道element对…

利用Spring Data Redis 来实现消息的发布订阅机制

2019独角兽企业重金招聘Python工程师标准>>> redis是一款高性能key-value存储系统&#xff0c;不仅能做缓存&#xff0c;还能用于消息队列 这里利用Spring Data Redis 来实现消息的发布订阅机制 Demo地址&#xff1a;https://gitee.com/1913210361/redis-queue-demo…

H3C-实验七

对每台路由器的直连ip编写动态路由命令 路由器1 rip 1 network 192.168.1.0 network 10.1.1.0 undo summary undo network 10.0.0.0 version 2 network 10.1.1.0 0.0.0.3 路由器2 rip 1 network 10.1.1.0 undo summary undo network 10.0.0.0 version 2 network 10.1.1.0 0.0.0…