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

所属分类: 网页制作 / CSS 阅读数: 1293
收藏 0 赞 0 分享

两个或多个块级盒子的垂直相邻边界会重合。结果的边界宽度是相邻边界宽度中最大的值。如果出现负边界,则在最大的正边界中减去绝对值最大的负边界。如果没有正边界,则从零中减去绝对值最大的负边界。注意:相邻的盒子可能并非是由父子关系或同胞关系的元素生成。

但是边界的重叠也有例外情况:

1、水平边距永远不会重合。

2、在规范文档中,2个或以上的块级盒模型相邻的垂直margin会重叠。最终的margin值计算方法如下:

a、全部都为正值,取最大者;

b、不全是正值,则都取绝对值,然后用正值减去最大值;

c、没有正值,则都取绝对值,然后用0减去最大值。

注意:相邻的盒模型可能由DOM元素动态产生并没有相邻或继承关系。

3、相邻的盒模型中,如果其中的一个是浮动的(float),垂直margin不会重叠,并且浮动的盒模型和它的子元素之间也是这样。

4、设置了overflow属性的元素和它的子元素之间的margin不被重叠(overflow取值为visible除外)。

5、设置了绝对定位(position:absolute)的盒模型,垂直margin不会被重叠,并且和他们的子元素之间也是一样。

6、设置了display:inline-block的元素,垂直margin不会重叠,甚至和他们的子元素之间也是一样。

7、如果一个盒模型的上下margin相邻,这时它的margin可能重叠覆盖(collapse through)它。在这种情况下,元素的位置(position)取决于它的相邻元素的margin是否重叠。

a、如果元素的margin和它的父元素的margin-top重叠在一起,盒模型border-top的边界定义和它的父元素相同。

b、另外,任意元素的父元素不参与margin的重叠,或者说只有父元素的margin-bottom是参与计算的。如果元素的border-top非零,那么元素的border-top边界位置和原来一样。

一个应用了清除操作的元素的margin-top绝不会和它的块级父元素的margin-bottom重叠。

注意,那些已经被重叠覆盖的元素的位置对其他已经重叠的元素的位置没有任何影响;只有在对这些元素的子元素定位时,border-top边界位置才是必需的。

8、根元素的垂直margin不会被重叠。

外边距(margin)重叠示例

外边距重叠是指两个垂直相邻的块级元素,当上下两个边距相遇时,起外边距会产生重叠现象,且重叠后的外边距,等于其中较大者。

为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,帮助大家在成为前端工程师,乃至全栈工程师的路上披荆斩棘。在这里给大家推荐一个前端全栈学习交流圈:784783012 欢迎大家进群交流讨论,学习交流,共同进步。

当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。

但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以有效资源还是很有必要的。

图示:

另一个重叠现象是当一个元素包含在另一个元素之中时,子元素与父元素之间也会产生重叠现象,重叠后的外边距,等于其中最大者:


 

同理,如果一个无内容的空元素,其自身上下边距也会产生重叠。

 
 

外边距重叠的意义

外边距的重叠只产生在普通流文档的上下外边距之间,这个看起来有点奇怪的规则,其实有其现实意义。设想,当我们上下排列一系列规则的块级元素(如段落P)时,那么块元素之间因为外边距重叠的存在,段落之间就不会产生双倍的距离。

防止外边距重叠解决方案:

虽然外边距的重叠有其一定的意义,但有时候我们在设计上却不想让元素之间产生重叠,那么可以有如下几个建议可供参考:

  1. 外层元素padding代替
  2. 内层元素透明边框 border:1px solid transparent;
  3. 内层元素绝对定位 postion:absolute:
  4. 外层元素 overflow:hidden;
  5. 内层元素 加float:left;或display:inline-block;
  6. 内层元素padding:1px;

 总结

以上所述是小编给大家介绍的CSS 外边距(margin)重叠及防止方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

更多精彩内容其他人还在看

兼容浏览器的css网页细线表格设计

细线表格如果单纯设置边框,很难保证浏览器兼容。
收藏 0 赞 0 分享

FORM 不换行的方法

在写 Html 的时, 写到 FORM 会让造成空隔多空一行 等等的问题。
收藏 0 赞 0 分享

如何使div垂直水平居中的css代码

很多人都会遇到这样的问题:如何使DIV居中,div垂直居中,div水平居中.
收藏 0 赞 0 分享

左侧固定宽度,右侧自适应宽度的CSS布局

这个是我练习做网页查资料查到的,有很多不错的布局。将其总结,并写上自己使用的一些感悟。
收藏 0 赞 0 分享

黑客选择CSS代码挂马 CSS挂马攻防实录

随着Web2.0的普及,各种网页特效用得越来越多,这也给黑客一个可乘之机。他们发现,用来制作网页特效的CSS代码,也可以用来挂马。而比较讽刺的是,CSS挂马方式其实是从防范E挂马的CSS代码演变而来。
收藏 0 赞 0 分享

IE6下CSS定义DIV高度的问题

IE6下默认的字体尺寸大致在 12 – 14px 之间,当你试图定义一个高度小于这个默认值的 div 的时候, IE 会固执的认为这个层的高度不应该小于字体的行高。
收藏 0 赞 0 分享

CSS网页实例 利用box-sizing实现div仿框架结构实现代码

利用box-sizing实现div仿框架.需要的朋友可以参考下。
收藏 0 赞 0 分享

CSS样式表与HTML网页的关系分析

浅谈CSS样式表和html文档的关系.
收藏 0 赞 0 分享

CSS样式表中继承关系的空格与不空格

CSS样式表空格与不空格的关系
收藏 0 赞 0 分享

规范HTML代码可以节省修改代码的时间

css技巧 清除多余的标签让代码更加有意义.
收藏 0 赞 0 分享
查看更多