margin的合并

--本文margin合并的前提是未对元素设置过float、position 元素本身在标准文档流中

首先,margin的合并(前提二个以上的margin)是发生在纵向上的,也就是说,margin的合并只会发生在垂直方向,水平方向设置的margin是不会发生合并的现象的。

上代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>margin</title>
<style type="text/css">
*{margin: 0;padding: 0;}
body{
background-color:gray;
}
.div1{
width: 100px;
height: 100px;
margin-top:20px;
background-color: blue;
}
.div2{
width: 100px;
height: 100px;
margin-top:30px;
background-color:green;
}
</style>
</head>
<body>
<div class="div1"></div>
<div class="div2"></div>
</body>
</html>

效果图:

二个毗邻元素,也设置了margin,但是并没发生合并现在,why?

设置margin属性毗邻看会不会发生合并呢,改动下代码(把div1的上外边距改为下外边距):

.div1{
width: 100px;
height: 100px;
margin-bottom:20px;
background-color: blue;
}

改动后的效果图:

这次margin发生了合并现象,它是怎么合并的呢,div1和div2之间的间距又是多大呢?先对网页截图,然后用ps打开图片测量下看看

我们看到PS信息面板中的高度值为30px,CSS样式中div1的margin-bottom设置的值为20px,div2的margin-top设置值为30px;由此得出结论:

当二个相邻元素都设置了margin,且margin属性毗邻时,元素的margin会发生合并,且取二者中的最大值

由于margin可以设置为负值,来看下下面几种情况

一正一负

代码(改动.div1):

.div1{
width: 100px;
height: 100px;
margin-bottom:-20px;
background-color: blue;
}

效果图

通过PS测量,此时div1和div2的间距为10px;由此得出结论:

当二个元素的margin值为一个正数一个负数时,二个元素间距最终值为相加所得结果

二个负值

再次修改代码中的.div2为

width: 100px;
height: 100px;
margin-top:-30px;
margin-left: 50px;  /*为了方便观察设置*/
background-color:green;
}

效果图

通过ps测量,此时div2向上偏异30px;由此得出:

当二个元素的margin值都为负数时,二个元素间距最终值为二者中最小的

在来看下包含(一个div包裹着另一个div)的情况(此处只看父元素与第一个子元素合并的情况,父元素与最后一个子元素合并的情况与此类似,不做复述)

代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>margin</title>
<style type="text/css">
*{margin: 0;padding: 0;}
body{
background-color:gray;
}
.div1{
width: 200px;
height: 200px;
margin-top:40px;
background-color: blue;
}
.div2{
width: 100px;
height: 100px;
margin-top:60px;
background-color:green;
}
</style>
</head>
<body>
<div class="div1">
<div class="div2"></div>
</div>
</body>
</html>

效果图

通过PS测量,距浏览器内容区的边界距离为60px,由此得出:

当二个元素为父与子关系的同时,设置了相同margin值(二个正数),margin发生合并现象,且最终值为两者中的最大值

margin值一正一负时,修改.div1

.div1{
width: 200px;
height: 200px;
margin-top:-40px;
background-color: blue;
}

效果图

通过PS测量,距浏览器内容区的边界距离为20px,由此得出:

当二个元素为父与子关系的同时,设置了相同margin值(一个正数一个负数),margin发生合并现象,且最终值为两者之和

margin值二负时,修改.div2

.div2{
width: 100px;
height: 100px;
margin-top:-60px;
background-color:green;
}

效果图

通过PS测量,div可视区减少了60px,由此得出:

当二个元素为父与子关系的同时,设置了相同margin值(二个负数),margin发生合并现象,且最终值为两者中最小值

如果三个div(父子孙)都同时设置了相同的margin值(都为正数)

代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>margin</title>
<style type="text/css">
*{margin: 0;padding: 0;}
body{
background-color:gray;
}
.div1{
width: 200px;
height: 200px;
margin-top:40px;
background-color: blue;
}
.div2{
width: 100px;
height: 100px;
margin-top:60px;
background-color:green;
}
.div3{
width: 50px;
height: 50px;
margin-top:100px;
}
</style>
</head>
<body>
<div class="div1">
<div class="div2">
<div class="div3"></div>
</div>
</div>
</body>
</html>

效果图

通过PS测量,距浏览器内容区的边界距离为100px,由此得出:

当三个元素为父与子与孙关系的同时,设置了相同margin值(三个正数),margin发生合并现象,且最终值为三者中的最大值

margin值中有正数有负数时:

修改.div2

.div2{
width: 100px;
height: 100px;
margin-top:-60px;
background-color:green;
}

