当元素的视觉顺序不同时,如何为屏幕阅读器构建我的 HTML 语义正确的结构?

How do I structure my HTML semantically correct for screen readers when the visual order of elements is different?

我正在尝试使搜索结果列表更易于访问。

假设我有一个按以下方式构建的搜索结果列表:

<article>
    <h2>Name of the author</h2>
    <h1><a>Name of the book</a></h1>
    <div class="seperator">
        <div class="availability-status status1" title="available"></div>
        <div class="icon icon-book" title="Book"></div>
        <div class="result-button-group">
            <a href="…" role="button" class="sharing">Sharing</a>
            …
        </div>
    </div>
    <p class="imprint">Publishing house (Year)</p>
    <p class="series">Part of: name of the series</p>
</article>

书名是link到另一页的,而它周围的其他元素是相应项目的附加信息。

视觉上看起来像这样:

如何构建语义正确的标记,以便使用屏幕阅读器的用户可以理解结果项?

当他们在 link 到 link 的基础上导航时,他们会到达书名,但可能会错过书名上方的作者字段,对吧?我可以用 aria-attributes 实现吗?还是这种结构足以使无论如何都有意义?

我自己玩过 VoiceOver 试图理解它,但我远不是专家。因此,我们将不胜感激。

大纲

您不应使用 h2 作为作者姓名。此标题将成为 article 元素的标题(因为它是第一个元素),书名的标题将在同一级别创建另一个部分。

相反,只使用一个标题(书名最有意义)并将其与作者姓名(您可以使用 cite 元素)分组在 header 元素中.

<article>
  <header>
    <cite>Name of the author</cite>
    <h1><a href=""><cite>Name of the book</cite></a></h1>
  </header>
  <!-- … -->
</article>

Link

When they navigate on a link to link basis they land on the name of the book, but might miss the author field that is above the title, right?

是的。但这不是问题,这正是屏幕 reader 用户 expects/wants 要做的(查找链接,而不是其他任何事情)。

但是,您也可以考虑将作者姓名添加到 link/heading:

<h1><a href=""><cite>Name of the author</cite>: <cite>Name of the book</cite></a></h1>

字体图标

注意这很可能是无法访问的(details),因为该元素没有内容(生成的图片对于没有CSS的用户代理、盲人用户等没有用,意思另外,它传达的内容未以其他方式表示):

<div class="availability-status status1" title="available"></div>

title 属性不够。使用 img(使用 alt),或添加替代文本(并在视觉上隐藏它)。

而且这似乎是纯粹的装饰,所以不需要 title 属性(而且很多用户也无法访问它,因为该元素没有内容):

<div class="icon icon-book" title="Book"></div>

(但如果它是一本书的信息很重要,例如因为还有杂志等,那么你应该提供一个替代方案,就像上面的情况一样。)