【问题标题】:Position: absolute; inside dynamic position: relative; element位置:绝对;内部动态位置:相对;元素
【发布时间】:2011-09-23 14:19:32
【问题描述】:

这是一个 IE7 错误:

我有一张桌子,我推到另一个<tbody>。好的,问题是在单元格内我有一个位置:相对; div 和在这个 div 里面我还有其他几个 position:absolute; div。

问题是它们被渲染得好像父 div 不是位置:相对的,这意味着完全位于屏幕的左上角。为什么?!?!

在 ff,chrome 中它工作正常,但在 IE7 中我得到了这些烦人的东西。我已经尝试将 hasLayout 放在任何地方,但它不起作用。

这是我所拥有的:

<table>
    <thead></thead>
    <tbody id="mtbody">
    </tbody>
</table>

这是我收到并推送到“mtbody”(示例)的内容:

<table id="testando">
<tr>
        <td hasLayout="true" class="uhr sl" colspan="7" style="border-bottom: dashed 1px #dddddd; background-color: #eeffee;">
            <div style="overflow: hidden;" class="holdU" hasLayout="true" betriebsId="83113" betriebsName="2nd Level">
                <div hasLayout="true" class="uhr filled0sl" style="width: 679px; left: 0px;">
                </div>


                    <div hasLayout="true" class="border" style="left: 96">
....

所以“holdU”类是 position:relative,而“uhr”类是 position: absolute,它们现在就在我的左上角,有点不可见。

我该如何解决这个问题?

更新:

所以基本上这是预期的结果:http://jsfiddle.net/kgT6E/(来自 DanielB)。但我不明白。想象一下,这个绿色方块现在距离边界 100px,但不是包裹红色方块,而是停留在左上角,因为 position: relative from the green square 没有任何效果。

这是我用来将东西加载到表中的代码:

$.get(savedUrl, function(res) {
        var div = $("<div>").html(res);
// this is because I get other stuff together, but what I really want is the tbody content.
        $("#mtbody").html($(div.find("tbody").get(0)).html());
});

之前,我将所有内容加载到 tbody, $("#mtbody").load(savedUrl)

但是 IE7 无法识别 TR 和 TD,所以我不得不将它们包装在一个表格中。现在我从 position:absolute divs 得到这个奇怪的定位。

UPDATE2:我已尝试放置所有单位 (23 px ),但到目前为止没有运气。我认为这是因为我必须先将它包装在一个 div 中,当我这样做时,位置不会更新.. 来自 IE 的非常奇怪和讨厌的错误.. =/

【问题讨论】:

  • 你能想出一个简单的例子来演示 jsfiddle.net 上的这种行为吗?

标签: html css internet-explorer-7 internet-explorer-6


【解决方案1】:

所以在挖掘了一下之后,我发现了一个非常讨厌的 div.uhr 风格的“float:left”。 基本上,这破坏了 IE7 中的所有布局,使带有“position:absolute”的 div 出现在屏幕之外。

所以各位,请多多关照! ;D

【讨论】:

    【解决方案2】:

    这不是 IE7 错误。如果你的 HTML 和 CSS 是有效的,它就可以工作。

    看看this example。

    此外,您不应将&lt;table&gt; 放入&lt;tbody&gt;。 &lt;tbody&gt; 应该只有 &lt;tr&gt; 子级。

    编辑

    您的内联样式定义也缺少度量单位。

    <div hasLayout="true" class="border" style="left: 96">
    

    应该是

    <div hasLayout="true" class="border" style="left: 96px">
    

    【讨论】:

    • 也许您可以在小提琴中发布完整的 HTML。
    • 但是在你的样式表中div.uhr 有position: relative 不是绝对的。
    • 是的,但是填充1 和填充1sl 添加了这些属性.. =/
    • 好的,很抱歉,但您发布的代码格式不正确,便于阅读。正如您在我的示例中看到的,它将在 IE7 中运行。您应该逐步简化您的代码,看看它在哪一点中断。您的页面上有 doctype 定义吗?
    • 是的,我知道,我正在努力。问题是我真的很沮丧,因为我已经在 chrome 和 firefox 中完成了大量的工作,而现在 IE 正在妨碍我。无论如何,我会尝试将它部分剥离。谢谢! ;D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多