什么是BFC?它的作用是什么?

news/2024/11/8 9:49:06/

文章目录

    • 1.BFC定义
        • 创建BFC的条件
        • BFC的特点
    • 2.BFC的作用

1.BFC定义

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

通俗来讲:BFC是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆
放,并且不会影响其它环境中的物品。如果一个元素符合触发BFC的条件,则BFC中的元素布局不受外部
影响。
补充两个相关概念:

  • Box: Box 是 CSS 布局的对象和基本单位,⼀个⻚⾯是由很多个 Box 组成的,这个Box就是我们所
    说的盒模型。
  • Formatting context:块级上下⽂格式化,它是⻚⾯中的⼀块渲染区域,并且有⼀套渲染规则,它
    决定了其⼦元素将如何定位,以及和其他元素的关系和相互作⽤。

创建BFC的条件

  • 根元素:body;
  • 元素设置浮动:float 除 none 以外的值;
  • 元素设置绝对定位:position (absolute、fixed);
  • display 值为:inline-block、table-cell、table-caption、flex等;
  • overflow 值为:hidden、auto、scroll;

BFC的特点

  • 垂直方向上,自上而下排列,和文档流的排列方式一致。
  • 在BFC中上下相邻的两个容器的margin会重叠
  • 计算BFC的高度时,需要计算浮动元素的高度
  • BFC区域不会与浮动的容器发生重叠
  • BFC是独立的容器,容器内部元素不会影响外部元素
  • 每个元素的左margin值和容器的左border相接触

2.BFC的作用

1)解决margin的重叠问题:由于BFC是一个独立的区域,内部的元素和外部的元素互不影响,将两个元素变为两个BFC,就解决了margin重叠的问题,具体方法如下

  • 子元素变为行内盒子: display: inline-block
  • 子元素加入浮动属性或定位

2)解决高度塌陷的问题(清除浮动):在对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为0。解决这个问题,只需要把父元素变成一个BFC,因为BFC的高度包含浮动元素的高度。常用的办法是给父元素设置overflow:hidden
3)创建自适应两栏布局:两栏布局,左边的宽度固定,右边的宽度自适应

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0px;padding: 0px;box-sizing: border-box;}html,body{height: 100%;}/* 浮动 */.container{height: 100%;background-color: aqua;}.left{float: left;width: 200px;height: 100%;background-color: blanchedalmond;}.right{width: auto;height:100%;background-color: pink;overflow: hidden;} </style>
</head>
<body><!-- 两栏布局 --><div class="container"><div class="left">左边</div><div class="right">右边</div></div></body>
</html>

左侧设置float:left,右侧设置overflow:hidden。这样右边就触发了BFC,BFC的区域不会与浮动元素发生重叠,所以两侧就不会发生重叠,实现自适应两栏布局。


http://www.ppmy.cn/news/77961.html

相关文章

如何编写一个测试方案?---她是这样做的!

1、背景 工作上的项目规范要求&#xff1a;测试排期大于3D的项目要编写测试方案。调研了部分同学的情况&#xff0c;在此流程规范要求的基础上&#xff0c;对于需求的逻辑复杂或技术实现复杂等情况也会准备测试方案。 我个人主要负责OMS系统测试&#xff0c;它是整个履约流转中…

ChatGPT:Sorry, You Have Been Blocked - 如何解决?

ChatGPT 是由 OpenAI 开发的 AI 聊天机器人&#xff0c;自2022年向公众发布以来&#xff0c;已经帮助全球数百万用户解决各种问题。然而&#xff0c;有时候您可能会遇到一个令人困惑的问题&#xff1a;“Sorry, You Have Been Blocked”。这意味着您无法使用 ChatGPT。本文将为…

web安全第一天 ,域名,dns

第一天 什么是域名&#xff1f;域名就是网络地址 在hhtp之后的就是域名 域名在哪里注册呢 国内注册商有很多&#xff0c;在网络上搜索一下阿里云万网就可以注册 什么是二级域名和多级域名 域名通常都是www.开头 &#xff0c;而www.被称为顶级域名&#xff0c;在搜索的时候…

led钨丝灯项目笔记

基于ESP-12E的LED钨丝灯作品 原理图&#xff1a; PCB&#xff1a; 嘉立创上面有些封装没有&#xff0c;需要自己画 画完这两个&#xff0c;此时它们还没有相关联&#xff0c;需要将它们关联起来 在封装管理器中将它们关联起来 在这里面就可以找到自己画的封装 如&#xff1a;…

Apache和Tomcat的关系

Apache和Tomcat的关系 Apache和Tomcat是两个常见的开源软件&#xff0c;它们在Web应用程序开发和部署中扮演不同的角色。 1.Apache Apache HTTP Server&#xff08;通常称为Apache&#xff09;是一个广泛使用的Web服务器软件。它提供了一个可靠的、高性能的HTTP服务器&#xff…

[C++]哈希表实现,unordered_map\set封装

目录​​​​​​​ 前言&#xff1a; 1 哈希 1.1 为什么有哈希 1.2 哈希结构 1.3 哈希冲突 2 闭散列 2.1 闭散列结点结构和位置状态表示 2.2 哈希类结构 2.3 插入 2.4 查找 2.5 删除 3 开散列 3.1 哈希表结点结构 3.2 哈希表结构 3.3 插入 3.4 查找、删除 3.5…

JavaScript 乘除法运算时,有精度误差的风险,导致运算结果出现很长的小数点,这种情况怎么解决?

问题&#xff1a; 有如下一段JavaScript代码&#xff1a; var quantity 5; var price 99.66; var subtotal price * quantity; alert(subtotal); 打印的运算的结果&#xff1a;498.29999999999995 运算结果为啥不是498.3&#xff0c;而是498.29999999999995 分析&#xf…

数据结构与算法(六)

#数据结构 基础知识 数据结构:相互之间存在的一种多种的特定关系的数据元素的集合 逻辑结构&#xff1a; 线性表&#xff1a;最基本最简单的一种数据结构&#xff0c;一对一逻辑关系。 集合结构、线性结构、树形结构、图形结构 物理结构&#xff1a;顺序存储、链式存储 逻…