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

  • 相关阅读:
    JSON基本操作
    常用的windowd属性和对象
    手动建立数据库连接的BaseDAO
    注意1:图像插值理论的理解
    Python的Scikit-learn如何选择合适的机器学习算法?
    spark-sklearn(spark扩展scikitlearn)
    Tips-Windows 10【多桌面视窗】操作
    jupyter notebook快捷键速查手册
    使用IntelliJ IDEA进行Python远程调试的需求(未完)
    Bazel构建工具的安装
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8520877.html
Copyright © 2011-2022 走看看