html - 语义上适当的标题标记,以实现内容流和可访问性

标签 html accessibility semantic-markup

我的设计有一个如下所示的部分:

enter image description here

与任何事物一样,这可以通过多种方式进行标记:

<section>
    <header>
        <p>About Area Title<p>
        <h2>Lorem ipsum[...]</h2>
    </header>

    <p>Lorem ipsum dolor sit amet[...]</p>
    <!-- ... -->
</section>

<!-- OR -->

<section>
    <p>About Area Title<p>
    <h2>Lorem ipsum[...]</h2>
    <p>Lorem ipsum dolor sit amet[...]</p>
    <!-- ... -->
</section>

<!-- OR -->

<section>
    <h2>About Area Title<h2>
    <h3>Lorem ipsum[...]</h3>
    <p>Lorem ipsum dolor sit amet[...]</p>
    <!-- ... -->
</section>

什么是最好的解决方案(上面可能没有列出),它不仅在语义上正确,而且仍然为屏幕阅读器、机器人等保留内容流和层次结构?

最佳答案

我为您提供了一个不在列表中的选项。

我推荐这样做的原因是因为屏幕阅读器用户导航页面的方式,大多数使用标题,并且如果您使用单独的 <p> 来完成它到可能会错过信息的标题(我假设“关于区域标题”在这里很重要。)

<section aria-labelledby="heading-a">
    <h2 id="heading-a">
        <span>About Area Title</span>
        <span class="visually-hidden">:</span>
        Lorem ipsum[...]
    <h2>
    <p>Lorem ipsum dolor sit amet[...]</p>
    <!-- ... -->
</section>

现在,上面假设“关于区域标题”位作为该部分标题的一部分是有意义的(从逻辑上讲,在大多数情况下应该如此)。

然后我们要做的是将样式应用到 <span>更小并实现 visually hidden class隐藏:我们用作分隔符。

最后一件事是,标记一个部分是一个很好的做法,因此我们只需使用 aria-labelledby 将其指向该部分的标题即可。以及标题上相应的 ID。

下面的粗略示例向您展示了我的意思。

h2{
    font-size: 2.5rem;
}
h2>span{
    font-size: 1rem;
    display: block;
}
.visually-hidden { 
    border: 0;
    padding: 0;
    margin: 0;
    position: absolute !important;
    height: 1px; 
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 - a 0 height clip, off to the bottom right of the visible 1px box */
    clip: rect(1px, 1px, 1px, 1px); /*maybe deprecated but we need to support legacy browsers */
    clip-path: inset(50%); /*modern browsers, clip-path works inwards from each corner*/
    white-space: nowrap; /* added line to stop words getting smushed together (as they go onto seperate lines and some screen readers do not understand line feeds as a space */
}
<section aria-labelledby="heading-a">
    <h2 id="heading-a">
        <span>About Area Title</span>
        <span class="visually-hidden">:</span>
        Lorem ipsum[...]
    </h2>
    <p>Lorem ipsum dolor sit amet[...]</p>
    <!-- ... -->
</section>

关于html - 语义上适当的标题标记,以实现内容流和可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66458791/

相关文章:

html div 落后于 img

html - Twitter Bootstrap - 未能正确实现网格系统

javascript - 为什么 JAWS 仍然可以读取隐藏的表单元素?

forms - HTML5 中用于输入的占位符 VS 标签

css - <main> 标记作为列包装器

html - 如何使用css在<img>元素的中心画一条对 Angular 线

javascript - 如何使用 HTML5 canvas 绘制镜片横截面?

html - aria-labelledby 引用 DOM 中不存在的 id(尚未)

iphone - 是否有 iPhone API 允许我直接在我的应用程序中使用 VoiceOver?

html - 列表的正确写法