各种组织均发布了如何创建具有辅助功能的应用程序的指南。下面列出一些著名的指南:
-
Web Content Accessibility Guidelines 1.0 (WCAG)(Web 内容可访问性指南 1.0 (WCAG))。
这些标准由万维网联盟 (W3C) 制订,是许多其他辅助功能标准的基础,其中包括世界各国/地区政府使用的辅助功能标准。
若要查看 Web 内容可访问性指南,请转至
万维网联盟 (W3C) 网站
。
WCAG 指南通过 1 至 3 的定级,为与每种指南相关联的检查点定义了不同级别的优先级。有些机构要求所有网站都符合优先级 1 和优先级 2 检查点。
-
第 508 节。
美国政府在类似于 WCAG 的康复法案 (Rehabilitation Act) 的第 508 节定义了辅助功能标准。
若要了解第 508 节指南,请转至 http://www.section508.gov。
-
Microsoft 辅助功能指南。
若要查看 Microsoft 辅助功能指南,请转至
Microsoft Accessibility
(Microsoft 辅助功能),也可以转至
MSDN Library
并搜索“Accessibility Design Guidelines for the Web”(Web 辅助功能设计指南)。
测试辅助功能
在有限的程度上,可以使用第三方提供的各种工具测试网页符合辅助功能标准的情况。
如果有一个开发环境(如 Microsoft Visual Studio 2005),该环境可能会提供辅助功能测试工具。有关更多信息,请查看相应的产品文档。但是,设计时辅助功能验证工具并不测试动态生成的输出,如由 ASP.NET 服务器控件或您自己的代码呈现的标记。因此,除使用设计时辅助功能验证工具外,还应对页输出进行测试。
自动辅助功能测试无法对页或网站的辅助功能进行全面的诊断。许多辅助功能指南要求您自行判断以确定页面上的功能是否符合指南。例如,自动测试可以确定是否为页面上的所有图像提供了 alt 文本,但无法确定 alt 文本是否描述图像。同样,自动测试无法客观地确定页面上所用颜色的显示对比度对那些要求高对比度文本的读者来说是否足够。因此,要创建真正具有辅助功能的应用程序,必须熟悉相应指南的细节和意图,这样,才能创建页面并满足辅助功能指南。可能无法由工具执行辅助功能检查的另一个示例为:对于只有图形的图像(如圆角表边框),alt 文本必须存在。否则,屏幕阅读器将会读取图像文件。如果 alt 文本为空,屏幕阅读器就会正确地跳过该图像。
多数情况下,ASP.NET 控件呈现标记或公开属性,呈现的标记产生符合辅助功能标准的页面,公开的属性可设置为使页面具有辅助功能。但有时 ASP.NET 控件呈现的输出并不符合所有辅助功能标准。有关详细信息,请参见
ASP.NET 控件和辅助功能
。
支持辅助功能的常规控件功能
通常情况下,ASP.NET 控件通过下列方法满足辅助功能要求:
键盘访问
一个重要的辅助功能就是页面上应提供输入形式的备选功能。实际上,这意味着可通过鼠标完成的任何任务同时也可以通过键盘完成。
ASP.NET 使您可以通过下列方法为页面提供键盘支持:
图像和替换文字
辅助功能指南建议为页面上具有功能性用途的图像(如:作为数据控件呈现的按钮或图像)提供有意义的替换文字。这使屏幕阅读器可以报告页面上每个图像所表示的内容。如果某图像除了具有修饰效果之外没有任何功能性用途,则应将其替换文字设置为一个空字符串,以便屏幕阅读器跳过该图像。
默认情况下,由于
Image
、
ImageButton
和
ImageMap
控件无法自动生成有意义的文本,因此这些控件不呈现任何替换文字。这些文字应由您亲自提供。辅助功能检查程序将不带有替换文字的图像控件标记为违反指南。
对于图像控件,应执行下列操作之一:
带有内置图像或链接的控件
有些控件(如
TreeView
控件、
Menu
控件和 Web 部件)将图像或链接作为其标记的一部分呈现。在这种情况下,此类控件应为每个图像或链接创建描述其功能的替换文字。
例如,TreeView 控件为各节点呈现用于展开和折叠按钮的图像。TreeView 控件根据节点的文本为这些图像生成替换文字。默认情况下,对于展开带有文本“Start”的节点的图像,其替换文字呈现为“Expand Start”。通过为 TreeView 控件设置
ExpandImageToolTip
和
CollapseImageToolTip
属性,可以指定您自己的替换文字。
同样,“菜单”命令也为其生成的用于展开和折叠菜单项的链接呈现替换文字。Web 部件控件标题栏中的按钮同样呈现描述各按钮功能的替换文字。
跳过重复链接
辅助技术设备(如屏幕阅读器)必须按各页的显示顺序枚举页面上的每个链接。例如,有时母版页中的某个菜单显示在网站中每页的顶部,此时将强制屏幕阅读器读取每页上的所有项,然后才能获取该页的主要内容。对于这种情况,辅助功能指南建议提供一种使用户跳过重复链接列表的方法。下列控件可实现一种跳过重复链接的方法:
上述每个控件都支持 SkipLinkText 属性。如果将该属性设置为字符串(可以包含任何文本),则控件在以下链接之前呈现一个定位点,这些链接包含的不可见的 .gif 图像带有替换文字。默认情况下,该替换文字为“跳过导航链接”,但您可以对该文本进行配置。该定位点链接到控件后面的另一个定位点。这样,用户可以使用屏幕阅读器和类似的技术跳过控件生成的链接,而不需要对页面的视频显示进行干预。如果将
SkipLinkText
属性设置为空字符串,则控件不呈现定位点标记。
呈现表的控件
辅助功能指南建议 HTML 表包含下列内容:
-
一个帮助辅助技术标识表用途的标题。
-
一种标识列标题的方法。
如果使用
Table
控件创建表,则可以显式设置该控件的
Caption
属性。使用
TableHeaderRow
类,并将 TableSection 属性设置为 TableRowSection 类的 TableHeader 枚举,便可以创建表标题。这会使表呈现一个 thead 元素。使用
TableCell
控件创建单元格时,可以将单元格的每个
AssociatedHeaderCellID
属性设置为表标题单元格的 ID。这会使单元格呈现一个 header 属性,该属性将单元格与相应的列标题关联。
下列 ASP.NET 服务器控件可以呈现 HTML 表:
这些控件使您可以设置 Caption 和 CaptionAlign 属性,以便为所得到的表创建推荐的标题。
对于这些控件,如果设置
UseAccessibleHeader
属性,则此类控件呈现具有 scope 属性的 th 元素来标识列标题。
另两个控件
DataList
和
Repeater
不自动呈现 thead 或 th 元素。但是,您可以为这两个控件定义标题模板。对于 DataList 控件,标题模板呈现 th 元素。Repeater 控件不自动呈现任何标记;您需要为该控件定义标题、正文和脚注模板,在这些模板中可以指定任何标记。如果指定 Repeater 控件应呈现 HTML 表,则应包括适当的标记以符合辅助功能标准。
呈现 div 元素的控件
辅助功能指南建议将长格式划分为多个部分,以便更容易导航。HTML 4.0 引入了 fieldset 和 legend 元素,从而使网页开发人员可以将一个格式分为多个部分。
在 ASP.NET 中,可以使用 Panel 控件创建格式中的各个子部分。如果将该控件的
GroupingText
属性设置为字符串,则 Panel 呈现一个 div 元素,该元素包含一个表示内容的 fieldset 元素和一个具有在 GroupingText 属性中使用的字符串的 legend 元素。
有些 Web 部件控件也呈现 div 元素。这些控件自动呈现 fieldset 和 legend 元素。
验证控件
在需要输入或者用户在输入数据的过程中出错时,许多网页会在文本框的旁边显示一个星号 (*)。由于星号没有意义,因此应始终在验证程序控件的 Text 和
ErrorMessage
属性中指定有意义的错误信息。
此外,验证程序控件应禁用客户端脚本 (EnableClientScript=false)。
登录控件
登录控件(如
Login
、
ChangePassword
、
PasswordRecovery
和 CreateUserWizard 控件)包含 Label、
TextBox
和验证程序控件等其他控件。作为网页开发人员,您不必直接控制登录控件所呈现的内容,因此设计了这些具有辅助功能的控件。例如,这些控件具有下列支持辅助功能的行为:
但是,如果为这些登录控件创建了模板,则必须在模板中配置这些控件,以便使这些控件符合辅助功能指南。
客户端脚本和 ASP.NET 服务器控件
WCAG 标准建议,页面不要将客户端脚本用于任何功能性用途,而只用于非必要效果(如鼠标翻转)。第 508 节指南允许使用客户端脚本,前提条件是辅助技术可以使用该脚本返回的任何值。
有几个 ASP.NET Web 服务器控件依赖于客户端脚本。例如:
-
LinkButton
和 ImageButton 控件需要客户端脚本执行回发。
-
Calendar 控件要求客户端脚本支持日期链接的单击操作。
-
Web 部件控件依赖于客户端脚本来关闭、最小化和编辑链接。
有关使用客户端脚本的控件的完整列表,请参见
使用客户端脚本的 ASP.NET Web 服务器控件
。
因此,如果在某页上使用了需要客户端脚本的任何控件,该页就违反了 WCAG 标准。如果您的 Web 应用程序必须完全符合 WCAG 标准,您就不能在页面上使用依赖于客户端脚本的任何控件。但是,对于在页面中使用客户端脚本来说,这些控件确实符合第 508 节标准。