【问题标题】:What's the best way to represent an empty TH in HTML5?在 HTML5 中表示空 TH 的最佳方式是什么?
【发布时间】:2013-11-07 17:10:05
【问题描述】:

假设我有给定的表:

       +------+------+------+
       | Col1 | Col2 | Col3 |
+------+------+------+------+
| Row1 | D1.1 | D1.2 | D1.3 |
+------+------+------+------+
| Row2 | D2.1 | D2.2 | D2.3 |
+------+------+------+------+
| Row3 | D3.1 | D3.2 | D3.3 |
+------+------+------+------+

我想用 HTML5 来表示它。棘手的是,像这样的表格必须在语义上很重要,但左上角的单元格在语义上很重要,而是一个分隔符来排列更重要的列标题。最好的方法是什么?我的第一个想法是这样做:

<table>
    <thead>
        <tr>
            <th></th>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th>Row1</th>
            <td>D1.1</td>
            <td>D1.2</td>
            <td>D1.3</td>
        </tr>
        <tr>
            <th>Row2</th>
            <td>D2.1</td>
            <td>D2.2</td>
            <td>D2.3</td>
        </tr>
        <tr>
            <th>Row3</th>
            <td>D3.1</td>
            <td>D3.2</td>
            <td>D3.3</td>
        </tr>
    </tbody>
</table>

不过,将&lt;th&gt;&lt;/th&gt; 放在那里感觉是错误的,就像使用&lt;p&gt;&amp;nbsp;&lt;/p&gt; 作为间距一样。 有更好的方法吗?

【问题讨论】:

  • 空元素没有问题。 There is even an :empty selector.
  • @JoshC 有趣...你能详细说明一下答案吗?
  • 我认为值得一提的是,在过去的 7 年中,我开始看到像这样的空元素在语义上很重要,因为它们在语义上表示“这里没有数据”。这对于解析器来说非常重要,这也是语义 HTML 背后的意图

标签: html html-table semantic-markup


【解决方案1】:

就有效性或语义而言,拥有一个空的&lt;th&gt; 元素是完全可以接受的。规范中没有任何内容禁止它;事实上,它至少包含一个example,为此目的使用了一个空的&lt;th&gt;

以下内容显示了如何标记 Apple, Inc 2008 财年 10-K 文件第 46 页上的毛利率表:

<table>
 <thead>
  <tr>
   <th>
   <th>2008
   <th>2007
   <th>2006
 <tbody>
  <tr>
   <th>Net sales
   <td>$ 32,479
   <td>$ 24,006
   <td>$ 19,315
 <!-- snip -->
</table>

【讨论】:

  • 1+ 很棒的发现...我只是想知道为什么他们在这个例子中不关闭他们的元素标签..
  • @JoshC:有些例子有结束标签,有些没有。我想这只是他们的说法,对于大多数表格元素来说,结束标签是可选的——它们是。
  • @JoshC:但我很肯定,通过省略这样的结束标签,换行符和缩进可以作为 &lt;th&gt; 内容的一部分使其非空对于:empty 选择器。然而,就 HTML 而言,它仍然是一个“空单元格”,即使它包含的只是空格(规范中提到了这一点)。
【解决方案2】:

关于语义和空表元素的讨论,我想参考to this question on StackOverflow

“空”单元格(如背景或边框)的样式有时可能取决于“内容”的缺失/存在,这就是人们经常在里面放置&amp;nbsp; 的原因。有一个特殊的 CSS 标签用于设置空单元格的样式,您可以阅读它here on MDN

table {
    empty-cells: hide;
}

Here you can find another article 提供有关此主题的一些不错的背景信息。

【讨论】:

  • 如果链接失效,最好在您的答案中包含这些链接的一些内容
  • @Supuhstar,感谢您的评论。我添加了 css 示例,&amp;nbsp; 在我看来是不言自明的。
【解决方案3】:

任何更好的使用空&lt;th&gt;&lt;/th&gt;的方法:

具体代码:

<tr>
 <th></th>
 <th colspan="6"></th>
</tr>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2017-12-14
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多