我们正在推动网络可访问性,以符合管理公共/教育机构的某些法律。到目前为止,我们一直在努力确保:
alt=""
个标签。
但很快就会知道我们需要开始考虑并真正考虑这一点。我们一直将AngularJS
视为动态网络应用程序的框架,但关注它对我们的可访问性状态可能意味着什么。
我知道没有JavaScript的浏览器可能会破坏高度动态的Angular应用程序(例如标记中嵌入的{{ item.something }}
等表达式,使用ng-repeat
从单个{{1}构建列表},客户端部分视图为空标签等。)。
我想知道是否存在一种易于理解的最佳实践或信息资源这些类型的框架,这些框架严重依赖于动态标记和内联标记,这些框架可能会被视为某些东西的胡言乱语比如屏幕阅读器甚至是关闭 JavaScript 和 CSS 的浏览器。
答案 0 :(得分:30)
所有相同的原则都适用,例如对图像使用alt文本,使用标题,对内容使用适当的HTML(5)结构。
您可能正在通过JavaScript创建它,但过去5年的屏幕阅读器了解这一点,并使用浏览器的辅助功能API来访问DOM。非JavaScript方面是simply not an accessibility issue。没有JavaScript的屏幕阅读器用户的数量与普通人群相同,因此它是完全形成的HTML,而不是您在开发中看到的原始标记。
NB:我认为渐进式增强是一种很好的方法,但是对于Angular.js,你决定不采取这种方法。如果您想了解性能和渐进增强,我认为this answered it。
当然,您不能仅使用Angular.js来创建标准内容页面,因此您需要快速了解WAI-ARIA specification和how to use ARIA in HTML。它指定了如何动态标记传统HTML实践未涵盖的内容,例如选项卡,树,网格等。
有关实际使用WAI ARIA技术的实际例子,我会看一下Whatsock technical style guide。
与传统网站相比,有一个区别是how you manage page updates,因为您管理键盘焦点而不是刷新页面。但除此之外,WAI-ARIA是值得阅读的内容。
答案 1 :(得分:7)
传统上,Angular并不鼓励开发人员编写用户界面#34;正确的方式" - 太容易创建无法访问的自定义元素指令(例如对div
进行ngClick)而且无法访问提供了支持。但是,随着Angular 1.3x和ngAria模块的发布,它已得到改进。现在,通过在您的应用程序中包含ngAria,可以自动应用某些ARIA属性,这样您就不必管理它们。
例如,ngClick
指令现在适用tabIndex="0"
和ngKeypress
(只要这些选项未被禁用),因此创建无法访问的点击事件并不容易。 ngAria也将很快添加role="button"
来传达可点击元素的目的:这可以被其他角色覆盖。有关详情,请参阅此拉取请求:https://github.com/angular/angular.js/pull/10318
ngAria可以提供帮助的另一种方法是将aria-disabled
添加到ng-disabled
的任何使用中。这样可以确保默认情况下可以访问框架禁用的自定义控件,例如:
<md-button ng-disabled="true">
使用ngAria,这将成为:
<md-button ng-disabled="true" aria-disabled="true">
有关支持的属性的完整列表,请参阅ngAria API文档:https://docs.angularjs.org/api/ngAria
ngAria将继续发展(我希望它只是一个模块而不是一个模块),但看到可访问性finally supported by the core framework真是太棒了。
我们每个人仍然需要牢记可访问性和负责任的代码,但Angular不应该再妨碍你了。 Alistair对这个问题的回答有很多资源:我肯定会参考那些关于键盘焦点管理的技巧,在HTML中使用ARIA等等。您还可以参考针对ngAria的新Angular.js开发人员指南:https://docs.angularjs.org/guide/accessibility
还有一件事:如果有人对ngAria有想法,请务必创建Github问题或提交拉取请求!这是一项由社区推动的工作。
答案 2 :(得分:3)
AngularJS和辅助功能的最大问题是:
除此之外,它只是另一个HTML应用程序。
这个Github repo有一些Angular.js指令和服务来处理其中一些问题https://github.com/dequelabs/ngA11y