CSS BFC特性和应用

目录

  • 1,介绍
  • 2,BFC布局规则
  • 3,创建BFC
  • 4,BFC应用
    • 1,浮动子元素使父级高度坍塌
    • 2,非浮动元素被浮动元素覆盖
    • 3,margin 合并
      • 1,父子 margin 合并:父级和第1个/最后1个子元素
      • 2,相邻兄弟元素的 margin 合并

1,介绍

BFC 就是页面上一块独立的容器,内部有自己的渲染布局规则。容器内外的元素不会相互影响。

2,BFC布局规则

  1. 内部的元素,在垂直方向上会依次放置。
  2. 元素在垂直方向上的距离由 margin 决定,同一个 BFC 的两个相邻元素的 margin 会重叠。
  3. BFC 区域不会和外部浮动元素重叠。
  4. 计算 BFC 高度时,浮动子元素也参与运算。

在标准流中的根元素 html 就是一个天然的 BFC 环境。

3,创建BFC

简单介绍下最常用的,更多的创建方式参考MDN-BFC。

属性属性值
float不为 none
positionabsolutefixed
displayinline-blockflow-rootflexgridtable
overflow不为 visibleclip 的块级元素

无论哪种方式创建的BFC,都有一定的副作用。

只有 display: flow-root 是无副作用的,它的行为如同 root(在浏览器中是 html )元素

4,BFC应用

1,浮动子元素使父级高度坍塌

<style>
  .container {
    border: 2px solid black;
  }
  .item {
    float: left;
    width: 50px;
    height: 50px;
    background-color: salmon;
  }
</style>

<body>
  <div class="container">
    <div class="item"></div>
  </div>
</body>

表现

在这里插入图片描述
解决:只需要将父元素设置为 BFC 即可。

.container {
  display: flow-root;
}

在这里插入图片描述

2,非浮动元素被浮动元素覆盖

对于浮动元素的特性来说,这是正常现象。

<style>
  .box1 {
    float: left;
    width: 100px;
    height: 100px;
    background-color: rgba(255, 255, 255, 0.75);
    border: 1px solid black;
  }
  .box2 {
    border: 2px solid red;
  }
</style>

<body>
  <div class="box1"></div>
  <div class="box2">求关注,下雪天的夏风</div>
</body>

表现:

在这里插入图片描述

但我们不想让非浮动元素 box2 被覆盖,所以可设置 box2 为 BFC 来解决。

.box2 {
  display: flow-root;
}

在这里插入图片描述

上面这种就是经典的两列布局实现方式之一。

3,margin 合并

MDN参考

margin 合并的3种情况,BFC可以解决前2种

  1. 父子 margin 合并:父级和第1个/最后1个子元素
  2. 相邻兄弟元素的 margin 合并
  3. 空块级元素的 margin 合并

1,父子 margin 合并:父级和第1个/最后1个子元素

<style>
  .container {
    background-color: skyblue;
  }
  .item {
    margin-top: 50px;
    width: 50px;
    height: 50px;
    background-color: salmon;
  }
</style>

<div>求关注,下雪天的夏风</div>
<div class="container">
  <div class="item"></div>
</div>

表现:父级“掉”下来了:

在这里插入图片描述

解决方式之一,就是将父级设置为 BFC。

.container {
  display: flow-root;
}

在这里插入图片描述

2,相邻兄弟元素的 margin 合并

<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: salmon;
  }
  .box1 {
    margin-bottom: 50px;
  }
  .box2 {
    margin-top: 100px;
  }
</style>
<body>
  <div class="box box1"></div>
  <div class="box box2"></div>
</body>

表现,margin 并没有相加,而是合并取最大值:

在这里插入图片描述

解决:给其中一个元素增加父级,这样就回到了第1种情况。

<style>
  .container {
    display: flow-root;
  }
</style>

<div class="box box1"></div>
<div class="container">
  <div class="box box2"></div>
</div>

在这里插入图片描述


这里也说明第一种父子 margin 合并还有哪些解决办法(bottom 合并同理):

  1. 父元素设置 border-top
  2. 父元素设置 padding-top
  3. 父元素和第一个子元素之间添加内联元素进行间隔。

以上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 安装 MySQL8 配置、授权、备份、远程连接

目录 0100 系统环境0200 下载0300 安装0400 服务管理0401 关闭、启动、重启服务0402 查看服务状态 0500 查看配置文件0600 账号管理0601 添加账号0602 删除账号0603 修改密码0604 忘记root密码 0700 自动备份0800 远程访问 0100 系统环境 [rootlocalhost ~]# cat /proc/versio…

SQL Server数据库部署

简介 21世纪&#xff0c;人类迈入了“信息爆炸时代”&#xff0c;大量的数据、信息在不断产生&#xff0c;伴随而来的就是如何 安全、有效地存储、检索和管理它们。对数据的有效存储、高效访问、方便共享和安全控制已经成 为信息时代亟待解决的问题。数据库&#xff08;Databas…

锐捷RG-UAC应用网关 前台RCE漏洞复现

0x01 产品简介 锐捷RG-UAC系列应用管理网关是锐捷自主研发的应用管理产品。 0x02 漏洞概述 锐捷RG-UAC应用管理网关 nmc_sync.php 接口处存在命令执行漏洞&#xff0c;未经身份认证的攻击者可执行任意命令控制服务器权限。 0x03 复现环境 FOFA&#xff1a;app"Ruijie-R…

