【问题标题】:Semantic HTML best practice for a screen reader屏幕阅读器的语义 HTML 最佳实践
【发布时间】:2017-05-09 14:59:39
【问题描述】:

假设我的主页上有一个文章预览列表,其设计如下:

左边有一张图片,右边有所有内容(地区、日期、标题、摘要和图片中没有的“阅读更多”按钮)。您将如何在语义上编写此内容并让屏幕阅读器可以访问?

通常我会这样做:

<article>
  <img class="image" src="path/to/image" alt="appropriate alt text">
  <div class="content">
    <div class=""info>
      <span class="region">Europe</span>
      <time class="date" pubdate>Date</time>
    </div>
    <h2 class="title">Article Title</h2>
    <p class="abstract">Abstract of article...</p>
    <a href="#">Read More</a>
  </div>
</article>

但是,我觉得这对于屏幕阅读器来说可能更具语义性和可访问性。一个想法是我在做这样的事情:

<article>
  <img class="image" src="path/to/image" alt="appropriate alt text">
  <div class="content">
    <h2 class="title">Article Title</h2>
    <div class=""info>
      <span class="region">Europe</span>
      <time class="date" pubdate>Date</time>
    </div>
    <p class="abstract">Abstract of article...</p>
    <a href="#">Read More</a>
  </div>
</article>

因为我有 .content 作为弹性容器,我可以像这样改变孩子的视觉顺序:

.content {
  display: flex;
}

.info {
  order: -1;
}

这样,屏幕阅读器会先阅读文章标题,然后再阅读地区和日期。这有意义吗?我正在尝试更加熟悉语义和可访问性最佳实践。


同样,更改图像和其余内容的 DOM 顺序是否有意义。像这样:

<article>
  <div class="content">
    <h2 class="title">Article Title</h2>
    <div class=""info>
      <span class="region">Europe</span>
      <time class="date" pubdate>Date</time>
    </div>
    <p class="abstract">Abstract of article...</p>
    <a href="#">Read More</a>
  </div>
  <img class="image" src="path/to/image" alt="appropriate alt text">
</article>

然后改变视觉顺序:

article {
  display: flex;
}

.image {
  order: -1;
}

或者这会导致太多的混乱?我的思考过程是,我想首先将文章中最重要的信息传递给屏幕阅读器。有什么理由不使用这种方法吗?也许用户习惯了先形象,后内容?


从语义上讲,这是您组织这段代码的方式吗?有什么可以改进的吗?也许将图像包装在figure 标签中?

任何帮助将不胜感激!

【问题讨论】:

  • 你可能想看看ARIA
  • &lt;h2&gt; 打开&lt;article&gt; 是正确的(前提是您没有跳过页面上的&lt;h1&gt;)。我建议您关注链接文本,因为充满这些内容的页面会在屏幕阅读器中一遍又一遍地显示为“阅读更多”。您可以使用 ARIA 来解决这个问题,或者使用屏幕外文本来包含更多文本,或者您可以只调整副本。
  • @aardrian,在您的其他评论中,您提到不依赖 Flexbox 的 order 属性——但在这种情况下有意义吗?
  • 这不是关于它是否有意义,而是关于在这种情况下是否为某些用户重新排序页面的某些部分而不是其他用户是一个问题。在这种情况下,可能问题不大。但是,您仍然应该对其进行测试。

标签: html css accessibility semantic-markup screen-readers


【解决方案1】:

让标题出现在相关内容之后的最佳方式是什么?

可以使用aria-labelledby属性来表示区域的标签

<article aria-labelledby="title1">
  <img class="image" src="path/to/image" alt="appropriate alt text">
  <div class="content">
    <div class="info">
      <span class="region">Europe</span>
      <time class="date" pubdate>Date</time>
    </div>
    <h2 class="title" id="title1">Article Title</h2>
    <p class="abstract">Abstract of article...</p>
    <a href="#">Read More</a>
  </div>
</article>

请注意,作为article tag is not announced by NVDA,您可以将article 标签替换为div[role=region]

【讨论】:

    【解决方案2】:

    我肯定会接受您的最新建议(图像在 DOM 中最后,您使用 FlexBox 更改顺序)。这种方法正是我在这些情况下所做的。

    而且我认为您不应该将图像包装在图形标签中。会更加混乱。

    【讨论】:

    • 如果用户的屏幕阅读器阅读标题、地区、日期、摘要和阅读更多按钮,然后到达图像,这不会造成混淆?我唯一的犹豫是,他们甚至可以在看到图片之前通过“阅读更多”按钮导航到文章本身。
    • 因为图像只是关于文章的附加信息,我认为最终到达它(仍然)并不重要。我交谈过的大多数用户都使用标题进行导航。另外,我可能会在您的锚链接中添加一个标题属性阅读更多。标题可以是:阅读更多关于。见 W3C 的 H33 技术 (w3.org/TR/WCAG20-TECHS/H33.html)
    • 请注意,通过 CSS 更改内容的顺序可能会给某些用户带来意想不到的结果:adrianroselli.com/2015/10/… 一般来说,我建议不要使用order
    【解决方案3】:

    如果您还没有遇到它,可能值得访问WebAIM 网站的“Designing for Screen Reader Compatibility”页面。从那个页面...

    音频界面以线性方式向用户呈现内容,一次一项。这与大多数人使用视觉界面的方式形成鲜明对比。有视力的用户几乎可以瞬间扫描整个屏幕,了解内容的整体布局、艺术风格和其他宏观层面。屏幕阅读器用户无法快速理解这些宏观层面。

    至少 WebAIM "Introduction to Web Accessibility" 文章应该是每个有自尊的网络内容创建者的必读文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多