2014-07-21 67 views
6

使用咏叹调排序假设一个静态的HTML表格,如:在验证HTML5

<table> 
    <thead> 
     <tr> 
      <th scope="col" aria-sort="none"><a href="...">Name&#xA0;<span title="Sort">&#9650;</span></a></th> 
      <th scope="col" aria-sort="ascending"><a href="...">Score&#xA0;<span title="Ascending">&#9650;</span></a></th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>C</td> 
      <td>1</td> 
     </tr> 
     <tr> 
      <td>A</td> 
      <td>5</td> 
     </tr> 
     <tr> 
      <td>B</td> 
      <td>9</td> 
     </tr> 
    </tbody> 
</table> 

会使用aria-sort是合适的(因为当UA的支持它)?

http://www.w3.org/TR/wai-aria/states_and_properties#aria-sort

我相信这可能是有用的,但W3C验证当前需要对<th scope="col">,这是一种多余的一个role="columnheader",因为它已经意味着th[scope="col"]

http://www.w3.org/TR/wai-aria/roles#columnheader

一旦你开始指定,你还需要设置一个角色,直到<table role="grid"> ...这是好的,如果你不使用适当的标签。

+0

我会说1-这是对'aria-sort'的适当使用,2我同意你的断言,并说这将是验证器中的一个错误 –

+1

看起来这可能已经是一个已知问题: http://lists.w3.org/Archives/Public/www-validator-cvs/2014May/0000.html –

回答

11

验证器是正确的。这听起来很奇怪,但问题出在规范中,而不是验证器中。

作为@CraigFrancis评论,这个问题已经在验证者的邮件列表中提出,其中一条消息引用了一个错误报告。根据规范,验证器的行为是正确的,这个错误是closed。这意味着如果您使用aria-sort,即使您拥有scope属性,也需要明确地将role设置为columnheaderrowheader

随着问题的状态,这意味着额外的role属性然后需要了文档树高,这样就最低限度具有以下结束:

<!doctype html> 
<title>aria-sort issue</title> 
<table role="grid"> 
    <thead> 
     <tr role="row"> 
      <th scope="col" role="columnheader" aria-sort="none"><a href="...">Name&#xA0;<span title="Sort">&#9650;</span></a></th> 
      <th scope="col" role="columnheader" aria-sort="ascending"><a href="...">Score&#xA0;<span title="Ascending">&#9650;</span></a></th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>C</td> 
      <td>1</td> 
     </tr> 
     <tr> 
      <td>A</td> 
      <td>5</td> 
     </tr> 
     <tr> 
      <td>B</td> 
      <td>9</td> 
     </tr> 
    </tbody> 
</table> 

这看起来相当多余的,特别是因为role=columnheader的定义表示它是“具有列范围的HTML th元素的结构等价物”。但是,对于th(或trtable),HTML5 LC definitions related to WAI-ARIA未指定任何隐含的ARIA语义。这可能反映了用于布局的表格的使用,这已经被广泛使用,所以通常假设元素表示结构(或“语义”)意义上的网格(数组,矩阵)是不现实的。因此,当table元素的“表格性”与ARIA相关时,必须在不同的嵌套层级上用role属性明确表示。

请注意aria-sort属性是纯粹的信息性声明。它描述了表格(网格)的项目是以升序或降序(或其它)顺序。它不会要求浏览器对它们进行排序或创建用于排序的UI工具。在实践中,当作者在页面生成服务器端或者JavaScript客户端中负责对表进行排序时使用它。用户代理可以以各种方式利用这些信息,例如,通过向用户宣布订单。

ARIA规范增加了“对于每个表格或网格,作者应该只应用aria-sort一次只有一个标题”。代码示例违反了这一建议。 (但是,验证器不会发出错误消息;这应该是应该的,而不是应该)。在这种情况下,应该删除aria-sort="none"aria-sort属性在列标题上设置时指定表中的行根据该列进行排序,因此显而易见的原因应该只设置在一列上。

+2

感谢Jukka,这是非常有用的信息......所以我们需要纠正HTML工作组,因为我相信一个

应该默认保存表格数据(默认情况下继承“网格”角色),任何使用表格布局的网站都应该使用role =“presentation”作为覆盖(充分了解这是一厢情愿的想法)。 –