参考文献:
《Web 内容无障碍指南 (WCAG) 2.0》
《YD/T 1822-2012 网站设计无障碍评级测试方法》
《YD/T 1890-2009 信息无障碍辅助技术的要求和评测方法》
整网无障碍网站建设步骤主要分为分析设计、效果确认、制作开发、无障碍化、整体测试、网页发布和跟踪维护。
网站栏目结构要清晰,层次尽量不要超过3层,各栏目内的子栏目和内容不要重叠。网站中建议设计结构清晰的导航网页,网站中设计无障碍声明网页,说明无障碍的级别、功能、操作方法等,并在首页的显著位置放置“无障碍声明”和“残疾人专栏”链接。
网页中的各种对象要采用能够用键盘控制和操作的对象,减少不必要的图片、FLASH、视频等内容和对象。
考虑到弱视人群还具有一定的视力,在网站中为弱视人群提供字体放大、字间距放大、对比度提高、界面放大、标尺等辅助功能,详细见4.2.2.1 无障碍辅助工具条功能设计。
为了保证网站无障碍的长期稳定运行,需要建立无障碍发布机制,检查每天即将或已发布的网页是否符合无障碍标准。
为了保证页面的无障碍访问,首先需要在页面的头部必须有 DOCTYPE 加上 DTD 的声明以及页面默认的语言。此外,页面的 title 属性值也是必须的。
<!DOCTYPE html>
<html lang="zh-CN"></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN"></html>
<head>
<title>页面标题</title>
</head>
<img src=" url " alt="Image about cat" />
<img src="url" alt="" />
必须设置一个空 alt 属性的目的是为了能通过 无障碍工具 的检查,并且使得读屏软件能够忽略此元素
<a href="http://apple.com/iphone/"> <img src="iphone.jpg" alt=" " />Apple iPhone </a>
内容已经指明了这是个苹果手机,IMG 的 alt 属性就没必要再设置一次了。否则读屏软件会连续读两次重复的内容,引起混乱。
/* 图片写在 CSS 里面 */
/* <div class="save_button" /> */
.save_button {
background: url("images/save_button.png");
width: 33px;
height: 33px;
vertical-align: middle;
}
这样当用户切换到高对比度模式,这个图片就是一片空白,用户无法再去点击保存。修改如下: 将 CSS 里面的图片拿出来
<img src="images/save_button.png" alt=" save"/> <input type="image" src="
images/save_button.png" alt="save"/>
图片被选中时对应的 CSS
.selectedIcon {
border: 5px solid #acc6f3;
}
.unSelectedIcon {
border: 5px solid #c0d4f7;
}
但这样的一个实现实际上违反了可访问检查列表中的一项:不能仅仅通过颜色来区分不同的元素,因为在高对比度下只有黑色或白色,这样的区分在高对比度下是没有任何作用的。我们很容易想到的一种办法就是只有选中的时候才加边框,未选中时则没有边框,这样就可以区分出来了。修改如下:
.selectedIcon {
border: 5px solid #acc6f3;
}
.unSelectedIcon {
border: 0 none;
}
这样引起的问题是,图片的布局在选中的时候会浮动,增加了 5px 的边框,看起来效果就很差。那么怎么保证布局又满足可访问性的要求呢? 可以在上面 CSS 的基础上通过 padding 属性使得布局正确:
.selectedIcon {
border: 1px solid #acc6f3;
padding: 4px;
}
.unSelectedIcon {
border: 0 none;
padding: 5px;
}
这样保证整体的边界都是 5px
在 Web 页面中通常有两种用途的表格,一种用于页面布局,另外一种用于显示数据。数据表格: 需要用 指定行或列的标题行,同时还需要显式地指定 summary 属性值,使得屏幕阅读器可以读出表的主要用途; 表格必须包含 caption 标签,caption 可以显示或隐藏;合理的使用 thead,tbody 及 tfoot;标题单元格添加 scope 属性,表示相关的围。如清单 1 所示:
清单 1. 数据表格
<table border="1" summary="向日葵班2011年体检表">
<caption>
体检表
</caption>
<thead>
<tr>
<th scope="col">姓名</th>
<th scope="col">性别</th>
<th scope="col">身高/cm</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">小新</th>
<td>男</td>
<td>85</td>
</tr>
<tr>
<th scope="row">妮妮</th>
<td>女</td>
<td>82</td>
</tr>
<tr>
<th scope="row">阿呆</th>
<td>男</td>
<td>82</td>
</tr>
</tbody>
</table>
布局表格的用途是为了页面布局美观而使用的,所以在其定义中不应该包含行或列标题行,同时设定 summary 的属性值为空。布局表格对于屏幕阅读器应该是透明的。通常情况下,如果表格有至少两行两列四个单元格,同时其大小在 200 到 16000 平方像素之间,在 JAWS 中会默认为是数据表。所以如果一个表格是为布局而设置的,请避免为其指定 summary 属性值。有些屏幕阅读器偶尔会混淆数据表格与布局表格,为了避免混淆我们可以指定 WAI-ARIA 的 role 属性值为 presentation.如清单 2 所示
清单 2. 设置表格的 role 属性
然而并非所有的浏览器都支持 WAI-ARIA 属性,这种情形下,我们可以设定表格的 datatable 属性值为 0, 这样 JAWS 也会将其视为布局表格。
清单 3. 设置表格的 datatable 属性
描述:表单的输入页面,必须让读屏软件可以读出每一个控件的含义
标签的 value 属性可阅读,使用 value 属性自描述 适用的控件标签:
input[type=button|submit|reset]
<input type="button" name="" value="普通" />
<input type="submit" name="" value="提交" />
<input type="reset" name="" value="复位" />
添加 title 属性,属性值为描述文案 适用的控件标签:input,select,textarea,fieldset
<input type="text" name="" title="宝贝标题" value="" />
添加 label 标签,将 label 的 for 属性和控件元素的 id 关联起来,label 可以显示或隐藏,文案非空 适用的控件标签:input,select,textarea,fieldset
<input type="checkbox" name="" id="promotion" value="" /><label for="promotion">参加秒杀</label>
添加 tabindex 属性,使标签可被 tab 切换,tabindex 值为非负整数 适用的控件标签:fieldset
<fieldset tabindex="0" title="" aria-label="基本信息">
<legend>基本信息</legend>
<input type="text" name="" aria-label="标题" />
</fieldset>
描述:点击后页面发生跳转的 a 标签
适用场景:文字内容完整,未做截断处理的
<a href="url">XX 网首页</a>
适用场景:文字内容有截断的,不能展示全部内容的。
<a href="url" title="全场三折起,降价女鞋甩卖">全场三折起...</a>
使用场景:文字内容需要结合上下文才可以知道目标页面的。
<a href="url" title="更多新闻">更多</a>
Tabindex 属性的使用可以使得原本无法取得焦点的元素获取焦点。目的是为了使用户可以用键盘访问任何可以用鼠标访问的元素。我们知道,使用 Tab 键可以按文档顺序 tab 到所有可以获取焦点的元素。Tabindex 可以设置为 -1, 0 或者是任何自然数。
我们以 为例。以下代码是 HTML 中的默认 元素:span text here 以下元素可以能从鼠标或键盘接收关注;用户可以使用 tab 键来关注此元素,并且 tab 键顺序取决于元素在文档中的位置:
<span tabindex="0">span text here</span>
以下元素不能使用 tab 键接收关注:将 tabindex 设置为 -1 意味着从 tab 序列中移除该元素。因此,您无法使用键盘或鼠标来关注此元素。但是,您仍然可以使用 focus()方法来关注它。
<span tabindex="-1">span text here</span>
推荐的导航结构:
< ul role="navigation" tabindex="0" aria-label="导航菜单列表">
<li><a href="url" title=”xx” >栏目1</a></li>
<li><a href="url" title=”xx” >栏目1</a></li>
<li><a href="url" title=”xx” >栏目1 </a></li>
</ ul>
勿使用 blink、font、center、i、b、u 标签。要强调的内容使用 strong 标签。
<div id="navigation" role="navigation" accesskey="n" tabindex="0" aria-label="导航">
……
</div>
隐藏的内容分为两种,一种是为了布局的需要,在条件满足的情况下才会显示出来;另一种是只给读屏软件读的内容:有时候我们为了使读屏软件更准确的读取信息,会提供一些额外的描述来达到此效果,但为了不给正常用户带来困扰,这些内容对正常用户来说是隐藏起来的。隐藏内容我们通常用 display:none 或者 visibility:hidden 来表示,但读屏软件同样也会忽略这类内容。那如何隐藏内容又能使读屏软件读出来呢?另外一种隐藏内容的方式是使用绝对定位使得内容不出现在当前屏幕上,如:{position:absolute;top:-30000px;} 所以在选择使用哪种方式隐藏内容时就需要慎重考虑,display:none visibility:hidden 对任何人都是隐藏的,如果想只给读屏软件读到就需要使用上面的绝对定位方式。
清单 1. 只给读屏软件读的内容
<span> is selected</span>
.access {
position: absolute;
top: -30000px;
}