【问题标题】:How to notify screen readers using WAI-ARIA that a div is now visible如何使用 WAI-ARIA 通知屏幕阅读器 div 现在可见
【发布时间】:2012-05-08 03:55:42
【问题描述】:

如何使用 WAI-ARIA 通知屏幕阅读器 div 现在可见?

如果我们得到了 html

<div id="foo">Present main content</div>
<div id="bar" style="display: none;">Hidden content</div>

然后我们

$('#foo').hide();
$('#bar').show();

我们如何通知屏幕阅读器他们应该通知用户关于现在可见的 div(或者可能自动关注现在可见的 div)?

【问题讨论】:

    标签: javascript html accessibility screen-readers wai-aria


    【解决方案1】:

    您通常不需要告诉屏幕阅读器内容现在可见。使用aria-hidden 在实践中没有区别,所以我建议不要使用它。如果您希望屏幕阅读器宣布隐藏 div 的文本内容,您可以使用role=alertaria-live=polite(例如)。您可以将其用于您希望屏幕阅读器听到的更新内容,而无需移动到内容位置来发现它。例如,弹出消息不接收焦点,但包含在按下按钮等操作后与用户相关的文本信息。

    更新:我与一位开发 ARIA 1.0 的人讨论过,他建议使用 HTML5 hidden 而不是 aria-hidden 作为隐藏内容的语义指示。将它与 CSS display:none 一起用于旧版浏览器。支持 HTML5 的浏览器 hidden 在用户代理样式表中使用 display:none 实现它。

    【讨论】:

    • 既然我也有兴趣,那么在显示某些内容时如何使用role=alert?我会即时创建该属性吗? (顺便说一句:赞美html5accessibility.com/tests/form-labels.html,因为我读过它,我总是使用这些技术)
    • 您可以即时添加或将其添加到隐藏内容中,从 display:none 更改为 display:block 或向具有 role=alert 的元素添加内容将导致可访问性事件开火并公布内容。一个例子:[链接]dl.dropbox.com/u/377471/tests/ajax.html
    • Steve 提供的 Dropbox 示例链接似乎不适用于 OSX Mountain Lion 中的 Voice Over。新内容不会自动读出。
    • 需要注意的是,Internet Explorer 开始支持hidden 的时间不早于 IE11。
    【解决方案2】:

    使用 role="alert" 标记内容将导致它触发警报事件,屏幕阅读器将在其可见时做出响应:

    <div id="content" role="alert">
    ...
    </div>
    
    $("#content").show();
    

    这会在#content 变得可见时提醒用户。

    当您想对屏幕阅读器隐藏某些内容但向有视力​​的用户显示时,应使用 aria-hidden。不过要小心使用。请参阅此处了解更多信息: http://www.456bereastreet.com/archive/201205/hiding_visible_content_from_screen_readers_with_aria-hidden/

    【讨论】:

      【解决方案3】:

      使用aria-hidden

      表明该元素及其所有后代对于作者所实现的任何用户都是不可见或不可感知的。请参阅相关的 aria-disabled。

      如果一个元素仅在某些用户操作后可见,作者必须将 aria-hidden 属性设置为 true。当元素出现时,作者必须将 aria-hidden 属性设置为 false 或删除该属性,表明该元素是可见的。一些辅助技术直接通过 DOM 访问 WAI-ARIA 信息,而不是通过浏览器支持的平台可访问性。 作者必须在不显示的内容上设置 aria-hidden="true",无论用于隐藏它的机制如何。这允许辅助技术或用户代理正确跳过文档中的隐藏元素。

      所以你的代码可以变成

      $('#foo').hide().attr('aria-hidden', 'true');
      $('#bar').show().attr('aria-hidden', 'false');
      

      【讨论】:

      • 这真的有效吗?虽然这可能是 ARIA 规范所说的,但我的理解是 aria-hidden 属性目前被屏幕阅读器忽略;他们改为查看可见/显示 CSS 属性;在这种情况下 .hide()/.show() 就足够了,并且设置 aria-hidden 属性也没有任何额外的作用。无论如何,这里真正的问题不是告诉屏幕阅读器新内容是可见的(他们已经从 DOM 知道了),而是让屏幕阅读器知道新可见的内容足够重要,可以被读出立即。
      • HTML5使用测试和建议hidden and aria-hidden
      【解决方案4】:

      我创建了一个示例,展示了如何使用 role="alert" 在屏幕阅读器用户接近 textarea 元素的字符限制时通知他们,如果您想了解如何使用 alert 角色,它可能会有所帮助:

      还有更多内容,但这里是产生警报的一小部分代码:

      if (characterCount > myAlertTheshold) {
             var newAlert = document.createElement("div"); /* using the native js because it's faster */
             newAlert.setAttribute("role", "alert");
             newAlert.setAttribute("id", "alert");
             newAlert.setAttribute("class","sr-only");
             var msg = document.createTextNode('You have ' + charactersRemaining +' characters of ' + myMaxLength + ' left');
             newAlert.appendChild(msg);
             document.body.appendChild(newAlert);
           }
      

      http://codepen.io/chris-hore/pen/emXovR

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 2019-11-16
        相关资源
        最近更新 更多