我正在制作一个可访问的 Accordion ,但我不太确定为什么以下代码不能与 VoiceOver 一起正常工作:

<ul class="accordion" role="tablist">
<li class="accordion__item">
    <h3 class="accordion__head" id="tab1" tabindex="0" role="tab"  aria-controls="panel1">Headline</h3>
    <div class="accordion__content" id="panel1" role="tabpanel" aria-labelledby="tab1" aria-hidden="true">
        Content
    </div>
</li>
<li class="accordion__item">
    <h3 class="accordion__head" id="tab2" tabindex="0" role="tab" aria-controls="panel2">Headline</h3>
    <div class="accordion__content" id="panel2" role="tabpanel" aria-labelledby="tab2" aria-hidden="true">
        Content
    </div>
</li>

VoiceOver 总是说“tab 1 of 1 Heading 1...”,尽管在我的 role="tab" 中显然有两个不同的 .accordion 。所以我尝试删除每个 .accordion__item 并最终得到类似的结果:
<div class="accordion" role="tablist">
    <h3 class="accordion__head" id="tab1" tabindex="0" role="tab"  aria-controls="panel1">Headline 1</h3>
    <div class="accordion__content" id="panel1" role="tabpanel" aria-labelledby="tab1" aria-hidden="true">
        Content 1
    </div>
    <h3 class="accordion__head" id="tab2" tabindex="0" role="tab" aria-controls="panel2">Headline 2</h3>
    <div class="accordion__content" id="panel2" role="tabpanel" aria-labelledby="tab2" aria-hidden="true">
        Content 2
    </div>
</div>

虽然这有效(VoiceOver 说“第 1 个标签,共 2 个......”)我真的需要 .accordion__item 围绕我的实际内容进行样式设置。尽管两者之间只有很小的区别,但我不确定为什么只有第二个代码才真正适用于屏幕阅读器。所以我问你是否有办法同时拥有我周围的 .accordion__item 和正确的 VoiceOver 文本?

提前致谢。

此外,我知道让 Accordion 变得可访问的不仅仅是这个,但这是目前唯一的问题,我真的不知道为什么它不起作用。

最佳答案

您需要做的是在所有不是 tablist 特定角色之一的结构上设置 role="presentation"。

关于html - 可访问的 Accordion 角色(tab 和 tablist),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23795169/

10-12 00:09