使用以下代码有什么好处吗?
<ul role="list">
<li role="listitem"></li>
<li role="listitem"></li>
<li role="listitem"></li>
</ul>
以下代码对于辅助技术是否具有相同的含义?
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<h3 id="header">Vegetables</h3>
<ul role="list" aria-labelledby="header" aria-owns="external_listitem">
<li role="listitem" aria-level="3">Carrot</li>
<li role="listitem" aria-level="3">Tomato</li>
<li role="listitem" aria-level="3">Lettuce</li>
</ul>
…
<div role="listitem" id="external_listitem">Asparagus</div>
这里页面作者希望在li元素中使用aria-level属性。尽管基本标记的所有元素都可以应用于aria-labelledby和aria-owns,但是要使用aria-level属性需要该元素具有某些角色。由于ARIA规范使用Web本体语言(OWL)来表示类层次结构中的角色。OWL描述这些角色作为类以及它们的状态和属性。因此,为了使用aria-level,必须将元素定义为某个角色,因为普通的HTML li不会继承任何属性或限制。一旦您将角色标记为“listitem”,则需要将listitem归属于role =“list”的元素。所以最终需要同时使用这两个角色。
另一方面,如果没有使用语义标记,角色也很有用,例如:
<div role="list">
<div role="listitem">dog</div>
<div role="listitem">cat</div>
<div role="listitem">sparrow</div>
<div role="listitem">wolf!</div>
</div>
这里屏幕阅读器软件会将由div组成的ARIA列表显示为任何其他普通的HTML列表。
role="listitem"
添加到已经具有默认角色的li
项中是否有好处,那么对于这个特定问题的答案是'没有'。li
比使用div
更好。如果您使用div
,则需要role="listitem"
。但我认为这不是您所问的问题。)li
元素具有默认的listitem
角色,因此没有重新声明它的理由。
这个规则有一些例外,主要与浏览器尚未正确为新的HTML5元素实现默认角色有关。例如,由于并非所有浏览器都将HTML5的article
元素公开为具有article
角色,因此在这种情况和类似情况下,实际上建议使用<article role='article'>
。
<ul>
和<li>
元素上没有任何好处,这绝对是问题所问的,毫无歧义。 - callum