`
xiaozhi7616
  • 浏览: 192380 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tab键获得页面第一焦点 - 可访问性问题

    博客分类:
  • CSS
阅读更多

如果有视力障碍的用户访问系统时,通常是使用某些屏幕读取软件来读页面中的内容(如 Screen Reader),屏幕读取软件通过页面中的某些标志性标记来读出相对应的内容,这类用户通常是使用键盘来进行操作的而非鼠标。

 

在项目中遇到了一个比较奇怪的问题,现象是这样,在使用键盘控制进入页面的时候,焦点应该停留在页面第一个能够获得焦点的元素上(<a>, <input>等等都是可以获得焦点的元素,而<div><span>则不能够获得焦点),但是因为我们的View层使用了经过封装后的JSF,JSF在实现界面展示的时候内部做了许多工作,因此导致在我们一进入页面的时候,焦点很可能落在JSF自己生成的元素上面,而我们却不得而知,导致焦点定位不准确,屏幕读取软件读到的内容不是正常情况下我们想得到的。

 

(当然这种情况在比较复杂的页面才有可能发生,不是所有的页面都会出现这个问题,而且问题发生的前提也不仅仅是使用JSF控件才会出现,使用其他的一些控件或者JavaScript类库同样有可能出现上述情况)

 

整理了一下解决这个问题的方法,以供遇到同样问题的朋友参考,这里仅使用一个简单的例子来说明问题,至于重现Tab键进入页面的时候要跳很多次的现象,这个工作就不做了,也没有必要。我准备了一个这样的界面:

 

给页面加上第一个元素,实际上很简单,在<body>标签后面加上一组标签,要紧接着<body>。

<body>
		<div class="first">
			<a href="#content" accesskey="2">Go Content</a>
		</div>

 

接下来定义它的CSS样式,这一步是最关键的

.first a{
	position:absolute;  /* 相对定位 */
	overflow:hidden;	/* 隐藏溢出部分 */
	width:0;			
	height:0;				
}

.first a:active, .first a:focus{

	position:absolute;
	overflow:visible;  /* 显示出部分 */
	width:65px;
	height:auto;
	
	/* 以下是定义显示样式 */
	padding:10px;
	top:5px;
	left:5px;
	z-index:100;
	background-color:yellow;
	border:2px dotted red;
	color:red;
	font-weight:bold;
}
   
  • 把文字 Go Content 放在<a>标签中构成链接,链接指向 ID 为 “content” 的页面元素。
  • accessKey,为页面元素定义accessKey,在IE中访问的时候可以使用 Alt 键 加上定义的 数字键 组合起来就可以直接访问到该页面元素。
  • 定义它的样式长宽均为0,超出内容部分隐藏(overflow:hidden),实际上标签<a>中所有的内容都溢出了,都会被隐藏掉,也就是正常状态下在页面中根本就看不到这个链接,这样的目的是正常显示的时候该链接并不会影响所在页面本身的内容,不会给用户造成内容上混淆。
  • 定义链接在激活和得到焦点时的样式,超出<a>标签内容的部分会被显示(overflow:visible),并指定显示部分的样式。

来看一下效果,当进入页面的时候,使用Tab键(或者在IE中使用 Alt+2 组合键)进入页面访问到页面 内容部分 第一个可获得焦点的元素就可以显示出来刚才定义的这个部分(仅是用Tab键访问的情况,鼠标操作是没有效果的)

 

IE中的效果:

 

FireFox中的效果:

 

看到在这两个主流的浏览器中显示的效果基本是一致的,但是还一个小小的区别,在IE中第一个获得焦点的页面元素是之前定义的链接“Go Content”,而在FireFox中,第一个获得焦点的页面元素是body,第二个才是“Go Content”,但是这并没有什么影响,我们要的效果已经达到了。

 

这样使用屏幕读取软件读到的页面内容就是从链接"Go Content"开始,可以直接跳到内容部分,绕过了其他控件生成的页面元素,使整个页面内容保持了一致性。

 

 

最后附上两个文件的代码,有兴趣的朋友可以试一下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css" href="style.css">
		<title>Accessibility</title>
	</head>
	<body>
		<div class="first">
			<a href="#content" accesskey="2">Go Content</a>
		</div>
		<div id="header">
			<h1>Accessibility</h1>
		</div>
		<div id="content">
			<p>Accessibility is a general term used to describe the degree to which a product (e.g., device, service, environment) is accessible by as many people as possible. Accessibility can be viewed as the "ability to access" the functionality, and possible benefit, of some system or entity. Accessibility is often used to focus on people with disabilities and their right of access to entities, often through use of assistive technology. Several definitions of accessibility refer directly to access-based individual rights laws and regulations. Products or services designed to meet these regulations are often termed Easy Access or Accessible.</p>
		</div>
		<div id="footer">
			<p>Accessibility</p>
		</div>
	</body>
</html>
 
body {background-color:white; margin: 20px; font-family:Arial; font-size: 11px;}
a{text-decoration:none;}
a:visited {color:black;}
h1{color: skyblue; font-size:3em; }
p{font-size:1.5em; line-height:1.2;	word-spacing: 5px;}

.first a{
	position:absolute;  /* 相对定位 */
	overflow:hidden;	/* 隐藏溢出部分 */
	width:0;			
	height:0;				
}

.first a:active, .first a:focus{

	position:absolute;
	overflow:visible;  /* 显示出部分 */
	width:65px;
	height:auto;
	
	/* 以下是定义显示样式 */
	padding:10px;
	top:5px;
	left:5px;
	z-index:100;
	background-color:yellow;
	border:2px dotted red;
	color:red;
	font-weight:bold;
}
 

 

 

 

 

 

 

 

  • 大小: 46.4 KB
  • 大小: 29.3 KB
  • 大小: 24.1 KB
1
0
分享到:
评论
1 楼 mic_scofield 2010-04-26  
虽然不是我需要找的内容,没有多看但是可以学习下

相关推荐

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox...

    powerbuilder

    参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定赋给当前定义字体的编号,有效值在1到8之间 facename:string类型,指定字体名称,该字体应该是你的打印机支持的字体,比如“宋体”height:...

    ExtAspNet_v2.3.2_dll

    -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页...

    易语言程序免安装版下载

    易语言5.0测试版1发布于2009/12/28,是易语言5.0静态编译版第一个公开测试版本 ******************************************************************************** ** 以下是易语言4.x及以前版本的升级信息 ...

    X-Scan

    用“&lt;Tab&gt;”替换“&lt;空格&gt;” 注:各变形方案若不冲突则可以同时使用,如“-cgi 1,6,8”表示同时使用第1、6、8号方案对HTTP请求进行变形。 &lt;br&gt; 2.示例: xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -all -...

    X-Scan v3.1

    注:各变形方案若不冲突则可以同时使用,如“-cgi 1,6,8”表示同时使用第1、6、8号方案对HTTP请求进行变形。 2.示例: xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -all -active -p 含义:检测xxx.xxx.1.1-xxx....

    Avant browser 2010 build 123

    [Fix]当Avant第一次打开时Win+arrow不起作用 (418) 。 [Fix]重新加入 Ctrl + shift + 左键点击 在后景打开页面(438)。 [Fix]有时标签栏显示标题不完整 [Fix]页面加载失败时刷新页面无效 [Fix]锁定了工具栏,但...

    HGE_系列教材(1-9)

    1. 包含hge.h 文件,并且定义一个HGE 的指针,通过这个指针,我们可以访问HGE Core Functions 层的函数。 #include HGE *pHge = 0; 使用完HGE 指针之后,需要释放这个指针,pHGE-&gt;Release(); 2. 帧函数(Frame ...

    Radmin自动登录器v3.0-多国语言绿色版-Release1-20150615

    (B)文本导入向导第1步,直接单击“下一步”; (C)第2步必须选中“逗号”分隔符,再单击“下一步”; (D)第3步必须将所有18列都设置为文本,依次选中下面数据预览里的各列,再选择右上面列数据格式里的“文本”。...

    VC++ 专家指导.doc

    但是当我显示该对话框时,第一个编辑框总是不能获得焦点,我必须单击它来使它获得焦点。我怎样才能使第一个编辑框在对话框打开时就获得焦点? 71 (93) 我怎样才能使一个窗口具有“always on top”特性? 71 (94) 我...

    WEB设计大全

    前言 &lt;br&gt;第一部分 Web设计核心问题 &lt;br&gt;第1章 什么是Web设计 &lt;br&gt;1.1 Web设计的金字塔 &lt;br&gt;1.2 建设Web站点 &lt;br&gt;1.3 为用户建设 &lt;br&gt;1.4 从纸张到软件 &lt;br&gt;1.5 Web的图形用户界面传统 ...

    WEB设计大全(part2)

    前言 &lt;br&gt;第一部分 Web设计核心问题 &lt;br&gt;第1章 什么是Web设计 &lt;br&gt;1.1 Web设计的金字塔 &lt;br&gt;1.2 建设Web站点 &lt;br&gt;1.3 为用户建设 &lt;br&gt;1.4 从纸张到软件 &lt;br&gt;1.5 Web的图形用户界面传统 ...

    Radmin自动登录器v3.0

    (B)文本导入向导第1步,直接单击“下一步”; (C)第2步必须选中“逗号”分隔符,再单击“下一步”; (D)第3步必须将所有18列都设置为文本,依次选中下面数据预览里的各列,再选择右上面列数据格式里的“文本”。...

    HTML开发王

    1.4.2 可访问性 1.4.3 表格 1.4.4 混合文档 1.4.5 样式表 . 1.4.6 脚本 1.4.7 打印 1.5 巩固与自测 第2章 html文档的基本结构 2.1 使用dreamweaver创建第一个网页 2.1.1 dreamweaver安装和配置向导 2.1.2 使用...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

Global site tag (gtag.js) - Google Analytics