子元素设置margin-top,父元素也受影响
2018-03-07 10:27
274 查看
这个问题困惑了非常久。尽管没有大碍早就摸出来怎么搞定它。但始终不明确原因出在哪里,假设仅仅是IE有问题我也不会太在意。可问题是全部上等浏览器都表现如此,这样叫我怎能安心?今天总算下狠心查出来怎么回事,竟然是CSS2.1盒模型规范……尽管非常别扭,非常别扭的规定。
问题例如以下。两层Div结构。Outer Div属性为“margin:0 auto”。本该紧贴外框顶部的,假设没有Inner Div,或者没有Inner Div的“margin-top”属性,一切如预期。可是当Inner
Div设置了“margin-top:10px”之后。它的父元素Outer Div也被撑出来一个本不该有的“margin-top:10px”效果。
Inner Div [margin-top: 10px]
Outer Div [margin: 0 auto]
HTML Demo Area
这个“问题”……它是CSS2.1的盒模型中规定的内容——Collapsing margins:
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折叠)。
很多其它信息。关于不同值的margin折叠后表现的计算方法等等,可自行查阅W3C的CSS2.1规范:Collapsing margins。
http://blog.csdn.net/duran1986/article/details/6930967
问题例如以下。两层Div结构。Outer Div属性为“margin:0 auto”。本该紧贴外框顶部的,假设没有Inner Div,或者没有Inner Div的“margin-top”属性,一切如预期。可是当Inner
Div设置了“margin-top:10px”之后。它的父元素Outer Div也被撑出来一个本不该有的“margin-top:10px”效果。
Inner Div [margin-top: 10px]
Outer Div [margin: 0 auto]
HTML Demo Area
这个“问题”……它是CSS2.1的盒模型中规定的内容——Collapsing margins:
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折叠)。
很多其它信息。关于不同值的margin折叠后表现的计算方法等等,可自行查阅W3C的CSS2.1规范:Collapsing margins。
http://blog.csdn.net/duran1986/article/details/6930967
相关文章推荐
- 子div设置margin-top后会影响父元素
- 子元素设置margin-top,父元素也受影响
- 子元素设置margin-top,父元素也受影响
- 解决:子元素设置margin-top,父元素也受影响的问题
- 子div块中设置margin-top时影响父div块位置的解决办法及其原因
- 子元素margin-top为何会影响父元素?
- 子DIV块中设置margin-top时影响父DIV块位置的解决办法
- css子元素的margin-top为何会影响父元素
- 为子元素设置margin-top会作用在父元素上?
- 由问题第一个子元素设置margin-top不起作用引发的新发现
- margin-top越界以及所有子元素浮动后父元素高度为0且影响后续元素的问题。
- 如何消除margin-top对父元素的影响
- 子元素margin-top影响父元素
- CSS:子元素margin-top影响父元素
- 子元素应该margin-top影响父元素的解决办法
- 子DIV块中设置margin-top时影响父DIV块位置的解决办法
- 如何解决子div设置margin-top时影响父div的margin-top
- 子DIV块中设置margin-top时影响父DIV块位置的解决办法
- 关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)
- 子元素margin-top为何会影响父元素?