使用 css 为表格中的最后一个 td 设置样式

Posted

技术标签:

【中文标题】使用 css 为表格中的最后一个 td 设置样式【英文标题】:Styling the last td in a table with css 【发布时间】:2010-09-26 11:11:35 【问题描述】:

我想设置表格中最后一个 TD 的样式,而不在特定 TD 上使用 CSS 类。

<table>
  <tbody>
    <tr>
      <td>One</td>
      <td>Two</td>
      <td>Three</td>
      <td>Four</td>
      <td>Five</td>
    </tr>
  </tbody>
</table>

table td 
 
  border: 1px solid black;

我希望包含文本“五”的 TD 没有边框,但同样,我不想使用类。

【问题讨论】:

你不想使用类的原因是什么? 我想保持 html 静态,并且能够在不添加代码或一堆 css 类和 ID 的情况下更改样式。 您总是可以将class="last" 放在所有最后一个单元格上,然后永远不要更改它,并按照您的设计要求使用或不使用它。 【参考方案1】:

你可以使用相对规则:

table td + td + td + td + td 
  border: none;

这仅适用于在运行时未确定列数的情况。

【讨论】:

它有它的用途,特别是如果你像这个人一样,不想为了支持 CSS 而对 HTML 进行太多更改。 行得通!谢谢。是的,HTML 是静态的,我不想添加一堆 CSS 类或 id 来设置单元格样式。 很有趣的把戏,但它不如 :last-child 灵活,在 IE 上也不能更好地工作......仍然值得记住! 如果您不关心 IE 支持,为什么:last-child 不是显而易见的解决方案?这只是丑陋的海事组织...... 如果我的桌子上有很多&lt;td&gt;怎么办?如果我使用 phpmysql 数据库的表中显示数据怎么办?我需要在 CSS 中添加很多 td 吗?【参考方案2】:

:last-child 选择器应该这样做,但它是 not supported in any version of IE。

恐怕你别无选择,只能使用类。

【讨论】:

你说得太早了,显然有一个技巧可以避免使用 class=) 不完全正确,>IE8 确实支持这一点,但还没有被很好地采用。如果您可以在没有 IE8 支持的情况下生活(OP 似乎很好),这是最好的解决方案。 有点过时了。效果很好!【参考方案3】:

javascript 是执行此客户端的唯一可行方法(也就是说,CSS 不会帮助您)。在 jQuery 中:

$("table td:last").css("border", "none");

【讨论】:

这样做的一个缺点是它破坏了内容/样式/行为模型。 使用 jQuery 添加一个类名,然后您可以使用 CSS 进行样式化是语义化的。例如jQuery('#shopping-cart-totals-table tfoot tr:last-child').addClass('last-row')【参考方案4】:

你可以使用 last-child 伪类

table tr td:last-child 
    border: none;

这只会设置最后一个 td 的样式。它还没有完全支持,所以它可能不合适

【讨论】:

这将设置最后一列的样式,而不是行。 这是 OP 要求的,抱歉,如果我的描述稍有偏差。【参考方案5】:

不是直接回答您的问题,但使用

可能会帮助您实现所需,当然您可以设置 tfoot 样式。

【讨论】:

不,不会的。他说的是最后一个单元格而不是最后一行。 【参考方案6】:

如果您已经在使用 javascript,请查看 jQuery。它支持独立于浏览器的“last-child”选择器,您可以这样做。

$("td:last-child").css(border:"none")

【讨论】:

不,last-child 表示父母的最后一个孩子,所以我的选择器说“给我该行的最后一个孩子” 谢谢,我用它来加粗表格中的总行。很容易。 在许多情况下,这非常有效,但请注意,如果您正在更改类,请记住,这将在该项目上设置一次样式,并且该属性不会再随着 CSS 类的更改而动态更改。 我认为 nickf 是对的。根据我的测试和api.jquery.com/last-child-selector 的文档。 @Code,是的,我认为你是正确的。当我最初写这个答案时,文档有点模棱两可。【参考方案7】:

对于 IE,如何使用 CSS 表达式:

