关于html:Internet Explorer 7上绝对定位的父级中的html:Percentage width子元素

关于html:Internet Explorer 7上绝对定位的父级中的html:Percentage width子元素

Percentage width child element in absolutely positioned parent on Internet Explorer 7

我有一个绝对定位的div,其中包含多个子代,其中一个是相对定位的div。 当我在子div上使用percentage-based width时,在IE7上它会折叠为0 width,但在Firefox或Safari上不会。

如果使用pixel width,它可以工作。 如果父母位置相对,则孩子的百分比宽度有效。

  • 我在这里想念什么吗?
  • 除了pixel-based width之外,是否有简单的解决方法
    儿童?
  • CSS规范中是否有涵盖此方面的内容?

  • 父级div必须具有定义的width,以像素为单位或以百分比表示。在InternetExplorer7中,父级div需要定义的width才能使子百分比div正常工作。


    这是一些示例代码。我认为这就是您想要的。在Firefox 3(mac)和IE7中,以下显示完全相同。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #absdiv {
      position: absolute;
      left: 100px;
      top: 100px;
      width: 80%;
      height: 60%;
      background: #999;
    }

    #pctchild {
      width: 60%;
      height: 40%;
      background: #CCC;
    }

    #reldiv {
      position: relative;
      left: 20px;
      top: 20px;
      height: 25px;
      width: 40%;
      background: red;
    }
    1
     


    IE 8之前的版本在其盒模型上具有时间方面的特征,最明显的问题是基于百分比的宽度产生了问题。在您的情况下,默认情况下绝对定位的div没有宽度。其宽度将根据其内容的像素宽度进行计算,并将在呈现内容之后进行计算。因此,在IE遇到并渲染相对定位的div时,其父级的宽度为0,因此为什么它本身会崩溃为0。

    如果您想对此进行更深入的讨论以及许多可行的示例,请在此处进行咨询。


    Why doesn’t the percentage width child
    in absolutely positioned parent work
    in IE7?

    因为它是Internet Explorer

    Is there something I'm missing here?

    就是说,要提高您的同事/客户对IE糟糕的认识。

    Is there an easy fix besides the pixel-based width on the child?

    使用em单位,因为它们在创建液体布局时更有用,因为您可以将它们用于填充和边距以及字体大小。因此,如果调整其大小,则空白区域将与文本成比例地增长和缩小(这确实是您所需要的)。我不认为百分比可以比ems更好地控制;您可以使用百分之百的ems(0.01 em)进行指定,浏览器将根据需要进行解释。

    Is there an area of the CSS specification that covers this?

    没有,据我所记得,em和%s仅在CSS 1.0时才用于字体大小。


    我认为这与在较旧的浏览器中实现hasLayout属性的方式有关。

    您是否在IE8中尝试过代码以查看是否也可以在其中工作?
    IE8具有调试器(F12),也可以在IE7模式下运行。


    div必须具有定义的宽度:

    1
     


    推荐阅读