CSS中margin折叠问题记录

CSS盒模型深度解析:padding、margin、border与box-sizing原理 CSS盒模型是网页布局的底层基石,定义了元素content、padding、border、margin四层空间关系及其尺寸计算逻辑。其核心在于理解不同box-sizing模式(content-box与border-box)如何影响最终渲染宽度,以及padding和margin在布局中的本质差异——前者扩展可点击区域并支撑圆角阴影,后者则因外边距折叠(margin collapse)表现出非线性叠加特性。掌握这些原理,能系统解决元素宽高失控、间距异常、跨浏览器错位等高频问题,并为响应式设计、性能优化(如con 阅读详情

为了了解margin折叠问题,首先需要知道一个概念:块级格式上下文Block Formatting Context(简称BFC ),这是Web页面的一种布局方式,通俗点说,也是指页面上一个渲染区域,里面的元素按文档流中的顺序垂直排列,并且发生垂直方向上的margin折叠,同事这个区域内的元素布局不会对外面的元素有任何影响,反过来,也是一样。那要问了,这个要BFC是怎么产生。1、在W3C标准中有明确的说明,这里就简要概括一下:

当元素满足一下任何一个条件是都会产生一个BFC:

  • float属性取值不是“none”
  • overflow属性取值不是“visible”
  • display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个
  • position的值不为 “static” 或 “relative”中的任何一个

可以看看下面这个图:

果然按定义规定定义的几个BFC,内部的排列都是垂直排列的。

2、BFC内部垂直方向上的margin折叠:

先看下面的例子:

 View Code

看到这段代码你可以先画一画可能出现的结果。

下面的这段代码画出来的结果:

结果是不是跟你想得一样呢,不管是不是跟你想得一样,反正跟我想的是不太一样。我开始觉得box1应该蓝色框上边20px,box2和box3应该距离60px(盒子边长就是60px),但是事实上不是这样。box1距离body上边20px,而box2和box3之间距离40px,就是因为发生了折叠,可能有人会问,这里面没有构成BFC啊,其实外面那个根元素就是一个最大的BFC,我们看到的这些元素就在这个大的BFC里面发生了margin折叠。为了让这个折叠现象去除,我们可以让发生折叠的地方建立独立的BFC,因此我们可以给蓝色框加一个属性overflow:hidden,然后给box2和box3再加一个父级框,并添加可以构造BFC的属性。

如下所示:

 View Code

得到我们想要的结果:

3、总结一下

  • margin折叠的产生有几个条件:

    • 这些margin都处于普通流中,并在同一个BFC中;
    • 这些margin没有被非空内容、padding、border 或 clear 分隔开;
    • 这些margin在垂直方向上是毗邻的,包括以下几种情况:
      1、一个box的top margin与第一个子box的top margin
      2、一个box的bottom margin与最后一个子box的bottom margin,但须在该box的height 为auto的情况下
      3、一个box的bottom margin与紧接着的下一个box的top margin
      4、一个box的top margin与其自身的bottom margin,但须满足没创建BFC、零min-height、零或者“auto”的height、没有普通流的子box

    垂直方向上毗邻的box不会发生折叠的情况:

    • 根元素的外边距不会参与折叠
    • 一个有clearance的box的上下margin毗邻,它会与紧接着的下一个box发生margin折叠,但折叠后的margin不会再与它们父box的bottom margin折叠

    折叠边距的计算

    当两个margin都是正值的时候,取两者的最大值;当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从 0 位置,负向位移;当有正有负的时候,先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。但必须注意,所有毗邻的margin要一起参与运算,不能分步进行。

YOLOv8模型INT8量化实战:解决sigmoid输出归零的坑(附代码修改) 本文详细介绍了YOLOv8模型INT8量化过程中遇到的sigmoid输出归零问题及其解决方案。通过修改模型导出代码、优化ONNX量化流程,并提供完整的部署优化技巧,帮助开发者在边缘计算设备上实现高效的模型推理。文章还包含量化效果验证和常见问题排查方法,助力开发者快速解决实际部署中的难题。 阅读详情

相关推荐

ICCompiler II学习笔记(一)ICC II使用全流程 overview

学习笔记同步发布在我的个人网站上,欢迎来访查看。 个人学识有限,理解可能有误,仅供参考。 文章目录一、前言二、 ICC II 简介和 GUI2.1 Blocks 和 Design Libraries2.2 Objects2.3 Application Options三、Design Setup四、APR flow五、 课程主题:如何用 ICC II来实现最好的PPA 一、前言 现在的芯片都在追求一个极致的PPA 芯片的生成可以分为以下 5大步骤: Front-end Design:前端设计,最终产生

一名FPGA芯片设计爱好者的技术博客 2万+

css--

margin-top在这个说明中,“collapsing margins”(折叠margin)的意思是:2个或以上盒模型之间(关系可以是相邻或嵌套)相邻的margin属性(这之间不能有非空内容、padding区域、border边框或使用清除分离方法)结合表示为一个单独的margin。在css2.1中,水平的margin不会被折叠。垂直margin可能在一些盒模型中被折叠:

佐佐吉牧的专栏 663

1.3、云计算HCIP融合存储产品及部署

目标:描述Oceanstor V3系列存储产品系统组成及产品定位 描述Oceanstor V3硬件结构及软件架构 掌握存储系统与主机系统之间的连接 一、存储型号 低端型存储:Oceanstor 2200 2600 2800 V3/V5 终端型存储:Oceanstor 5300 5500 5600 5800 6800 V3/V5 高端型存储:Oceanstor 18000 二、Oceanstor V3系列存储系统定位 OceanStor V3系列存储系统是华为根据存储产品应用现状和存储

weixin_43666279的博客 1653

margin折叠问题(margin塌陷问题):垂直方向

margin折叠(margin塌陷):垂直方向的问题和解决方案

m0_73785340的博客 837

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1424

基于 STM32 的智慧农业温室控制系统设计与实现

本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领域提供低成本、高可靠性的温室控制解决方案。

weixin_42300449的博客 1923

如何理解margin重叠问题

一、写在前面 根据w3c规范,两个margin产生折叠的必备条件: 1、必须处于常规文档流(不能是浮动和定位)的块级盒子,并且处于同一个BFC当中。 2、没有线盒,没有空隙,没有padding和border将他们分割。 3、都处于垂直方向相邻的外边距。 二、例子 <!DOCTYPE html> <html lang="cn"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compa

weixin_47450807的博客 3603

wireshark提取视频数据之RTP包中提取H264和H265

本文主要描述从wireshark包数据中提取出H264和H265裸流数据方法,裸流通过RTP封包方式发送,从抓包中直接提取视频流数据,进而进行流媒体问题定位

技术控的笔记 17万+

CSS中margin的折叠问题

简述css中margin折叠问题

weixin_73186081的博客 271

华为OD机试双机位C卷-几何平均值最大子数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)2026双机位C卷 【几何平均值最大子数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【几何平均值最大子数组】。

