CSS 外边距合并、塌陷和BFC

外边距合并

CSS中的外边距合并指的是当两个相邻元素都设置了上下外边距时,它们之间会发生重叠。这种现象被称为"margin collapsing"(外边距合并)或者"margin collapse"(外边距塌陷)。
在这里插入图片描述
可以看出上下两个盒子之间的边距是30px,这是一个常见的CSS现象

CSS中的外边距合并是为了解决一些布局问题而设计的。在早期的HTML布局中,开发者经常遇到元素之间出现意外的空白区域,这通常是由于浏览器默认的外边距行为导致的。为了解决这个问题,CSS引入了外边距合并的概念,允许开发者更好地控制元素之间的间距。

通过允许垂直方向上的外边距合并,开发者可以更方便地控制页面元素之间的间距,特别是当页面中包含多个行内元素或行内块元素时。这种合并行为可以帮助消除不必要的空白区域,使页面布局更加紧凑和一致。

如果确实需要实现上面的效果,给其中一个盒子套一个外壳,给这个外壳设置BFC,因为BFC的规则是盒子内的和盒子外的是不互相影响
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .div-1 {
      width: 300px;
      height: 100px;
      margin-bottom: 30px;
      background-color: green;
    }
    .div-2 {
      width: 300px;
      height: 100px;
      background-color: red;
      margin-top: 20px;
    }
  </style>
</head>
<body>
<div style="overflow: hidden;border: 1px solid #000">
  <div class="div-1">
    margin-bottom: 30px;
  </div>
</div>
<div class="div-2">
  margin-top: 20px;
</div>
</body>
</html>

Margin塌陷

我们先正常设置两个盒子,一个父盒子和一个子盒子,给子盒子设置 margin-top,会发现没有撑开,并且会带着父盒子一起动

在这里插入图片描述
解决方法:
1、给父元素设置 border、padding
2、父盒子设置 overflow: hidden

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .div {
      /*选择其中一个*/
      /*overflow: hidden;*/
      /*border: 1px solid #000;*/
      padding-top: 1px;
    }
    .div-1 {
      width: 300px;
      height: 100px;
      background-color: red;
      margin-top: 30px;
    }
  </style>
</head>
<body>
<div class="div">
  <div class="div-1">
    margin-bottom: 30px;
  </div>
</div>
</body>
</html>

何为BFC

BFC(Block Formatting Context)是CSS布局模型中的一部分,用于控制元素在页面上如何进行定位、显示以及与其他元素交互等操作。通过创建新的BFC可以改变元素的默认布局行为。

形成BFC的条件

  1、浮动元素,float 除 none 以外的值;
  2、定位元素,position(absolute,fixed);
  3、display 为以下其中之一的值 inline-block,table-cell,table-caption;
  4、overflow 除了 visible 以外的值(hidden,auto,scroll);

BFC的特性

  1.内部的Box会在垂直方向上一个接一个的放置。
  2.垂直方向上的距离由margin决定
  3.bfc的区域不会与float的元素区域重叠。
  4.计算bfc的高度时,浮动元素也参与计算
  5.bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

解决什么问题

1、可以用来解决两栏布局BFC 的区域不会与 float box 重叠
2、解决 margin 塌陷和 margin 合并问题
3、解决浮动元素无法撑起父元素

利用bfc,实现一个左侧固定宽度、右侧自适应的效果
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .column1 {
      float: left;
      width: 200px;
      height: 300px;
      margin-right: 10px;
      background-color: red;
    }

    .column2 {
      overflow: hidden; /*创建bfc */
      height: 300px;
      background-color: purple;
    }
  </style>
</head>
<body>
<div class="column1"></div>
<div class="column2"></div>
</body>
</html>

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

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

相关文章

2024年第四届能源与环境工程国际会议(CoEEE 2024) | Ei Scopus检索

会议简介 Brief Introduction 2024年第四届能源与环境工程国际会议(CoEEE 2024) 会议时间&#xff1a;2024年5月22日-24日 召开地点&#xff1a;意大利米兰 大会官网&#xff1a;www.coeee.org CoEEE 2024将围绕“能源与环境工程”的最新研究领域而展开&#xff0c;为研究人员、…

【Springcloud篇】学习笔记十(十七章):Sentinel实现熔断与限流——Hystrix升级

第十七章_Sentinel实现熔断与限流 1.Sentinel介绍 1.1是什么 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 用来代替Hystrix Sentinel 具有…

Web路由列表

什么是Web路由列表 在Web开发中&#xff0c;路由列表通常用于将请求的URL映射到相应的处理函数。尽管路由列表可以用不同的数据结构来实现&#xff0c;但在很多情况下是一个字典&#xff08;在Python中&#xff09;或其他类似的键值对结构。 路由列表&#xff08;Django&#…

远程手机搭建Termux环境,并通过ssh连接Termux

背景 Termux只能通过鼠标点击&#xff0c;无法使用电脑键盘&#xff0c;输入速度很慢&#xff0c;你想通过ssh 连接Termux&#xff0c;获得友好体验搞了个云手机&#xff0c;想像普通手机那样充当服务器想把自己的手机公开到局域网中供同事调试想把自己的模拟器公开到局域网中…

vue3-逻辑复用

什么是组合式函数 _无状态逻辑的函数_&#xff1a;它在接收一些输入后立刻返回所期望的输出。 比如 时间格式化的函数。 有状态逻辑的函数: 有状态逻辑负责管理会随时间而变化的状态。 比如 跟踪当前鼠标在页面中的位置。 在 Vue 应用的概念中&#xff0c;“组合式函数”(…

爬虫学习笔记-scrapy安装及第一个项目创建问题及解决措施

