关于界面的价值观与方法论

可访问性——前端的使命(一)

23June2009

事情的缘由是,前两个礼拜打了个“飞的”去北京玩,见了一位在百度做前端的朋友。过去一年以来,这家伙就不停的在鼓动我去他们那个邪恶的公司。当然,见面之后就不能再当面称呼人家是邪恶的公司啦,所以我就找了个理由,说你们那个“百度盲道”做得太垃圾了。他当然就很虚心的问我为什么啦。所以我也只能很心虚的糊弄了几句,说回上海之后详细告诉他。

回来之后,就马上很虚心的翻出一本老旧的电子书——《Dive Into Accessibility》,认认真真的看了一遍。

然后惊奇的发现:
1. 虽然我没看过这本书,但里面讲的大部分,我平日里都有遵守。果然,坚持好习惯是值得表扬的。
2. 网页的可访问性,似乎只能由前端来重视并实现。这点挺可悲,作为可用性的一部分——可访问性,居然只能由技术人员来掌控,这是我不愿意看到的。但反过来,这给前端开发工程师们新增加了一个责任,同时为如何区分优秀的前端增加了一个指标。

好吧,下面我把这本Dive Into Accessibility的内容作一个摘要,看看对于可访问性,应该要注意哪些问题:

1. 标明语言(Identifying your language)
这一条的意思是,加上lang属性,如。如果其中有一段是其他的语言,就在那一段的标签上加lang属性。这一条我做得不好,以后记得。

2. 构建有意义的页面标题(Constructing meaningful page titles)
有几点值得一提:
a) 做页面时,千万不要忘记写title。我见过好多页面的title是“Untitled Document”或“新建页面”,丢脸啊~
b) title到底应该是“小标题”在前呢,还是“大标题”在前?现在的惯例似乎都是“小标题”在前,比如“影音娱乐首页_新浪网”。但我个人倒是有个看法,或许大标题在前比较好。这样当我把“新浪网_影音娱乐首页”、“新浪网_新闻中心首页”放入收藏夹时,它们会因为音序排序而呆在一起,而不是散乱在各处。当然这个也不一定,仅供参考。
c) 对于英文的标题,一定要注意尽量不要把The放在title的前面,否则你的网页在收藏夹里就会被排在T开头了。

3. 提供额外的导航辅助(Providing additional navigation aids)
这一条是说要加 <link rel=”home” title=”Home” href=”http://url/of/home/page” /> 这个。这个其实我知道。但是貌似对于页面里这么多链接,要都加上rel和rev属性,有点难度。

4. 先呈现主要内容(Presenting your main content first)
好啦,这就是一条典型的“指望优秀的CSS”的可访问性原则啦。把<div class=”main”>放在<div class=”side”>的前面,其实挺考验CSS技术的。一道著名的题目是:如何让侧栏固定宽度,主栏宽度自适应,同时主栏的HTML要在侧栏的前面。我很想放在我的面试题里,可又觉得是不是太刁难了。但是,无论如何,这道题目很重要!

5. 用于跳过导航栏的链接(Skipping over navigation links)
很重要!这个在骨灰级网页标准教程《网站重构》里就提到了。只是有一点我比较怀疑,如果把skip link设为display:none,难道不怕被阅读器也忽略掉么?

6. 安全的使用颜色(Using color safely)
这条其实讲了几个要点:
a) 颜色对比要够,否则眼神不好的人看起来费劲
b) 链接的颜色,最好用蓝色(像我比较喜欢用#09c)
c) 链接最好有下划线

7. 用“真链接”(Using real links)
意思是,即便这个链接是用于触发Ajax,也要把Ajax代码片段的URL放在href里,好让搜索引擎以及阅读器等等能够爬到。关于此条,请参看土豆网首页的“挖土豆”一块。

8. 给链接加“title”属性(Adding titles to links)
这个还用说么,可用性两大重点:a的title和img的alt。

呼~~~先结束这第一回合吧。如果你对可用性感兴趣,可以详细的读一下这本“Dive Into Accessibility”,尤其是前5节。然后可以再去看看那个可恶的“百度盲道”,我接下来会专门用一篇来诅咒这个忽悠障碍人士的无良黑心产品。


  1. chumsdock:

    呈现主要内容,同时宽度适应的题无非就是用负的margin去绕嘛…

    我觉得这主要还是一个经验的问题,就像背景图替换用text-indent,css-sprite这些本来非常tricky,可一旦用的人多了也就不神秘了。我感觉css 2.0的trick已经差不多给榨光了。

  2. 小麦:

    @chumsdock: 呃,好吧,我收回我觉得这道题目“太刁难”的话。。

    我其实很赞同你的话。。。

  3. velo:

    一般都用不到

  4. fireyy:

    “也要把Ajax代码片段放在href里” , 是把真实链接放到href里吧

  5. 小麦:

    @fireyy: 呃,我的错的。“把Ajax代码片段的地址放到href里”。

  6. kuku:

    b) title到底应该是“小标题”在前呢,还是“大标题”在前?

    小标题在前事为了搜索引擎优化,因为搜索引擎可能把标题截短!

  7. vincent:

    #4答案

    #main{
    float:left; width:100%;
    }
    #main .content{
    margin-right:300px; background-color:#0F3
    }
    #side{
    float:left; width:300px; margin-left:-300px; background-color:#0C9
    }

    fdsfdsfsd

    fsdfsdfdsf

    应该不算难。供大家参考。

  8. 小麦:

    @vincent: 如果要求侧栏在左侧呢?

  9. 小麦的自习教室 » 可恶的盲道:

    [...] 具体的优化措施,可以参看我之前写的“可访问性——前端的使命(一)、可访问性——前端的使命(二)、可访问性——前端的使命(三)”。 [...]

  10. vincent:

    左侧也很简单实现。如下
    #main{
    float:left; width:100%;
    }
    #main .content{
    margin-left:300px; background-color:#0F3
    }
    #side{
    float:left; width:300px; margin-left:-100%; background-color:#0C9
    }

  11. 小麦:

    @vincent: 看你写“#0F3”就知道还差点火候,再多虚心修炼一下吧。

  12. vincent:

    #0f3有什么问题?影响reflow 速度?
    还请多指教.呵呵.

  13. benhuoer:

    估计小麦觉得那颜色没有设计感。。。。

  14. 小麦:

    没,那不重要。

    重要的是,答案是不对的。

  15. skyweo:

    小麦:请教一下,这种方式是否合适——

  16. skyweo:

    刚刚评论失败,现补上答案——
    #main { margin:0 0 0 130px; }
    #side{ width:130px; position:absolute; left:0; top:0; }

  17. vincent:

    #小麦:

    答案不对?不会吧。能不能给出你的答案让大家学习下?

  18. 若比邻:

    三列如何让左右栏固定宽度,主栏宽度自适应,同时主栏先显示,且三列高度相同,小麦有好的解决方法吗,希望指点一下

  19. yiminghe:

    那本电子书真不错,原来还真有这种书 !

    @若比邻  你的要求很经典哦:
    http://www.alistapart.com/articles/holygrail
    虽然还有小问题,但是够用了