在我们的网络应用程序中,我们使用彩色星星 (★ aka ★
) 来表示评级。因此,前四颗星将是纯色,而最后一颗星将是白色,代表 5 分中的 4 分。像这样:
- 这在可访问性和支持方面引起了哪些担忧?
- 我不能确定用户浏览器中的字体版本是否支持这个字符,有什么方法可以为此提供“优雅降级”?还是覆盖范围足够好以至于这不是问题?
- 这是如何由屏幕阅读器“渲染”的?将评级包装为
<span title="4 out of 5">
提供更多可访问性?
在我们的网络应用程序中,我们使用彩色星星 (★ aka ★
) 来表示评级。因此,前四颗星将是纯色,而最后一颗星将是白色,代表 5 分中的 4 分。像这样:
<span title="4 out of 5">
提供更多可访问性?标题中的一般问题非常广泛。简单来说,主要关注的是字体问题,可能比较严重,确实没有优雅的退化;如需更长的答案,请参阅我在 HTML 中使用特殊字符的指南。
关于彩色星星的具体问题要简单得多,简短的回答是使用五张图像有充分的理由,每张图像都有不同数量的彩色星星。然后您可以使用有意义的alt
属性,例如alt="four stars"
,并且事情会相当可靠地工作。它们应该是内容图像(通过img
),因为没有办法指定背景图像的替代文本。
考虑到使用BLACK STAR“★”字符的可能性,它的字体支持不是特别差,但也不是很普遍。没有简单的方法可以找出包含某种字体的计算机的百分比。此外,如果字符存在于系统中的某些字体中,则其外观可能会有很大差异。对于这个特定字符,可以预期字形看起来非常相似——但大小不同。
如果您的上下文确实需要使用符号作为文本字符,那么您可能需要冒险,但这里符号伴随文本而不是真正包含在文本中,因此可以使用图像。
使用嵌入字体 via@font-face
是可能的,但在这里听起来有点矫枉过正。
屏幕阅读器对特殊字符的处理差异很大。一般来说,它们的设计目的是阅读某些人类语言的普通文本,并且它们经常无法有意义地说出特殊字符——或者根本无法说出字符的名字。该title
属性可以被说出,但通常仅作为一个选项,并且用户可能不知道这些选项的存在。
图像会引起一些 HTTP 请求,但这是微不足道的或可忽略的影响。(您可以使用 CSS 精灵,尽管在这样的简单情况下几乎没有用处。)图像通常可以很好地缓存。如果需要,可以缩放它们以匹配文本大小,例如通过img
以单位设置元素的高度em
(而不是设置宽度,以便它们被缩放以保持宽度:高度比)。
我认为如果你不想尝试,你应该遵循Jukkas 的建议并使用img
元素。
如果出于某种原因,您想使用 Unicode 星号,则必须尝试使其可访问。根据您的描述,我猜您目前正在执行以下操作:
<div class="rating">
<span>★★★★</span>★
</div>
<!-- CSS: .rating span {color:yellow;} -->
这个例子没有标记评级的语义,因此屏幕阅读器和其他用户代理不能“理解”(宣布)它的含义。评分仅由颜色描述 → 这是不可访问的。
一种可能的方式可能是使用abbr
element,但是,这个用例可能会将定义延伸得太远(“五颗星真的是评分的缩写吗?”):
<div class="rating">
<abbr title="rating of 4 out of 5"><span>★★★★</span>★</abbr>
</div>
<!-- CSS: .rating span {color:yellow;} -->
为了获得最佳的整体兼容性,请使用图像。您知道它会是什么样子,可访问性问题很简单,您无需担心浏览器对各种功能的支持。
您可以使用字体松鼠的@font-face。如果评级永远不会改变,那么如何使用 Photoshop 或类似程序创建图像以用作背景图像?跨度的标题不是一个好标题。如果您稍后更改评级会发生什么,那么您必须更改所有标题属性。我会做一个更笼统的标题,比如“评级”。如果评级对于页面上的内容不是绝对必要的,请考虑使用 JavaScript 来显示评级。这样,您实际上不会更改 HTML,因此应该处理您的安全问题。