0
Accessibility 实施指引 产品使用无障碍 杜欢 <ul><li>Architect of F2E </li></ul><ul><li>07/05/2011 </li></ul>
 
企业愿景 社会保障 技术实现
更好的技术将有助于视觉障碍人群,和其他人更好地使用互联网。
 
产品项目 原型设计 UE 设计 可用性 设计 项目 实施 可用性 文档 可用性 高对 比度 测试 视觉 高对 比度 设计
 
全局设定 Tab 键的访问顺序 由上到下 由左到右
 
细节设定 Tab 键的访问顺序 交互中的操作需要在交互面板展开后按照全局设定继续进行 交互面板中最后一个元素之后将使 Focus 回到无交互状态下的自然顺序
 
<ul><li>大于等于 1 的值将打乱文档流中的正常顺序 </li></ul><ul><li>等于 0 的值相当于没有设置,或者说将恢复到自然顺序 </li></ul><ul><li>小于 0 的值,将使得被设置的节点不再能够获得焦点 </l...
 
<ul><li>所有非文本内容呈现给用户时必须提供一个可供选择的替代文本去表达这些内容 </li></ul><ul><li>所设置的替代文本必须具有语义,能够使用户清楚它所要传达的意义。 </li></ul><ul><li>每张图片都需要有替代...
 
<ul><li>CSS background  不可用 </li></ul><ul><li>所有在 CSS 中设定的带有 background 属性都不可用 </li></ul><ul><li>白色的图片在白色系高对比度模式下无法看到,黑色的图...
 
 
 
 
 
 
Upcoming SlideShare
Loading in...5
×

Accessibility guide

880

Published on

Accessibility guide

