在网页上使用特殊字符符号时需要注意什么?

3
在我们的Web应用程序中,我们使用彩色星星(★也称为★)来表示评分。因此,前四颗星星将是实心的颜色,而最后一颗星星将是白色的,以表示5分制中的4分。如下所示:

enter image description here

  • 这会引起哪些与可访问性和支持相关的问题?
  • 我无法确定用户浏览器中的字体版本是否支持此字符,提供“优雅降级”的一些方法是什么?或者覆盖范围足够好,这不是一个问题吗?
  • 屏幕阅读器如何“渲染”它?将评分包装在 <span title="4 out of 5">中是否可以提供更多的可访问性?
4个回答

6
标题中的一般问题非常广泛。简要回答是主要关注字体问题,这可能相当严重,并且没有优雅的降级方式;更详细的答案请参见我的HTML特殊字符使用指南
关于彩色星星的具体问题则更为简单,简短的回答是使用五张图片,每张图片上有不同数量的彩色星星有很好的理由。然后您可以使用有意义的alt属性,例如alt="四颗星",效果相当可靠。它们应该是内容图片(通过img),因为没有办法指定文本替代背景图片。
考虑到使用黑色星形字符“★”的可能性,它的字体支持并不特别好,但也不是非常广泛。没有简单的方法来找出计算机中含有该字符的字体的百分比。此外,如果系统中存在该字符的某些字体,则其外观可能会有很大的差异。对于这个特定的字符,可以期望字形看起来相当相似 - 但大小不同。
如果您的上下文确实需要使用符号作为文本字符,那么您可能需要冒险,但在这里,符号陪伴文本而不是真正包含在文本中,因此使用图像是可以接受的。
通过@font-face使用嵌入式字体是可能的,但在这里听起来有点过度杀伤力。
屏幕阅读器在处理特殊字符方面差异很大。通常,它们被设计用于阅读某些人类语言的普通文本,并且它们经常无法有意义地或者根本不会朗读特殊字符 - 即使仅仅是说出字符的名称。title属性可能会被朗读,但通常只是作为一个选项,并且用户可能不知道存在这样的选项。
图片会导致一些HTTP请求,但这对性能的影响较小或可以忽略不计。(您可以使用CSS精灵,但在这种简单情况下几乎没有用。)这些图片通常能够缓存得好。如果需要,它们可以按比例缩放以匹配文本大小,例如通过将img元素的高度设置为em单位(不设置宽度,以便它们可以按比例缩放以保持宽:高比)。

1
非常出色,详尽的回答。+1,不依赖于“标题”属性来进行公告。我同意使用图像比符号更好。背景图像(拼合的)也可以与适当的文本(“五颗星中的四颗”)和图像替换一起使用 - 那是我可能会使用的技术。 - steveax

0

我认为如果你不想尝试实验,你应该遵循Jukkas建议并使用img元素。

如果出于某种原因,你想使用Unicode星号符号,你必须尝试使其可访问。根据你的描述,我猜你目前正在做这样的事情:

<div class="rating">
  <span>★★★★</span>★
</div>

<!-- CSS: .rating span {color:yellow;} -->

这个例子没有标记评分的语义,因此屏幕阅读器和其他用户代理无法“理解”(宣布)其含义。评分仅通过颜色进行描述→这是不可访问的。

可能的方法可能是使用 abbr元素,但是,这种情况可能会过度拉伸定义(“五颗星真的是评分得分的缩写吗?”):

<div class="rating">
  <abbr title="rating of 4 out of 5"><span>★★★★</span>★</abbr>
</div>

<!-- CSS: .rating span {color:yellow;} -->

其中一个问题是,有些屏幕阅读器中读取缩写标题而不是内容的行为是一个选项,通常默认情况下是关闭的。 - BrendanMcK

0

为了获得最佳的兼容性,使用图像。你知道它会是什么样子,无障碍问题很简单,而且你不需要担心各种功能在浏览器上的支持。


我可能试图过于聪明,但我认为图像有一些缺点(额外的HTTP请求、灵活性/可扩展性差,而且调整样式会更加繁琐)。我希望有一些具体的信息来验证/缓解我的担忧。 - Lenny Sirivong
我同意Jukka的观点,HTTP请求很边缘化,很可能会被缓存。 - ToddB

-1

您可以从font squirrel使用@font-face。如果等级永远不会改变,那么用类似Photoshop的程序创建一个图像作为背景图怎么样?Span的标题不好。如果以后更改等级,那么您必须去更改所有标题属性。我会使用更一般的标题,如“等级”。如果在页面上内容中等级并不是绝对必要的,请考虑使用JavaScript来显示评分。这样,您就不会实际更改HTML,因此您的安全问题应该得到处理。


评分HTML片段是从数据动态生成的,因此我不必担心需要维护标题文本。对于我们的用途,评分是重要信息,JS也不排除使用,但在这种情况下,我认为不必要。 - Lenny Sirivong
Amazon.com使用精灵图像来显示他们的评分星级。如果他们不担心安全问题,那么对您而言应该也没问题。我会使用背景图像,这是最好的解决方案。您希望将演示/行为与内容分离。我认为4/5星级图像对于您的用户来说并不是重要内容。如果您想在页面上显示的内容对用户没有任何价值,则需要使用CSS或JavaScript将该内容与页面上的主要内容分离。 - HoppedUpDesigns
不同意星级评分不是所有用户(包括视力受损者)都应该能够访问的重要信息。使用背景图像是可以的,但请使用图像替换技术来隐藏文本(“五颗星中的四颗星”)。 - steveax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接