更改html表单元素的阅读顺序

时间:2013-10-04 13:46:26

标签: forms accessibility semantic-markup form-layout

我正在设计一个表单like this,其中该行中标签的底部以直线对齐,并且该行中输入字段的顶部以直线对齐。

Owing to some restriction in CSS(我们无法修改高度,因为它会有所不同),我要将表单元素的标签放在第一行,然后将它们各自的输入字段放在下一行(这样输入字段位于其标签下方。)

我测试了键盘&使用此html结构的Tab键顺序,它工作正常。 我想知道JAWS或任何其他屏幕阅读器中的阅读顺序是不正确的。

任何改变阅读顺序的方法的建议 要么 是否可以继续使用这个html结构,因为Tab键顺序是anywys工作吗?

2 个答案:

答案 0 :(得分:1)

在HTML结构中,每个输入都应以其标签开头,而不是在一行上有标签而在下一行上有输入。

但是,你有一个非常特别的显示器,你支持IE7(没有display: table),所以我认为你最好使用一个表。

如果您考虑到这些因素, 可以无障碍地执行此操作:

为表单使用基本布局表,并在表标记上包含一个额外属性:

<table role="presentation">

这意味着该表不是从可访问性角度来看的表。 (我只在支持IE7布局时推荐这个!)不要使用<th>标签。

屏幕阅读器填写时的主要内容是显式的标签输入关系。

<label for="input_id">My label</label>
<input type="text" id="input_id">

您可以通过单击标签来判断它是否有效,它应该将光标放在输入中。

但是,您的阅读视图需要采用不同的方法。当您在顶部有一行与下面的一行项相关的项时,这就是数据表的定义。因此,当页面被保存(或者它转换为阅读视图)时,请使用数据表,例如:

<table>
 <tr>
   <th>Customer account number</th>
   [other <th>s]
 </tr>
 <tr>
 <tr>
   <td>023456353434</td>
 ...

当屏幕阅读器读出时,它将在内容(023 ...)之前读取“标题”(例如客户帐号)。所以变化是:

  • 删除角色
  • 将顶行转换为<th> s

必须说这是一个黑客,它不是特别强大,我当然不会推荐它用于响应式网站。纯粹是必需的布局和浏览器支持导致了这一点。

答案 1 :(得分:0)

没有查看你的标记就不可能准确地说出来了,但听起来你有一堆输入然后是一排标签....这对于可访问性来说并不理想。

您可以将表单控件嵌套在label元素中,将表单控件的显示设置为block以达到相同的效果,同时还提高了可用性和可点击性。