【问题标题】:Styling the last td in a table with css使用 css 为表格中的最后一个 td 设置样式
【发布时间】: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" 放在所有最后一个单元格上,然后永远不要更改它,并按照您的设计要求使用或不使用它。

标签: html css html-table


【解决方案1】:

你可以使用相对规则:

table td + td + td + td + td {
  border: none;
}

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

【讨论】:

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

              【讨论】:

                猜你喜欢
                • 2022-01-10
                • 2014-12-08
                • 1970-01-01
                • 1970-01-01
                • 2023-01-11
                • 2010-11-12
                • 2021-07-04
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多