参考链接: css外边距叠加问题
概念
两个或多个块级盒子的垂直相邻边界会重合。结果的边界宽度是相邻边界宽度中最大的值。如果出现负边界,则在最大的正边界中减去绝对值最大的负边界。如果没有正边界,则从零中减去绝对值最大的负边界。
计算:
- 水平边距永远不会重合
- 2个或以上的块级盒模型的垂直margin会重叠,最终margin的计算:
- 全部为正值,取最大值。
- 不全为正,都取绝对值,然后用正值减去最大值。
- 没有正值,则取绝对值,然后用0减去最大值
- 相邻的盒模型中,如果其中的一个是浮动的,垂直margin不会重叠,且浮动元素和它的子元素也是这样
- 设置了overflow属性的元素和它的子元素之间的margin不会重叠,除了设置为visible外
- 设置了绝对定位的盒模型,垂直margin不会重叠,且浮动元素和它的子元素也是这样
- 设置了display:inline-block的元素,垂直margin不会重叠,且浮动元素和它的子元素也是这样
- 如果一个盒模型的上下margin相邻,这是它的margin可能重叠覆盖,在这种情况下,元素的位置取决于它的margin是否重叠
- 如果元素的margin和它的父元素的margin-top重叠在一起,盒模型border-top的边界定义和它的父元素相同。
- 另外,任意元素的父元素不参与margin的重叠,或者说只有父元素的margin-bottom是参与计算的。如果元素的border-top非零,那么元素的border-top边界位置和原来一样。
- 根元素的垂直margin不会被重叠
空元素外边距叠加问题
- 外边距甚至可以与本身发生叠加。假设有一个空元素,他有外边距,但是没有边框或内边距。在这种情况下,顶外边距与底外边距就碰到了一起,它们会发生叠加。
- 所有的外边距会叠加成一个外边距
- 但是 浏览器一般会理解为没叠加(我也不懂?)
防止外边距重叠解决方案:
1、外层元素padding代替
2、内层元素透明边框border:1px solid transparent;
3、内层元素绝对定位postion:absolute:
4、外层元素overflow:hidden;
5、外层元素 加float:left或display:inline-block
6、内层元素padding:1px;