1.安装scrapy pycharm终端运行 pip install scrapy -i https://pypi.douban.com/simple 2.终端运行scrapy startproject scrapy_baidu,创建项目 问题1:lxml版本低导致无法找到 解决措施:更新或者重新安装lxml 3.项目创建成功 4.终端cd到项目的spiders文件夹下,cd scra…

JS 引导动画

前言 引导动画是程序在某一时刻播放的动画&#xff0c;通常用于向用户介绍程序的功能和特点。 实现效果 实现方式 引导动画的实现方式有很多种&#xff0c;这里我使用的是 CSS 的 clip-path 属性。 技术选型 这里我为什么要选择 clip-path 属性而不是 mask 属性呢&#xf…

SpringbootWeb案例

准备工作 需求说明 部门管理 部门管理功能开发包括&#xff1a;查询部门列表、删除部门、新增部门、修改部门   员工管理功能开发包括&#xff1a;查询员工列表(分页、条件)、删除员工、新增员工、修改员工 环境搭建 环境搭建步骤&#xff1a;1. 准备数据库表(dept、emp)…

ubuntu 安装 kvmQemu no active connection to install on

更新 apt sudo apt update检查虚拟化是否开启 0 不开&#xff0c;其余数字表示开启&#xff0c;开不开都可以&#xff0c;不开性能弱&#xff0c;只能跑 x86 系统 egrep -c (vmx|svm) /proc/cpuinfo安装 sudo apt install -y qemu-kvm virt-manager libvirt-daemon-system virt…

2.3作业

写一个shell脚本判断用户输入的是否是数字

我要成为嵌入式高手之2月3日Linux高编第一天!!

学习框架 一、IO编程 多任务编程&#xff08;进程、线程&#xff09; 网络编程 数据库编程 二、数据结构 学习笔记 Linux软件编程&#xff1a; 一. Linux 1、Linux: 操作系统的内核&#xff0c;真正的操作系统叫Ubuntu、Redhat、CentOS..... 内核&#xff08;纯c实现的代码…

pdmodel从动态模型转成静态onnx

1.下载项目 git clone https://github.com/jiangjiajun/PaddleUtils.git 2.新建两个新的文件夹 第一个文件夹放两个必要文件 第二个文件夹可以设置为空&#xff0c;用来存放转换后的模型 如图&#xff1a; 3.在终端运行 python paddle/paddle_infer_shape.py --model_dir …

DevOps落地笔记-10|环境管理:交付测试环境的迅猛方法

上一讲我主要介绍在开发过程中如何处理应用程序在不同环境的配置问题&#xff0c;通过有效管理应用程序的配置&#xff0c;最终实现一包到底。不同的环境不仅会带来应用程序本身的配置管理问题&#xff0c;环境本身的创建、管理、一致性等问题也需要解决。环境管理的问题也是我…

在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程

在idea插件市场搜索rust&#xff1a;JetBrains Marketplace &#xff0c;就可以找到rust插件&#xff1a; jetbrains官方rust插件地址&#xff1a;[Deprecated] Rust - IntelliJ IDEs Plugin | Marketplace 直接在idea中搜索rust好像是搜不到的&#xff1a; 需要在这个插件市场…

Nginx简单阐述及安装配置

目录 一.什么是Nginx 二.Nginx优缺点 1.优点 2.缺点 三.正向代理与反向代理 1.正向代理 2.反向代理 四.安装配置 1.添加Nginx官方yum源 2.使用yum安装Nginx 3.配置防火墙 4.启动后效果 一.什么是Nginx Nginx&#xff08;“engine x”&#xff09;是一个高性能的HTTP…

Python3 交叉编译 numpy pandas scipy scikit-learn

1. 概述 由于需要将Python3.7 和一些软件包交叉编译到 armv7 平台硬件&#xff0c;如果是arm64位的系统&#xff0c;很多包都有预编译好的版本&#xff0c;可直接下载。本文主要在基于 crossenv(https://github.com/benfogle/crossenv)环境下交叉编译。 2. 编译环境搭建 创建…

自编C++题目——水龙头

预估难度 简单 题目描述 有个水龙头&#xff0c;其中有一些坏了的&#xff08;用表示&#xff09;&#xff0c;还有一些能用的&#xff08;用表示&#xff09;&#xff0c;那么有多少个能用的&#xff1f; 输入格式 第一行&#xff1a;整数&#xff0c;表示水龙头的个数&a…

SpringBoot 解决 getReader() has already been called for this request

一、getReader()问题分析 1、获取请求参数的方式 对于 GET 请求和 POST 表单请求&#xff0c;参数都是包含在 URL 查询字符串中的&#xff0c;因此在拦截器中都可以通过使用 request.getParameter(“paramName”)来获取这些参数。 对于 POST JSON 请求&#xff0c;参数通常包…

【Vue】mvc,mvp,mvvm 的区别

总结&#xff1a; MVC : view 视图层依靠 model 来进行更新渲染&#xff0c;当数据发生改变时。第一步: 通知 controller 进行更新&#xff0c;然后第二步 controller 再通知 model 进行更新。最后 model 才将 view 更新 , 这样大量的逻辑以及更新操作&#xff0c;都需要在con…

2024.2.3每日一题

LeetCode 石子游戏 VII 1690. 石子游戏 VII - 力扣&#xff08;LeetCode&#xff09; 题目描述 石子游戏中&#xff0c;爱丽丝和鲍勃轮流进行自己的回合&#xff0c;爱丽丝先开始 。 有 n 块石子排成一排。每个玩家的回合中&#xff0c;可以从行中 移除 最左边的石头或最右…