Firefox中未显示边框,表格,位置:边框相对于tbody或背景色位于边框


79

考虑以下HTML:

<html>
<head>
    <style>
        TABLE.data TD.priceCell
        {
            background-color: #EEE;
            text-align: center;
            color: #000;
        }
    
        div.datagrid table
        {
            border-collapse: collapse;
        }
    
        div.datagrid table tbody
        {
            position: relative;
        }
    </style>
</head>
<body>
    <div id="contents" class="datagrid">
        <table class="data" id="tableHeader">
            <thead>
                <tr class="fixed-row">
                    <th>Product</th>
                    <th class="HeaderBlueWeekDay">Price</th>
                    <th class="HeaderBlueWeekDay">Discount</th>
                </tr>
            </thead>
            <tbody>
                <tr style="font-style: italic;">
                    <td>Keyboard</td>
                    <td class="priceCell">20</td>
                    <td style="border-right: #3D84FF 1px solid; border-left: #3D84FF 1px solid;" class="priceCell">2</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>

请注意,最后一个单元格的内联样式具有左右边框。您(或至少是我)希望此可见。在IE中,就是这种情况。但是在Firefox(6)中,事实并非如此。您可以通过以下方法解决此问题:

  • div.datagrid table tbody在CSS中移除相对位置
  • 在CSS中更改div.datagrid table tbodydiv.datagrid table
  • 在CSS中删除background-colorontable.data td.priceCell
  • 在CSS中删除border-collapseondiv.datagrid table

这是我们代码的简化版本;我们也解决了它(选择选项2)。但是我想知道的是:

  • 这是Firefox中的错误吗?
  • 这是IE中的错误吗?

特别是:当CSS保持原样时,Firefox不显示边框的原因是什么?


不要问我为什么,但是当我在上面的CSS中将border-collapse属性从中div.datagrid table移到它table.data本身时,它工作正常。也许这里有人可以解释...(我在Firefox 5上)
compostus 2011年

1
您的问题我没有答案。我怀疑这是一个错误,因为相对位置不会影响边框,但是我做了一个简化的测试用例,所有4个浏览器都以不同的方式显示它!(Fx6,Op 11.50,IE8,Chrome 15)此处的测试案例:jsfiddle.net/76Qb7/9
Doug

刚遇到这个问题……有趣的是,Firefox漏洞在这样的时间间隔内仍然存在。
GDY

Answers:


63

在我看来,这似乎是一个Firefox错误。背景画在边界上。如果使用半透明的背景色,则可以看到它。

我提交了https://bugzilla.mozilla.org/show_bug.cgi?id=688556


2
我遇到了同样的问题。Firefox仍未修复该问题。在使用:nth-​​child(odd)选择器以及仅将背景添加到奇数行时,这似乎是一个很大的设计问题,似乎他们没有认真对待。我也需要边界以使其完美。感谢您提交错误!
Jelmer,2012年

仅供参考,目前仍在9年后。
Charles Merriam

178

刚遇到这个问题,并提出了一个仅限CSS的解决方案:只需添加background-clip: padding-box到您的td元素中即可。

请参阅本文以获取更多信息:https : //developer.mozilla.org/en-US/docs/CSS/background-clip


2
get,我不明白。文档说它指定背景是否在边框下方延伸。我得到的印象是它呈现在边框的顶部。
彼得

2
我发现的最佳CSS唯一解决方案。感谢您分享@medoingthings
helpe 2014年

14

只是将所有内容放在一起。

当您的单元格在具有折叠边框的表格中具有相对位置的单元格时,就会产生此问题(如鲍里斯所指出并填写了错误https://bugzilla.mozilla.org/show_bug.cgi?id=688556

如user2342963所示,可以使用CSS轻松解决此问题(向单元格添加background-clip:padding-box)。

您可以在此处查看问题(使用Firefox)和修复程序:http : //jsfiddle.net/ramiro_conductiva/XgeAS/

table {border-spacing: 0px;}
td {border: 1px solid blue; background-color: yellow; padding: 5px;}
td.cellRelative {position: relative;}
td.cellRelativeFix {background-clip: padding-box;}
table.tableSeparate {border-collapse: separate;}
table.tableCollapse {border-collapse: collapse;}

<table class="tableSeparate">
    <tbody>
        <tr>
            <td class="cellRelative">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>
<table class="tableCollapse">
    <tbody>
        <tr>
            <td class="cellRelative">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>
<table class="tableCollapse">
    <tbody>
        <tr>
            <td class="cellRelative cellRelativeFix">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>

2
这可以解决FF中的错误,但是在IE中,常规边框内有一个难看的白色边框,我们该如何解决?
托尼·布里克斯

9

这是firefox中的错误,希望他们尽快修复。但是同时我可以通过将td单元设置为来为我解决这个问题position: static。希望这会对别人有所帮助。

td {
    position: static;
}    

3
如果使用伪元素,如::before::after在同一tdposition: static打乱这些花式起来。background-clip: padding-box更安全。
Sebsemillia

3

另一种可能的解决方案是纠正表标记中的colspan错误。

显然,在使用border-collapse时,colspan错误会导致隐藏边框产生相同的效果:

通过http://www.codingforums.com/html-and-css/46049-border-collapse-hiding-some-outside-borders.html定向到了正确的解决方案。

在我的表中,当只有8列时,我写了<th colspan =“ 9”>。

导致错误(隐藏的右边框)

  • Chrome 51.0.2704.103 m(64位)
  • Vivaldi 1.2.490.43()(32位)

但以正确的边界渲染

  • Firefox 44.0.2
  • IE 11(11.420.10586.0)
  • 边缘25.10586.0.0

1
消除边界崩溃:表格元素的崩溃帮助了我们
Jarno Argillander

其他语法错误显然也触发了这一点。考虑@pekaaw的建议,我对HTML进行了校对,发现我本来<thead>可以拥有的</thead>。修正打字错误可解决边界问题!
davidreedernst

1

解决此问题的最佳方法是执行以下操作。

注意位置:“ thead”和“ tbody”元素中的相对属性很重要。border-collapse和background-clip属性也是如此。在所有行和交替行上都使用background-color。

table {
  width: 100% !important;
  border-spacing: 0;
  border-collapse: unset !important;

  thead {
    position: relative;
    left: -1px;
    top: -1px;

    tr {
      th {
        background-clip: padding-box;
        border-top: 1px solid #737373!important;
        border-left: 1px solid #737373!important;
        border-right: none !important;
        border-bottom: none !important;

        &:last-child {
          border-right: 1px solid #737373!important;
        }
      }
    }
  }

  tbody {
    position: relative;
    left: -1px;
    top: -1px;

    tr {
      &:last-child {
        td {
          border-bottom: 1px solid #737373!important;
        }
      }

      td {
        background-clip: padding-box;
        border-top: 1px solid #737373!important;
        border-left: 1px solid #737373!important;
        border-right: none !important;
        border-bottom: none !important;

        &:last-child {
          border-right: 1px solid #737373!important;
        }
      }
    }
  }
}

0

为这个(旧的)问题添加另一种解决方案:今天这发生在我身上,因为我的表有些复杂,但有多个tbody。唯一的问题实际上是我有一个未关闭的打开的tbody标签。我删除了该标签,并且边框再次出现,而无需更改CSS中的任何内容。为了澄清,我的结构是这样的:

<table>
  <thead>
    <tr><th>Col1</th><th>Col2</th></tr>
  </thead>
  <tbody>
  <tbody>
    <tr><td>Val1</td><td>Val2</td></tr>
    <tr><td>Val3</td><td>Val4</td></tr>
  </tbody>
</table>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.