电话号码通常都是数字,忽略括号、短划线、加号等,因此电话号码的输入字段通常是数字。
当屏幕阅读器遇到数字输入字段时,它会将该值读取为整数。例如,如果我为一个美国电话号码输入了三个字段,第一个是区号(3位),然后是交换机(3位数),最后是线路(4位数),如果字段分别为1234567890,我们通常说这个数字是"一二三"、"四五六"、"七、八、九、零"。
但当屏幕阅读器遇到这些字段时,它会说"一百二十三"、"四百五十六"、"七千八百九十"。
我认为屏幕阅读器用户习惯于把电话号码当作大数字来听(至少我采访过的人都这么认为),但这并不意味着我们不能让它变得更好。如果我问其中一个人他们的电话号码,他们不会用大号码,而是用个位数。
我尝试了各种<input>类型,并查看了所有角色、状态和属性,但没有看到任何可以强制读取数字的内置内容。
我所能想到的就是通过在视觉上隐藏<span>包含作为单独数字的数字,<span id='o'>1 2 3<span>,则具有<输入唱段labeledby='o'>。
有更好的方法吗?
在有限的浏览器支持下,您可以尝试CSS3属性:
speak:spell-out;
最好的方法是使用aria-label
提供一种方便的、有足够停顿的阅读格式:
<span aria-label="1 2 3. 4 5 6. 7 8 9 0">123 456 7890</span>
您还可以使用hCard微格式,该格式可以由某些技术解释,并使用国际格式的电话号码(其他人可以使用)与以前的方法相结合
<p class="h-card">
<span class="p-tel" aria-label="1 2 3. 4 5 6. 7 8 9 0">+123 456 7890</span>
</p>
TL;DR:使用国际格式、aria-label
、hCard微格式和speak:spell-out
CSS属性
我认为您的基本职责是以您所在地区的正常方式显示电话号码(即显示美国电话号码与显示英国电话号码不同)
与其他网站的做法保持一致(即使是次优)将为屏幕阅读器用户带来最少的工作量。这有点像那些自动将您添加到下一个字段的输入。好主意,但人们已经习惯了次优方法,所以无论如何都要按tab键。
你不想妨碍复制粘贴或其他基本的东西,但作为一种增强,你可以使用aria标签,如下所示:aria属性用于读取HTML 中的替代文本(例如罗马数字)
例如。<span aria-label="One, Two, Three"><span aria-hidden="true">123</span></span>
然而,这说起来很烦人,我认为屏幕阅读器应该做得更好。