Tag Archives: 可访问性

禁用脚本时显示元素——再从前端角度浅谈产品设计中的可用性和可访问性

三个月前,老鱼在其博客和支付宝UED博客中发表了浅谈产品设计中的可用性和可访问性。 文中阐述了这样一种状况,页面上有元素需要暂时隐藏以避免过多的信息对用户产生干扰。而隐藏的信息需要通过脚本的交互显示出来,以增强可用性。那么对于不启用脚本的用户,如何保证可访问性的问题。 文中提到两种方案: 实现方案1:采用css样式设置企业注册信息的容器默认为隐藏,当用户点选企业后通过js脚本改变容器的隐藏属性为显示。 实现方案2:通过脚本控制企业注册信息的容器的初始状态为隐藏,当用户点选企业后通过脚本改变容器的隐藏属性为显示。 方案一的缺点在于无视可访问性 方案二的缺点在于“要在页面结构加载完成后,再去初始化要隐藏的容器,当客户端网速不佳的情况下,会先显示企业注册信息的内容,几秒后又不见了,体验上有所折扣。” 我又在文章的一楼评论中提出了两个方案:解决了第二个方案的缺点 实现方案3:把脚本直接紧跟着需要隐藏的元素后面 实现方案4:在页面头部最开始的地方写入脚本,这个脚本用于生成隐藏元素的css代码。 方案三的缺点在于结构行为和样式的高度耦合,非常不利于维护,且易被同行耻笑。 方案四比上面略好,但同样由于行为和样式的混杂,不利于维护。 还有这位兄弟提出的 实现方案5:用脚本给body加上个class,所有需要隐藏的元素的CSS都用这个class开头,比如 .js #id{display:none;} 今日又发现新思路,利用noscript标签。这个圡圡的标签。这本来应该是最先想到的,却似乎思维被僵化了,一味从JS和CSS角度去看了,忽略了HTML本身。 实现方案6:首先使用方案一,直接用CSS隐藏元素,然后再方案一的基础上,增加noscript标签,其中的再写入CSS用来覆盖先前的CSS。(演示代码代码在本文结尾) 是的,就这么简单、这么的圡,但很有效。对于 IE 6 和 Firefox 3测试通过。Chrome上我找不到关闭脚本的选项,故未经测试。 当一切看起来这么美好的时候,放到W3C的验证里边就有麻烦了,XHTML下他说noscript不能没有object?我很晕,然后放上object后他又说style不能放在这里,只能放在head里。我换用了link也一样报错。换了html 4也没有好转。 我在XHTML的描述中没有找到相关内容 http://www.w3.org/TR/xhtml1/ 而在HTML 4.01中发现,http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.1 然后我纳闷了一下,里边并没有提到noscript里不能放style和link。进一步考据,找到http://www.w3.org/TR/html401/struct/links.html#h-12.1.3 这里提到 The LINK element may only appear in the … Continue reading

Posted in 其他 | Tagged , , , | 11 Comments