【问题标题】:CSS Table cell border overlapping table borderCSS表格单元格边框重叠表格边框
【发布时间】:2011-01-04 08:08:42
【问题描述】:

我几乎不是 css 专家,所以这有点令人沮丧。我有一个充满中继器的网格。我希望每一行在底部都有一个 1px 的边框,以便在视觉上分隔各行。我还想在桌子的每一边都有一个深灰色的边框。使用此表的以下 CSS:

        #repeaterTable
        {
            border-left: 1px solid #A3A3A3; 
            border-right: 1px solid #A3A3A3;
            border-collapse: collapse;
        }
        repeaterTable.td
        {
            border-bottom: 1px solid white; 

        }

我在 FF(表格右边缘的 SS)中得到这个结果:

这在 IE8 中:

alt text http://img412.imageshack.us/img412/7092/borderie.png

我需要的是让深灰色边框保持实心,而不是为每个行边框中断。该表中有两列,但单元格间距为 0px,因此在 tr 上设置边框底部会形成连续边框。任何人都可以建议对 css 进行一些更改以使其正常工作吗?

【问题讨论】:

  • 应该repeaterTable.td#repeaterTable td
  • 确实有帮助,你是对的。现在 IE 可以正确显示它,但是 Firefox 仍然有一个覆盖的表格边框,每行边框......

标签: css asp.net border css-tables


【解决方案1】:

试试这个以获得你想要的效果:

#repeaterTable
{
    border-left: 1px solid #A3A3A3; 
    border-right: 1px solid #A3A3A3;
    border-collapse:collapse;
    border-spacing:0px;
    background-color:#ccc;
}
#repeaterTable td:first-child 
{             
    border-left: 1px solid #A3A3A3;  
}
#repeaterTable td:last-child 
{             
    border-right: 1px solid #A3A3A3;  
}
#repeaterTable td
{
    border-bottom: 1px solid white; 
}

在 IE8 和 FF 中使用以下标记进行测试(不适用于 Chrome/Safari :( )。

<table id="repeaterTable">
 <tr> <td>&nbsp;</td><td>&nbsp;</td> </tr>
 <tr> <td>&nbsp;</td><td>&nbsp;</td> </tr>
 <tr> <td>&nbsp;</td><td>&nbsp;</td> </tr>
 <tr> <td>&nbsp;</td><td>&nbsp;</td> </tr>
</table>

【讨论】:

  • 你永远不需要  在其他空元素中。从来没有。
  • 在旧浏览器中强制渲染容器样式除外。
【解决方案2】:

使用这个 CSS 会让它在 IE/Safari/FF/Chrome 中看起来像您想要的那样。问题是边框折叠,它是导致白色边框继续进入表格边框的原因。如果您删除它(并重新添加 cellpadding="0" 和 cellspacing="0")并使用此 CSS:

#repeaterTable
{
    border-left: 1px solid #A3A3A3; 
    border-right: 1px solid #A3A3A3;
    background: #CCC;
}
#repeaterTable td
{
    border-bottom: 1px solid white;
}
#repeaterTable td.last
{
    border-bottom: 0px;
}

使用此 HTML:

<table id="repeaterTable" cellpadding="0" cellspacing="0">
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
<tr><td class="last">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
</table>

它会起作用的。

您可以在 CSS 中使用 :last-child,但旧版浏览器 (IE7/etc) 不支持它,因此在那里看起来会出错。取决于你想要的兼容性。所以我使用了“最后一个”类。

或者,您可以将表格包装在具有左右边框的 DIV 中,然后您只需要担心行边框,您可以使用折叠。

【讨论】:

  • 我也会尝试使用此选项以使其与浏览器兼容。感谢您的帮助!
  • 我知道这个答案现在有点老了,但仅供参考,cellpaddingcellspacing 在 HTML5 中不再是有效的 HTML。
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多