父元素与子元素之间的margin-top问题

简介: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化。   html代码: css样式: .

父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化。

 

html代码

<div class="box1">
<div class="box2"></div>
</div>

css样式

.box1{height:200px;width:200px;background:gray;}
.box2{height:100px;width:100px;background:gold;margin-top:50px;}

 

BUG原因:

In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin. 所有毗邻的两个或更多盒元素的margin将会合并为一个margin共享之。毗邻的定义为:同级或者嵌套的盒元素,并且它们之间没有非空内容、Padding或Border分隔。

这就是原因了。“嵌套”的盒元素也算“毗邻”,也会 Collapsing Margins。这个合并Margin其实很常见,就是文章段落元素<p/>,并列很多个的时候,每一个都有上下1em的margin,但相邻的<p/>之间只会显示1em的间隔而不是相加的2em。这个很好理解,我就是奇怪为什么W3C要让嵌套的元素也共享Margin,想不出来在什么情况下需要这样的表现。   这个问题的避免方法很多,只要破坏它出现的条件就行。给 Outer Div 加上 padding/border,或者给 Outer Div / Inner Div 设置为 float/position:absolute(CSS2.1规定浮动元素和绝对定位元素不参与Margin折叠)。

 

解决方法
1、修改父元素的高度,增加padding-top样式模拟(padding-top:1px;常用)
2、为父元素添加overflow:hidden;样式即可(完美)
3、为父元素或者子元素声明浮动(float:left;可用)
4、为父元素添加border(border:1px solid transparent可用)
5、为父元素或者子元素声明绝对定位

相关文章
|
8月前
flex+margin布局方法
flex+margin布局方法
|
前端开发
前端知识点1-text align是写在父级居中还是子级
前端知识点1-text align是写在父级居中还是子级
63 0
IE6下面,为什么不能设置height:1px的元素
在用DIV构建网页的时候,有时候需要的高度很小,这时候就可能会出现问题,因为,IE6下DIV有个默认的高度,大约10-12px。当你试图定义一个高度小于这个默认值的 div 的时候, IE 会固执的认为这个层的高度不应该小于字体的行高。
53 0
|
容器
父元素如何围住浮动子元素
父元素如何围住浮动子元素
103 0
父元素如何围住浮动子元素
父级边框塌陷
问题描述 解决方法 总结
父级边框塌陷
web中盒子模型的“外边距合并”与“margin-top塌陷问题”
外边距合并 盒子模型在嵌套的情况下,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
web中盒子模型的“外边距合并”与“margin-top塌陷问题”
|
前端开发 开发者
善于使用父元素的 padding 而不使用子元素的 margin | 学习笔记
快速学习善于使用父元素的 padding 而不使用子元素的 margin 。
126 0
|
前端开发
【CSS】margin塌陷与合并问题及BFC初探
1.margin塌陷问题 margin塌陷指的是嵌套父子块级元素垂直方向(次方向)的margin会结合到一起,并取最大的值,子元素的margin会往父元素顶部上方方向塌陷。(今天讲的问题都是块级元素之间的问题) 如图,wrapper与content的margin-top与bottom的值分别为100px和150px并且合并到一起,那么wrapper距页面顶部的实际距离应取最大值为150px,子元素不再按照父元素边框下移,而且最关键的是子元素设置的margin值会带着父元素一起向下移。
1365 0