qq_45776114的博客 1367

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

qq_44224801的博客 2068

简述CSS中margin折叠问题

简述CSS中margin折叠问题

hsmz12的博客 241

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 171

BFC--margin折叠和清除浮动

背景 以前在写html和css的时候,两个div都设置了margin不同的上下值。写完后我开心的打开页面,为毛两个应该隔的比较开的div,距离并不是我设置的margin值。于是我从marigin重合搜索到了BFC,于是我blahblah地看了一通,却没有看的很懂,一知半解的我烦躁的放弃了。最近突然想深入的了解下css,在看了几篇文章后,里...

weixin_34221036的博客 156

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

重学前端 25 # CSS的正常流

说明 每天10分钟,重构你的前端知识体系专栏笔记。 一、正常流的行为 正常流的排版行为:依次排列,排不下了换行。 1.1、float 在正常流基础上,有 float 相关规则,使得一些盒占据了正常流需要的空间,可以把 float 理解为文字环绕。 1.2、vertical-align 有 vertical-align 相关规则规定了如何在垂直方向对齐盒。基线、文字顶 / 底、行顶 / 底等概念。 1.3、margin 折叠 1、参考文章:CSS中margin折叠问题记录 2、块级格式上下

学习前端这门手艺,栈底到栈顶依次是:浏览器架构、Web 网络、事件循环机制、JavaScript 核心、V8 的内存管理、浏览器的渲染流程、Web 安全、CSS、React、Vue、Node、构建工具链等 636

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

元素之间设置margin的影响及原因

在写网页布局时通常会遇见给元素之间设置margin无效或其他影响,所以简单记录下: 影响: 1.父子、兄弟元素间设置垂直方向上的margin时,margin会发生重叠,只选取最大值 2.父子元素之间,给子元素设置margin-top时,子元素会影响父元素,带动父元素下移,影响父元素位置 注意:margin带来的影响只会发生在块级元素之间,因为主要是垂直方向上的影响 原因: BFC机制的规定: W3C中指出: 在块格式化上下文中,框从包含块的顶部开始一个接一个地垂直排列。 两个兄弟框之间的

