【发布时间】:2011-03-17 23:37:21
【问题描述】:
我有一个这样的 html 表格:
<div class="report">
<table>
<thead>...</thead>
<tfoot>...</tfoot>
<tbody>
<tr class="row-to-style">...</tr>
</tbody>
<tbody>...</tbody>
</table>
</div>
请注意,以上所有 tbody 的结构都相同。我想将第一个 tr.row-to-style 行的样式与其他行不同。每个 tbody 都会有一个 tr.row-to-style 但我只想影响页面上的第一行。输出是分页媒体,特别是 PrinceXML 从 xhtml 源文件生成的 pdf 文件。这意味着我们可以使用高级的 css 选择器,不需要跨浏览器兼容性,也不能使用 javascript。
在输出的第一页上设置目标行的样式很容易。我可以使用:
table tfoot + tbody tr.row-to-style {...}
另外,如果我知道一个页面可以容纳多少 tbody,我可以执行以下操作:
table tbody:nth-of-type(4n+1) tr.row-to-style {...}
但如果我不知道一个页面可以容纳多少 tbody,我该如何定位第一个?
实际上,在输出时,每页都重复了 thead 和 tfoot 部分。这些表格是专门为利用这一点而设计的。我们允许在 tbody 之后分页。输出可能包含多个页面。
因此,输出在每一页上都有一个伪头和伪tfoot。但是我看不到使用这样的方法来标记页面上的第一个 tbody。有任何想法吗?谢谢...
【问题讨论】:
-
你所说的“页面”在句子之间似乎很混乱 - 浏览器中的 HTML 页面?更大集合中的一组范围数据?
-
还有:":first-child" 或 ".first" 有什么问题?
-
它是分页媒体。正常查看网页时不会出现分页媒体,它只是一个滚动的大页面。分页媒体发生在您打印 html 页面时,或者像我在这里所做的那样,使用 PrinceXML 从 xhtml 源创建 pdf。这里的关键是,当输出到分页媒体时,thead 和 tfoot 部分会在每一页上自动重复。因此,xhtml 源代码有一个 thead、一个 tfoot,然后是不同数量的 tbody。这些 tbody 将在页面之间划分,每个页面都有一个 thead 和 tfoot。
-
tbody:first-child 在这种情况下实际上不起作用。我不确定为什么。也许它与thead、tfoot、tbody 都是表行组有关。 tbody:nth-child(1) 与 1 的不同数字也不起作用。tbody:nth-of-type(1) 有效,相当于 tfoot + tbody。但这仅适用于第一页 - 不适用于后续页面。
标签: css pagination paging css-paged-media