Published in: Technology, Design
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
880
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
37
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • 社会保障 Americans with Disabilities Act (ADA), Section 255 of the U.S. Telecommunications Act U.K. Disability Discrimination Act 中华人民共和国通信行业标准 - 信息无障碍 - 身体机能差异人群 - 网站设计无障碍技术要求
  • &lt;h1&gt; 静态的 DOM 文档流顺序 &lt;/ h1&gt; &lt;div class=&amp;quot;ffoot-col&amp;quot;&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1C&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;div id=&amp;quot;industriesmenu&amp;quot; class=&amp;quot;ffoot-menucontent&amp;quot;&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2C&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2D&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2E&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2F&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3C&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;
  • &lt;style&gt; ul,li{list-style:none;margin:0;padding:0;} .ffoot-col{position:relative;} #submenu{position:absolute;left:220px;top:60px;z-index:10;width:100px;padding:15px;background:#ccc;} &lt;/style&gt; &lt;h1&gt; 交互中的 DOM 文档流顺序 &lt;/ h1&gt; &lt;div class=&amp;quot;ffoot-col&amp;quot;&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;1C&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a id=&amp;quot;menu&amp;quot; href=&amp;quot;#&amp;quot;&gt;2.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;div id=&amp;quot;submenu&amp;quot; class=&amp;quot;ffoot-menucontent&amp;quot;&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2C&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2D&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2E&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;2F&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&amp;quot;ffoot-block&amp;quot;&gt; &lt;h3&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3.DOM 文档流顺序保证 &lt;/ a&gt;&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3A&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3B&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&amp;quot;#&amp;quot;&gt;3C&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt; &lt;script&gt; var dMenu = document.getElementById(&apos;menu&apos;), dSubmenu = document.getElementById(&apos;submenu&apos;), dSLink = dSubmenu.getElementsByTagName(&apos;a&apos;); dSubmenu.style.display = &apos;none&apos;; var showSubmenu = function(){ dSubmenu.isOpen = true; dSubmenu.style.display = &apos;block&apos;; },hideSubmenu = function(){ if(hideSubmenu.timer){window.clearTimeout(hideSubmenu.timer);} dSubmenu.isOpen = false; hideSubmenu.timer = window.setTimeout(function(){ if(!dSubmenu.isOpen){dSubmenu.style.display = &apos;none&apos;;} },100); }; dMenu.onfocus = dMenu.onmouseover = showSubmenu; dMenu.onmouseout = hideSubmenu; dSubmenu.onmouseover = showSubmenu; dSubmenu.onmouseout = hideSubmenu; dSLink[dSLink.length-1].onblur = hideSubmenu; &lt;/script&gt;
  • &lt;style&gt; div{margin:30px;} a{font-size:300%;} #x{color:red;} &lt;/style&gt; &lt;div&gt; &lt;a href=&amp;quot;#&amp;quot;&gt;A&lt;/a&gt; &lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;x&amp;quot;&gt;X&lt;/a&gt; &lt;a href=&amp;quot;#&amp;quot;&gt;C&lt;/a&gt; &lt;/div&gt; &lt;div&gt; &lt;button onclick=&amp;quot;document.getElementById(&apos;x&apos;).setAttribute(&apos;tabIndex&apos;, &apos;2&apos;);&amp;quot;&gt; 调整 X 优先级 &lt;/ button&gt; &lt;button onclick=&amp;quot;document.getElementById(&apos;x&apos;).setAttribute(&apos;tabIndex&apos;, &apos;0&apos;);&amp;quot;&gt; 恢复 X 自然顺序 &lt;/ button&gt; &lt;button onclick=&amp;quot;document.getElementById(&apos;x&apos;).setAttribute(&apos;tabIndex&apos;, &apos;-1&apos;);&amp;quot;&gt; 禁止 X 得到焦点 &lt;/ button&gt; &lt;button onclick=&amp;quot;document.getElementById(&apos;x&apos;).removeAttribute(&apos;tabIndex&apos;);&amp;quot;&gt; 恢复 X 得到焦点 &lt;/ button&gt; &lt;/div&gt;
  • 替代文本的用法: 参见: Cisco Web ADRs ACC-WEB 1.1.1 : 非文本内容最佳实践 http://www.w3cgroup.com/article.asp?id=324 表单元素的一些细节: 所有表单项都需要有 label 元素,通过 for=“# id” 与之关联 &lt;label for=“username”&gt;User Name:&lt;/label&gt;&lt;input type=“text” id=“username” name=“username” /&gt; 在不需要 label 元素的场景中,可以为表单元素添加 title 属性 &lt;label for=“vscard-first-part”&gt; 信用卡号码 :&lt;/label&gt;&lt;input type=“text” id=“vscard-first-part” title=&amp;quot; 前四位 &amp;quot; /&gt;&lt;input type=“text” title=“ 中间四位” /&gt;&lt;input type=“text” title=“ 最后四位” /&gt;
  • 高对比度检测: 可以通过设置读取一个 background 样式来判断当前是否为高对比度模式。 Image Sprite VS Background Sprite Background Sprite: &lt;style&gt; html,body{background:#ccc;} .cisco-logo{ display:block; width:100px; height:75px; background:url(http://www.cisco.com/web/fw/i/mb-sprite.png) 0 -1650px no-repeat; text-indent:-200px; text-decoration:none; overflow:hidden; } &lt;/style&gt; &lt;a href=&amp;quot;?&amp;quot; class=&amp;quot;cisco-logo&amp;quot;&gt;Cisco.com Worldwide Home&lt;/a&gt; Image Sprite: &lt;style&gt; html,body{background:#ccc;} .cisco-logo{ position:relative; display:block; width:100px; height:75px; overflow:hidden; text-decoration:none; } .cisco-logo img{ position:relative; left:0; top:-1650px; border:none; } &lt;/style&gt; &lt;a href=&amp;quot;?&amp;quot; class=&amp;quot;cisco-logo&amp;quot;&gt;&lt;img src=&amp;quot;http://www.cisco.com/web/fw/i/mb-sprite.png&amp;quot; alt=&amp;quot;&amp;quot; /&gt;Cisco.com Worldwide Home&lt;/a&gt;
  • WAVE: http://wave.webaim.org/ JAWS: http://www.freedomscientific.com/products/fs/jaws-product-page.asp
  • 常用 HTML 元素及按键列表 : &lt;a&gt; 链接 TAB 和 SHIFT+TAB 进行导航, ENTER 激活 &lt;button&gt; &lt;input type = &amp;quot;button&amp;quot;&gt; &lt;input type = &amp;quot;submit&amp;quot;&gt; &lt;input type = &amp;quot;reset&amp;quot;&gt; &lt;input type = &amp;quot;image&amp;quot;&gt; 按钮 TAB 和 SHIFT+TAB 进行导航, ENTER 或 SPACE BAR 激活 &lt;input type = &amp;quot;text&amp;quot;&gt; &lt;input type = &amp;quot;password&amp;quot;&gt; &lt;textarea&gt; 可编辑文本框 TAB 和 SHIFT+TAB 进行导航,然后输入文本 &lt;input type=&amp;quot;checkbox&amp;quot;&gt; 复选框 TAB 和 SHIFT+TAB 进行导航, SPACE BAR 进行选中和反选 &lt;input type=&amp;quot;radio&amp;quot;&gt; 单选框 TAB 和 SHIFT+TAB 进行导航, UP/DOWN/LEFT/RIGHT 方向键进行切换选择 &lt;select&gt; 下拉选框 TAB 和 SHIFT+TAB 进行导航, ALT+DOWN 方向键展开下拉列表 , ECS 关闭下拉列表 , UP/DOWN 方向键进行选择 交互中一些 popup, dialog 操作 : 记住它们的 Trigger 节点,以便在它们关闭的时候焦点能够回到触发的节点 一些关于 Focus 的 BUG: &lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html;charset=UTF-8&amp;quot;/&gt; &lt;h1&gt; 设置了 overflow auto 的盒子在 FF4 下会获得焦点 &lt;/ h1&gt; &lt;div style=&amp;quot;width:200px;overflow:auto;zoom:1;background:gray;&amp;quot;&gt; &lt;input type=&amp;quot;text&amp;quot; /&gt;&lt;a href=&amp;quot;?&amp;quot;&gt;test&lt;/a&gt;hello world, hello JAWS. &lt;/div&gt; Tips for fix it: 设置该容器的 tabindex 属性值为 -1 &lt;meta http-equiv=&amp;quot;Content-type&amp;quot; content=&amp;quot;text/html;charset=UTF-8&amp;quot;/&gt; &lt;h1&gt;innerHTML 中设置为选中状态的 radio , 在 IE 中不能第一个获得焦点 &lt;/ h1&gt; &lt;a href=&amp;quot;javascript:void(0);&amp;quot; id=&amp;quot;x&amp;quot;&gt;show/hide&lt;/a&gt; &lt;div id=&amp;quot;y&amp;quot; style=&amp;quot;display:none;&amp;quot;&gt;&lt;/div&gt; &lt;SCRIPT LANGUAGE=&amp;quot;JavaScript&amp;quot;&gt; var dx = document.getElementById(&apos;x&apos;), dy = document.getElementById(&apos;y&apos;), html = &apos;&lt;input name=&amp;quot;radio&amp;quot; type=&amp;quot;radio&amp;quot; value=&amp;quot;1&amp;quot;/&gt;11111&lt;input name=&amp;quot;radio&amp;quot; type=&amp;quot;radio&amp;quot; value=&amp;quot;2&amp;quot;/&gt;22222&lt;input name=&amp;quot;radio&amp;quot; type=&amp;quot;radio&amp;quot; value=&amp;quot;2&amp;quot;/&gt;33333&lt;input name=&amp;quot;radio&amp;quot; type=&amp;quot;radio&amp;quot; value=&amp;quot;2&amp;quot;/&gt;44444&lt;input name=&amp;quot;radio&amp;quot; id=&amp;quot;spark&amp;quot; type=&amp;quot;radio&amp;quot; value=&amp;quot;2&amp;quot; checked=&amp;quot;checked&amp;quot;/&gt;55555&apos;; dx.onclick = function() { if (dy.style.display == &apos;none&apos;) { dy.innerHTML = html; dy.style.display = &apos;block&apos;; } else { dy.style.display = &apos;none&apos;; } } &lt;/SCRIPT&gt; Tips for fix it: 在插入 innerHTML 内容并显示时重置选中 radio 的状态: if (dy.style.display == &apos;none&apos;) { dy.innerHTML = html; dy.style.display = &apos;block&apos;; dRadio = dy.getElementsByTagName(&apos;input&apos;); for(var i=0;i&lt;dRadio.length;i++){ if(dRadio[i].checked){idx=i;break;} } dRadio[0].checked = true; dRadio[idx].checked = true; } else { dy.style.display = &apos;none&apos;; }
  • Transcript of "Accessibility guide"

    1. 1. Accessibility 实施指引 产品使用无障碍 杜欢 <ul><li>Architect of F2E </li></ul><ul><li>07/05/2011 </li></ul>
    2. 3. 企业愿景 社会保障 技术实现
    3. 4. 更好的技术将有助于视觉障碍人群,和其他人更好地使用互联网。
    4. 6. 产品项目 原型设计 UE 设计 可用性 设计 项目 实施 可用性 文档 可用性 高对 比度 测试 视觉 高对 比度 设计
    5. 8. 全局设定 Tab 键的访问顺序 由上到下 由左到右
    6. 10. 细节设定 Tab 键的访问顺序 交互中的操作需要在交互面板展开后按照全局设定继续进行 交互面板中最后一个元素之后将使 Focus 回到无交互状态下的自然顺序
    7. 12. <ul><li>大于等于 1 的值将打乱文档流中的正常顺序 </li></ul><ul><li>等于 0 的值相当于没有设置,或者说将恢复到自然顺序 </li></ul><ul><li>小于 0 的值,将使得被设置的节点不再能够获得焦点 </li></ul>
    8. 14. <ul><li>所有非文本内容呈现给用户时必须提供一个可供选择的替代文本去表达这些内容 </li></ul><ul><li>所设置的替代文本必须具有语义,能够使用户清楚它所要传达的意义。 </li></ul><ul><li>每张图片都需要有替代文本: </li></ul><ul><li>1. 纯粹修饰性质的图片设置其为空 </li></ul><ul><li>2. 与语义文本相邻的图片设置其为空 </li></ul><ul><li>3. 组合图片只需为第一副图片设置替代文本,其他图片设置为空 </li></ul>
    9. 16. <ul><li>CSS background 不可用 </li></ul><ul><li>所有在 CSS 中设定的带有 background 属性都不可用 </li></ul><ul><li>白色的图片在白色系高对比度模式下无法看到,黑色的图片在黑色系高对比度模式下无法看到 </li></ul><ul><li>兼容高对比度模式的两种方式: </li></ul><ul><li>1. 添加无 background 支持时将替代文本显示的 CSS 样式 </li></ul><ul><li>2. 将部分 background 替换为 image ,将 background sprite 替换为 image sprite </li></ul>
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×