【问题标题】:Applying borders to a single table cell when using border-collapse使用边框折叠时将边框应用于单个表格单元格
【发布时间】:2009-08-06 21:57:38
【问题描述】:

我有一个应用了以下 CSS 规则的表格:

table { border-collapse: collapse; }
td { border: 2px solid Gray; }

我希望某些单元格有一个红色边框,而不是。

td.special { border: 2px solid Red; }

这不符合我的预期。在 FireFox 3 和 IE8 中它看起来像这样:


(来源:control-v.net

在 IE7 兼容模式下(在 IE8 中运行)如下所示:


(来源:control-v.net

我希望<td> 的四个边都是红色的。我怎样才能做到这一点? A test case can be found here.

【问题讨论】:

标签: css border css-tables


【解决方案1】:

我不久前阅读的网站上的另一篇文章优雅地解决了这个问题,但我找不到它。无论如何,方法是制作边框样式double 而不是solid。这是可行的,因为 double 的优先级高于 solid。在 1px 或 2px 的边框上,由于线条重叠,双线之间的间隙不会出现。

table { border-collapse: collapse; }
td { border: 2px solid Gray; }
td.special { border: 2px double Red; }
<table>
    <tr><td>a</td><td>a</td><td>a</td></tr>
    <tr><td>a</td><td class="special">a</td><td>a</td></tr>
    <tr><td>a</td><td>a</td><td>a</td></tr>
</table>

【讨论】:

  • 不错的一个。这应该是公认的答案。它仍然是一个 hack,但它没有更改边距那么 hacky。
【解决方案2】:

无法使用边框折叠。不过,您可以通过以下方式解决该问题,例如:

<td class="special"><div>Two</div></td>

然后应用这样的样式:

.special div {
    border: 2px solid #f00;
    margin: -2px;
}

(希望)会发生的是 td 内的 div 将向外扩展 2 个像素并用红色边框覆盖黑色边框。

【讨论】:

    【解决方案3】:

    使用伪元素:

    您可以使用伪元素来实现这一点。

    将伪元素相对绝对定位到父td元素。让伪元素填满父元素的整个维度,然后为其添加边框。

    Example Here

    table {
        border-collapse: collapse;
    }
    table td {
        position: relative;
        border: 1px solid #000;
        padding: 2px;
    }
    table td.selected:after {
        content: '';
        position: absolute;
        top: 0; right: 0;
        bottom: 0; left: 0;
        border: 2px solid red;
    }
    <table>
        <tr>
            <td>One</td>
            <td>One</td>
            <td>One</td>
        </tr>
        <tr>
            <td>Two</td>
            <td class="selected">Two</td>
            <td>Two</td>
        </tr>
        <tr>
            <td>Three</td>
            <td>Three</td>
            <td>Three</td>
        </tr>
    </table>

    【讨论】:

    • 这是一个很好的答案,谢谢 - 在我的场景中,当我用键导航表格时,我正在为每个单元格应用一个类,该类有一个“发光”“脉冲”边框,这是实现的通过边框和框阴影上的动画。像边框一样,在实施您的解决方案之后,盒子阴影也没有显示在所有方面。 jsFiddle link
    【解决方案4】:

    border-collapse 意味着 td 实际上并没有某些边框。你必须找到其他方法来做到这一点。给表格一个背景并去掉所有边框但留下 td 边距会给出一个漂亮的边框。我相信,然后设置边界会给出内部边界。这行得通吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 2011-01-04
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多