HTML 语义元素和可访问性说明速查表
读屏软件依赖 HTML 标签的语义信息来解析页面,并向用户传达和呈现出有意义的内容。
例如,当读屏软件遇到 <nav> 标签时,它会识别出这是一个导航栏区域,并让用户能快速访问网站的导航条目。
因此,使用规范化的HTML语义标签来组织内容是提高网页可访问性的最佳手段。
下表列出了最常见和有用的 HTML 元素,这些元素对视障用户的可访问性有着重要影响。
| 元素 | 语义/功能 | 可访问性注意事项 | 
|---|---|---|
| <a> | 如果存在非空的 href属性,则定义一个链接。 | 确保元素作为 链接 发挥作用——它将用户带到另一个页面/文件或页面内的另一个位置。确保链接可以通过键盘导航和激活,并具有可见的焦点指示器。 必须包含描述链接功能的内容。通常应在正文内容中加下划线。 | 
| <abbr> | 表示缩写或首字母缩略词。 <abbr title>属性值会呈现给辅助技术。 | 最佳实践是在文本中首次出现时拼写出首字母缩略词和缩写词,而不是使用 <abbr>。 | 
| <area> | 定义图像地图(用 <map>定义)中的热点区域。 | 必须具有 alt 属性 值,用于描述热点区域的内容/功能。 | 
| <article>和<section> | 除非给定 ARIA 标签(通常不推荐),否则这些元素没有有用的语义。 | 主要将这些用于视觉样式和内容解析。对于主要内容,请改用 <main>。 这些元素中的内容通常应以 标题 (<h1>-<h6>) 开头。 | 
| <aside> | 包含侧边栏或标注内容,这些内容与 <main>间接相关。 被标识为区域/地标。 | 仅用于切向信息或侧边栏信息,例如与主要内容相关的链接。 | 
| <button> | 定义用于提交表单或执行功能的交互式元素。 | 确保按钮仍然 可以通过键盘导航 并具有可见的焦点指示器。 必须包含描述按钮功能的内容。如果元素将用户定向到另一个页面或同一页面内的另一个位置,请改用 <a>。 | 
| <caption> | 为数据 <table>定义标题或题目。 | 如果 <table>具有描述它的文本,请使用<caption>将该文本与 表格 关联起来。 | 
| <details> | 创建一个 disclosure 小部件,其中的信息仅在小部件切换到“打开”状态时才可见。 | 确保存在 <summary>,用于描述或概括 disclosure 内容。 | 
| <dialog> | 包含对话框或其他交互式组件。 | 确保焦点在对话框出现时设置到对话框。 如果对话框可以关闭,请确保键盘用户可以关闭对话框。 ESC键通常应关闭对话框。 确保键盘焦点保持在模态对话框内,并在对话框关闭时将焦点设置到逻辑位置。 | 
| <div> | 一个不具有任何语义的通用容器。 | 如果内容呈现语义,请使用另一个语义元素。 对于交互式元素,请使用 <a>、<button>或表单输入。 当 HTML 不足以表达语义时,可以使用 ARIA 角色 来赋予其语义。 | 
| <em> | 将文本标记为强调,并将文本显示为斜体。 | 当文本需要强调时使用(否则使用 <i>或样式)。 谨慎使用——它可能会对长段文本的可读性产生负面影响。屏幕阅读器通常不会以不同的方式读取它。 | 
| <fieldset> | 在语义上和视觉上将 一组相关的输入 分组,例如一组单选按钮或复选框。 | 通常应具有 <legend>来描述字段集。 | 
| <figure> | 包含在文档主要流程中引用的图像、插图、代码片段等。 | 通常应为 figure 中的图像提供 alt 属性,并使用 <figcaption>为<figure>内容提供标题或图例。 | 
| <footer> | 包含页脚内容,例如版权数据或相关链接。 被标识为区域/地标。 | 仅用于页脚内容。 通常每页一个。 | 
| <h1>-<h6> | 描述内容部分并定义该内容的结构级别。 | 确保标题准确地描述了后续的内容。 标题绝不能为空。一个页面通常应有一个 <h1>,并且不应跳过标题级别(例如,<h2>之后是<h4>)。 | 
| <header> | 包含页眉内容、导航链接、徽标、搜索等。 被标识为区域/地标。 | 不要与标题( <h1>等)混淆。 仅用于页眉内容。 通常每页一个实例。 | 
| <iframe> | 在页面中嵌套其他页面内容(通常是外部视频或 feed)。 | 通常应具有 title属性值,用于描述 内联框架 的内容/功能,除非 iframe 的存在对用户是视觉上透明的(在这种情况下使用role="presentation")。 确保 iframe 内的内容是可访问的,或提供等效的替代方案。 | 
| <input>、<select>和<textarea> | 定义用于接受用户数据的交互式控件。 | 使用 <label>来关联描述性文本,或者在复杂情况下,使用aria-labelledby或aria-label。 确保输入仍然 可以通过键盘导航 并具有可见的焦点指示器。 | 
| <img> | 嵌入图像。 | 必须具有 alt 属性 值,用于描述图像的内容和/或功能。 如果图像是装饰性的或内容在图像附近呈现,则允许使用 alt=""。 | 
| <label> | 描述 <input>、<select>或<textarea>的功能/目的。 | 必须包含描述表单输入的文本。 要将 <label>与输入关联,可以将<label>围绕输入和标签文本包裹,或者使用匹配的for/id属性值。 | 
| <legend> | 描述 <fieldset>的内容。 | 仅在 <fieldset>中使用,以描述表单输入的分组。 | 
| <li> | 定义 <ol>或<ul>中的项目。 屏幕阅读器会播报列表中的项目数。 | 确保列表项永远不为空。 注意列表项中复杂列表的嵌套。 | 
| <main> | 包含主要内容。 被标识为区域/地标。 | 仅用于主要内容。 通常每页一个实例。 | 
| <menu> | 定义菜单项的无序列表。 在语义上与 <ul>相同。 | 除非嵌套项是菜单项,否则请改用 <ul>。 必须包含至少一个<li>。 | 
| <nav> | 包含导航链接。 被标识为区域/地标。 | 仅用于重要站点或页面内导航链接的组/列表。 通常每页 1 或 2 个实例。 | 
| <ol> | 定义项目的有序/分层列表。 | 用于项目顺序影响意义的列表。 必须包含至少一个 <li>。 | 
| <p> | 标识段落。 不呈现有用的语义。 | 用于创建文本块/段落。 | 
| <span> | 内联文本的通用容器。 | 如果内容具有语义或功能,请使用另一个语义元素。 可以使用 ARIA 赋予语义,但仅在 HTML 不足以表达语义时才使用。 | 
| <strong> | 将文本标记为强烈强调,并将文本显示为粗体类型。 | 当文本需要强烈强调时使用(否则使用 <b>或样式)。 谨慎使用——它可能会对长段文本的可读性产生负面影响。屏幕阅读器通常不会以不同的方式读取它。 | 
| <svg> | 定义可缩放矢量图形。 尚不支持正确的语义。 | 如果 SVG 传达内容或可点击,请分配 role="img"和aria-label或aria-labelledby(引用描述性内容),以便将<svg>标识为带有替代文本的图像。 如果 SVG 是装饰性的,请分配role="presentation"和aria-hidden="true"。 | 
| <table> | 定义以网格形式呈现的 表格内容。 | 仅用于表格内容/数据的网格,不用于布局。 确保表头单元格用 <th>定义。 如果合适,请用<caption>描述表格。 | 
| <td> | 在 表格 中定义数据单元格。 | 尽量避免跨越的表格单元格。 对于列标题或行标题,请改用 <th>。 | 
| <th> | 在 表格 中定义标题单元格。 | 始终分配值为 "row" 或 "col" 的 scope属性值。 尽量避免跨越的表头。 如果单元格不是行/列标题,请改用<td>。 | 
| <title> | 定义文档的标题。 显示在浏览器标签页中。 | 确保标题简洁地描述页面内容。 | 
| <ul> | 定义项目的无序/项目符号列表。 | 用于项目顺序不影响意义的列表。 必须包含至少一个 <li>。 | 
知乎: @张赐荣
赐荣博客: www.prc.cx
 
                     
                    
                 
                    
                 
                
 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号