父子div margin重叠问题

前段时间朋友做项目遇到一个问题,说是父子div,想让子div下移50px,我随口就说“直接margin-top就可以了”,结果,你们没猜错,打脸了,好痛!

这是我自己试了一遍的代码:

<body>
  <div class="big">
    <div class="small"></div>
  </div>
 </body>

以及样式:

<style>
    body{
        margin:0px;
        padding:0px;
    }
    .big{
        width:400px;
        height:400px;
        background:#ccc;
    }
    .small{
        width:200px;
        height:200px;
        background:#ff0000;     margin-top:50px;
    }
  </style>

结果出来就变成这样了

这是什么鬼?我设置的只是子div啊,为什么父子一块移动了?最后经过多方百度得知原因:

  所有毗邻的两个或者多个盒元素的margin会合并为一并共享之。毗邻的意思是同级或嵌套的盒元素,并且他们之间没有非空内容、padding或者border分隔。

看到这个就可以想到几个解决的方法了,一个是增加一个子元素的同级元素并放在该元素之前,也就是:

<div class="big">
    <div class="add">增加的内容</div>
    <div class="small"></div>
</div>

还有就是给父元素增加padding属性或者border属性,给子元素加是没有效果的。

当然还有其他的方法,比如父元素增加overflow:hidden属性,给父元素增加浮动或者position:absolute属性也是可以的。

时间: 2024-12-18 12:21:23

父子div margin重叠问题的相关文章

css margin重叠

父子元素margin重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性: 给父元素添加边缘属性,如padding.border: 同级元素margin反向重叠 同级元素margin反向重叠时,元素之间的距离为两个margin值中较大的那个. 因解决办法较少且兼容性较差,在具体编码中,应尽量避免这种情况的出现.

2016/2/25 1, margin auto 垂直方向测试 无效 2,margin重叠 3,哪些是块状哪些是内联 4,display:block inline 导航栏把内联转块状最常见+ 扩展

1.利用margin auto完成首页居中,并自行研究,竖直方向用margin auto,是什么效果#container{width:1002px;margin: 0px auto;}    竖直方向上margin:auto;无效.2.测试margin重叠的发生条件及现象,并自行搜索“父子div”也会发生margin重叠,写出代码及效果图. <!DOCTYPE html> <html> <head> <title>测试父子DIV-margin</tit

CSS盒模型和margin重叠

在 CSS 中,width 和 height 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸.(div的实际占用尺寸变打了) 但: 一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容.然而 IE 5 和 6 的呈现却是不正确的.根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的.不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型

CSS 外边距(margin)重叠及防止方法

CSS 外边距(margin)重叠及防止方法 胡俊涛 | 2011-11-17 边界重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容.补白.边框)重合在一起而形成一个单一边界. 两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大的值.如果出现负边界,则在最大的正边界中减去绝对值最大的负边界.如果没有正边界,则从零中减去绝对值最大的负边界.注意:相邻的盒子可能并非是由父子关系或同胞关系的元素生成. 但是边界的重叠也有例外情况: 1.水平边距永远不

CSS 外边距(MARGIN)重叠及防止方法(转载)

边界重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容.补白.边框)重合在一起而形成一个单一边界. 两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大的值.如果出现负边界,则在最大的正边界中减去绝对值最大的负边界.如果没有正边界,则从零中减去绝对值最大的负边界.注意:相邻的盒子可能并非是由父子关系或同胞关系的元素生成.但是边界的重叠也有例外情况: 1.水平边距永远不会重合.2.在规范文档中,2个或以上的块级盒模型相邻的垂直margin会重叠.最终

上下margin重叠传递问题

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

div覆盖div DIV相互重叠如何解决

div覆盖div,出现div与div盒子之间产生重叠覆盖现象,而内容没有出现覆盖重叠现象原因与解决方法.DIVCSS5通过CSS图文案例介绍产生原因与解决方法.DIV与DIV覆盖原因与解决方法. 可能您遇到过上下结构的布局,下面DIV内容重叠上面DIV内容上,也可能下面内容覆盖掉上面DIV布局,形成DIV与DIV覆盖重叠现象:您也可能遇到过相邻的两个DIV盒子发生重叠覆盖现象,这些是什么问题如何解决?(音乐休闲椅) 接下来DIVCSS5通过案例来演示这两种兼容性DIV覆盖重叠现象问题,并解释原因

margin重叠与line-height属性

line-height line-height代表行高 蓝色背景部分为行高 line-height:2em 相邻兄弟元素margin重叠 蓝色与蓝色之间的白色部分为 margin-bottom:1em: margin-top:1em: 因为发生了margin-top与margin-bottom重叠 所以只有1em的留白 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t

margin 重叠现象

1.写两个div,在上面div有 margin-bottom 的情况下效果是这样: <!DOCTYPE html> <html> <head>     <meta charset=" utf-8">     <title>margin 重叠现象</title>     <style type="text/css">     .top {       height: 100px;