【问题标题】:IE7: Why do unrelated cells change width when colspan'd cells contents grow wide?IE7:当 colspan 的单元格内容变宽时,为什么不相关的单元格会改变宽度?
【发布时间】:2011-07-09 20:28:40
【问题描述】:

首先,请看一下IE7中的this fiddle。它有点涉及,不值得在这里复制。

所需的行为是单击红色块会显示一些其他详细信息。顶行按需要工作。底行,其中细节的宽度更大,展示了我试图阻止的行为。

理想情况下,我想知道这里发生了什么,但我会接受任何答案,其中包括解决方法,以防止在底部行展开时另一行的列宽跳动。

测试 Firefox 揭示了两种情况下的正确行为:显示底部行详细信息但没有发生跳转。我没有能力在 IE8 或 IE9 中进行测试,所以我不知道它们是否也会发生这种情况。

那么,这里发生了什么?为什么会这样?怎么让它不跳?

上面的小提琴在其原始上下文中显示了我的问题,但为了进一步缩小范围,这里是a version,没有尝试更精简的 javascript。请注意,从最里面的表格中删除 25px 边距只是隐藏了问题。添加另一组单元格将使其再次显示。

【问题讨论】:

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


    【解决方案1】:

    IE 跨度错误?但不是真正的错误 - 它被报告为 IE6/7/8(b1) 但被视为无效,因为当隐式定义 table-layout: auto 时,浏览器应如何呈现 colspan 没有定义的行为。

    您的解决方法是将最外面的表格设置为table-layout: fixed,并通过您的第一行(.report-header)设置“列宽”。因此,从 expand/expanable 单元格中取出 25px 宽度,并使 .report-header 行具有正确的宽度 - 如果您不想要实际宽度,可以将它们默认为自动。

    那么你可以根据需要将嵌套表显式放回table-layout: auto

    所以本质上是这里的代码,我已经将相同的代码放入您的小提琴中,但如果我丢失了一些位,我很抱歉,我在测试时对其进行了简化.. 如果现在在 IE7 中不起作用,那么让我知道了,我会重做一个完整的小提琴..

    Example fiddle

    CSS:

    table {
       border-collapse: collapse;
       table-layout: fixed;
       width: 100%;
    }
    
    table table {
       width: auto; 
       table-layout: auto;
    }
    
    table,tr,td {
        margin:0;
        padding:0;
    }
    
    table {border: 1px solid #f00;}
    /* td {border: 1px solid #00f;} was used in testing */
    
    
    td.expanded, td.expandable {
        background-color:#f00;
    }
    
    tr.report-header {
        font-weight:bold;
    }
    
    /* give first row their column widths here */
    tr.report-header td {width: 25px;} /* col 1 */
    tr.report-header td+td {width: auto;}
    tr.report-header td+td+td+td+td+td {width: 50px;} /* col 6 example */
    /* end first row widths */
    
    td.detail table, td.detail td {border: 0;}
    tr.detail {display:none;}
    td.detail {padding-left: 30px;}
    

    【讨论】:

    • 您准确地确定了问题的根源和解决方法,尽管这令人不快。对我来说仍然没有意义的是原因:即使它在规范中未定义,当替代方案是尊重它并制作跨跨单元格宽度时,忽略用户指定的单元格宽度肯定是不正确的好笑。
    • 啊,但它可以,table-layout: auto 没有预定义的行为,浏览器不知道应该在一个表上“通过”多少次才能进行计算(如果你有一个巨大的表colspans .. 这就是为什么他们过去渲染速度如此之慢,直到他们完成计数才会渲染) - 现在如果你接受像 JS 显示/隐藏这样的动态行为,他们可能只会在桌子上做一次“回传”,在这种情况下,这还不够 - 请记住,我们在这里谈论的是遗留问题,所以我不会太担心它,因为它显然已被“修复” - 总是有助于旧 IE 的计数;)
    • 谢谢.. 我同意这是不愉快的,但仍然是 x 浏览器,不需要条件 CSS ;)
    • 谢谢你大约2年后:P
    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2017-11-08
    • 2011-06-10
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    相关资源
    最近更新 更多