如何通过CSS设置列中每个表格单元格的样式?

And*_*rko 59 html css

我有一个普通的HTML表:

<table>
  <tr>
    <td class="first-column-style">FAT</td> 
    <td>...</td>
  </tr>
  <tr>
    <td class="first-column-style">FAT</td>
    <td>...</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我想将CSS样式应用于td特定列中的每个表格单元格().是否可以在不将class/ style属性应用于该列中的每个表格单元格且没有JavaScript的情况下执行此操作?

RoT*_*oRa 65

除了Sean Patrick Floyd的解决方案,您还可以:first-child与相邻的兄弟选择器结合使用+(IE6也不支持):

td:first-child { /* first column */ }

td:first-child + td { /* second column */ }

td:first-child + td + td { /* third column */ }

/* etc. */
Run Code Online (Sandbox Code Playgroud)

  • 并不是说这不适用于 `colspan`,因为它只是计算 `&lt;tr&gt;` 的 `&lt;td&gt;` 子项,而不是实际的列。您可以通过使用 css 选择器来解决,该选择器选择行类以将列 hack 应用于:`tr.myclass td:first-child { ... }` (2认同)

Nel*_*son 59

2015答案,并基于第一个孩子的答案,但很多清洁.

https://developer.mozilla.org/en-US/docs/Web/CSS/%3Anth-child

td:nth-child(1) { /* first column */ }
td:nth-child(2) { /* second column */ }
td:nth-child(3) { /* third column */ }
Run Code Online (Sandbox Code Playgroud)

超级干净的代码

  • colspan和rowspan都会引起严重问题.当你使用任何一个span时,'spans'的兄弟姐妹都不存在,所以你最终会给错误的单元格设置样式. (3认同)
  • 嗯,太干净了。我不知道为什么我们不能有像 `td:thirty-first-child {}` 这样的人类可读和直观的 ;-p (2认同)

Den*_*gan 35

使用<col>标签并按照本指南设置样式.这样,您只需要向<col>元素添加类(或内联样式规范),而不是<td>在表中添加每个类.

注意事项:

  • 任何行或单元样式都将取代列样式.
  • <col>标签仅支持造型border,background,widthvisibility(和它们的衍生物,如background-color).
  • border声明没有工作,除非<table>border-collapse: collapse;和行为是浏览器之间的不一致.
  • visibility由于已知错误,声明在Chrome中无法正常运行.

  • 注意:<col>只接受几个样式属性(如text-align或width) (13认同)
  • 这仍然是它将解决的样式的最佳解决方案,因为样式和标记保持独立.下面更接受的答案是必要的,但是很脆弱,因为向市场添加一列会完全破坏预期的结果,因此需要更多的维护. (5认同)
  • @fcalderan 它甚至不支持`text-align`。它支持的唯一内容是 `border`、`background`、`width` 和 `visibility`(以及它们的衍生物,如果有的话)。这使得这个 `col` 标签毫无用处。你最好在你的 `th/td` 上放一个类,并在没有这种愚蠢限制的情况下为该类设置样式。或者你可以使用`child` hacks。 (2认同)

Sea*_*oyd 16

那么对于第一列和最后一列,您可以使用:first-child:last-child伪类:

/* make the first cell of every row bold */
tr td:FIRST-CHILD{
    font-weight:bold;
}

/* make the last cell of every row italic */
tr td:LAST-CHILD{
    font-style:italic;
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 一个Downvote?为什么?这是一个有效的CSS解决方案.您应该将您的downvotes发送给Redmond以构建有缺陷的浏览器... (13认同)
  • @rainabba:和MS(凭借IE)定义规则集?我想不是.如果CSS中支持某项功能但浏览器中不支持该功能,则解决方案不会失败. (6认同)
  • 肖恩帕特里克弗洛伊德:这就像是说你应该能够赤身裸体走路,因为如果他们不喜欢它,那就是别人的问题.理想与现实不是同一个."有效的CSS"是符合规则和工作的CSS. (4认同)