百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

CSS布局基础——BFC

liuian 2024-12-13 14:53 19 浏览

what's BFC?

第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使用手写罢了。但是它的重要性确是杠杠的,可以这么说,没有它就就没有什么css布局。 BFC,全称 Block Formatting Context,翻译成块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。

看一大堆文字可能有点抽象,现在拿个js函数来比喻说明一下吧,我们现在有一个叫做bfc的函数,而一个函数就是一个块级作用域,这里面所有的变量申明、运行都在这个块级作用域内进行。理所当然,一个环境中的变量不会影响到其它环境变量。

var box =1;
function bfc{
    var box = "2";
    console.log(box);
}
bfc;//2
console.log(box)//1

所以,我们是不是可以这样理解:所谓的BFC就是css属性的执行域?

BFC的生成

既然js可以通过函数等方法来实现块级作用域,我想那css肯定也是可以通过一些手段来实现BFC的。 这里BFC的官方文档写到:

Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.

从这段描述可以清楚知道,以下方法可以创建一个新的块级执行上下文(BFC):

  1. 浮动元素、
  2. 绝对定位元素,
  3. 块级元素以及块级容器(比如inline-block、table-cell、table-capation)
  4. overflow值不为visible的块级盒子

当然,root元素会自动生成一个BFC,这个应该很好理解,毕竟需要一个根BFC来布局

执行规则

既然存在了执行环境,那肯定会存在执行规则。BFC的

1.在一个块级排版上下文中,盒子是从包含块顶部开始,垂直的一个接一个的排列的。每个盒子的左外边是触碰到包含块的左边的(对于从右向左的排版,则相反)

这个应该不难理解。就是我们如果在

里写几个<div>,它会依次垂直排列,并且都是在页面的最左边(对于从右向左的排版,则相反)。

2.相邻两个盒子之间的垂直的间距是被margin属性所决定的,在一个块级排版上下文中相邻的两个块级盒之间的垂直margin是折叠的。

这句描述是不是超级熟悉,这不是我css常见的边距折叠问题吗?现在知道它出自哪里了吧,就是这里。下面的俩个盒子各有上下20px的间距,加起来应该有40px,但显然,现在只有20px;

<style>
.top{
    width:100px;
    height:100px;
    background:#000;
    margin:20px 0;
}
.bottom{
    width:100px;
    height:100px;
    background:#000;
    margin:20px 0;
}
</style>
<div  class="top"></div>
<div  class="bottom"></div>
发生边距折叠是因为同一个BFC的关系(根BFC)。既然知道原因,解决就好办了,让他们俩个不在同一个BFC就ok啦。

3. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。

通过这条属性,我们又可以想到哪些呢。对,浮动元素的塌陷问题。我们知道,一个元素中的子元素浮动了,这个父元素就会发生高度塌陷问题。下例中一旦内部的红色元素浮动,蓝色的盒子就无法被撑起,高度会变成0。

<style>
.wrap{
    width:150px;
    background:#ADD9E6;
    margin:20px 0;
}
.in{
    width:100px;
    height:100px;
    background:#FFCCCC;
    margin:20px 0;
    //float:left;
}
</style>
<div class="wrap"><div class="in"></div></div>

现在我们知道了,这是因为浮动元素创建了一个新的BFC,成为了一个独立的容器,不会影响到外面的父元素了。它的定位规则不再受制于这个父元素了。如何解决这一问题?我们知道只要在在父元素加上overflow:hidden可以清除浮动。但是这又是为什么?

其实,这就是前面提到的overflow:hidden可以生成一个新的BFC,而这个浮动的子元素,被它所包含了,从而成为一个独立容器,它的float外溢不了了,外面的元素不再受其浮动的影响,从而达到了清除浮动的作用。

相关推荐

x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!

还在为命令行下处理JSON数据烦恼吗?jellex来了!它是一款基于终端的交互式JSON和JSONLines数据处理工具,让你用熟悉的Python语法,轻松过滤、转换和探索JSO...

一篇长文带你在Python里玩转Json数据

Json简介Json(JavaScriptObjectNotation)很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。这因为...

Python JSON 魔法手册:数据转换的终极艺术

对话实录小白:(崩溃)我从API拿到了JSON数据,怎么变成Python对象?专家:(掏出魔法书)用json模块,轻松实现数据转换!JSON基础三连击1.字符串Python对...

Python JSON 详解教程(python json())

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式(lightweightdatainterchangeformat)常用于Web应用、配置文件(co...

Python 数据的 JSON 格式序列化及反序列化

在Python中,将数据转换为JSON格式非常简单,可以使用内置的json模块。json模块提供了json.dumps()和json.dump()方法,用于将Python对象...

如何使Python类可JSON序列化(python json 类)

技术背景在Python开发中,JSON(JavaScriptObjectNotation)是一种常用的数据交换格式。然而,Python的json模块默认只能序列化一些基本数据类型,如字典、列表、字...

详细介绍一下Python如何对JSON格式数据进行处理?

在Python中对于JSON数据的处理是在日常开发中的常见需求之一。通常情况下,对JSON数据的处理主要涉及到如下的的几个步骤对于JSON数据的解析操作对于JSON数据的处理操作对于JSON数据的格式...

Python 字典l转换成 JSON(python转化字典)

本文需要5分钟。如果对您有用可以点赞评论关注.Python字典到JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于ECMAScrip...

打造熟悉的VS界面风格(vs界面设计美化)

用惯了老机子的VS界面,换新机子时,各种不适应。现在重新打造老款样式:1)下载VisualStudio2013ColorThemeEditorhttps://marketplace.vis...

办公小技巧:全部亮相 让Excel单元格完全显示文本

平时我们在使用Excel制作表格的时候,经常会遇到由于文本内容较多,导致这些内容无法在一个单元格中完全显示。常规的方法是将单元格设置为“自动换行”,但是这样会影响整个文件的美观。下例是某小区的入住登记...

WinForms 中的 CheckBox 控件使用指南

在WinForms中,CheckBox控件是一个允许用户选择或取消选择的单选按钮。它通常用于表示布尔值(真/假)或允许多选的情况。以下是如何使用CheckBox控件的一些基本信息和示例代码。创建...

图片转文字--四种OCR工具的安装和使用

本文仅测试简单的安装和使用,下一步应该是测试不同数据集下的检测准确率和检测效率,敬请期待。作者的系统环境是:笔记本:ThindPadP520OS:win11显卡:QuadroP520一、EasyO...

C# 给Word每一页设置不同图片水印

Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法。下面,将以C#代码为例,对W...

集成的面向对象控件Xtreme Controls正式发布v17.0.0

CodejockXtremeControls为Windows图形用户软件工程师提供众多的有关MFC的控件产品,该产品是通过完全测试并专门为图形用户设计的一款专业控件。它是一款集成了面向对象的控件被...

Win10 Build 10061老问题修复新问题来

|责编:刘菲菲【中关村在线软件资讯】4月23日消息:微软今天正式推送了Windows10Build10061预览版这个版本除了正常的功能更新和调整外,还修复了多个bug。其中一部分对于开发者开...