【发布时间】:2014-07-13 21:18:11
【问题描述】:
我经常发现自己想要一个包含两个(或多个)连续表格的 HTML 文档,我希望它们的格式相同:每列具有相同的列宽。例如
<table>
<thead><tr><th>Name</th><th>Identifier</th></tr></thead>
<tbody><tr><td>John Smith</td><td>A-64</td></tr></tbody>
</table>
<p>Some text …</p>
<table>
<thead><tr><th>Name</th><th>Id.</th></tr></thead>
<tbody><tr><td>Xavier Ephraim Bloggs III</td><td>A-434-bcf</td></tr></tbody>
</table>
事实上,浏览器将呈现第二个表格的列比第一个更宽,这仅仅是因为每个单元格的内容更宽。
我可以通过对每列的宽度进行硬编码来解决这个问题,或者使用 HTML width 属性,或者(更好)使用 CSS。但我不想这样做,因为我不知道每列的宽度。正确的宽度取决于用户代理选择的字体、用户屏幕的宽度以及每个单元格的内容(它本身是由用户输入生成的)。无论如何,UA在决定布局方面比我好得多。
我真正想要的是某种方式来布置第二张桌子,就好像它是第一张桌子的延续一样。我可以做到这一点,实际上让它们成为一个表格,中间的段落只是另一行(有足够的 CSS 让它看起来不那么),但这看起来很糟糕,邪恶和错误。
<table>
<tr><th>Name</th><th>Id.</th></tr>
<tr><td>John Smith</td><td>A-64</td></tr>
<tr colspan="2"><p>Some text …</p></tr>
<tr><th>Name</th><th>Id.</th></tr>
<tr><td>Xavier Ephraim Bloggs III</td><td>A-434-bcf</td></tr>
</table>
从逻辑上讲,它是一张表格,但我想分几个部分进行渲染,否则它会过长。这表明对表格进行编码的逻辑方法是使用两个单独的<tbody>s:
<table>
<thead><tr><th>Name</th><th>Identifier</th></tr></thead>
<tbody><tr><td>John Smith</td><td>A-64</td></tr></tbody>
<tbody><tr><td>Xavier Ephraim Bloggs III</td><td>A-434-bcf</td></tr></tbody>
</table>
<p>Some text …</p>
我可以使用某种 CSS / HTML5 技巧将第二个 <tbody>(及其标题的副本)移动到段落之后吗?
【问题讨论】:
-
如果没有 JavaScript,这似乎不太可能实现。
-
你可能是对的,@DavidThomas。但即使是 JavaScript 解决方案也不错。我的尝试在没有 JavaScript 的浏览器中性能下降得非常厉害。
-
您能否发布一个实时的JS Fiddle 或类似的演示,以便我们了解您正在使用什么,以及它是如何失败的(对失败的清晰描述,以及失败的标准)成功的修正也会非常、非常有帮助)。
-
+1 表示厌恶“看起来很糟糕、邪恶和错误的事情”。我带着同样的问题和同样的厌恶来到这里。
标签: css html html-table