块级格式化上下文BFC

news2024/11/30 14:41:29

块级格式化上下文BFC

    • 创建格式化上下文
    • BFC有哪些特性?
            • 特性一
            • 特性二
            • 特性三
            • 特性四
    • BFC的特性可以解决哪些问题?
            • 高度塌陷
            • margin塌陷
            • 包含塌陷

	BFC是前端日常开发中离不开的知识点,“块级格式化上下文”是格式化上下文中最常用的一种,格式化上下文是指页面中的一块渲染区域
拥有一套自己的渲染规则。

	近两天又系统的学习了一遍BFC的知识,也从本站上看了许多其他人讲解BFC的文章。受益匪浅的同时,也决定从我自己的认知角度写
一篇关于BFC的学习文章。

创建格式化上下文

1、文档的根元素html
2、 使用float使其浮动的元素
3、设置position: absolute;或者position:fixed的元素
4、设置display:inline-block的元素
5、表格单元格或者使用display:table-cell(包括使用display:table-*)属性的所有表格单元格
6、表格标题或者使用display:table-caption的元素
7、overflow属性不为visible的块级元素
8、设置display:flow-root或者display:flow-root list-item的元素
9、设置contain:layout,content,strict的元素
10、弹性盒子的一级子元素
11、网格布局元素
12、multicol containers
13、设置column-span为all的元素

BFC有哪些特性?

前端网页有多种布局方式,比如盒子模型的display属性、文档流的三种布局手段:标准流、浮动流、定位流等。我们在使用这些布局时,元素之间经常会出现互相影响的情况,比如块级元素的高度塌陷问题、浮动元素覆盖标准流元素问题等。这个时候,我们就可以用BFC的特性来解决布局中出现的这些问题。

特性一

BFC包含内部所有元素的行为。

特性二

不同BFC之间元素互不影响。

特性三

BFC中的元素按照正常流程遵循块和内联布局规则进行布局。

特性四

BFC特性所影响的元素只包括这个BFC容器的一级子元素,并不能影响元素本身节点和其子元素的子元素。

总结以上几点可以得出一个结论,BFC就相当于一个包含在根元素中的一个小的独立的根元素布局,而且这个BFC中的元素完全不会影响到BFC之外的其他元素。

BFC的特性可以解决哪些问题?

高度塌陷

高度塌陷问题一般是由于元素浮动引起的,当一个元素本身没有设置高度,其高度完全由子元素撑开,而子元素被设置为浮动元素后,由于子元素脱离了标准文档流,因此父元素就没有了高度。