m0_45251556的博客 1534

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

float 和 margin的使用记录

使用float的一些注意事项 1、上一个块级元素使用float后,后面的内联元素会跟着浮动,而后面的块级元素不会跟着浮动 2、假如div1使用了clear:left ,是要求div1左边不能有浮动元素,以此类推。 3、假如块级元素中包含了内联元素,且前面有浮动元素。块级元素本身不浮动,继续文档流。而内联元素会跟着浮动,如果剩余的空间不够承载内联元素,它会自动换行。 而且,如果部分此...

weixin_33698823的博客 146

margin外边距和padding内边距的直观区别和使用场景

margin外边距和padding内边距的直观区别和使用场景

weixin_46689373的博客 9776

CSS Grid布局如何解决grid间距无法设置问题_利用gap属性替代margin

gap比margin更合适解决Grid间距问题,因gap是Grid原生属性,仅作用于网格线间、不干扰轨道定义、不继承不折叠;gap只对直接子元素生效,不继承、不传播,行为可预测设置gap: 10px等价于同时设row-gap: 10px和column-gap: 10px,写法更紧凑IE完全不支持gap(包括row-gap/column-gap),需要降级方案时不能只靠它gap在不同浏览器中的兼容性表现Chrome 66+、Firefox 63+、Safari 14.1+ 原生支持gap;

dinglu1030DL的博客 206

这是我的第一篇博客,记录我的css自学心得!

css-盒子模型学习心得 写在前面: 这是我的第一篇博客心得,希望能对你们有用,由于知识有限,有错误的地方还请指正,定感激不尽!下面,言归正传,一大波干货正朝你而来。 css盒子模型的创建 一个盒子包括四个区域: 1、内容区(content) 2、内边距(padding) 3、边框(border) 4、外边...

sunchanglan151的博客 285

margin与padding

一直搞不懂padding与margin,今天看了看资料 记录一下对margin和padding的理解一张图说明 margin和padding #margintest{ width:90px; height:90px; margin-top: 20px; border: 1px dotted #000; margin-...

u014717881的博客 336

HTML空格折叠全解析:从原理到实战的4种解决方案

在Web开发中,空白符处理是文本渲染的基础概念。浏览器遵循HTML规范,默认会将连续的空白字符(空格、制表符、换行符)合并为单个空格,这一行为称为“空白符折叠”,旨在优化代码可读性而不影响显示。理解其原理是解决排版问题的关键,尤其在需要精确控制格式的场景中。从技术价值看,掌握空白符处理能力能显著提升内容展示的灵活性与专业性,直接影响代码可读性和用户体验。针对不同应用场景,开发者可选用多种方案:使用HTML实体字符(如 )实现固定空格;通过CSS的white-space属性(如pre-wrap值)精

weixin_30635053的博客 333

css文档之盒模型阅读笔记

  前段时间抽空仔细阅读了w3c的css文档关于盒模型方面的一些基础知识。边读边记录了一些要点,在此做些整理,与大家分享,如有理解有误之处,请不吝指教。 1.综述 文档中的每个元素被描绘为矩形盒子。渲染引擎的目的就是判定大小,属性——比如它的颜色、背景、边框方面——及这些盒子的位置。 在CSS中,这些矩形盒子用标准盒模型 来描述。这个模型描述了一个元素所占用的空间。每一个盒子...

aichang1358的博客 118

子元素margin-top影响父标签原因

仅用来做笔记 来看css2.1盒模型中规定的内容: In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or mor...

qq_42535651的博客 211

回流,重绘,margin塌陷,BFC

BFC 是浏览器排版中的一个“隔离区”。进入同一个 BFC 的块级盒子,会按从上到下的规则布局;而这个 BFC 与外部互不干扰:外部的浮动、margin 等不会“穿透”进来。

qq230663614的博客 568

重学前端学习笔记(二十五)--CSS的正常流

笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入winter的专栏学习【原文有winter的语音】,如有侵权请联系我,邮箱:kaimo313@foxmail.com。 一、正常流的行为 正常流的排版行为:依次排列,排不下了换行。 1.1、float 在正...

weixin_34301307的博客 259
上一篇: css选择器和优先级关系
下一篇: react学习总结--大众点评1
快乐的小z
博客等级 码龄9年 21粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值