<style type="text/css">
table td  
  h: expression(this.style.border = (this == this.parentNode.lastChild ? 'none' : '1px solid #000' ) );

</style>

【讨论】:

【参考方案8】:

您可以使用 HTML 4.0 (link) 中指定的 col 元素。它适用于每个浏览器。您可以给它一个 ID 或一个类或一个内联样式。唯一需要注意的是,它会影响所有行的整列。示例:

<table>
    <col />
    <col  />
    <col id="anId" />
    <col class="whatever" />
    <col style="border:1px solid #000;" />
    <tbody>
        <tr>
            <td>One</td>
            <td>Two</td>
            <td>Three</td>
            <td>Four</td>
            <td>Five</td>
        </tr>
    </tbody>
</table>

【讨论】:

我的例子与你想做的相反,但你明白我的意思:)【参考方案9】:

这是为所有节点添加边框并删除最后一个节点(TD)的边框的代码。

<style type="text/css">
    body   
        font-family:arial;font-size: 8pt;  
      
    table td
        border-right: #666 1px solid
      

    table td   
        h: expression(this.style.border = (this == this.parentNode.lastChild ? 'none' : 'border-right:  0px solid' ) );  
      
</style>
<table>
    <tr>
        <td>Home</td>
        <td>sunil</td>
        <td>Kumar</td>
        <td>Rayadurg</td>
        <td>Five</td>
        <td>Six</td>
    </tr>
</table>

享受...

我想要相同的而不是我想要使用图像的边框...:-)

【讨论】:

【参考方案10】:

在 jQuery 中,如果表是在执行以下操作之前静态或动态创建的:

$("table tr td:not(:last-child)").css( "border-right":"1px solid #aaaaaa" );

只需为表格行中除最后一个单元格之外的每个单元格添加右边框。

【讨论】:

【参考方案11】:

还有一种不同的方法.. 这适用于非静态表...基本上使用&lt;th&gt; 而不是&lt;td&gt; 用于该列:

<style type="text/css">
 table td  border: 1px solid black; 
 table th  border: 0px; 
<style>
<table>
  <tbody>
    <tr>
      <td>One</td>
      <td>Two</td>
      <td>Three</td>
      <td>Four</td>
      <th>Five</th>
    </tr>
    <tr>
      <td>One</td>
      <td>Two</td>
      <td>Three</td>
      <td>Four</td>
      <th>Five</th>
    </tr>
  </tbody>
</table>

【讨论】:

【参考方案12】:

我也在寻找一种方法来做到这一点,发现这可能对其他人有用:

#table td:last-of-type  border: none; 

注意IE也不支持。

【讨论】:

【参考方案13】:

您可以使用:last-of-type 伪类:

tr > td:last-of-type 
    /* styling here */

请参阅the MDN 了解更多信息以及与不同浏览器的兼容性。 查看W3C CSS guidelines 了解更多信息。

【讨论】:

【参考方案14】:

尝试:

tr:last-child td:last-child
    border:none;
    /*any other style*/

这只会影响表中的最后一个 td 元素,假设是唯一的一个(否则,您只需要标识您的表)。虽然,非常通用,如果您向表格添加更多内容,它将适应最后一个 TD。所以如果是特殊情况

td:nth-child(5)
    border:none;

应该够了。

【讨论】:

请提供有关如何解决问题的更多信息和详细信息。这将有助于 OP 和其他未来的搜索者。 完美。对响应式表格的样式有很大帮助。 tr:last-child td:last-child == 表中的最后一个 tr,tr 中的最后一个 td【参考方案15】:

您可以使用 :last-of-type 来捕获表格的最后一列。

<style>
.table > tbody > tr > td:last-of-type 
    /* Give your style Here; */

</style>

【讨论】:

以上是关于使用 css 为表格中的最后一个 td 设置样式的主要内容,如果未能解决你的问题,请参考以下文章

表格细边框的CSS样式怎么设置?

HTML CSS样式 怎样给一个表格添加两个class样式

CSS 表格属性

[转]CSS如何设置html table表格边框样式

css定义最后一行的样式

表格样式中的 HTML/CSS 表格