在对话框中使用<h1>在语义上是否正确?

Dog*_*oku 3 html accessibility dialog wai-aria

我已经浏览了《难以置信的可访问对话框》 v3的代码,我注意到他们正在使用<h1>标签

<div id="modal" aria-hidden="false" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog">
    <div id="modalDescription" class="screen-reader-offscreen">...</div>
    <h1 id="modalTitle">...</h1>
    <p>...</p>
    <form name="form1" onsubmit="return false;">...</form>
</div>
Run Code Online (Sandbox Code Playgroud)

这让我思考,这实际上在语义上是正确的吗?我的意思是每个人都在说<h1>文档中应该只有1 个。

请注意,在先前版本的对话框中,他们给对话框一个role="document"使用<h1>ok imho 的对话框

aar*_*ian 8

我知道您已经接受了答案,但这并不完全正确。

当然,您可以<h1>在对话框中放任何东西,否则不会着火。但是,从技术上讲,这是不正确的。

标题级别应表示其在页面结构中的位置。如果您的页面只有一个<h1>,这是您最好的选择,那么对话框应该获得一个标题级别,该标题级别与其在页面结构(内容)中所处的位置相对应。

对话框很可能不适合其余内容,因此它应该是页面的子菜单<h1>(因为它是关于页面的对话框),使该对话框成为<h2>

如果您使用的是选项卡式界面,并且已经为每个选项卡构建了选项卡<h2>,并且对话框应用于特定的选项卡,则对话框将带有<h3>

等等。

添加role=document并不会改变这一点(除非您正在使用辅助技术进行明确测试以确保其能够按预期工作,否则可能会误用documentARIA角色)。

您可以看到,在HTML 5.1中,所有<h1>模型现在都被视为反模式。现在,W3C HTML验证器将对其进行标记。

您可以在由HTML5规范的一位编辑撰写的文章中了解有关结构标题的方法的更多信息:计算机对HTML5文档大纲说“不”

因此,要回答您的原始问题,不,<h1>在对话框中使用语义上不正确。

  • 1.规范确实提到了“ &lt;h1&gt;”“规则”,并[自HTML5.0起发出警告](https://www.w3.org/TR/html5/sections.html#outlines)和[错误]](https://www.w3.org/wiki/HTML/Usage/Headings/h1only#Notes)进行修复。2.请参阅[有关对话框的博客文章](https://accessibility.oit.ncsu.edu/blog/2015/02/13/the-incredible-accessible-modal-window-version-3/):“已删除最初是为了处理NVDA与role =“ dialog”交互的方式而插入的,但此问题已在NVDA中得到解决。” (2认同)
  • 考虑到它还列出了“&lt;hgroup&gt;”(没有支持)并依赖于从未实现过的文档大纲算法,这是令人难以置信的令人沮丧。因此,如果您支持用户,请忽略规范的这一部分。如果您的目标是代码合规性,那就发疯吧。参考:https://adrianroselli.com/2016/08/there-is-no-document-outline-algorithm.html,https://codepen.io/stevef/post/a-decade-of-heading-backwards (2认同)