〖大前端 - 基础入门三大核心之JS篇㊹〗- DOM事件委托

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

认识K线形态,把握买入卖出时机

一、认识K线 1、K线的含义 股票一天之内有4个最关键的价格&#xff0c;开盘价、收盘价、最高价和最低价&#xff0c;把这个价格显示在图上就是K线图。 以金斗云智投电脑版为例&#xff0c;打开软件&#xff0c;任意搜索一支个股&#xff0c;就可以看到这支股票的K线。 股市新…

智加科技获全国首张重卡无人驾驶开放道路测试牌照

2023年12月1日&#xff0c;智加科技获得苏州市智能网联汽车无人化测试牌照。该牌照也是江苏省及国内首张无人重卡开放高速公路全路段全场景全息路网&#xff08;S17苏台高速&#xff09;道路测试牌照。 该重卡无人驾驶开放道路测试牌照&#xff0c;经由苏州市智能网联汽车联席小…

假设检验和统计推断:从样本到总体

1. 写在开头 统计学中的假设检验和统计推断是从样本数据中对总体进行推断和判断的关键工具。本文将深入探讨假设检验的类型,并结合具体的场景和例子,展示不同类型假设检验的应用。 2. 单样本 t 检验 2.1 概述 单样本 t 检验(One-sample t-test)是一种用于比较一个样本的…

Asp.net core WebApi 配置自定义swaggerUI和中文注释,Jwt Bearer配置

1.创建asp.net core webApi项目 默认会引入swagger的Nuget包 <PackageReference Include"Swashbuckle.AspNetCore" Version"6.2.3" />2.配置基本信息和中文注释&#xff08;默认是没有中文注释的&#xff09; 2.1创建一个新的controller using Micr…

卷积神经网络-3D医疗影像识别

文章目录 一、前言二、前期工作1. 介绍2. 加载和预处理数据 二、构建训练和验证集三、数据增强四、数据可视化五、构建3D卷积神经网络模型六、训练模型七、可视化模型性能八、对单次 CT 扫描进行预测 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&a…

Mongodb安装及其使用

1.Linux系统上安装Mongodb 在usr/local文件夹下创建mongo文件夹 下载mongodb包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.5.tgz解压mongodb tar -zxvf mongodb-linux-x86_64-rhel70-6.0.5.tgz更改文件夹的名字 mv mongodb-linux-x86_64-rh…

竞赛选题 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…

1.3 Linux文件系统

一、Linux文件系统结构 Linux下都是文件&#xff0c;所以没有Windows一样的盘&#xff0c;有的只有文件夹。 cd /    // 进入根目录 ls     // 查看根目录"/"下的文件及文件夹 /bin    &#xff1a;存储了很多系统命令&#xff0c; /usr/sbin 也存储了…

数据库表的管理

表的基本概念 表是包含数据库中所有数据的数据库对象。数据在表中的组织方式与在电子表格中相似&#xff0c;都是 按行和列的格式组织的。每行代表一条唯一的记录&#xff0c;每列代表记录中的一个字段。例如&#xff0c;在包含公 司员工信息的表中&#xff0c;每行代表一名员工…

Python zip函数及用法与lambda表达式及用法

Python zip函数及用法 zip() 函数可以把两个列表“压缩”成一个 zip 对象&#xff08;可迭代对象&#xff09;&#xff0c;这样就可以使用一个循环并行遍历两个列表。为了测试 zip() 函数的功能&#xff0c;我们可以先在交互式解释器中“试验”一下该函数的功能。 >>&g…

群晖Video Station 添加海报墙-新方法

海报墙 一般我们找到的都是mp4、mkv等格式的视频资源&#xff0c;而没有像上图这样的海报资源&#xff0c;那要怎样实现海报墙呢&#xff1f; 按照以前的方法&#xff0c;是可以通过The Movie Database的API Key来搜刮电影海报信息&#xff0c;但是现在这个方法不行了 现在介绍…

力扣66. 加一

文章目录 力扣66. 加一示例代码实现总结收获 力扣66. 加一 示例 代码实现 class Solution {public int[] plusOne(int[] digits) {int ndigits.length;for(int in-1;i>0;i--){if(digits[i]!9){digits[i];for(int ji1;j<n;j){digits[j]0;}return digits;}}int[] resnew i…

使用String.valueOf()的坑

说明&#xff1a;记录一次使用String.valueOf()的坑&#xff0c;以下是一段有问题的代码&#xff1a; String count String.valueOf(listData.get(0).get(0).get("count");if (StringUtils.isBlank(count) || "0".equals(count)) {result.setResult(page)…

剑指 Offer(第2版)面试题 14:剪绳子

剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子 剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子解法1&#xff1a;动态规划解法2&#xff1a;数学 剑指 Offer&#xff08;第2版&#xff09;面试题 14&#xff1a;剪绳子 题目来源…

组合模式-C++实现

组合模式是一种结构型设计模式&#xff0c;它允许我们将对象组织成树状结构&#xff0c;并以递归的方式处理它们。该模式通过将单个对象和组合对象统一对待&#xff0c;使得客户端可以以一致的方式处理对象集合。 组合模式中有两种角色&#xff1a;组合和组件。组件就是叶子节…