`
smiky
  • 浏览: 257693 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

margin collapse

    博客分类:
  • css
 
阅读更多

碰到margin无效问题,查的一些资料。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Margin</title>
<style type="text/css">
	.container{
		margin: 0 auto;
		width: 800px;
		padding: 0 10px 10px;
		outline: 1px solid red;
	}
	.item{
		height: 50px;
		margin-top: 10px;
		outline: 1px solid green;
	}
</style>
</head>
<body>
	<div class="container">
		<div class="item">默认margin</div>
		<div class="item"></div>
	</div>
</body>
</html>

 

实际结果:

第一个div的margin-top没生效,一般情况下是两个相邻的div的margin-bottom与margin-top会出现坍塌,而这里是父子两个元素。

 期望结果:


IE浏览器是由所谓的hasLayout引起:

1.该盒子加浮动;
2.用内边距来解决(给其父元素一个设置个内边距)
3.overflow:hidden;
4.给其父元素一个设置个border属性也可解决。
5.绝对定位

参考:

http://adamghost.com/2008/12/ie-haslayout-%E8%AF%A6%E8%A7%A3/

http://www.cnblogs.com/imhurley/archive/2011/11/23/2260764.html

 

 

对于非IE浏览器可查看下面的W3C规范: 

Here are the relevant points from the W3C spec:

8.3.1 Collapsing margins

In CSS, the adjoining margins of two or more boxes (which might or might not be siblings) can combine to form a single margin. Margins that combine this way are said to collapse, and the resulting combined margin is called a collapsed margin.

Adjoining vertical margins collapse [...]

Two margins are adjoining if and only if:

  • both belong to in-flow block-level boxes that participate in the same block formatting context
  • no line boxes, no clearance, no padding and no border separate them
  • both belong to vertically-adjacent box edges, i.e. form one of the following pairs:
    • top margin of a box and top margin of its first in-flow child

The reason why doing any of the following prevents the margin collapse:

Is because:

  • Margins between a floated box and any other box do not collapse (not even between a float and its in-flow children).
  • Margins of elements that establish new block formatting contexts (such as floats and elements with 'overflow' other than 'visible') do not collapse with their in-flow children.
  • Margins of inline-block boxes do not collapse (not even with their in-flow children).

The left and right margins behave as you expect because:

Horizontal margins never collapse.

  • 大小: 2.7 KB
  • 大小: 2.4 KB
分享到:
评论

相关推荐

    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时没有效果的解决方法

    然而,在实际操作中,有时你会发现为`&lt;tr&gt;`元素直接添加`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

    &lt;... &lt;head&gt; &lt;meta charset="utf-8"&gt;...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