将屏幕 reader 文本(和 meta-information 文本)设置为与可见文本不同的值

Set screen reader text (and meta-information text) to a different value than visible text

我正在处理一个网站,作者想要几个关键 titles/headers 在大 ASCII 艺术中。例如,如果标题为 "sandwitch",它将显示为:

 .::::::.   :::.   :::.    :::.:::::::-.  .::    .   .::::::::::::::::::  .,-:::::   ::   .:
;;;`    `   ;;`;;  `;;;;,  `;;; ;;,   `';,';;,  ;;  ;;;' ;;;;;;;;;;;'''',;;;'````'  ,;;   ;;,
'[==/[[[[, ,[[ '[[,  [[[[[. '[[ `[[     [[ '[[, [[, [['  [[[     [[     [[[        ,[[[,,,[[[
  '''    $c$$$cc$$$c $$$ "Y$c$$  $$,    $$   Y$c$$$c$P   $$$     $$     $$$        "$$$"""$$$
 88b    dP 888   888,888    Y88  888_,o8P'    "88"888    888     88,    `88bo,__,o, 888   "88o
  "YMmMY"  YMM   ""` MMM     YM  MMMMP"`       "M "M"    MMM     MMM      "YUMMMMMP"MMM    YMM

而代码只是:

<div class="head" id="a">
   .::::::.   :::.   :::.    :::.:::::::-.  .::    .   .::::::::::::::::::  .,-:::::   ::   .:
  ;;;`    `   ;;`;;  `;;;;,  `;;; ;;,   `';,';;,  ;;  ;;;' ;;;;;;;;;;;'''',;;;'````'  ,;;   ;;,
  '[==/[[[[, ,[[ '[[,  [[[[[. '[[ `[[     [[ '[[, [[, [['  [[[     [[     [[[        ,[[[,,,[[[
    '''    $c$$$cc$$$c $$$ "Y$c$$  $$,    $$   Y$c$$$c$P   $$$     $$     $$$        "$$$"""$$$
   88b    dP 888   888,888    Y88  888_,o8P'    "88"888    888     88,    `88bo,__,o, 888   "88o
    "YMmMY"  YMM   ""` MMM     YM  MMMMP"`       "M "M"    MMM     MMM      "YUMMMMMP"MMM    YMM
</div>

现在,我个人认为这是一个 糟糕的 选择,它让事情变得很难阅读,而且没有任何好处。但最终这不是我的决定,所以它卡住了。这造成了我试图解决的另外两个问题:

  1. 通过在页面的文字源代码中包含 ASCII 艺术,屏幕 reader 无法阅读 header,而是尝试读出标点符号和随机字母的不匹配.
  2. 因为这些字母是网页的章节标题,所以搜索引擎将看不到这段文字应该是一个词。

现在,我似乎可以使用 aria-hide 从屏幕 reader 中隐藏标签,但我想告诉屏幕 reader 那一堆字符应该说什么(大声说话时)。 aria-label 似乎让我给它一个大声朗读的标签,但它并没有隐藏所有额外的垃圾标点符号。

那么,有什么方法可以告诉屏幕 reader 和搜索引擎,这些乱七八糟的文字应该说什么(如果他们能够像人类一样看待它),而不仅仅是一堆标点符号?类似于 alt 文本,但对于 div 可能?

Now, I personally think this is a terrible choice

这是一个糟糕的选择

Because these letters are the section titles of the webpage, a search engine will not be able to see that this text is supposed to be a word.

因为是标题,所以会更容易

<h1 aria-label="your label">
   <!-- your text -->
</h1>

但这对 99% 的人没有帮助,例如那些使用屏幕放大镜的人。

aria-label 在标题上无济于事,因为标题无法通过键盘聚焦。

你的设计很好。拥有 ascii 艺术是有创意的,尽管只有一小部分人可以阅读。我的视力不错,但仍然需要考虑我在看什么才能找到这个词。

但是,不管怎样,如果这是客户想要的,那就随它去吧。使其易于访问。

<div aria-hidden="true">
  <!-- ascii art here -->
</div>

<h2 class="sr-only">Sandwich</h2>

所以 ascii 艺术对有视力的用户可见,但对屏幕阅读器隐藏。 标题对屏幕阅读器(和 SEO)可见,但对有视力的用户隐藏。

您可以搜索 "sr-only" class(有时称为 "visually-hidden" class)。 Here's one example。它基本上将文本推离屏幕或使其高一个像素。

如果您在谈论食物,请确保 "sandwich" 在 ascii 艺术中拼写正确:-)