看起来很美:自定义选择框
土豆的搜索类别选择框,每次点击都让我觉得怪怪的:

1. 点击后,弹出列表的位置与预期不同。潜意识里是下拉列表,结果土豆给了我一个“中拉列表”。
2. 习惯性地用上/下键选择,结果却让整个页面滚动。
3. 一怒之下,想关闭不用了。按下 ESC 键,却没有任何响应。
4. 禁用 JS 后,完全不可用。
类似,淘宝商城也是看起来很美:

除了第 1 点,其它都和土豆一样,可访问性和可用性都存在问题。
解决办法很简单,采用原生的选择框即可,比如 Amazon 的:

为什么不鼓励在 Web 页面中使用自定义选择框呢?
Select 选择框是一个非常成熟的交互控件。成熟意味着用户很容易接受,但成熟也意味着对各种用户都考虑很周全,有着非常丰富的交互细节。比如:对 PgUp/PgDn, Home/End 等键盘操作的响应,以及在不同位置能自动调节下拉列表的弹出方向等等。
采用 JS 来模拟选择框,需要大量的工作和细致的测试。即使公司愿意投入,也依旧无法实现原生控件的某些特性。比如:上面 Amazon 的选择框,我把浏览器拉到很矮,这时下拉列表能伸出到浏览器外面去。
为了一丁点“视觉小甜点”,让交互丧失了如此多的实用细节,还得耗费前端程序员的大量时间,结果却费力不讨好,实在是很糟糕。
PS:要使用自定义选择框,得满足以下条件:
1. 像 google 一样疯狂,愿意花费大量时间和资源。
2. 像 google 一样细致,要做就做好,要模拟就模拟透。
3. 在 web app 上应用。
可惜,在国内,像 google 或 facebook 一样疯狂和细致的公司,还没出现。

