zoukankan      html  css  js  c++  java
  • 子元素设置margin-top,父元素也受影响

    这个问题困惑了非常久。尽管没有大碍早就摸出来怎么搞定它。但始终不明确原因出在哪里,假设仅仅是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

  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8520877.html
Copyright © 2011-2022 走看看