一、什么是外边距合并

外边距合并(叠加)是一个相当简单的概念。但是,在实践中对网页进行布局时,它会造成许多混淆。

所谓的外边距合并就是,当两个垂直外边距相遇时,它们将形成一个外边距。合并的外边距的高度等于两个发生合并的外边距的高度中的较大者。

二、发生合并的三种情况及解决办法

1. 两个元素是兄弟关系:



解决办法:

  • 可以直接改变其中一个的外边距的值,使之达到想要的效果。(推荐使用)
  • 使用BFC:将兄弟元素分别作为子元素放在块级元素内,然后将其父级元素的渲染规则该为BFC。(不推荐使用,会破坏HTML文档结构)

2. 两个元素是父子关系

当没有内容(padding、border、行内元素)将父元素与子元素分开时,就会出现父块元素和其内后代块元素外边界重叠,重叠部分最终会溢出到父级块元素外面。

情形1:



情形2: 父元素没有margin-top,子元素设置margin-top,父子元素整体下移



解决办法:

  • 可以通过给父元素添加边框或内边距.(不建议使用,会破坏布局)
  • 使用BFC解决: 将父元素的渲染模式改为BFC渲染模式。

3. 一个空元素,没有边框和填充



如果这个外边距遇到另一个元素的外边距,还会发生合并:

PS:只有普通文档流中块级元素(block)的垂直外边距才会发生外边距合并。行内框,浮动框或绝对定位之间的外边距不会合并。

解决办法:

  • 使用BFC

三、BFC是什么,如何触发BFC.

1. FC

Formatting context(格式化上下文)是W3C 规范中的一个概念.

它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素如何定位,以及和其他元素的关系和相互作用.

2. BFC

BFCBlock Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

3. 触发BFC的方法

只要满足以下任意一条件,将会触发BFC.

  • body根元素
  • 浮动元素:float:除none以为的值
  • 绝对定位元素:position:absolute/fixed
  • display:inline-block/table-cells/flex
  • overflow:除了visible以外的值(hidden/auto/scroll)

ps: 对于使用哪种触发BFC的方式,来解决外边距合并的问题,考虑使用哪种触发BFC的方式,对布局不产生影响。

解决margin合并问题的更多相关文章

  1. 解决margin塌陷和margin合并

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. margin合并及解决办法

    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 水平方向不会发生合并 只有普通文档流中块框的垂直外边距才会发生外边距合并 ...

  3. 【深入BFC】 关于CSS中float布局,清除浮动,和margin合并的原理解析,解开你心中的那些困惑!

    BFC的通俗理解: Block Formatting Context(块级格式化上下文)是W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. ...

  4. margin塌陷与margin合并(margin),清除浮动

    **1.margin塌陷**问题:垂直方向的父子关系的盒子使用不当会产生margin塌陷.给子级设置margin-top时,他不会相对父级一起动,只有他的margin超过父级的margin时,才会生效 ...

  5. margin合并和浮动

    1.父子元素margin塌陷问题子元素设置margin-top作用于父元素时, 会产生margin合并问题. 解决方法是: 给父元素的::before伪元素设置为display:table属性, 其中 ...

  6. margin的两个有趣现象:margin合并和margin塌陷

    margin合并 当两个元素在垂直方向并列,分别设置margin值时会发生一个margin合并的现象 举个例子,有两个div,垂直并列,box1设置margin-bottom:20px,box2设置m ...

  7. margin塌陷和margin合并问题及解决方案

    margin塌陷 先举个例子 <style> body{ background-color:#000; } .wrapper{ width:200px; height:200px; bac ...

  8. 影响CSS的margin合并的几个属性

    很多人知道,在CSS中存在Margin合并的现象,比如下代码: <style> div { margin:10px; height:100px; background:red; } < ...

  9. bug:margin合并

    demo1和demo2存在margin合并问题:外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.弥补方案:bfc; 添加一 ...

  10. NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT

    NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...

随机推荐

  1. word常用快捷键

    输入公式:Alt + = 小写转大写:Shift + F3 \double{R}是实数符号

  2. sql 错误问题

    message: ### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: SELECT command denie ...

  3. Java字符串的一些函数方法

    一.substring()方法 String str="123456"; String s1=str.substring(2); //s1="3456" Str ...

  4. BUG级别及测试准入、暂停及准出原则

    一.BUG级别说明: BUG分5个严重级别:紧急.严重.重要.次要和微小.具体描述如下: 紧急: 1) 错误导致了死机.服务器500.系统悬挂无法操作 2) 数据库连接异常 3) 临近上线时间点需求变 ...

  5. 03php拉取服务器信息并生成json

    <?php$servername = "服务器";$username = "用户名";$password = "密码";$dbname ...

  6. Python day 02 知识点学习

    1.格式化输出中,如果想单纯打出%,可以在%后面再跟一个%来转义达到效果.如下图: 2.while else 循环中,如果while循环被 break 打断,不会执行else结果,如下图:  初始编码 ...

  7. P2P网络

    P2P 网络是什么 点对点技术(peer-to-peer, 简称 P2P )又称对等互联网络技术,是一种网络技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上. 即不是传统 ...

  8. python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)

    @ 目录 一.前言 二.展示-主界面 1.静图1 2.静图2 3.静图3 3.静图3 4.动图1 三.展示-登录界面 1.静图1 2.静图2 5.动图2 四.展示-系统托盘 五.UI设计记录 1.UI ...

  9. 2.5基本算法之搜索 156:LETTERS

    #include<iostream>#include<cstdio>using namespace std;char a[21][21];bool b[26]; int X[4 ...

  10. python-文件内容操作

    1.按文件中数据的组织形式把文件分为文本文件和二进制文件两类. 文本文件:文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\n'结尾.常规字符串是指记事本或其他文本编辑器能正常显示.编 ...