浅析HTML5 Landmark


Posted in HTML / CSS onSeptember 11, 2020

最近在进行无障碍相关文档翻译的时候遇到了 landmark 的概念,在网上搜了下发现没有相关的中文资料,因此写一篇博客简单介绍一下。

什么是 Landmark

Landmark 是一种用来表示网页组织结构的方法。通常一个网页可以被切分成几个大块

浅析HTML5 Landmark

以一个视频网站为例,网页的最上方是一条banner,左侧是一个导航栏,右侧显示视频。网页可以通过这种切分方式来分割出不同的功能区。当然在一个功能区内也可以递归地进行切分,这里先不展开。
对于一个视力障碍者,他无法像常人一样理解从视觉角度传达出的网页结构信息,那么就需要网页开发者预先将网页的结构规划好,并将结构信息写在HTML代码里,最终将网页的结构信息通过读屏软件表达出来。
而landmark就是连接网页结构信息和读屏软件的桥梁。网页开发者通过landmark对网页区域进行标注,读屏软件读取landmark信息并传达给视力障碍者。

如何使用 Landmark

事实上,在HTML5 landmark出现之前,就已经有landmark的概念了。
landmark有以下几种main,navigation,complementary,banner,contentinfo,form,region,search。通过使用<div role="main">就定义了一个main landmark。

而在HTML5中定义了一些全新的标签,并赋予他们隐式的landmark语义。
HTML5 Landmark主要有以下几种

HTML Element Landmark Role
main
navigation
complementary
banner
contentinfo
form
region

这些标签本身就隐含着landmark的含义,也就是说<main><div role="main">是完全等价的。

对于search landmark没有定义专用的HTML标签,通常使用<form role="search">来实现。

也就是说,在上一节引用的网页中

  1. 对于1号区域,应当把所有的内容放到一个<header></header>中,标识该部分是banner
  2. 对于2号区域,应当把所有的内容放到一个<nav></nav>中,标识该部分是导航栏
  3. 对于3号区域,应当把所有的内容放到一个<main></main>中,标识该部分是网页的主要内容
     

读屏软件会生成一系列的跳转链接来帮助视力障碍者确定网页的结构并迅速跳转至需要的部分。

在HTML5之前,只能通过role属性来定义landmark,HTML5推出的新标签能够在保持可访问性的情况下简化标记。但并不是每个用户使用的辅助工具都支持最新的标准,因此许多教程推荐使用<main role="main">的写法来同时兼容两种标准。W3C的标准不鼓励在已经含有隐式语义的情况下使用role属性,因为两者语义冲突的情况下可能导致无法预计的表现。

区分同类型的 Landmark

有时候页面中可能会有多个导航栏,分别有不同的作用。比如一个电商网站有一个主导航来跳转到购物车、收藏夹等不同的页面;还有一个产品导航来跳转到电子产品、婴儿产品。如何对两者进行区分呢,这里需要使用aria-label或者aria-labelledby属性。

<nav aria-label="主导航">
  <ul>
    <li>主页</li>
    <li>购物车</li>
    <li>收藏夹</li>
  </ul>
</div>
        
<nav aria-label="产品导航">
  <ul>
    <li>婴儿产品</li>
    <li>电子产品</li>
    <li>体育产品</li>
  </ul>
</div>

这样读屏软件会分别生成以下两个链接

  • 导航,主导航
  • 导航,产品导航
     

这样就将不同的landmark区分开了。

使用读屏软件读取 Landmark

为了更好地理解landmark,我尝试使用读屏软件来测试网页上的landmark。这里我使用的是Windows系统自带的讲述人。

浅析HTML5 Landmark

按下Caps Lock + F5来显示网页中所有的landmark。

浅析HTML5 Landmark

按下Caps Lock + N,可以看到讲述人光标移动到了网页的主要内容部分。

浅析HTML5 Landmark

使用D或Shift + D可以在landmark间切换,同时会朗读出每个landmark的信息。
这里可以看到有一个search landmark,它在banner landmark的内部,这就是landmark嵌套的情况。对于landmark嵌套有一系列的规则,感兴趣的读者可以自己了解。

总结

和单词的原意一样,landmark就像是一个网页的许多个“入口”或“地标”。通过landmark标注网页结构的信息,可以帮助视力障碍者通过读屏软件了解网页的结构,并迅速到达需要的部分。
然而正如并非所有的读屏软件都支持HTML5 Landmark一样,并非所有视力障碍者都了解landmark的概念并知道如何使用landmark。因此提供传统的跳转链接来跳过导航直接跳转到内容仍然是有必要的。

以上就是浅析HTML5 Landmark的详细内容,更多关于HTML5 Landmark的资料请关注三水点靠木其它相关文章!

HTML / CSS 相关文章推荐
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
Mar 09 HTML / CSS
在css3中background-clip属性与background-origin属性的用法介绍
Nov 13 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
Jul 02 HTML / CSS
全方位了解CSS3的Regions扩展
Aug 07 HTML / CSS
使用HTML和CSS3绘制基本卡通图案的示例分享
Nov 06 HTML / CSS
利用CSS3的线性渐变linear-gradient制作边框的示例
Jun 02 HTML / CSS
HTML5中新标签和常用标签详解
Mar 07 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
Jan 29 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
Jul 11 HTML / CSS
详解如何在登录过期后跳出Ifram框架
Sep 10 HTML / CSS
CSS控制继承中的height能变为可继承吗
Jun 10 HTML / CSS
微信小程序纯CSS实现无限弹幕滚动效果
Sep 23 HTML / CSS
详解HTML5中CSS外观属性
Sep 10 #HTML / CSS
详解如何在登录过期后跳出Ifram框架
Sep 10 #HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 #HTML / CSS
HTML5输入框下拉菜单功能的示例代码
Sep 08 #HTML / CSS
boostrap modal 闪现问题的解决方法
Sep 01 #HTML / CSS
HTML5 SEO优化的一些建议
Aug 27 #HTML / CSS
Amaze UI 文件选择域的示例代码
Aug 26 #HTML / CSS
You might like
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
MySQL中create table语句的基本语法是
2007/01/15 PHP
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP教程 预定义变量
2009/10/23 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Python如何读写二进制数组数据
2020/08/01 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
武汉某公司的C#笔试题面试题
2015/12/25 面试题
三好学生先进事迹材料
2014/08/28 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
职代会闭幕词
2015/01/28 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP