【发布时间】:2017-12-21 07:07:41
【问题描述】:
我有一个表格,它是从另一个我无法修改其布局的应用程序/服务生成的。我想要第一行有样式的 CSS,然后其他行有交替样式。主要问题是html中关于标题和其他行没有区别。
<table id="t01">
<tr>
<td>Firstname</th>
<td>Lastname</th>
<td>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
</table>
我在 CSS 中看到过 table > tr:n-child(odd) 之类的东西,但这些东西不起作用。有没有办法让我说“tr:nth-child(ODD EXCEPT WHEN = 1)”?
非常感谢任何帮助。这是我正在尝试完成的任务的快照。
编辑:解决方案
这是我确定的解决方案。关键是将first-child 选择器放在nth-child(2n + 1) 选择器之后,这样标题样式就会覆盖迭代样式。我可能会查看 :not 选择器,但我想再次滚动。
div#tablewrappingdiv> table > tbody tr:nth-child(2n+1) > td{
background-color: #eee;
}
div#tablewrappingdiv> table > tbody > tr:first-child > td{
background-color: #006c00;
}
div#tablewrappingdiv> table > tbody > tr:nth-child(2n + 2) > td{
background-color: #d8e4bc;
}
【问题讨论】:
-
"我希望 CSS 的第一行有一个样式,然后其他行有交替的样式" 那么,具体来说,是什么阻止了您实现这一目标?通常,当人们在这里寻求帮助时,他们会展示他们的尝试。请包括一些CSS;你已经表示你已经尝试了一些东西,但它们并不完全有效......如果我们看到它,我们可以帮助它工作。但我们不太可能为您从头开始编写。
-
@TylerH 我不是要从头开始写东西,我是在问方向。“我怎么去那里”不同于“带我去那里”。
-
当您可以提供有关起点的一些信息时,路线是最有用的。例如,如果我告诉您如何到达埃菲尔铁塔,我需要知道您是从斯巴达堡还是巴黎出发。而且,作为巴黎游客中心,如果您可以自行管理,我们宁愿不向您提供有关如何离开社区和前往当地机场的详细信息。
-
请记住您选择的解决方案的缺点,如果您将许多样式属性添加到您的 2n+1 tr,您必须通过更改它们在第一个孩子中的值来覆盖它们即使您根本不希望在其上应用任何样式,也使其看起来不同。只需添加 :not(:first-child) 即可避免这一切。
-
@FlexFiend 一开始我对规则的偏移量犯了一个错误(对基于 0 的索引与基于 1 的索引感到困惑)。不要使用
+1和+2,而是使用+2和+3。这将使行着色仅在标题 之后 开始,并且规则的顺序不再重要。我相应地更正了我的答案。这是jsfiddle
标签: html css css-selectors