效果图

通过PS测量,距浏览器内容区的边界距离为40px,由此得出:

当三个元素为父与子与孙关系的同时,设置了相同margin值(有正数有负数),margin发生合并现象,且最终值为三者中的最大值与最小值之和

时间: 2024-10-11 05:34:29

margin的合并的相关文章

margin发生合并

某些相邻的margin会发生合并,我们称之为margin折叠 来看例子: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <style type="text/css"> 6 h2{margin:10px 0;background-color: #0f0;} 7 div{margin:20px 0;background-color:

margin collpase(margin合并)小结

一.前言 标题的margin collpase(margin 合并),江湖又成"margin 塌陷":以前对margin 合并的理解就是在紧邻的兄弟元素中上一个的margin-bottom会和下一个的margin-top合并:紧邻父子元素,margin-top会合并:然后,就没有然后了.直到实际项目中,看到已有项目中存在父子margin没有合并的现象,但是自己又理解不了的时候,才人认真的将w3c中有关margin合并的规则看一遍. 二.margin collpase margin co

须知的css——margin不重叠的情形

margin重叠 摘自css2.1规范中文版 CSS中,两个或者多个盒(可能但不一定是兄弟)的相邻的margin会被结合成一个margin.Margin按这种方式结合叫重叠(collapse),产生的结合的margin叫做重叠margin. margin重叠的计算规则 摘自css2.1规范中文版 当两个或者更多的margin合并时,产生的margin宽度为合并margin宽度中的最大值.至于负margin,就从正相邻margin的最大值中减去负相邻margin的绝对值的最大值.如果没有正marg

父子div margin重叠问题

前段时间朋友做项目遇到一个问题,说是父子div,想让子div下移50px,我随口就说"直接margin-top就可以了",结果,你们没猜错,打脸了,好痛! 这是我自己试了一遍的代码: <body> <div class="big"> <div class="small"></div> </div> </body> 以及样式: <style> body{ margi

外边距合并现象

外边距(外填充)合并现象: 定义:外边距合并指的是,当两个垂直外边距相遇时,它们将合并形成一个外边距. 1.两个层是上下排列关系的时候: ? 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的两个上和下外边距也会发生合并.请看下图: ? 注释:只有普通文档流中块框的垂直外边距才会发生外边距合并.行内框.浮动框或绝对定位之间的外边距不会合并. 举例: 在垂直方向看,当给两个层(div1,div2)设置外边距, 比如:margin-top的时候,(div1:20px,div

上下margin重叠传递问题

我发现强迫症真的是我一个大病...每次都非得把所有情况都实验出来不可...BUT!!!!!!!!!悲催的是,这么多情况我根本记不住...还是要在写代码的时候不断出错再排错~受不了自己了!不过还是把这部分总结到这里啦~ 下面的几个部分应该是margin重叠问题的所有情况了: 1.两个普通元素上下的margin会合并为一个margin,哪个大选哪个! 两个浮动元素不会出现margin传递的问题,依然是上面元素的margin-bottom和下面元素的margin-top相加作为两者之间的margin值

position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

这是寒冬大神提出的一个题目,刚开始看到这题的时候完全不知道从什么地方回答起好,题目内容比较广泛,找不到针对点.后来我觉得这个题目应该能拆成几个点来回答:1.'display'.'position' 和 'float' 的相互关系:2.position跟display.overflow.float下的margin collapse. 一.'display'.'position' 和 'float' 的相互关系 首先我们先来看下这3个属性. display 属性规定元素应该生成的框的类型. bloc

CSS属性之margin

一 margin作用 margin属性用于设置外边距,即围绕在元素边框的空白区域,设置外边距会在元素外设置额外的空白. 二 margin属性 margin属性接受任何长度单位(像素px,英寸in,毫米mm或者是em).百分数值甚至负数. margin相关属性有margin-top,margin-right,margin-bottom,margin-left.margin默认取值为auto,margin-top/margin-bottom取值为0,margin-right/margin-left取

CSS重要属性之 margin 属性知识大整合

以下的分享是本人最近几天学习了margin知识后,大有启发,感觉以前对margin的了解简直太浅薄.所以写成以下文章,一是供自己整理思路:二是把知识分享出来,避免各位对margin属性的误解.内容可能会有点多,但都是精华,希望大家耐心学习. 以下的分享会分为如下内容: 1.margin 属性的简单介绍 1.1:普通流的 margin 百分比设置 1.2:绝对定位的 margin 百分比设置 2.margin 无法适用的元素 3.外边距折叠 (Collapsing margins) 3.1:Col