2

我最近与另一位使用<table>非表格数据的开发人员进行了讨论。

<table><tr><td> Server: </td><td> Development </td></tr></table>

我指出表格数据不止一维,不鼓励使用表格进行样式/展示。他回答说,仅仅因为表格是一行并不意味着数据是非表格的。

在我看来,如果“表格数据”具有多个维度,则至少需要两行和两列。但是,他指出<table><tr><td></td></tr></table>(以及<table></table>两者都 validate,如果他使用<table>不正确,W3C 就不清楚了,他们的验证器做得很差。

我认为这<table>应该用于表示表格数据,无论结果结构是否为表格,因为它们可能是警告。在上面的示例中,永远只有一台服务器,但您可能有零或多行多列数据,这些数据可能在某个日期范围内被过滤。

我的问题是谁在这里?如果我误解了规范,那我怎么会误解?如果您有表格数据但没有足够的过滤数据打印出多行(即,如果它在一个小日期范围内过滤)仅打印列标题是不正确的吗?您是否也应该打印“未找到结果”完整的 colspan 行?如果数据<table>必须是多维的,为什么要验证单列和/或单行表?


Valid != Semantic,让我们从它开始。我可以<div>单独用 s 制作整个网页,这是否使它具有语义?不。

表格数据并不一定意味着它有多个维度(尽管这确实有帮助!)。表格数据的意思是“放在表格中最有意义的表格”。虽然它确实需要是数据,但在表格中放置导航链接根据定义是无语义的。

这取决于他在这张桌子里放了什么。可能是一张桌子很好,试着举一个他实际放在那里的例子。

4

4 回答 4

3

我同意其他人的观点,标记的有效性不等同于标记的语义。

表格数据应该有一个列标题来描述它包含的数据。所以最小的表格是,(1 列有 1 行数据,该列应该有一个标题):

<table>
    <thead>
        <tr>
            <th>My Heading</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>my value</td>
        </tr>
    </tbody>
</table>

如果要表示"no results found"它应该显示在表格之外。因为no results found不是数据。没有结果应该在表格中不显示任何内容,或者更好的是,隐藏表格并显示您的no results found消息。

于 2013-03-07T19:34:44.120 回答
1

在我看来,如果“表格数据”具有多个维度,则至少需要两行和两列。但是,他指出<table><tr><td></td></tr></table>(以及<table></table>)两者都可以验证,如果他使用<table>不正确,W3C 就不清楚了,他们的验证器做得很差。

标记的有效性与语义绝对无关。<p>本身就是有效的 HTML,即使空段落在写作中没有意义。同样,以下三个表都是有效的,即使它们不包含实际数据:

<table></table>

<table>
  <tbody>
</table>

<table>
  <thead><tr><th>
  <tbody>
  <tfoot><tr><th>
</table>

但是,正如您所观察到的,<tr>没有子元素的元素是无效的:

<table>
  <tr>
</table>

我不清楚为什么会这样,因为我在当前的 HTML 5.0 CR中找不到任何规则指出一个<tr>元素必须至少有一个子元素,要么是 a<td>要么是<th>元素(它只是说它可能包含零或更多的任何一种)。

无论如何,如果一张表只包含一行,那就这样吧;这仅仅意味着表中只列出了一条记录。但是表格数据语义不是这个表是否只有一行的问题,而是这个结构是否适合以二维格式表示的任意数量的数据记录。这就是构成表格数据的内容。

在您的示例中,“Server”是否可能有多个条目(顺便说一下,如果它是一个真正的表格标题,它应该是 a<th>而不是 a<td>并且不应该包含冒号)?如果不是,并且您要做的就是告诉用户他们在哪个服务器上,那么表格不是用于呈现此信息的最合适的元素。您可能应该使用标题或标签,以及其他一些文本容器来表示“发展”值。

如果您有表格数据但没有足够的过滤数据打印出多行(即,如果它在一个小日期范围内过滤)仅打印列标题是不正确的吗?您是否也应该打印“未找到结果”完整的 colspan 行?

是否选择显示“未找到结果”行取决于您;任何一种方式都应该是可以接受的。在这种情况下,您所拥有的只是一个旨在包含表格数据但由于某种原因没有任何数据要呈现的表格。

如果数据<table>必须是多维的,为什么要验证单列和/或单行表?

因为即使是 1x1 正方形(即 1²)网格仍然被认为是二维的,即使这个单个单元格是<th>没有伴随行的(同样,有效性和语义是两个非常不同的问题)。

于 2013-03-07T19:53:02.290 回答
0

我对表格的问题——我与只知道如何使用它们的开发人员一起工作——是我不能像移动 div 标记中的数据那样容易地移动表格标记中的内容。当然,您可以将表格制作成几乎任何东西,并且几乎可以像 div 标签一样轻松地移动它,但是表格本身涉及更多开销(更多标签)。

您最终需要花费更多时间来调整填充、间距等。与使用 DIV 相比,使用表格的整体效率要低得多,并且需要更多的代码/在视觉上不易阅读的代码。我喜欢我的表格标签在整洁的单独行中,就像另一个回答者提供的代码示例一样;否则你会冒着奇怪嵌套的风险。使用 DIV 的嵌套问题要少得多。

也就是说,很多人觉得 DIV 令人困惑,不知道如何处理更灵活的标签。

所以这是个人喜好问题,真的。您知道并愿意学习的 CSS 越多,您使用 DIV 的可能性就越大。网站越简单,不了解 CSS 的开发人员越多,您希望使用的表格就越容易。在不触及 HTML 代码的情况下彻底重新格式化页面时,您只会限制您的可行性。(或生成 HTML 代码的后端服务器代码)

于 2013-03-07T19:40:38.290 回答
0

Valid != Semantic,让我们从它开始。我可以<div>单独用 s 制作整个网页,这是否使它具有语义?不。

表格数据并不一定意味着它有多个维度(尽管这确实有帮助!)。表格数据的意思是“放在表格中最有意义的表格”。虽然它确实需要是数据,但在表格中放置导航链接根据定义是无语义的。

这取决于他在这张桌子里放了什么。可能是一张桌子很好,试着举一个他实际放在那里的例子。

于 2013-03-07T19:28:00.783 回答