July 27th, 2009 on 23:10
很遗憾,我现在正在做的页面上面还有一个“更美”的下拉
拿到手就和设计师商量是否….,直接被骂了
July 27th, 2009 on 23:17
表单元素用原生的最好,不过不够WEB的UI设计师总搞不明白,PS:技术出身的马化腾在QQ邮箱上面把控的很好。
July 27th, 2009 on 23:54
说的真是好极了。
BTW,想做自定义下拉菜单的不妨考虑下拿来主义吧。
July 28th, 2009 on 0:20
某些时候是某某风格作怪,某些时候是为了证明某某价值,易用性往往是做给鼠标熟练用户的,至于可用性很多时候被理解为网站是否被访问。中国网民基数快速增长使得某些问题暂时可以假装忽略,所以即使你做错了或者做的不好也无法在数据上看到。所以,需要靠开发人员的自觉和意识才能做到80分。
July 28th, 2009 on 7:37
美观细节+鼠标中心优化 VS 功能细节+键盘中心优化
July 28th, 2009 on 8:59
土豆这个确实很怪,但是对于完全不了解技术的用户,他们也许会觉得好这样的效果好
July 28th, 2009 on 9:47
这确实是一个矛盾,要完全模拟透,真得花不少功夫。曾经在项目中也想模拟一个出来(主要是想解决ie6的顽疾),但效果不甚理想
July 28th, 2009 on 9:49
博主,看你的博客学到很多东西,淘宝的UED真是个另人钦佩的团队,非常感谢你们无私的分享精神!
有点问题,就是你博文中很多例子的页面都失效了。 例如 http://lifesinger.org/blog/2008/11/pe-layout-2/ 这个页面里面的例子 http://lifesinger.org/lab/2008/grids_test1.html http://lifesinger.org/lab/2008/pe_layout_example5.html 等等都是失效的。
不知道博主百忙中能否告知如何找到这些示例文件?
谢谢!
July 28th, 2009 on 10:32
基本上,原生下拉框已经足够好了,如果确实要“美化”,使整体页面风格一致,还是可以尝试模拟一个细致的组件的。另外默认使用原生标签,使用js初始化/替换原始标签,这样在禁止js的时候也不至于产生交互问题。
另外我个人比较偏好“中拉框”,点击后,当前选中项和中拉框的位置重合,这样通过鼠标/键盘快捷键可以更快的到达目标项。
p.s. 我觉得细致的应该是员工,而不是公司。员工细致了,公司就会细致。
July 28th, 2009 on 11:23
@yadan: 不好意思。blog 空间迁移了好几次,导致很多链接失效了。lab 目录,可以到这里查看:http://lifesinger.googlecode.com/svn/trunk/lab/
@闲耕:原生下拉框,展开时也会自动将焦点定位到选中项,操作上,并没有比“中拉列表”麻烦。“中拉列表”对用户习惯是个挑战,个人觉得不值得。
细致的问题,能从下到上,自然是好的。但大部分项目,给前端预留的时间都是非常紧迫,根本没有时间和精力去做到“细致”。这需要我们自身的努力,但也需要公司层面的认可。相对而言,以技术为导向的公司会比较认可以及容易做到技术上的细致。
July 28th, 2009 on 11:25
原生的下拉框主要问题是样式不能自定义,而且不同的浏览器显示效果差异也比较大。在IE6下面还有遮挡弹出层的BUG。
July 28th, 2009 on 12:29
这篇文章我太喜欢了。。
其实土豆的下拉框还不是最糟的,本世纪内最糟糕的下拉框,我个人认为:非优酷莫属
这个下拉框,我已经向youku投诉过两次了。。
July 28th, 2009 on 14:45
细节决定一切,模仿这两个字的最终还是模仿….
July 28th, 2009 on 17:39
关键 google 这块也不放在中国做,
July 28th, 2009 on 18:53
观察的很细致
的确像Google这样把一个按钮都研究那么细致的公司的确很少
我觉得在国内阿里巴巴家族不做这些研究,也没什么公司会去做的
July 28th, 2009 on 19:00
不过你看看amazon.com导航左边的shop all departments 下拉,一样是无法用up/down,esc
July 28th, 2009 on 20:31
呃, 我觉得使用自定义下拉框, 还有一个重要原因忘说了.. 就是为了避免IE6的select元素bug问题… (这次改版中对这个问题很是头痛!)
July 28th, 2009 on 23:35
不错…
July 29th, 2009 on 14:55
下拉框是一个特殊的元素。
我们公司是采用input,然后点击后直接变成select,晕,我也不知道是谁想的。比较别扭。
July 29th, 2009 on 17:28
当然有时候模拟下拉框确实给人很和谐很整体美的感觉,谁让默认的不让定义样式呢,试想有多少用户点击弹出下拉框会知晓按Esc取消?多少用户点击了下拉框然后松开鼠标用键盘上/下 来操作?
不过为了实现模拟下拉框而造成的时间成本上的损失确实是不太值当啊。
July 30th, 2009 on 11:40
国内网民中使用快捷键的毕竟是少数计算机从业人员,在面对统一风格和所谓美观等等问题的抉择上需要有所妥协,不同的角色取舍也不一样,我们只是站在前端开发的角度来看这个问题。不过如果做了,在条件允许的情况下应该做到尽量细致。
July 30th, 2009 on 12:51
这些看起来很美的东西,不做也许就是挑战设计师的权威,就是不注重细节,很难搞的事情
July 31st, 2009 on 9:03
使用符合渐进式增强实践且支持ARIA的组件就可以解决这个问题。PE是现在JQuery UI组件支持的非常好的,也是未来众多Widget组件库需要追赶的。http://www.filamentgroup.com/lab/jquery_ui_selectmenu_an_aria_accessible_plugin_for_styling_a_html_select/
August 2nd, 2009 on 22:28
有道理,不过似乎说得又有点绝对了。
August 3rd, 2009 on 13:24
我觉得LZ太把自己当用户了。
你要知道有很多很多的用户基本是技术白痴的,有多少人会和LZ你一样,点下拉后去用键盘来选择?还要按ESC去关闭?
我就见过一个连TAB都不会用的人,填个表单要用鼠标一下一下的填,够白痴的吧,但是我肯定这样的不少。
再然后模拟下拉框不单可以解决IE6的那个BUG,在样式上也可以做到统一,视觉效果也好看。
不过模拟始还是模拟,在某方面上的细节确实是没原生的好。至于那些细节重不重要,需要的用户人群多不多另当别论。只是LZ提出的那几点论据远远不够说明模拟下拉的不好。
August 20th, 2009 on 17:23
非常同意这个观点,默认的下拉列表很强大,我们就不要在这个强大的基础上再自作主张的修改什么
September 8th, 2009 on 14:27
感觉未来还是模拟得到天下,模拟存在就势必有存在的理由,有理由就有发展的机会!
September 13th, 2009 on 16:02
twitter的可访问性也非常高,即便禁用了JS,也是完全可以使用的。
October 10th, 2009 on 12:34
技术是用来赚钱的,你这傻B,一辈子研究这个,也买不起一辆宝马。
October 10th, 2009 on 16:42
@xiaoxiao: 靠细节上的努力,我其实已经赚了一辆宝马。
October 26th, 2009 on 15:52
@xiaoxiao:你这话说的也太过激了,我是觉得现在很多公司和技术人员都缺泛这种细节研究的精神,总是觉得能用就行。
December 9th, 2009 on 11:19
受益匪浅
April 8th, 2010 on 23:22
感谢lz的分享,今天第一次来你的博就被吸引了,翻了好多页,细读了不少日志,收获很大。谢谢@
July 25th, 2010 on 19:41
Good
leave a reply