`

margin collapse

    博客分类:
  • css
阅读更多
“collapsing margins”(折叠margin)的意思是:2个或以上盒模型之间(关系可以是相邻或嵌套)相邻的margin属性(这之间不能有非空内容、padding区域、border边框或使用清除分离方法)结合表示为一个单独的margin。

在css2.1中,水平的margin不会被折叠。
垂直margin可能在一些盒模型中被折叠:
1、在常规文档流中,2个或以上的块级盒模型相邻的垂直margin会被折叠。

最终的margin值计算方法如下:

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

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

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

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

2、相邻的盒模型中,如果其中的一个是浮动的(floated),垂直margin不会被折叠,甚至一个浮动的盒模型和它的子元素之间也是这样。
3、设置了overflow属性的元素和它的子元素之间的margin不会被折叠(overflow取值为visible除外)。
4、设置了绝对定位(position:absolute)的盒模型,垂直margin不会被折叠,甚至和他们的子元素之间也是一样
5、设置了display:inline-block的元素,垂直margin不会被折叠,甚至和他们的子元素之间也是一样。
6、如果一个盒模型的上下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边界位置才是必需的。

7、根元素的垂直margin不会被折叠。


浮动的块级元素的margin-bottom总是与它后面的浮动块级兄弟元素(floated next in-flow block-level sibling)的margin-top相邻,除非那个同级元素使用了清除操作。

浮动的块级元素的margin-top和它的第一个浮动块级子元素(floated first in-flow block-level child)的margin-top相邻(如果该元素没有border-top,没有padding-top,并且子元素没有使用清除操作)。

浮动的块级元素的margin-bottom如果符合下列条件,那么它和它的最后一个浮动块级子元素的margin-bottom相邻(如果该元素没有指定padding-bottom或border):

a、指定了height:auto

b、min-height小于元素的实际使用高度(height)

c、max-height大于元素的实际使用高度(height)

如果一个元素的min-height属性设置为0,那么它所拥有的margin是相邻的,并且它既没有border-top和border-bottom,也没有padding-top和padding-bottom,它的height属性可以是0或auto,它不能包含一个内联的盒模型(line box),它所有的浮动子元素(如果有的话)的margin也都是相邻的。

当一个元素拥有的margin折叠了,并且它使用了清除操作,那么它的margin-top会和紧随其后的兄弟元素的相邻margin折叠,但结果是它的margin将无法和其块级父元素的margin-bottom折叠。

折叠操作是以padding、margin、border的值为基础的(即在浏览器解析所有这些值之后),折叠后的margin计算将覆盖已使用的不同margin的值。
分享到:
评论

相关推荐

    HTML-bfc初探

    - 同一BFC内,相邻的块级元素的margin会发生垂直塌陷(margin collapse)。 - 每个元素的margin不会与BFC的边界重叠。 - BFC不会与浮动元素重叠。 - BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会...

    通杀所有浏览器兼容问题

    在IE6中,当元素同时应用了`margin`和`float`属性时,可能会遇到布局错位的问题,即所谓的“Margin Collapse”现象。通过将`display`属性设置为`inline`,可以在一定程度上解决这一问题。 #### 2. Padding与高度...

    前端面试题内部资料

    盒模型中的外边距重叠(margin collapse)是块级元素相邻外边距相遇时发生的现象,只适用于垂直方向。BFC(Block Formatting Context)是CSS布局的一个概念,用于避免浮动元素与周边元素发生外边距重叠。 总的来说...

    经典css教程(适合初学者)

    在学习CSS的过程中,会涉及到很多基础概念,比如盒模型(Box Model)、浮动(Float)、清除浮动(Clear)、边距合并(Margin Collapse)等,这些概念对于创建结构化和布局良好的网页至关重要。理解盒模型可以帮助...

    前端面试题

    - 外边距合并(Margin Collapse):在同一个BFC中,两个垂直排列的块级盒子的上边距和下边距会发生合并。而不在同一个BFC中的盒子不会产生外边距合并现象。 - 清除浮动:通过将浮动元素包裹在一个BFC中,可以避免...

    web前端笔试面试

    - `margin collapse`不会发生在绝对定位元素上。 **19. BFC规范的理解?** - **BFC**: 块级格式化上下文。 - 决定了元素如何布局以及与相邻元素的关系。 **20. CSS权重优先级计算?** - 权重由选择器类型(如ID...

    javascript面试题

    - 行内元素可以设置左右 `margin` 和 `padding`,但上下 `margin` 和 `padding` 仅影响元素内部空间,不影响其他元素。 **25、什么是外边距重叠?重叠的结果是什么?** 外边距重叠发生在相邻的两个元素之间,当两...

    前端面试题汇总

    - **margin collapse** 会导致相邻的块元素外边距重叠。 - **overflow** 控制溢出内容的行为。 - **float** 影响元素的浮动行为。 #### 总结 以上总结了前端面试题汇总中提到的主要知识点。这些问题覆盖了 HTML、...

    css盒子模型 css margin 外边框合并

    外边距合并(Margin Collapse)是盒子模型中一个独特的现象,它发生在两个或多个垂直外边距相遇时。在普通文档流中,当块级元素的外边距相遇时,它们将形成一个外边距。这个新形成的外边距的高度是相遇的外边距中...

    Firefox下margin-top会出错

    6. **元素的上下`margin`相邻**,这时元素的`margin`可能折叠覆盖(collapse through)到它。在这种情况下,元素的位置取决于其相邻元素的`margin`是否被折叠。 - 如果元素的`margin`和其父元素的`margin-top`折叠...

    margin(CSS语法)-.rar

    `margin-collapse`是另一个与`margin`相关的概念,它描述了相邻元素之间外边距如何合并。当两个垂直或水平相邻的元素具有相同的外边距时,它们的外边距可能不会简单相加,而是取其中较大的那个。通过`margin-...

    core-layout-trbl

    2. **外边距重叠(Margin Collapse)**: 当上下相邻的两个块级元素(如div)之间没有内边距、边框或其他非空内容时,它们的外边距可能会合并,这就是所谓的外边距重叠现象。这在某些情况下可能不是预期的效果,...

    关于css兼容性问题及一些常见问题汇总

    5. **外边距塌陷**(Margin Collapse): 在所有浏览器中,子元素的上、下外边距有时会传递给父元素。可以通过以下几种方式解决: - a) 为父元素添加浮动; - b) 为父元素添加`position:relative`或`position:...

    浅谈CSS潜藏着的BFC

    2. 属于同一个BFC的元素的垂直外边距可能会发生重叠(margin collapse)。这是因为它们的垂直距离由margin决定。 3. BFC中的子元素的左外边距会与包含块的左边界相接触,即便存在浮动元素也一样。 4. BFC区域不会与...

    C++编写小游戏

    BORDER-COLLAPSE: collapse; BORDER-LEFT: #ffffff 0px solid; BORDER-RIGHT: #ffffff 0px solid; BORDER-TOP: #ffffff 0px solid; FONT-SIZE: 70%; MARGIN-LEFT: 10px } .issuetable { BACKGROUND-COLOR: #...

    仿谷歌导航(图片变换大小)

    border-collapse:collapse;} td{text-align:center;padding:0;margin:0;} form{margin:0;} .bgp a,.bgp span{display:block;cursor:pointer;} .bgp .bgp-fr{margin:0 auto;} #wrapper{text-align:ce 部分代码

    给table的tr添加border-top时没有效果的解决方法

    然而,在实际操作中,有时你会发现为`<tr>`元素直接添加`border-top`属性并没有预期的效果,这通常是因为浏览器的默认样式与CSS的`border-collapse`属性有关。本文将详细解析这个问题,并提供解决方案。 当我们在...

    java树状图demo

    .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); d3.json("tree_data.json", function(error, flare) { if ...

    jQuery的手机端九宫格转盘抽奖代码.zip

    <... <head> <meta charset="utf-8">...meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no...border-collapse: collapse; text-align: center; }

Global site tag (gtag.js) - Google Analytics