【发布时间】:2021-07-14 22:18:09
【问题描述】:
我有一个使用 van11y-accessible-accordion-aria 渲染的手风琴
标记输出为:
<div className="c-accordion__items js-accordion accordion" data-accordion-cool-selectors="1" aria-multiselectable="true" role="tablist" id="z3j2diubs8r" data-hashaccordion-id="3o3nlqickh">
<!-- note role="tablist" above -->
<div className="c-accordion__item">
<h2 className="c-accordion__title accordion__title">
<button className="js-accordion__header accordion__header" role="tab" id="accordionz3j2diubs8r_tab1" aria-controls="accordionz3j2diubs8r_panel1" aria-selected="false" type="button" data-hashaccordion-id="3o3nlqickh" aria-expanded="false">
<!-- note role="tab" above -->
The Why
</button>
</h2>
<div className="c-accordion__item-components js-accordion__panel accordion__panel" role="tabpanel"
aria-labelledby="accordionz3j2diubs8r_tab1" id="accordionz3j2diubs8r_panel1" data-hashaccordion-id="3o3nlqickh"
aria-hidden="true">
<div className="c-accordion__item-content">
<p>Duis vel nibh at velit scelerisque suscipit. Donec vitae sapien ut libero venenatis faucibus. Quisque ut
nisi. Ut non enim eleifend felis pretium feugiat. Nulla sit amet est.
</p>
</div>
</div>
</div>
</div>
当我在 Chrome 中使用 Lighthouse 测试可访问性时,我收到了这些消息
具有 ARIA [role] 且要求子级包含特定 [role] 的元素缺少部分或全部所需的子级。 一些 ARIA 父角色必须包含特定的子角色才能执行其预期的辅助功能。了解更多。
[role] 不包含在其所需的父元素中 某些 ARIA 子角色必须包含在特定父角色中,才能正确执行其预期的可访问性功能。了解更多。
了解更多链接转到https://web.dev/aria-required-children,下面显示的是他们建议的代码示例。
... 这意味着将role="tablist" 作为父级,然后将role="tab" 作为子级。
在我在这个问题中发布的代码中,与https://web.dev/aria-required-children 中的示例相比,我似乎有正确的标记
所以我不知道为什么这没有通过可访问性检查。
【问题讨论】:
-
Lighthouse 给出的结果有些可疑。您是否尝试过 Ax 或 SiteImprove 之类的浏览器插件?在此处查看 W3C 提供的代码:w3.org/TR/wai-aria-practices/examples/accordion/accordion.html。您的示例适用于制表符,而不是手风琴,因此不适用。
-
@NathanielFlick Lighthouse 已使用 Ax 核心至少 2 年,因此结果通常有效。这曾经是一个大问题,但现在如果 Lighthouse 说有问题,那么 Axe 也会这么说(确实如此)。
-
您尝试过 SiteImprove 吗?它也给出了很好的结果,可能是一个很好的测试。部分 Axe 核心测试已关闭:github.com/GoogleChrome/lighthouse/issues/7510
标签: testing accessibility accordion