CSS外边距合并的几种情况

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

外边距在CSS1中就有

The width of the margin on non-floating block-level elements specifies the minimum distance to the edges of surrounding boxes. Two or more adjoining vertical margins (i.e., with no border, padding or content between them) are collapsed to use the maximum of the margin values. In most cases, after collapsing the vertical margins the result is visually more pleasing and closer to what the designer expects.

意思是说,非浮动块级元素的外边距宽度指定了其到环绕元素的边缘的最小距离。两个或更多的垂直外边距(比如,没有边框,内边距或内容在它们之间)就会发生合并,其值为它们中的最大者。在大多数情况下,在垂直方向发生外边距合并的结果,是设计师所喜闻乐见的。

按照这一设计思想,CSS外边距合并会在以下几种情况发生。

1 上下元素挨在一起

当一个元素位于另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

<!-- sytle.css -->
.div1{
margin:10px;
border:1px solid gray;
}
.div2{
margin:20px;
border:1px solid gray;
} <div class='div1'>内容1</div>
<div class='div2'>内容2</div>

结果是div1和div2的间距是20px。

2 子元素包含在父元素之中

当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。如果父元素有内边距或边框,则子元素的外边距以父元素的内边距或边框为准,不会发生外边距合并。

<!-- sytle.css -->
.div1{
margin:10px; }
.div2{
margin:30px;
border:1px solid gray;
} <div class='div1'>
<div class='div2'>内容2</div>
内容1
</div>

显示结果为:

父元素div1和子元素div2的上外边距之间没有边框或内边距阻隔,导致两者的上外边距合并,从而导致父元素div1至其上部元素的距离变为30px(两者合并取大值)。如果父元素有上边框或上外边距,则不会发生外边距合并。

3 空元素的外边距合并

假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并。

<!-- sytle.css -->
.div1{
margin:10px; }
.div2{
margin:10px;
border:1px solid gray;
} <div class='div1'>内容1</div>
<div class='div2'></div>
<div class='div1'>内容1</div>

显示为:

元素div2的上下边距合并,边框变成了一条直线

注意

只有普通文档流中块元素的垂直外边距才会发生外边距合并。行内元素、浮动元素或绝对定位之间的外边距不会合并。因为CSS 的 外边距合并 设计之初就是为实现文本排版的段落间距而提供的特性。理解了这一设计意图,也就能理解哪些情况会发生外边距合并以及如何利用这一特性。但是明白它的用途就可以知道它是非常有用的、不可能被舍弃的特性。实际上这个特性还会进化,CSS3支持竖排文本,对于竖排文本来说,collapse应该发生在水平方向而不是垂直方向。

CSS外边距合并的几种情况的更多相关文章

  1. css外边距合并和z-index的问题

    参考这篇文章, 将外边距的 折叠 参考这篇文章, 将bfc的生成, bfc的应用 参考这篇文章 position: absolute的元素, 仍然具有内填充padding和border边框属性样式, ...

  2. CSS外边距合并(塌陷/margin越界)

    原文 简书原文:https://www.jianshu.com/p/5f18f12cd162 大纲 1.什么是外边距合并?(折叠外边距) 2.外边距带来的影响 3.折叠的结果 4.产生折叠的原因 5. ...

  3. CSS 外边距合并。

    <div id = "parent"> <div id = "child"> demo </div> </div> ...

  4. CSS外边距合并&块格式上下文

    前言问题Margin Collapsing 外边距合并Block Formatting Context 块格式化上下文解决方案参考 前言 之前在前端开发的过程中,都没有遇到外边距合并的问题(其实是因为 ...

  5. CSS 外边距合并

    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. 外边距合并 外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网 ...

  6. CSS外边距合并问题

    今天无意中碰到了外边距合并的问题,于是便研究了一下.这里做个笔记. 所谓外边距合并,指的是当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者. ...

  7. CSS min-height不能解决垂直外边距合并问题

    垂直外边距合并有一种情况是嵌套元素的垂直外边距合并,当父级元素没有设定外边距时,在顶部或者底部边缘的子元素的垂直外边距就会和父级的合并,导致父级也有了“隐形”的垂直外边距. 当父级元素的min-hei ...

  8. 由外边距合并到BFC

    置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<JavaScript实现Ajax小结> 作者主页:myvin 博主QQ:851399101(点击QQ和 ...

  9. CSS框模型(框模型概述、内边距、边框、外边距、外边距合并)

    CSS 框模型概述 CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边距.边框 和 外边距 的方式. 元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景. ...

随机推荐

  1. vi/vim显示中文字符并且去掉^M的方法

    vim上经常会碰到中文显示不正常的现象,也就是传说中的乱码.搜索了一下,在 http://www.chinalinuxpub.com/bbs/showthread.php?t=45475 找到了一个解 ...

  2. bzoj 1185 [HNOI2007]最小矩形覆盖——旋转卡壳

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 矩形一定贴着凸包的一条边.不过只是感觉这样. 枚举一条边,对面的点就是正常的旋转卡壳. ...

  3. Oracle分组函数实例

    分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...

  4. linux(centos)下安装ffmpeg

    [备忘]windows环境下20行php代码搞定音频裁剪 上次我的这篇文章将了windows下web中如何操作ffmpeg的文章,这里则记录下linux(centos)下的安装 首先:我花了中午大概1 ...

  5. Unit06: 状态管理-cookie

    Unit06: 状态管理-cookie web package web; import java.io.IOException; import java.io.PrintWriter; import ...

  6. JDK 8 - Method Reference 分析

    Java SE 8 在 Java 语言层面上新增了 lambda expression 的功能,使得 Java 具备了函数式语言的能力 - 可以将函数作为方法参数传递,即 code as data. ...

  7. Hibernate学习4—关联关系一对多映射2

    第四节:班级学生一对多映射实现(双向) 查询班级的时候能够获取所有的学生:   在上一节的基础之上:我们在Class端也保存学生的关系: com.cy.model.Class: public clas ...

  8. [转][Java]Jsp入门

    <% response.getOutputStream().write("123".getBytes()); %> 新建一个 Web Project 项目,jsp 文件 ...

  9. 3D角色渲染到2D界面上

    using UnityEngine; using System.Collections; using System.Collections.Generic; using Carrie.Net; usi ...

  10. Drools笔记:初识与入门

      Drools是什么? Drools是一个用Java编写的开源规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境 ...