我正在尝试确定创建具有子标题(或组分隔符/可折叠标题,如果您愿意)的可访问手风琴/列表的最佳方法。
为了说明,这是默认的外观(示意图):
有些项目是可点击的(并通过更改背景颜色和更改光标来提供提示),有些则不是(如“列表项目 13”)。
一些(或全部)子标题可能是可折叠的(稍后添加一些额外的提示):
现在,该结构可以通过几种可能的方式实现:
选项 1. 标准和可访问性见鬼去吧
<ul>
<div class="header"><a href="...">Header 1</div>
<li><a href="...">List item 11</a></li>
<li><a href="...">List item 12</a></li>
<li><span>List item 13</span></li>
<div class="header"><a href="...">Header 2</div>
<li><a href="...">List item 21</a></li>
<li><span>List item 22</span></li>
</ul>
这个确实有效。它不可访问且未通过 HTML 验证,但它可以工作。
选项 2. 好吧,至少它通过了验证器
<ul>
<li class="header"><a href="...">Header 1</a></li>
<li><a href="...">List item 11</a></li>
<li><a href="...">List item 12</a></li>
<li><span>List item 13</span></li>
<li class="header"><a href="...">Header 2</a></li>
<li><a href="...">List item 21</a></li>
<li><span>List item 22</span></li>
</ul>
这个通过验证并且在一定程度上可以访问,但不允许区分标题和常规可单击列表项(就屏幕阅读器而言)。
选项 3. TL;DR
<ul>
<li>
<a class="header" href="...">Header 1</a>
<ul>
<li><a href="...">List item 11</a></li>
<li><a href="...">List item 12</a></li>
</ul>
</li>
<li>
<a class="header" href="...">Header 2</a>
<ul>
<li><a href="javascript:;">List item 21</a></li>
<li><span>List item 22</span></li>
</ul>
</li>
</ul>
这一个,或者它的一些更深思熟虑的变体似乎就是那个。可访问,因为我认为外部或内部项目符号应该由屏幕阅读器正确读取并通过验证。
编码和维护只是更多的 PITA。从 JS 和 CSS 的角度来看,特别是如果它是一个旨在扩展和定制的插件。
所以问题是——如果有的话,上面哪一个会更好。或者,最终的手风琴/列表实现是什么?(根据我的经验,这可能是一个白日梦)