高度塌陷前:
<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .box {
            width: 100px;
            height: 100px;
        }

        .bg_red {
            background-color: red;
        }

        .bg_yellow {
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div class="bg_yellow">
        <p>123</p>
        <div class="box bg_red"></div>
    </div>
</body>

</html>

在这里插入图片描述

高度塌陷后:
<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        .box {
            width: 100px;
            height: 100px;
        }

        .bg_red {
            background-color: red;
        }

        .bg_yellow {
            background-color: yellow;
        }

        .float {
            float: left;
        }
    </style>
</head>

<body>
    <div class="bg_yellow">
        <p>123</p>
        <div class="box bg_red float"></div>
    </div>
</body>

</html>

在这里插入图片描述
因为BFC包含其内部的所有元素,所以这时候可以将父元素设置BFC:

<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        .box {
            width: 100px;
            height: 100px;
        }

        .bg_red {
            background-color: red;
        }

        .bg_yellow {
            background-color: yellow;
        }

        .float {
            float: left;
        }

        .bfc {
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div class="bg_yellow bfc">
        <p>123</p>
        <div class="box bg_red float"></div>
    </div>
</body>

</html>

在这里插入图片描述

margin塌陷

在标准文档流中,两个垂直排布的元素,其相邻的margin-top和margin-bottom会重叠,因此这两个元素之间的margin之和并不是想象中的两个外边距相加,而是取两个margin中较大的值。

<!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>BFC</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            margin: 50px;
        }

        .bg_red {
            background-color: red;
        }

        .bg_blue {
            background-color: blue;
        }
    </style>
</head>

<body>
    <div class="box bg_red"></div>
    <div class="box bg_blue"></div>
</body>

</html>

在这里插入图片描述
因为不同BFC之间元素不会互相影响,所以我们可以给其中一个元素分别包裹上一层BFC:

<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        .box {
            width: 100px;
            height: 100px;
            margin: 50px;
        }

        .bg_red {
            background-color: red;
        }

        .bg_blue {
            background-color: blue;
        }

        .bfc {
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div class="box bg_red"></div>
    <div class="bfc">
        <div class="box bg_blue"></div>
    </div>
</body>

</html>

在这里插入图片描述

包含塌陷

直接上代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        .big_box {
            width: 300px;
            height: 400px;
        }
        .box {
            width: 100px;
            height: 100px;
            margin: 50px;
        }

        .bg_blue {
            background-color: blue;
        }

        .bg_yellow {
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div class="big_box bg_yellow">
        <div class="box bg_blue"></div>
    </div>
</body>

</html>

在这里插入图片描述
在下面的例子中,由于给内部蓝色的div设置了一个margin,导致外部div也有了一个相同的margin,这时候,可以将外部div设置为BFC,就可以解决问题:

<!DOCTYPE html>
<html lang="en">

<head>
    <style>
        .big_box {
            width: 300px;
            height: 400px;
        }
        .box {
            width: 100px;
            height: 100px;
            margin: 50px;
        }

        .bg_blue {
            background-color: blue;
        }

        .bg_yellow {
            background-color: yellow;
        }

        .bfc {
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div class="big_box bg_yellow bfc">
        <div class="box bg_blue"></div>
    </div>
</body>

</html>

在这里插入图片描述

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

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

相关文章

iOS程序内语言切换使用小结

随着时代的发展&#xff0c;应用程序相继出现了不同语言的版本方案&#xff0c;中文&#xff0c;英文&#xff0c;法文&#xff0c;韩文等等&#xff1b;想在应用程序中实现语言的自由切换&#xff0c;需要配置多个语言的文件&#xff0c;根据用户的动态选择获取不同语言文件下…

数字孪生论文阅读笔记【1】

[1]刘劲松. 高档数控机床数字孪生关键技术研究与应用[D].中国科学院大学(中国科学院沈阳计算技术研究所),2022.DOI:10.27587/d.cnki.gksjs.2022.000005. Motivation 不同数控机床对外信息接口不同&#xff0c;导致信息孤岛机床部件诊断困难&#xff0c;造成资源浪费维护资源不…

计算机中的数据存储规则

计算机的存储规则&#xff1a; text文本image图片sound声音 在计算机中&#xff1a;任意数据都是以二进制的形式进行存储:两种状态. 0与1, 打孔法 进制转换 任意进制转十进制: 公式: 系数 * 基数的权次幂 相加 系数&#xff1a; 就是每一位上的数字 基数&#xff1a;当前的进…

async/await详解

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;专注于前端领域各种技术&#xff0c;热衷分享&#xff0c;期待你的关注。 &#x1f4ab;系列专栏&#xff1a;vue3从入门到精通 &#x1f4dd;个人签名&#xff1a;不破不立 &#x1f36c…

面向对象(高级)

目录 1. 类变量和类方法&#xff08;静态变量&#xff09; 类变量&#xff08;静态变量&#xff09; 内存刨析&#xff1a; 注意事项和使用细节&#xff1a; 类方法&#xff08;静态方法&#xff09;&#xff1a; 使用场景&#xff1a; 注意事项和细节讨论&#xff1a; …

净亏损2.9亿元,财务业绩陷入困境后,逸仙电商盈利仍遥遥无期

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 逸仙电商概况 逸仙电商&#xff08;YSG&#xff09;是一家开曼群岛控股公司&#xff0c;通过与可变利益实体(“VIE”)的合同协议&#xff0c;在中国生产和销售化妆品和美容产品。公司结构如图所示。 逸仙电商成立的目的是…

不懂Hybird开发,感觉错过一个亿~

从当前移动开发的实际情况来看&#xff0c;移动端的开发方式三分天下&#xff1a;纯原生&#xff08;Native App&#xff09;、混合开发&#xff08;Hybird App&#xff09;、网页应用&#xff08;Web App&#xff09;。 ​ 纯原生&#xff08;Native App&#xff09;&#xff…

附录10-JS正则

在JS中有多种内置方法可以使用正则表达式&#xff0c;比如说match,exec,test等 文章参考 第十四章 吃通js正则表达式&#xff0c;javascript前端工程师必会技能_哔哩哔哩_bilibili 目录 1 正则常用方法 1.1 exec的简单使用 1.1.1 基本使用 1.1.2 lastIndex属性 1.1.…

Android Activity跳转

实现点击按钮&#xff0c;发送消息并跳转到另一个Activity MainActivity添加SendMessage方法 const val EXTRA_MESSAGE "com.example.myfirstapp.MESSAGE"class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super…

【C++】string的使用

文章目录一、前言二、标准库中的string类三. string类的常用接口1. 构造函数2. 容量操作3. 访问遍历4. 修改操作5. 其他操作一、前言 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0…

ubuntu18.04服务搭建yolov5开发环境

文章目录1. 系统和显卡信息2. 下载安装CUDA2.1 1cuda环境变量配置1. 系统和显卡信息 &#xff08;1&#xff09; 系统信息 kanditelpo-System-Product-Name:~$ cat /proc/version Linux version 4.15.0-191-generic (builddlcy02-amd64-032) (gcc version 7.5.0 (Ubuntu 7.5.…

PDF如何转Word?分享几个实用办公软件给你

PDF是我们常用的文件格式&#xff0c;因为它的兼容性好&#xff0c;在手机、电脑查看文件都不影响文件的格式与内容。并且它的保密性也好&#xff0c;因为它无法在线更改文件内容&#xff0c;但这也说明了&#xff0c;我们如果需要对其进行更改的话&#xff0c;将需要把PDF格式…

解决Vue3中echarts无法缩放的问题

这里写自定义目录标题前言问题描述官网示例正常官网示例在本地缩放异常灵光乍现问题解决前言 实际工作中&#xff0c;使用到vue和echarts技术。项目原来用的vue2echarts4&#xff0c;后来更新到了vue3echarts5&#xff0c;结果遇到echarts无法绽放的问题。 问题描述 官网示例…

PDF、Word、Excel文件前端预览实操干货都在这!

随着Odoo在各个行业领域的深入应用&#xff0c;对Odoo的前端交互体验要求也越来越高。 我们在项目开发中常常会遇到&#xff0c;需要上传文件并预览的问题。 这里是我遇到的需求&#xff0c;并完成的一个小demo。 在Odoo中实现文件上传 首先我们需要在qweb页面中加入上传的…

Chrome浏览器插件开发v3版本第二篇:改变页面布局案例

跟着官方教程走才是硬道理&#xff1a;https://developer.chrome.com/docs/extensions/mv3/getstarted/tut-focus-mode/ 老规矩&#xff0c;搭建基本的项目结构&#xff1a;创建一个manifest.json文件 {"manifest_version":3,"name":"Focus",&…

[附源码]Python计算机毕业设计宠物销售管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

SQL Server中row_number函数用法介绍

一、SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数&#xff0c;它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。 语法实例&#xff1a; select *&#xff0c;row_number() over(partition by column1 order by column2)…

PaddlePaddle飞浆搭建和机器学习文字识别

PaddlePaddle飞浆搭建和机器学习文字识别 文章转自&#xff1a;https://lingkang.top/archives/paddlepaddle-fei-jiang-da-jian-he-ji-qi-xue-xi-wen-zi-shi-bie 官网&#xff1a;https://www.paddlepaddle.org.cn/ 飞桨&#xff08;PaddlePaddle&#xff09;以百度多年的深…

第七章:Springmvc中applicationContext.xml配置文件应用上下文详解

主要配置程序的总体用上下文&#xff0c;让容器对全局掌握来龙去脉 1.扫描所有项目的包名 2.配置项目所有的静态资源映射 3.配置请求方法的映射驱动 4.配置适配器适配RequestMapping注解标注的Handler&#xff08;HandlerMethod类型&#xff09; 5.配置消息转换器决定浏览器以什…

Unity游戏Mod/插件制作教程04 - 如何创建配置文件

ConfigEntry<T> 在插件功能的设计中&#xff0c;经常会有需要玩家自己配置的东西&#xff0c;比如插件的各种设置&#xff0c;快捷键的分配等。在BepInEx中&#xff0c;提供了一个ConfigEntry类简化了配置操作。 我们来看一段示例&#xff1a; (注:由于阿B在代码页中会…