<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>笨活儿 &#187; Web技术</title> <atom:link href="http://blog.benhuoer.com/category/web-technology/feed" rel="self" type="application/rss+xml" /><link>http://blog.benhuoer.com</link> <description>请用力生活</description> <lastBuildDate>Mon, 02 Jan 2012 16:05:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>浅谈前端新人的职业规划</title><link>http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html</link> <comments>http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html#comments</comments> <pubDate>Sun, 06 Dec 2009 14:56:17 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[前端开发]]></category> <category><![CDATA[生活琐碎]]></category> <category><![CDATA[职业规划]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1858</guid> <description><![CDATA[拿到淘宝offer已经有一段时间，西湖、百淘、D2、实习、各位前端牛人的亲身指导，美好的生活正向我招手。本来决定12月7号报道，但因为一些不可抗力，行程有变（事实上能否进入淘宝工作尚有变数）。在这焦急的等待过程中，还是静下心来，整理一下最近关于职业规划方面的诸多思考，希望能对和我一样的前端新人们有所帮助。 淘宝一面时，与一舟的谈话中很大一部分内容和自己的职业规划有关，二面时也和小马谈及许多关于前端未来的东西。后来试玩Google Wave，又心血来潮发起了一个《重构是否有必要单独作为一项职业》的问题。我承认，这个问题很讨打，尤其是对“重构界”的各位大大来说。想来也真是好笑，我实在太小心眼儿了，当初还在庆幸腾讯有一个专门的页面重构职位（因为我编程基础很差，只会CSS），被他们鄙视后，发觉了这职位其实大有学问，反而开始怀疑起它的必要性来。不过这个不是重点，重点是在这个怀疑的过程中，我对自己在前端领域该如何发展，有了更为理性和系统的认识。 前端新人哪里来？ 我想相对于其他技术职位来说，前端算是最不挨踢的IT职位了。我注意到很多校招进来的“页面重构师”、“前端开发工程师”等等都是非计算机相关专业的（像我，木材科学&#8230;. 扯蛋~）。这当然是因为互联网行业吸引人以及html和CSS入门起点低，大学里尚能全民考C（计算机二级），全民做网页有什么不可以？而且，因为职位所处位置的交叉性，注定有很多前端人员是转行而来： 1. 设计师转前端 这个最常见。小公司里的“美工”至今还干着这样的工作 —— 出图（Photoshop） -&#62; 切图（HTML/CSS）。我本人也是因为帮我姐（设计师+代码盲）切图才踏上前端这个道路的。搞设计出身的前端有一个优势是能更好地把握设计稿的表现重点，对于某些视觉设计师不合规范的操作能轻松地化解。劣势也很明显，缺乏数理基础，写出的代码不够严谨，JavaScript基础也普遍较差，不能做真正的“前端开发”。 2. 后台程序员转前端 淘宝的第一位前端工程师本身是写Java的，今年校招也有一位同学面Java结果被推到前端然后被录取的（哇，复杂的中文句式）。之所以现在前端有很多非计算机专业的人，还有一大原因是学计算机的都“不屑于”来搞前端。你说学四年计算机，结果跑去切图写CSS，丢不丢人？所以从后台转战前端的，一般也要去搞所谓的Web Apps，基于Ajax和各种复杂架构的Web运用。而这一技术方向，其实才是前端的大势所趋（下文再议）。 3. 网虫转前端 现在很多小孩，特喜欢上网，老打游戏也没意思，所以想学点互联网相关的东西，首选自然是前端了！（因为简单嘛。）有兴趣搞这些的90后，个个成了全才：Photoshop能玩，CSS能玩，php也能玩…… 包括奶瓶嘴作者在内的几位Twitter名人就是其中的典型…… 作为“互联网重度用户”，有一大优势，那就是对网页结构、交互需求的直观理解，懂得网民需要些什么，写出的程序也往往有更佳的易用性。当然，易用性要靠所谓“交互设计师”，不过，交互设计不也是前端的一部分么？ 此外，还有很多在实践中成长起来的站长，也还是有一定的“前端修养”。可能他们最初就只是想搞几个站玩玩，在不断建站的过程中学到一些前端技术。有些人在前端方面精专下去，有些人则持续地做着重复性的工作或一直坐吃山空。此是题外话，不表。 前端新人何处去？ 从不同渠道接触前端的同学自然会走不同的道路，而前端作为联系服务器数据与用户的纽带，作为视觉设计与程序逻辑的碾钵，也发散出很多不同的分支。 面试前准备自我介绍时我写过一些要点（后来因为紧张没有用上）： 我认为平常做网页时，我能获得的心理满足包括： 设计中的美学体验 同时作为用户和设计师，完成一项交互产品时的参与感 coding时的逻辑性对自己的锻炼 debugging完成后的成就感 这其实大致描述了在前端领域可能面对的挑战——视觉，交互，前端开发。这也正是大部分互联网公司UED部门的职位划分。平常所说的前端，一般指狭义的“前端开发”，此文标题里所说的“前端新人”，也是指作为程序员的各位刚入行的前端开发者。程序员有什么成长轨迹，前端新人自然也八九不离十——一日千行代码，钻研细节成为技术大拿，自写程序贡献开源社区，出书立著；学习管理经验，负责团队项目架构，跳槽或创业，当老板赚大钱…… 有一些搞前端的同学，投身这个职位时并没有意识到自己是名程序员（说实话，我本人现在对“程序员”这个称谓的认同感也不强）。他们进入这个行业的初期，就是一“做网页的”，或出于个人兴趣，或出于工作需求（传奇的网络工作部），可以说是在一种“全民有个站”的浪潮中成长起来的。他们什么都会一点儿，设计、交互、SEO、站点架构，都是在潜移默化中进行着无意识实践（或有意识的浅实践）。而一旦决定把“做网页”当做自己赖以谋生的职业，这样模糊的定位肯定行不通了。你要自信地对自己说：“其实，我是一名前端工程师（or 交互设计师 / 视觉设计师）。” 不然你就只能吃青春饭，干一些“笨活儿”，走不出一条可持续发展之路。 避免成为“死做网页的” 如果你一定要说我是做网页的，可不可以不要在前面加‘死’字。 个人觉得，现在搞前端的确是要什么都会，什么都要了解。在这种“大前端”的趋势下，先有一个明确的目标职业比较重要。你是更爱设计还是代码？亦或者用户研究更对你味？小公司（小项目）里没有那么明确的职能划分，要求你什么都会，这无可厚非，而且对你的成长很有帮助。但做到一定程度，确立一个能力重点，是十分有必要的。 拿“前端开发”这一块来说，有重视视觉的展示类站点，有重视交互的应用型站点，前端开发也自然地划分出两个方向—— 普通应用和RIA。普通应用只需单纯的psd2html，把psd文件转化成html。而RIA则需要和“广义前端”的各个部门分工协作，同时又兼具较高的程序员素养（算法、逻辑严密性，etc&#8230;）。话说回来，psd转html的过程也大有学问，很多CSS tricks让人抓狂，页面重构的细节多多，而且别忘了，它还是RIA的前期准备。考虑到将来Web应用的复杂性（交互越傻瓜化，支撑交互的脚本就越复杂），互联网产品的迭代周期越来越短，分工合作乃大势所趋。要避免成为“死做网页的”，就要理解这个“分工”与“合作”的过程，并在某一方面有所精专（要么CSS，要么JS，要么Flash），同时不断学习其他相关技能。 在这一点上，我坚持着两个信条： 不轻易重复自己 不断学习 不论做设计还是写代码，我都不喜欢重复自己。新鲜的布局往往让我激动万分。只要看到新的技巧，就要在下一个项目里亲自实践。这也是为什么我只做过五六个站（一些小练习不算），却能面上淘宝的原因（好吧，其实是因为运气，哈哈）。 而怎么选择自己的能力重点，也是一个问题。在面试前，我如此帮自己分析： 平时做整套网页，前端coding所花时间最多。项目需求、学习条件所限，导致我在网页视觉设计和交互设计上的学习，不及前端开发深入，可能还不能满足融入一个大公司团队的需求。而且前两者需要很强的沟通能力，相对来说，写代码的活儿独立性更强，应该更适合我一些。 现在想来也不无道理，但随着工作的深入，自身能力的提高，兴趣点发生转移也不是不可能。总之，无论如何选择职业，都以能实现自己已有长处，同时不埋没自己的潜能为准。 追随职业的发展需求 互联网瞬息万变，前端行业发展喜人，Web 2.0网站风光无限，同时也给从业者提出很多新的要求。而你跟随时代的脚步有多紧，很大程度上决定了你将来会有多成功。前端开发这一职位，将来会怎么发展；如果还有新人转过来，会是程序员们更适合，还是设计师们更适合？把这个问题想通了，也就预知了前端的未来。 HTML5/CSS3会带来什么？ HTML5新增了很多方便富应用的标签，CSS3新增了很多方便视觉设计的属性，这即能简化开发，也提供了功能实现上的更多可能。更强大的Web应用，更灵活而方便的构建方式，更需要前端人员具有“大前端”的思维。是理性的程序员更容易大起来，还是感性的设计师更容易呢？ [...]<div
class="related-post"> 咱再换个话题？&rarr;&nbsp;《<a
href="http://blog.benhuoer.com/posts/something-about-douban.html" rel="bookmark">豆瓣二三事</a>》</div> ]]></description> <content:encoded><![CDATA[<p>拿到淘宝offer已经有一段时间，西湖、<a
href="http://ued.taobao.com/blog/2008/05/16/baitao26/" target="_blank">百淘</a>、<a
href="http://www.d2forum.org" target="_blank">D2</a>、实习、各位前端牛人的亲身指导，美好的生活正向我招手。本来决定12月7号报道，但因为一些不可抗力，行程有变（事实上能否进入淘宝工作尚有变数）。在这焦急的等待过程中，还是静下心来，整理一下最近关于职业规划方面的诸多思考，希望能对和我一样的<strong>前端新人</strong>们有所帮助。</p><p>淘宝一面时，与一舟的谈话中很大一部分内容和自己的职业规划有关，二面时也和<a
href="http://ued.taobao.com/blog/author/zhaozexin/" target="_blank">小马</a>谈及许多关于前端未来的东西。后来试玩Google Wave，又心血来潮发起了一个《<a
href="https://wave.google.com/wave/#restored:wave:googlewave.com!w%252BXkAj6LwSP" target="_self">重构是否有必要单独作为一项职业</a>》的问题。我承认，这个问题很讨打，尤其是对“重构界”的各位大大来说。想来也真是好笑，我实在太小心眼儿了，当初还在庆幸腾讯有一个专门的<strong>页面重构</strong>职位（因为我编程基础很差，只会CSS），被他们鄙视后，发觉了这职位其实大有学问，反而开始怀疑起它的必要性来。不过这个不是重点，重点是在这个怀疑的过程中，我对自己在前端领域该如何发展，有了更为理性和系统的认识。<br
/> <span
id="more-1858"></span></p><h3>前端新人哪里来？</h3><p>我想相对于其他技术职位来说，前端算是<strong>最不挨踢的IT职位</strong>了。我注意到很多校招进来的“页面重构师”、“前端开发工程师”等等都是非计算机相关专业的（像我，木材科学&#8230;. 扯蛋~）。这当然是因为互联网行业吸引人以及html和CSS入门起点低，大学里尚能全民考C（计算机二级），全民做网页有什么不可以？而且，因为职位所处位置的交叉性，注定有很多前端人员是转行而来：</p><h4>1. 设计师转前端</h4><p>这个最常见。小公司里的“美工”至今还干着这样的工作 —— 出图（Photoshop） -&gt; 切图（HTML/CSS）。我本人也是因为帮我姐（设计师+代码盲）切图才踏上前端这个道路的。搞设计出身的前端有一个优势是能更好地把握设计稿的表现重点，对于某些视觉设计师不合规范的操作能轻松地化解。劣势也很明显，缺乏数理基础，写出的代码不够严谨，JavaScript基础也普遍较差，不能做真正的“前端<strong>开发</strong>”。</p><h4>2. 后台程序员转前端</h4><p>淘宝的第一位前端工程师本身是写Java的，今年校招也有一位同学面Java结果被推到前端然后被录取的（哇，复杂的中文句式）。之所以现在前端有很多非计算机专业的人，还有一大原因是学计算机的都“不屑于”来搞前端。你说学四年计算机，结果跑去切图写CSS，丢不丢人？所以从后台转战前端的，一般也要去搞所谓的Web Apps，基于Ajax和各种复杂架构的Web运用。而这一技术方向，其实才是前端的大势所趋（下文再议）。</p><h4>3. 网虫转前端</h4><p>现在很多小孩，特喜欢上网，老打游戏也没意思，所以想学点互联网相关的东西，首选自然是前端了！（因为简单嘛。）有兴趣搞这些的90后，个个成了全才：Photoshop能玩，CSS能玩，php也能玩…… 包括奶瓶嘴作者在内的几位Twitter名人就是其中的典型…… 作为“互联网重度用户”，有一大优势，那就是对网页结构、交互需求的直观理解，懂得网民需要些什么，写出的程序也往往有更佳的易用性。当然，易用性要靠所谓“交互设计师”，不过，交互设计不也是前端的一部分么？</p><p>此外，还有很多在实践中成长起来的站长，也还是有一定的“前端修养”。可能他们最初就只是想搞几个站玩玩，在不断建站的过程中学到一些前端技术。有些人在前端方面精专下去，有些人则持续地做着重复性的工作或一直坐吃山空。此是题外话，不表。</p><h3>前端新人何处去？</h3><p>从不同渠道接触前端的同学自然会走不同的道路，而前端作为联系服务器数据与用户的纽带，作为视觉设计与程序逻辑的碾钵，也发散出很多不同的分支。</p><p>面试前准备自我介绍时我写过一些要点（后来因为紧张没有用上）：</p><blockquote><p>我认为平常做网页时，我能获得的心理满足包括：</p><ol><li>设计中的美学体验</li><li>同时作为用户和设计师，完成一项交互产品时的参与感</li><li>coding时的逻辑性对自己的锻炼</li><li>debugging完成后的成就感</li></ol></blockquote><p>这其实大致描述了在前端领域可能面对的挑战——视觉，交互，前端开发。这也正是大部分互联网公司UED部门的职位划分。平常所说的前端，一般指狭义的“前端开发”，此文标题里所说的“前端新人”，也是指<a
title="《关于前端开发这份工作》- 土豆网 小麦" href="http://www.mikkolee.com/261" target="_blank"><strong>作为程序员</strong></a>的各位刚入行的前端开发者。程序员有什么成长轨迹，前端新人自然也八九不离十——一日千行代码，钻研细节成为技术大拿，自写程序贡献开源社区，出书立著；学习管理经验，负责团队项目架构，跳槽或创业，当老板赚大钱……</p><p>有一些搞前端的同学，投身这个职位时并没有意识到自己是名程序员（说实话，我本人现在对“程序员”这个称谓的认同感也不强）。他们进入这个行业的初期，就是一“<strong>做网页的</strong>”，或出于个人兴趣，或出于工作需求（传奇的<em>网络工作部</em>），可以说是在一种“全民有个站”的浪潮中成长起来的。他们什么都会一点儿，设计、交互、SEO、站点架构，都是在潜移默化中进行着无意识实践（或有意识的<strong>浅</strong>实践）。而一旦决定把“做网页”当做自己赖以谋生的职业，这样模糊的定位肯定行不通了。你要自信地对自己说：“其实，我是一名<strong>前端工程师</strong>（or 交互设计师 / 视觉设计师）。” 不然你就只能吃青春饭，干一些“笨活儿”，走不出一条可持续发展之路。</p><h4>避免成为“死做网页的”</h4><blockquote><p>如果你一定要说我是做网页的，可不可以不要在前面加‘死’字。</p></blockquote><p>个人觉得，现在搞前端的确是要什么都会，什么都要了解。在这种“<strong>大前端</strong>”的趋势下，先有一个明确的目标职业比较重要。你是更爱设计还是代码？亦或者用户研究更对你味？小公司（小项目）里没有那么明确的职能划分，要求你什么都会，这无可厚非，而且对你的成长很有帮助。但做到一定程度，<strong>确立一个能力重点</strong>，是十分有必要的。</p><p>拿“前端开发”这一块来说，有重视视觉的<strong>展示类站点</strong>，有重视交互的<strong>应用型站点</strong>，前端开发也自然地划分出两个方向—— 普通应用和<a
title="维基百科对“RIA”的定义" href="http://zh.wikipedia.org/zh-cn/RIA" target="_self">RIA</a>。普通应用只需单纯的<a
title="把psd转化成html文件" href="http://www.psd2html.com/" target="_blank">psd2html</a>，把psd文件转化成html。而RIA则需要和“广义前端”的各个部门分工协作，同时又兼具较高的程序员素养（算法、逻辑严密性，etc&#8230;）。话说回来，psd转html的过程也大有学问，很多CSS tricks<a
href="http://www.99css.com/?p=206" target="_blank">让人抓狂</a>，页面重构的细节多多，而且别忘了，它还是RIA的前期准备。考虑到将来Web应用的复杂性（交互越傻瓜化，支撑交互的脚本就越复杂），互联网产品的迭代周期越来越短，分工合作乃大势所趋。<strong>要避免成为“死做网页的”，就要理解这个“分工”与“合作”的过程，并在某一方面有所精专（要么CSS，要么JS，要么Flash），同时不断学习其他相关技能。</strong></p><p>在这一点上，我坚持着两个信条：</p><ol><li>不轻易重复自己</li><li>不断学习</li></ol><p>不论做设计还是写代码，我都不喜欢重复自己。新鲜的布局往往让我激动万分。只要看到新的技巧，就要在下一个项目里亲自实践。这也是为什么我只做过五六个站（一些小练习不算），却能面上淘宝的原因（好吧，其实是因为运气，哈哈）。</p><p>而怎么选择自己的能力重点，也是一个问题。在面试前，我如此帮自己分析：</p><blockquote><p>平时做整套网页，前端coding所花时间最多。项目需求、学习条件所限，导致我在网页视觉设计和交互设计上的学习，不及前端开发深入，可能还不能满足融入一个大公司团队的需求。而且前两者需要很强的沟通能力，相对来说，写代码的活儿独立性更强，应该更适合我一些。</p></blockquote><p>现在想来也不无道理，但随着工作的深入，自身能力的提高，兴趣点发生转移也不是不可能。总之，无论如何选择职业，都以<strong>能实现自己已有长处，同时不埋没自己的潜能</strong>为准。</p><h3>追随职业的发展需求</h3><p>互联网瞬息万变，前端行业发展喜人，Web 2.0网站风光无限，同时也给从业者提出很多新的要求。而你跟随时代的脚步有多紧，很大程度上决定了你将来会有多成功。<strong>前端开发</strong>这一职位，将来会怎么发展；如果还有新人转过来，会是程序员们更适合，还是设计师们更适合？把这个问题想通了，也就预知了前端的未来。</p><h4>HTML5/CSS3会带来什么？</h4><p><a
href="http://blog.benhuoer.com/tag/html5" target="_blank">HTML5</a>新增了很多方便富应用的标签，CSS3新增了很多方便视觉设计的属性，这即能简化开发，也提供了功能实现上的更多可能。更强大的Web应用，更灵活而方便的构建方式，更需要前端人员具有“大前端”的思维。是理性的程序员更容易<strong>大</strong>起来，还是感性的设计师更容易呢？</p><h4>IE6什么时候能死？</h4><p>浏览器兼容一直是前端开发的重中之重。既是最费时也最无趣的部分，也是需要前端开发作为独立职位的一大原因。既有人抱怨“<a
href="http://blog.benhuoer.com/posts/ie6-must-die.html" target="_blank">IE6去死吧！</a>”，也有人说“IE6死了，我们就没工作啦”（当然，后者目光比较短浅）。IE6已经活了整整10年，上个月淘宝的访客还有70%是IE6用户。IE6一日不死，HTML5/CSS3这些新东西就一日不能全面部署。</p><p>不过，IE6生命力再顽强，它总归是会死的（浏览器标准会越发统一）。是否能把握先机，决定了你将来的竞争力。</p><h4>跨平台，跨设备的前端</h4><p>互联网前所未有地慎入移动设备。君不见，<a
href="http://space.tv.cctv.com/page/PAGE1258358922938572" target="_blank">手机黄祸</a>的影响力已经大道让家长们个个如坐针毡。作为前端开发人员，这些社会问题我们无力过问，但我们至少能看出，手机等移动设备上的开发潜力是非常大的。淘宝已经新成立了无限事业部，联通“<a
href="http://v.youku.com/v_show/id_XMTMyNjk0MjA4.html" target="_blank">iPhone拥有各种应用程序</a>”的广告铺天盖地袭来，你还在等什么呢？</p><h4>前端和后台同质化，交互与视觉何去何从？</h4><p>所谓Web App被大力提倡，很多前端程序已经比某些后台程序还要复杂。当你投身于复杂的JavaScript海洋时，心中对交互和视觉还能保有多少敬畏？嗯，这个问题比较悬了，还待我真的能写得出复杂程序时再议。</p><h4>安全、性能，你不可不知之事</h4><p>这些东西，就是“专业”和“半罐水”的区别。互联网上有很多渠道可以接触这些新热点，我不再赘言。</p><h4>算法，Geek的乐趣</h4><p>JavaScript游戏，JavaScript绘图，酷炫的ActionScript动画，你能写出来几个？</p><h3>你的意见呢？</h3><p>我是不想再在前端方面干“笨活儿”了，所以我打算把技术文章都转移到 <a
title="千吨泥的前端博客" href="http://blog.ktmud.com/" target="_blank">亲泥巴 &#8211; Kiss The Mud</a> ，本文将是笨活儿博客上最后一篇前端技术相关的文章。各位大大，各位新人们，你对这个问题有什么看法？想听听你的意见。</p><div
class="related-post"><p>咱再换个话题？&rarr;&nbsp;《<a
href="http://blog.benhuoer.com/posts/bgt-liam-mcnally-audition.html" rel="bookmark">[英国达人/BGT]天才少年再现Liam McNally</a>》</p></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-apps-development" title="查看 前端开发 中的全部文章" rel="category tag">前端开发</a>, <a
href="http://blog.benhuoer.com/category/personal-life" title="查看 生活琐碎 中的全部文章" rel="category tag">生活琐碎</a>        标签: <a
href="http://blog.benhuoer.com/tag/%e5%89%8d%e7%ab%af%e5%bc%80%e5%8f%91" rel="tag">前端开发</a>, <a
href="http://blog.benhuoer.com/tag/%e8%81%8c%e4%b8%9a%e8%a7%84%e5%88%92" rel="tag">职业规划</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html#comments" target="_blank">已经有23条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html&title=浅谈前端新人的职业规划&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/career-plans-of-front-end-newbies.html/feed</wfw:commentRss> <slash:comments>23</slash:comments> </item> <item><title>淘宝开源编辑器KISSY Editor试用报告</title><link>http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html</link> <comments>http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html#comments</comments> <pubDate>Thu, 29 Oct 2009 11:57:57 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[前端开发]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[RTE]]></category> <category><![CDATA[淘宝]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1834</guid> <description><![CDATA[前几天淘宝发布了自己的富文本编辑器KISSY Editor，主要开发者是TaobaoUED的前端工程师玉伯，网上的可视化富文本编辑器众多，本人前段时间也因为要做一个论坛，尝试过在网页中整合这些已有的编辑器（因为自己实在写不出来啊…… =.= ）。网上已有的编辑器基本试了个遍，最后选定了人人网的实现方式——自写插件整合TinyMCE。不仅参考了他们的源代码，而且很无耻地盗链了xnimg.cn上的 js 文件（示例 发布后又发现了一些bug，还没来得及修正）。咳咳，只是学习学习而已，还望淫淫的同学不要来追究我的责任。 作为行业标杆的淘宝前端放出自己的开源编辑器，当然要关注一下。 首先简要评价一下我用过的一些编辑器（比较八卦，技术牛人请自动跳过）： CKEditor 以前的FCKEditor，最老牌的JavaScript RTE之一，换名字后的新网站很漂亮，但是皮肤比较丑，所以我自己做站肯定不会用他。目前在用CKEditor或FCKEditor的网站包括译言、cnBeta、百度空间等&#8230; TinyMCE 界面很优雅，最出名的应用就是WordPress后台的文章编辑页面了&#8230; 文档完善，自定义插件也相当容易。这大概也是人人网选用TinyMCE的一大原因。 Google Docs的编辑器 岂可用“强大”二字形容。必须说“很好很强大”&#8230;. 不过我辈只有观瞻的分，人家没有开源，开了源你也用不上&#8230; QQ邮箱的编辑器 小巧而强大，但用户体验欠佳。而且英文版的时候，在Firefox下是一塌糊涂……（不知道现在修正过来没有） QQ空间的编辑器 一些交互细节值得称道，但可用性不敢恭维。 搜狐白社会的编辑器 简单的功能造就了迅猛的加载速度。icon有点丑。=.= Discuz的编辑器 完全就是一个怪物。 此外，还有NicEdit、openwysiwyg等独立js编辑器，和一些基于类库的编辑器。jQuery有jwysiwyg (读作/dʒei&#8217;wiziwig/)，YUI有YUI RTE，mootools也有wysiwyg插件，不过好像都缺少后续更新。还是TinyMCE和CKEditor比较活跃啊~ 淘宝此次发布的编辑器，基于YUI构建，而且是YUI 2.x，诚如“摇滚肉包子”所言，这多多少少会给编辑器的推广带来一些阻碍。但到底好不好用呢？还是试过之后才知道： 1. 界面 现在这款皮肤，和Google Docs很接近，字体颜色拾取器也是借鉴了Google Docs，很好用。总体来说清新舒爽，不油不腻，简洁实用&#8230;  不过不太喜欢字体下拉菜单的蓝色： 这是绝对的链接色。这种菜单，用黑色就很好： （弹出层和按钮左侧有两个像素的距离，我不知道作者是不是故意不对齐的。） 期待淘宝UED的视觉设计达人们能加入到后续版本的开发中，设计出一套更加漂亮的皮肤来。感觉淘宝整站的这种“外凸渐变”实在太多了，不够elegant&#8230; 据说插入链接/图片的浮动层样式参考了搜狐白社会，十分紧凑，适合这种小巧的社区发帖编辑器。 2. 功能 目前只实现了一些常用的编辑器功能，字体样式、图片和链接插入、缩进和对齐等。没有清除样式的按钮，直接添加标题（h1~h6）、引用（blockquote）等语义化标签的按钮也没有，从Word中复制内容得到的html源码也十分混乱。不过通过查看js源码，可以看出作者预留了很多接口，底层代码也算是博采众长，插件和皮肤和的自定义还算方便。 作者透露的开发计划是： 紧接着的二期里，将进一步完善基础架构和插件体系，并提供 Undo/Redo, 插入Flash, 表格编辑和预置模板等功能。 另外一些细节，比如说插入图片时URL没有基本的正则验证，当没有p标签包裹时按回车键只会出现br换行，字体的样式和颜色是使用的font标签来设置，等等…… 可能会让一些细节控/语义控觉得受不了。 更多bug和改进建议可以参考updates list。（话说淘宝影响力就是大啊，发布不过一周，提交的bug已经近80个了&#8230;） 3. [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>前几天淘宝发布了自己的富文本编辑器<a
href="http://ued.taobao.com/blog/2009/10/26/kissy-editor/" target="_blank">KISSY Editor</a>，主要开发者是<a
href="http://ued.taobao.com" target="_blank">TaobaoUED</a>的前端工程师<a
href="http://lifesinger.org/" target="_blank">玉伯</a>，网上的可视化富文本编辑器众多，本人前段时间也因为要做一个论坛，尝试过在网页中整合这些已有的编辑器（因为自己实在写不出来啊…… =.= ）。网上已有的编辑器基本试了个遍，最后选定了人人网的实现方式——自写插件整合TinyMCE。不仅参考了他们的源代码，而且很无耻地盗链了xnimg.cn上的 js 文件（<a
href="http://dididadi.com/post.php?action=newthread&amp;fid=8&amp;editmode=1" target="_blank">示例</a> <em>发布后又发现了一些bug，还没来得及修正</em>）。咳咳，只是学习学习而已，还望淫淫的同学不要来追究我的责任。</p><p>作为行业标杆的淘宝前端放出自己的开源编辑器，当然要关注一下。<span
id="more-1834"></span></p><p>首先简要评价一下我用过的一些编辑器（比较八卦，技术牛人请<a
href="#skip001">自动跳过</a>）：</p><ol><li><a
href="http://ckeditor.com/" target="_self">CKEditor</a> 以前的FCKEditor，最老牌的JavaScript RTE之一，换名字后的新网站很漂亮，但是皮肤比较丑，所以我自己做站肯定不会用他。目前在用CKEditor或FCKEditor的网站包括译言、cnBeta、百度空间等&#8230;</li><li><a
href="http://tinymce.moxiecode.com/" target="_blank">TinyMCE</a> 界面很优雅，最出名的应用就是WordPress后台的文章编辑页面了&#8230; 文档完善，自定义插件也相当容易。这大概也是人人网选用TinyMCE的一大原因。</li><li><a
href="https://docs.google.com">Google Docs的编辑器</a> 岂可用“强大”二字形容。必须说“很好很强大”&#8230;. 不过我辈只有观瞻的分，人家没有开源，开了源你也用不上&#8230;</li><li><a
href="http://mail.qq.com">QQ邮箱的编辑器</a> 小巧而强大，但用户体验欠佳。而且英文版的时候，在Firefox下是一塌糊涂……（不知道现在修正过来没有）</li><li><a
href="http://qzone.qq.com">QQ空间的编辑器</a> 一些交互细节值得称道，但可用性不敢恭维。</li><li><a
href="http://bai.sohu.com/app/blog/entry/edit.do" target="_self">搜狐白社会的编辑器</a> 简单的功能造就了迅猛的加载速度。icon有点丑。=.=</li><li><a
href="http://www.discuz.net">Discuz的编辑器</a> 完全就是一个怪物。</li></ol><p>此外，还有<a
href="http://nicedit.com/demos.php" target="_blank">NicEdit</a>、<a
href="http://www.openwebware.com/wysiwyg/demo.shtml" target="_self">openwysiwyg</a>等独立js编辑器，和一些基于类库的编辑器。jQuery有<a
href="http://code.google.com/p/jwysiwyg/" target="_blank">jwysiwyg</a> (读作/dʒei&#8217;wiziwig/)，YUI有<a
href="http://developer.yahoo.com/yui/editor/" target="_self">YUI RTE</a>，mootools也有<a
href="http://www.efectorelativo.net/laboratory/wysiwyg/" target="_blank">wysiwyg</a>插件，不过好像都缺少后续更新。还是TinyMCE和CKEditor比较活跃啊~</p><p><a
name="skip001"></a><br
/> 淘宝此次发布的编辑器，基于YUI构建，而且是YUI 2.x，诚如“摇滚肉包子”<a
href="http://ued.taobao.com/blog/2009/10/26/kissy-editor/#comment-52888" target="_blank">所言</a>，这多多少少会给编辑器的推广带来一些阻碍。但到底好不好用呢？还是试过之后才知道：</p><h3>1. 界面</h3><p>现在这款皮肤，和Google Docs很接近，字体颜色拾取器也是借鉴了Google Docs，很好用。总体来说清新舒爽，不油不腻，简洁实用&#8230;  不过不太喜欢字体下拉菜单的蓝色：</p><p><a
rel="attachment wp-att-1836" href="http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html/kissy01"><img
class="size-full wp-image-1836 alignnone" title="kissy01" src="http://blog.benhuoer.com/wp-content/uploads/2009/10/kissy01.png" alt="kissy01" width="301" height="274" /></a></p><p>这是绝对的链接色。这种菜单，<strong>用黑色就很好</strong>：</p><p><a
rel="attachment wp-att-1837" href="http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html/kissy02"><img
class="size-full wp-image-1837 alignnone" title="kissy02" src="http://blog.benhuoer.com/wp-content/uploads/2009/10/kissy02.png" alt="kissy02" width="272" height="263" /></a></p><p>（弹出层和按钮左侧有两个像素的距离，我不知道作者是不是故意不对齐的。）</p><p>期待淘宝UED的视觉设计达人们能加入到后续版本的开发中，设计出一套更加漂亮的皮肤来。感觉淘宝整站的这种“外凸渐变”实在太多了，不够elegant&#8230;</p><p>据说插入链接/图片的浮动层样式参考了搜狐白社会，十分紧凑，适合这种小巧的社区发帖编辑器。</p><h3>2. 功能</h3><p>目前只实现了一些常用的编辑器功能，字体样式、图片和链接插入、缩进和对齐等。没有清除样式的按钮，直接添加标题（h1~h6）、引用（blockquote）等语义化标签的按钮也没有，从Word中复制内容得到的html源码也十分混乱。不过通过查看js源码，可以看出作者预留了很多接口，底层代码也算是博采众长，插件和皮肤和的自定义还算方便。</p><p>作者透露的开发计划是：</p><blockquote><p>紧接着的二期里，将进一步完善基础架构和插件体系，并提供 Undo/Redo, 插入Flash, 表格编辑和预置模板等功能。</p></blockquote><p>另外一些细节，比如说插入图片时URL没有基本的正则验证，当没有p标签包裹时按回车键只会出现br换行，字体的样式和颜色是使用的font标签来设置，等等…… 可能会让一些细节控/语义控觉得受不了。</p><p>更多bug和改进建议可以参考<a
href="http://code.google.com/p/kissy/updates/list" target="_blank">updates list</a>。（话说淘宝影响力就是大啊，发布不过一周，提交的bug已经近80个了&#8230;）</p><h3>3. 浏览器兼容</h3><p>稍微测试了一下，发现的问题有：</p><ol><li>ie和ff之外的浏览器不能使用图片大小重设</li><li>opera里缩进按钮失效</li><li>ie中把图片右对齐，会出现烦人的横向滚动条</li><li>&#8230;</li></ol><p>更多兼容性问题，请继续参考<a
href="http://code.google.com/p/kissy/updates/list" target="_blank">updates list</a>&#8230;..</p><h3>4. 大小</h3><p>KISSY以“小巧灵活，简洁实用”为开发理念，功能实现上遵循着实用主义，但是又保持了相当高的灵活性和可扩展性。</p><p>KISSY Editor依赖于YUI的yahoo-dom-event，两者压缩到一个文件后的大小为94k，而TinyMCE在同样的压缩规则下大小为162k。相比于TinyMCE强大的功能，KISSY的尺寸似乎略显臃肿&#8230; 对广大站长的号召力似乎不是很大。yahoo-dom-event占到总代码量的近2/3，不知道如果让KISSY独立起来，总代码量会减少多少？</p><p>很早以前我就想要一个jQuery版的TinyMCE，因为那得节省多少代码啊~  KISSY Editor还这么新，不知道有没有可能从一开始就整一系列基于多类库的版本？（哇&#8230; 类库，内裤，这个词好&#8230;.）同步开发应该好维护些，不然以后代码庞大起来，要转移内裤就更难搞了。</p><h3>5. 性能</h3><p>把插件弹出层的HTML代码写到js里，真是一个好idea&#8230; 非常受不了WordPress后台那基于远程HTML文档的模态窗口，网速慢的时候，插入链接这么简单的操作，都要等十秒以上……</p><p>至于KISSY这个编辑器的内存占用、代码洁净程度等需要高强度测试的高科技问题，就还是等其他牛人来搞啦&#8230; 笔者没有这个水平。</p><p><strong>报告完毕！</strong>&#8212;&#8212;&#8212;~&#8212;~&#8211;~&#8211;~-~&#8211;妖艳的分割线&#8211;~-~&#8211;~&#8211;~&#8212;&#8212;&#8211;</p><p><a
href="http://kissyteam.github.com/docs/html/editorguide/" target="_blank">即刻试用KISSY Editor</a> |  <a
href="http://code.google.com/p/kissy/" target="_blank">在Google Code上的项目主页</a> <a
href="http://kissyteam.github.com/" target="_blank">在 GitHub 上的KISSY项目主页</a> |  <a
href="http://lifesinger.org/blog/" target="_blank">开发者博客</a></p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-apps-development" title="查看 前端开发 中的全部文章" rel="category tag">前端开发</a>        标签: <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/rte" rel="tag">RTE</a>, <a
href="http://blog.benhuoer.com/tag/%e6%b7%98%e5%ae%9d" rel="tag">淘宝</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html#comments" target="_blank">已经有9条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html&title=淘宝开源编辑器KISSY Editor试用报告&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/try-out-report-of-kissy-editor.html/feed</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>网页设计中的包容原则[ALA]</title><link>http://blog.benhuoer.com/posts/inclusion-principle-ala.html</link> <comments>http://blog.benhuoer.com/posts/inclusion-principle-ala.html#comments</comments> <pubDate>Mon, 27 Jul 2009 02:23:03 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[交互和UE]]></category> <category><![CDATA[A List Apart]]></category> <category><![CDATA[Web标准]]></category> <category><![CDATA[可访问性]]></category> <category><![CDATA[用户体验]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/posts/inclusion-principle-ala.html</guid> <description><![CDATA[设计师的工作一直与“可视性（affordance）”有着密切的利害关系。这个词自唐纳德·诺曼（Donald Norman）的名著《设计心理学》[注1]后便声名鹊起，之后更是被阿兰·库伯（Alan Cooper）的《交互设计精髓》[注2]一书带入用户界面设计社区。 注1:&#160; The Design of Everyday Things, 直译为“日常用品的设计” 。“可视性”一词即沿用的本书中文版的翻译。 注2:&#160; About Face，交互设计名著，目前已出到第三版。 可视性允许我们一见到某事物就直截了当地知道如何与其交互。例如，当我们看到一扇门旁边的小按钮时，我们会马上意识到这是要用指头来按的；常识又告诉我们，一旦按下去就有声响发出，然后房间里的人就会知道“有人正站在门外呢”。把这一概念移植到视觉设计领域：当我们在网页上看到一个有3D样式的按钮时，我们立马就能明白这是一个可以用鼠标来“按”的东西。 可视性仅仅是成功的一半 设想这样一种情景：人们虽然能轻松懂得如何使用某件物品，但是却缺乏执行操作的能力。绝大部分坐轮椅的人都知道楼梯应该怎么用，但楼梯的“可视性”无助于他们爬上楼梯。这时，问题便出现了。 相反，便利店的宽大自动门对于有或没有特别通过需求的人都具可视性，并且能被二者轻松使用。我们把这种可视性和广泛亲和性[注3]（all-embracing accessibility）的结合称为“通用设计（universal design）”。在通用设计中，自觉的可视性——也就是对如何与物品进行交互产生的隐式理解——实则与用户执行操作的能力相辅相成。因此，通用设计天生具有亲和性（inherently accessible）。 注3:&#160; Accessibility，表示用户获取所需内容（结果）的容易程度。根据语境，可翻译成“可访问性”、“亲和性”、“可及性”，等等。下面译文中出现的这三个词都表示英语中的“Accessibility”。Accessible 又表示“无障碍的”、“可访问的”。 有些设计师觉得通用设计限制了他们的创新。他们争辩说，要满足通用性，就必须从“最底层的用户（neediest-user）”出发进行设计。要设计一部对老年人和青少年都方便使用的电话，那我们就必须先考虑老年人的需求：大的数字按键，大的显示屏等等；然而一旦我们这么做了，那些年轻的消费者，那些“潮人”们，可能就对这电话没有购买欲了。如此，设计的最终结果就是一件只对某特定社群有用的产品——我们达到了无障碍设计（accessible design）的要求，但不能算是通用设计。设计的可及性非常重要，却无法通过一种方式就满足所有人。因此，明智的做法是，在任何时候都尽量争取可行的通用设计，而只在必要的时候专注于无障碍设计。 无障碍设计的困境 这种差别在Web设计中意味着什么？“通用设计”和“无障碍设计”在什么情况下会被广泛认为是对等的？无障碍设计元素包括视频的说明字幕（caption）和音频文件的文字副本（text transcription）。它们被用作原始内容必需的替代品。另一方面，结构化标记（structural markup）则是一个实现通用设计的有力技巧。使用h1和h2这样的实义标签来按照逻辑关系组织内容，有助于形成可访问性，因为读者总是习惯在阅读文字前先扫描标题。设计师能创建独特的标题样式，却是由用户个人来决定要不要接受设计师的想法。他们大可以关闭图片显示或者在运行过程中替换掉你的样式。 话说至此，对很多设计师来说，因通用设计产生的交互过程的不可预见性会带来很多麻烦。他们怨声载道——“我完全不知道屏幕阅读器是如何工作的”，诸如此类。作为设计师，我们始终没能完全了解可访问性或者通用性究竟意味着什么。要改变局面，就必须先改变我们看待任务的方式。 不得要领 网页设计师通常喜欢在页面底部加一些文字和一个到第508条[注4]的小超链接来宣告其网页的可访问性。当然，这也是一项符合法律精神的实践。他们的说明大概都是这样写的：“我们尽力让本站能无障碍访问。我们会持续测试和修改站点的可访问性。如果您在访问任何内容时遇到困难，请尽管联系我们。”但只要稍微做点可访问性测试就会发现，很多站点拥有者和开发者都只是想靠声明的后半部分来轻松逃脱入狱的危险[注5]。 注4:&#160; Section 508，美国推行的保障残障人士能够有效使用电子和信息产品的法律。台湾也有类似的法案，请参看维基百科网页亲和力条目。 注5:&#160; 没有达到无障碍访问要求的站点会受到法律制裁，作者在此讽刺部分开发者对可访问性不够重视。 网站开发者们有时候以为，采用基于标准的开发原则，利用外部CSS和基于DOM的浏览器脚本技巧分离表现层和行为层，再为图片加上alt属性，就算达到第508条要求了。除非遇到问题的访客找上门来，他们是不会想在网站的可访问性上多花精力的。这里的逻辑似乎很公平：好的商业实践总是将各种需求按照项目约束条件和预期投资回报率（ROI）进行优先级排序。尽管规范的编码有助于达到无障碍要求，也必须有正确的施行意图才会产生效用。 以alt属性为例。所有正规的HTML编辑器和验证工具都会指出缺少alt替换文本的错误。大部分开发者也会纠正这个错误——不管是出于通过验证的目的还是为了获得可访问性。不过，通过验证并不等同于获得了可访问性。W3C的HTML5规范(草案) 明确指出了这一点，并详细示范了如何撰写基于功能和上下文的替换文本。你也许要反驳说大部分开发者都了解这一区别，但很多网站的表现恰好说明事实并非如此。 可访问性：分寸之末 就在不久前，一个流行的Web开发论坛上的一篇帖子引起了我的注意。帖子题目是“在&#60;img&#62;标签里使用alt和使用title的对比，Firefox里的alt不起作用”。一些回复让我震惊了，比如下面这条（不是因为他蹩脚的语法）： Alt被要求去验证，但是除非是政府网站，并没必要使用alt标签。除非信息实在重要，并且相等的信息发挥了作用，这作用到底是什么也不重要了…… Alt attributes are required to validate, but unless it is some [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html" rel="bookmark">拒绝臆想，让我们脚踏实地做设计！[ALA]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p><img
style="display: block; float: none; margin-left: auto; margin-right: auto" alt="The Inclusion Principle" src="http://www.alistapart.com/d/the-inclusion-principle/inclusion.jpg" /></p><p>设计师的工作一直与“可视性（<a
href="http://en.wikipedia.org/wiki/Affordance" target="benhuoer-new">affordance</a>）”有着密切的利害关系。这个词自唐纳德·诺曼（<a
href="http://en.wikipedia.org/wiki/Donald_Norman" target="benhuoer-new">Donald Norman</a>）的名著《<cite><a
href="http://www.douban.com/subject/1288844/" target="benhuoer-new">设计心理学</a></cite>》<sup>[注1]</sup>后便声名鹊起，之后更是被阿兰·库伯（<a
href="http://en.wikipedia.org/wiki/Alan_Cooper" target="benhuoer-new">Alan Cooper</a>）的《<cite><a
href="http://www.douban.com/subject/3279105/" target="benhuoer-new">交互设计精髓</a></cite>》<sup>[注2]</sup>一书带入用户界面设计社区。</p><p
class="no-indent"><em><strong>注1:</strong>&#160;<cite>The Design of Everyday Things</cite>, 直译为“日常用品的设计” 。“可视性”一词即沿用的<a
href="http://www.douban.com/subject/1288844/" target="benhuoer-new">本书中文版</a>的翻译。 <br
/><strong>注2:</strong>&#160;<cite>About Face</cite>，交互设计名著，目前已出到第三版。</em></p><p>可视性允许我们一见到某事物就直截了当地知道如何与其交互。例如，当我们看到一扇门旁边的小按钮时，我们会马上意识到这是要用指头来按的；常识又告诉我们，一旦按下去就有声响发出，然后房间里的人就会知道“有人正站在门外呢”。把这一概念移植到视觉设计领域：当我们在网页上看到一个有3D样式的按钮时，我们立马就能明白这是一个可以用鼠标来“按”的东西。</p><p> <span
id="more-1749"></span><br
/><h3>可视性仅仅是成功的一半</h3><p>设想这样一种情景：人们虽然能轻松懂得如何使用某件物品，但是却缺乏执行操作的能力。绝大部分坐轮椅的人都知道楼梯应该怎么用，但楼梯的“可视性”无助于他们爬上楼梯。这时，问题便出现了。</p><p>相反，便利店的宽大自动门对于有或没有特别通过需求的人都具可视性，并且能被二者轻松使用。我们把这种可视性和广泛亲和性<sup>[注3]</sup>（all-embracing accessibility）的结合称为“<a
href="http://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E8%A8%AD%E8%A8%88" target="benhuoer-new">通用设计</a>（<a
href="http://en.wikipedia.org/wiki/Universal_design" target="benhuoer-new">universal design</a>）”。在通用设计中，自觉的可视性——也就是对如何与物品进行交互产生的隐式理解——实则与用户执行操作的能力相辅相成。因此，通用设计天生具有亲和性（inherently accessible）。</p><p
class="no-indent"><em><strong>注3:</strong>&#160; Accessibility，表示用户获取所需内容（结果）的容易程度。根据语境，可翻译成“可访问性”、“亲和性”、“可及性”，等等。下面译文中出现的这三个词都表示英语中的“Accessibility”。Accessible 又表示“无障碍的”、“可访问的”。</em></p><p>有些设计师觉得通用设计限制了他们的创新。他们争辩说，要满足通用性，就必须从“最底层的用户（neediest-user）”出发进行设计。要设计一部对老年人和青少年都方便使用的电话，那我们就必须先考虑老年人的需求：大的数字按键，大的显示屏等等；然而一旦我们这么做了，那些年轻的消费者，那些“潮人”们，可能就对这电话没有购买欲了。如此，设计的最终结果就是一件只对某特定社群有用的产品——我们达到了无障碍设计（accessible design）的要求，但不能算是通用设计。设计的可及性非常重要，却无法通过一种方式就满足所有人。因此，明智的做法是，在任何时候都尽量争取可行的通用设计，而只在必要的时候专注于无障碍设计。</p><h3>无障碍设计的困境</h3><p>这种差别在Web设计中意味着什么？“通用设计”和“无障碍设计”在什么情况下会被广泛认为是对等的？无障碍设计元素包括视频的说明字幕（caption）和音频文件的文字副本（text transcription）。它们被用作原始内容必需的替代品。另一方面，结构化标记（structural markup）则是一个实现<strong>通用设计</strong>的有力技巧。使用<code>h1</code>和<code>h2</code>这样的实义标签来按照逻辑关系组织内容，有助于形成可访问性，因为读者总是习惯在阅读文字前先扫描标题。设计师能创建独特的标题样式，却是由用户个人来决定要不要接受设计师的想法。他们大可以关闭图片显示或者在运行过程中替换掉你的样式。</p><p>话说至此，对很多设计师来说，因通用设计产生的交互过程的不可预见性会带来很多麻烦。他们怨声载道——“我完全不知道屏幕阅读器是如何工作的”，诸如此类。作为设计师，我们始终没能完全了解可访问性或者通用性究竟意味着什么。要改变局面，就必须先改变我们看待任务的方式。</p><h3>不得要领</h3><p>网页设计师通常喜欢在页面底部加一些文字和一个到<a
href="http://www.1sight.cn/index.php/archives/432" target="benhuoer-new">第508条</a><sup>[注4]</sup>的小超链接来宣告其网页的可访问性。当然，这也是一项符合法律精神的实践。他们的说明大概都是这样写的：“我们尽力让本站能无障碍访问。我们会持续测试和修改站点的可访问性。如果您在访问任何内容时遇到困难，请尽管联系我们。”但只要稍微做点可访问性测试就会发现，很多站点拥有者和开发者都只是想靠声明的后半部分来轻松逃脱入狱的危险<sup>[注5]</sup>。</p><p
class="no-indent"><em><strong>注4:</strong>&#160; <a
href="http://section508.gov/" target="benhuoer-new">Section 508</a>，美国推行的保障残障人士能够有效使用电子和信息产品的法律。台湾也有类似的法案，请参看维基百科<a
href="http://zh.wikipedia.org/wiki/%E7%B6%B2%E9%A0%81%E8%A6%AA%E5%92%8C%E5%8A%9B" target="benhuoer-new">网页亲和力</a>条目。 <br
/></em><em><strong>注5:</strong>&#160; <a
href="http://section508.gov/" target="benhuoer-new"></a>没有达到无障碍访问要求的站点会受到法律制裁，作者在此讽刺部分开发者对可访问性不够重视。</em></p><p>网站开发者们有时候以为，采用基于标准的开发原则，利用外部CSS和基于DOM的浏览器脚本技巧分离表现层和行为层，再为图片加上<code>alt</code>属性，就算达到第508条要求了。除非遇到问题的访客找上门来，他们是不会想在网站的可访问性上多花精力的。这里的逻辑似乎很公平：好的商业实践总是将各种需求按照项目约束条件和预期投资回报率（ROI）进行优先级排序。尽管规范的编码有助于达到无障碍要求，也必须有正确的施行意图才会产生效用。</p><p>以<code>alt</code>属性为例。所有正规的HTML编辑器和验证工具都会指出缺少alt替换文本的错误。大部分开发者也会纠正这个错误——不管是出于通过验证的目的还是为了获得可访问性。不过，通过验证并不等同于获得了可访问性。<a
href="http://www.w3.org/TR/html5/embedded-content-0.html#alt" target="benhuoer-new">W3C的HTML5规范(草案)</a> 明确指出了这一点，并详细示范了如何撰写基于功能和上下文的替换文本。你也许要反驳说大部分开发者都了解这一区别，但很多网站的表现恰好说明事实并非如此。</p><h3>可访问性：分寸之末</h3><p>就在不久前，一个流行的Web开发论坛上的一篇帖子引起了我的注意。帖子题目是“在&lt;img&gt;标签里使用alt和使用title的对比，Firefox里的alt不起作用”。一些回复让我震惊了，比如下面这条（不是因为他蹩脚的语法）：</p><blockquote><p>Alt被要求去验证，但是除非是政府网站，并没必要使用alt标签。除非信息实在重要，并且相等的信息发挥了作用，这作用到底是什么也不重要了……</p><p>Alt attributes are required to validate, but unless it is some sort of gov’t website they are not required to use alt tags unless the information is vital and the equal information act, or whatever that act is called.</p><p>（囧，确实蹩脚，根本不知道他到底想说个啥……）</p></blockquote><p>就我在论坛上的回复，我提到了国家盲人联合会（National Federation of the Blind, abbr. <abbr>NFB</abbr>）对Target公司的<a
href="http://www.nfbtargetlawsuit.com/">集体诉讼</a><sup>[注6]</sup>。最终，Target支付了大量金钱，并且同意对他们的网页开发者进行昂贵的关于可访问性的强化培训。</p><p
class="no-indent"><em><strong>注6:</strong>&#160; Target是一家零售企业，在美国各地都有连锁店。NFB控告他们的网站不方便盲人获取信息，并且让盲人无法实现线上购物。关于alt和title的问题，另外推荐Rexsong的<cite><a
href="http://blog.rexsong.com/?p=6024" target="benhuoer-new">使用Alt提升可访问性</a></cite>一文。</em></p><p>如果一家《财富》500强企业都不能正确处理网页可访问性，我们就能想象小公司要达到无障碍需求是多么的困难。由于下列原因，网页的可访问性总是获得较低的优先级：</p><ol><li>我们也想实现无障碍访问，但是我们只是一个很小的团队。</li><li>话说回来，也没人真的抱怨过访问障碍。</li><li>无障碍网页缺少审美上的乐趣，限制了我们的设计选择。</li><li>我们真的不知道该怎样让我们的网站/Web应用变得对残障人士无障碍。</li><li>我们的目标用户不包括残障人士。</li></ol><p>就上面的几点，只有第四条才算是一个网站或Web应用出现可访问性问题的正当理由。而这一问题亦是可以解决的——给网页设计师和开发者少量的循序渐进的可访问性培训，然后持续关注这一问题。至于其他几点…… 只需一点思维上的转变即可。这一转变很小，却将意义重大。</p><h3>运用包容原则，提升可访问性的地位</h3><p>让我们来探索<em> 包容原则 </em>的奥妙。它允许我们忘记在社交行为中根深蒂固的那种“他们”和“我们”之间的对立。聚焦于包容能够将无障碍/通用设计的争论从上述利益冲突中解放出来，让我们拥抱一种更宽阔、更接近自然的设计哲学。最重要的一点，聚焦包容也帮助我们了解到，我们不仅是为了别人才重视可访问性，也是为我们自己好。</p><p>来看一下来自包容性研究机构（<a
href="http://www.instituteforinclusion.org/" target="benhuoer-new">Institute for Inclusion</a>）的定义：</p><blockquote><p>包容行为是指平衡且尊重众人不同才能、信仰和生活方式之独特性的实践和行为。[…] 当某人被定义为某个社群的一员，人们即被他们对这个特定群体的理解和念想所限制。而包容则是在个人层次和群体层次均接受相互之间的类似点和不同点，以达到众人齐心协力之目的。</p><p>Inclusive behaviors are those practices and behaviors that leverage and honor the uniqueness of people’s different talents, beliefs, and ways of living. [...] When one is defined by the concept of a group, people can be limited by their knowledge or beliefs about that particular group. Instead, inclusion embraces similarities and differences at the individual and group levels for the attainment of the common endeavor.</p></blockquote><p>此研究机构亦对包容的核心意义（key elements）做如下探讨：</p><blockquote><p>通过在个人、群体和组织机构层面创建与维续条件来蕴育平等、自主赋权、自我知觉和胜任感，从而认知与支撑全人类的内在价值。</p><p>Recognizing and supporting the intrinsic value of all human beings by creating and sustaining conditions that foster equity, empowerment, awareness and competence at the personal, group and organizational levels.</p></blockquote><p>只要我们敞开胸怀拥抱包容原则，我们就很难再把他人看作是一个特定群体（比如“视觉障碍用户”），于是也不再排斥他们。如果我们肯放弃传统的“我/他”思想，我们就不会再为逃避可访问性找任何借口。他人的需求变成了我们自己的需求。有了包含原则，我们将不再忽视网页可访问性的要求。在我们眼中，可访问性成了一个通过接受彼此异同实现自主赋权的机会（a chance to create empowerment by embracing our similarities and differences）。</p><h3>现实世界的一应包容</h3><p>这样的讨论似乎并无必要——对可访问性的理论解剖。你可能会说注重包容性并不会立即解决你平常遇到的网页设计问题。不过别忘了：重视通用设计能让我们利用好相似性，实现无障碍设计能让我们处理好相斥性。一些“通用的”技巧和要素如下：</p><ul><li>为图像添加恰当的<code>alt</code>属性。<cite><a
href="http://www.w3.org/TR/WCAG-TECHS/H37.html" target="benhuoer-new">W3C的WCAG 2.0技术规范</a></cite> 清楚明确地解释了这一点。</li><li>使用多级标题（<code>h1</code>, <code>h2</code>,等等）结构化页面内容。</li><li>如《<cite>WCAG 2.0技术规范</cite>》示范的那样正确使用<a
href="http://www.w3.org/TR/WCAG20-TECHS/H51.html" target="benhuoer-new">简单数据表</a>， <a
href="http://www.w3.org/TR/WCAG20-TECHS/H43.html" target="benhuoer-new">复杂数据表</a>，以及<code>th</code>元素。</li><li>为表单的输入域创建文本标记（label）。这在<cite><a
href="http://www.webaim.org/techniques/forms/controls.php" target="benhuoer-new">WebAIM: Creating Accessible Forms</a></cite>（创建无障碍表单）一文中已有描述。</li></ul><p>当我们学会普遍运用这些技巧时，它们就成为了我们的“第二天性”（second nature），我们架设网站时的思维模型（mental model）。最终，我们不会觉得这是所谓的可访问性技巧，而开始把它们当做固有的、普遍的Web技巧（innate, universal web techniques）。我们将会经历从运用范例到一应设计（inclusive design）<sup>[注4]</sup>的转变。</p><p
class="no-indent"><em><strong>注4:</strong>&#160; inclusive design，也被翻译为“和合设计”、“包容性设计”。“一应”是指所有一切，一应设计即包含一切的设计。</em></p><p>这样做既能减少用户的麻烦，也能减轻开发者的负担，因为剩下的可访问性任务已经被更好地独立出来。这就为实现完全无障碍的网页打好了坚实的基础，开发者也能更加客观地掂量如何提供额外的亲和效果（provide a more objective estimate for additional accessibility efforts）。</p><p>如果说无障碍设计和通用设计更多地是以结果为导向的，那么这一新的<strong>一应设计</strong>的模型就显然是以过程为导向的。有一点至关重要：设计师必须认同（indentify with）项目的可访问性需求。没有认同，就没有热情；没有热情，我们就又走回老路——将可访问性任务视为分寸之末。</p><h3>让我们大踏步向前</h3><p>现在来看看如何将包容性原理融入实践。试试看将其应用到那个针对可访问性的反对意见列表中：</p><ol
class="big-list"><li><em>我们也想实现无障碍访问，但是我们只是一个很小的团队。</em> <br
/>要踏上无障碍设计之路并不需要多大付出。WebAIM.org 提供了一份很好的<a
href="http://webaim.org/resources/quickref/" target="benhuoer-new">快速参考</a>（英文）。如果你已经知道一些基本的东西，请与团队分享你的可访问性知识。例如，听到其他开发者在讨论Ajax时，告诉他们关于无障碍Ajax的信息。利用诸如Word或PDF的非HTML格式，与团队成员分享核对清单（checklists），你会发现它们将带来很大帮助。（<a
href="http://www.hhs.gov/web/508/index.html" target="benhuoer-new">美国卫生及服务部</a>网站上有很好的资源。[可惜没有中文版的]）</li><li><em>话说回来，也没人真的抱怨过访问障碍。</em> <br
/>有人在抱怨的——只是没当着你的面罢了。上一次你遇到一件很难用的产品却没有写信骚扰厂家是什么时候？如果你的网站有可访问性问题，不满和抱怨无疑是与设计共生共存的。抓住机遇，投身变革！</li><li><em>无障碍网页缺少审美上的乐趣，限制了我们的设计选择。</em> <br
/>恕我不敢苟同：比如尼克·戴（Nick Day），英国聚焦无障碍（<a
href="http://www.accessibilityinfocus.co.uk/" target="benhuoer-new">Accessibility in Focus</a>）奖的获得者，他的网站<a
href="http://www.english-in-chester.co.uk/" target="benhuoer-new">English in Chester</a>的外观设计就非常出彩。多看看别人怎么做的吧，互联网不就是用来帮助我们学习别人的么。</li><li><em>我们真的不知道该怎样让我们的网站/Web应用变得对残障人士无障碍。</em> <br
/>可访问性对于复杂的网站或者富互联网应用（rich internet application , abbr. RIA）来说会比较难以实现。但如果你真的拿到一个复杂的、运用了多媒体的丰富应用（multimedia-rich application），那就拿出一点创意来。在附近找一个特殊教育学校，请一名残障学生志愿者为你演示他们是如何与电脑交互的；调查研究其他为影片添加注释的方式，比方说<a
href="http://dotsub.com/" target="benhuoer-new">dotSUB</a>（一个基于wiki概念的影音翻译网站）。</li><li><em>我们的目标用户不包括残障人士。</em> <br
/>如果事实果真如此，那就专注于你的目标客户群。你自己是否亦算其一？想想看：你可一直都是你项目的利害关系人（stakeholder）。那么，认真考虑你的需求，为了自己，加点猛料。猜猜看，然后结果会怎样？</li></ol><h3>倾听你自己</h3><p>要如何才能快速入门包容原则？把你的电脑屏幕想象成《2001太空漫游》中的大黑石<sup>[注7]</sup>，然后开始你的冒险：在脑海里构建你的站点。接下来，更进一步，想象你正用耳朵听你的站点，而不是盯着它看。这有助于你暂时放弃把你的网站当成一本书来对待。有时候大家都遗忘了一点，网站其实是一种形象而生动的媒体（colloquial medium），其表现力与其外显形式是不可分割的（its narrative is not inseparable from its form）。</p><p>你的网站听起来如何？禁用掉样式表，看一下你面前是什么。突然之间，你就变得和使用屏幕阅读器的人一模一样了——你们有着同样的需求。获取最高等级的可访问性是很有必要的，并且应该成为你日常设计活动的一部分，因为这样你就不再需要为自己找辩护的理由。拥抱包容原则，你的网站将成为下一个可访问性的典范。</p><p
class="no-indent"><em><strong>注7:</strong>&#160;<cite>2001: A Space Odyssey</cite>，一部1968年拍摄的科幻电影。讲述2001年人们寻找黑石根源的故事。黑石在片中的概念相当于激发人们智慧的神秘物。</em></p><p
align="right"><em>插图绘制： </em><a
href="http://www.alistapart.com/authors/c/kevincornell" target="benhuoer-new">Kevin Cornell</a><em></em></p><h4>关于作者</h4><p
class="no-indent"><img
style="margin: 0px 10px 0px 0px; display: inline" alt="Margit Link-Rodrigue" align="left" src="http://www.alistapart.com/pix/authors/uploads/avatar_124101.jpg" /> 德国出生的 <strong>Margit Link-Rodrigue</strong> 是一名用户界面设计师，在她自选的Web前哨战Red Stick工作和生活，这地方另一个更著名的名字是巴吞鲁日（Baton Rouge，路易斯安那州首府）。她的格言“浏览器是你的第一个用户”保证了她的工作根基牢靠。她在她的网站<a
href="http://www.vanillacloud.com" target="benhuoer-new">vanillacloud.com</a>上几经艰辛，体会到原来要写好博客也不是件容易的事。</p><h4>© 版权声明</h4><blockquote><p>Source:&#160; <a
href="http://www.alistapart.com/articles/the-inclusion-principle/">The Inclusion Principle</a> by <a
href="http://www.alistapart.com/authors/l/mrodrigue">Margit Link-Rodrigue</a></p><p>Translated with the permission of <a
href="http://www.alistapart.com/">A List Apart Magazine</a> and the author.</p><p>Translator: <a
href="http://blog.benhuoer.com/">Benhuoer</a>.</p><p>译文原文：<a
href="http://blog.benhuoer.com/posts/inclusion-principle-ala.html">网页设计中的包容原则</a></p></blockquote><p><strong>任何网站或个人</strong>转载本文均需依原样保留本声明。</p><h4>笨活儿译后感</h4><p>这篇文章的翻译用了我三天时间（当然，期间也有干其他事啦）。太专业了，术语很多。翻译完，我整理的生词有30多个，有些句子也特别不好理解，逻辑太跳跃，译成中文后感觉不够连贯，希望能有高手忙我<a
href="http://www.yeeyan.com/articles/view/benhuoer/51871/dz">眉批找茬</a>一下。</p><p>其实作者的主要观点无外乎“把你自己也当做用户”。考虑网页可访问性时，要胸怀用户，尤其是残障用户（包括视觉障碍和听觉障碍）。中国的网页无障碍设计发展得很差（看一下<a
href="http://www.mikkolee.com/207">百度盲道</a>就知道了），《<a
href="http://www.gov.cn/banshi/2005-08/04/content_20235.htm" target="_blank">残疾人保障法</a>》也已经近20年没有修订过了。想来残障人士访问互联网应该是很恼火的一件事。其实本来就像作者说的那样，只要“胸怀天下”，可访问性基本上是举手之劳。</p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html" rel="bookmark">拒绝臆想，让我们脚踏实地做设计！[ALA]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/interactive-and-ue" title="查看 交互和UE 中的全部文章" rel="category tag">交互和UE</a>        标签: <a
href="http://blog.benhuoer.com/tag/a-list-apart" rel="tag">A List Apart</a>, <a
href="http://blog.benhuoer.com/tag/web%e6%a0%87%e5%87%86" rel="tag">Web标准</a>, <a
href="http://blog.benhuoer.com/tag/%e5%8f%af%e8%ae%bf%e9%97%ae%e6%80%a7" rel="tag">可访问性</a>, <a
href="http://blog.benhuoer.com/tag/%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c" rel="tag">用户体验</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/inclusion-principle-ala.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/inclusion-principle-ala.html#comments" target="_blank">已经有12条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/inclusion-principle-ala.html&title=网页设计中的包容原则[ALA]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/inclusion-principle-ala.html/feed</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Web技术要发展，IE6必须先消失！</title><link>http://blog.benhuoer.com/posts/ie6-must-die.html</link> <comments>http://blog.benhuoer.com/posts/ie6-must-die.html#comments</comments> <pubDate>Sun, 19 Jul 2009 07:00:04 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[Web技术]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[Web标准]]></category> <category><![CDATA[浏览器]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/posts/ie6-must-die.html</guid> <description><![CDATA[现在，HTML 5 的正式登场近在眉睫，我们乘坐的Web列车正火速开往一场巨大变革的重要拐点。IE6无疑是这条“革命之路”中间的巨大障碍。革命的号角已经吹响，在接下来的几个月，我们的主动行动将越来越重要。Web技术要发展，IE6必须下地狱！<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/my-first-project.html" rel="bookmark">果冻恙 &mdash; 我的第一个作品</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.benhuoer.com/wp-content/uploads/2009/07/ripie.png" target="benhuoer_new"><img
style="border-right-width: 0px; margin: 5px 0px 5px 8px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rip-ie" src="http://blog.benhuoer.com/wp-content/uploads/2009/07/ripie_thumb.png" border="0" alt="rip-ie" width="148" height="161" align="right" /></a>仅仅六年之前，互联网还是一个独裁者的世界——Internet Explorer <a
href="http://www.blippr.com/apps/336748-Internet-Explorer" target="benhuoer_new">(<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; vertical-align: middle; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_01.png?1237094634" alt="Internet Explorer" align="absMiddle" />)</a>（主要是Internet Explorer 6）垄断着浏览器市场。没了Netscape的竞争，加上与Windows XP的绑定，微软获得了令人艳羡的市场份额——巅峰时期将近95%。时至今日，可供我们选择的浏览器种类也令当年的用户艳羡——<a
href="http://mashable.com/tag/firefox" target="benhuoer_new">Firefox</a><a
href="http://www.blippr.com/apps/336679-Firefox" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_07.png?1237094634" alt="Firefox" align="absMiddle" />)</a>, <a
href="http://mashable.com/tag/safari" target="benhuoer_new">Safari</a><a
href="http://www.blippr.com/apps/336952-Safari" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Safari" align="absMiddle" />)</a>, <a
href="http://mashable.com/tag/opera" target="benhuoer_new">Opera</a><a
href="http://www.blippr.com/apps/337084-Opera" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Opera" align="absMiddle" />)</a>, <a
href="http://mashable.com/tag/google-chrome" target="benhuoer_new">Chrome</a><a
href="http://www.blippr.com/apps/336751-Chrome" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Chrome" align="absMiddle" />)</a>，以及<a
href="http://mashable.com/2009/03/19/internet-explorer-8-video/" target="benhuoer_new">Internet Explorer 8</a>。</p><p>那么，为什么现在还有15%至25%的网页浏览量来自这火星时代（也就是2001年）的浏览器？作为一名coder（程序员），designer（设计师），UI guy（用户体验工程师），这破浏览器给我们带来的困扰简直是罄竹难书。为了兼容性这位大美女，我们在IE6这个糟老头上耗费了难以计数的精力和时间。</p><p>尽管IE6增加了我们的负担，但只要有克服困难的决心，我们开发出的Web应用也还是有一定可用性。不过现在，<strong>HTML 5 </strong>的正式登场近在眉睫，我们乘坐的Web列车正火速开往一场巨大变革的重要拐点。IE6无疑是这条“革命之路”中间的巨大障碍。革命的号角已经吹响，在接下来的几个月，我们的<strong>主动行动</strong>将越来越重要。Web技术要发展，IE6必须进坟墓！</p><p><span
id="more-1643"></span></p><h3>Internet Explorer 6 的那点破事儿</h3><div
class="wp-caption aligncenter" style="width: 590px;"><a
rel="attachment" href="http://blog.benhuoer.com/posts/ie6-must-die.html" target="benhuoer_new"><img
class="size-full" title="Facebook hate IE6" src="http://ec.mashable.com/wp-content/uploads/2009/07/fb-ie.jpg" alt="Facebook hate IE6" /></a></p><p
class="wp-caption-text"><small>是的… Facebook 也不欢迎 IE6 了哦…</small></p></div><p>现在，也许你应该问自己两个问题：IE6到底哪里不好？为什么现在还有这么多人用它？</p><p>第一个问题的答案相对简单：互联网生态急剧变化，Internet Explorer 6在技术上显得越来越落伍。你只需想象一下在一台2001年的电脑（20GB硬盘，256MB的内容，还有么？）上使用现在的社交网站、微软Office、iTunes、即时通讯、电子游戏，以及你的其他桌面软件…… 就是这个理：很多新的Web技术就是没办法兼容IE6啊。下面是一个IE6不支持的功能简表，大部分coders应该都对它们了然于胸了:</p><blockquote><p>- <strong>CSS 2 (层级样式表):</strong> 这是Web设计视觉表现的基础所在。毫无办法呢，设计师总是必须针对IE6做一些hack。</p><p>- <strong>PNG 透明度:</strong> 能够实现柔和渐变透明度的png图像不能在IE6内正常显示。而漂亮的半透明效果已经是网页设计的基本技巧之一。</p><p>- <strong>常见安全问题:</strong> 如果不更新防毒软件，就更容易中毒。同样道理，不更新浏览器也更容易遭受黑客攻击。网上随处可得让IE6崩溃的代码。 我就不告诉你完整代码了，你可以<a
href="http://en.wikipedia.org/wiki/IE6#Security_framework" target="benhuoer_new">在Wikipedia上</a>找找看。IE6就是这么不稳定……</p><p>- <strong><a
href="http://mashable.com/category/digg" target="benhuoer_new">Digg</a><a
href="http://www.blippr.com/apps/336668-Digg" target="benhuoer_new">(<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Digg" align="absMiddle" />)</a>， <a
href="http://mashable.com/category/facebook" target="benhuoer_new">Facebook</a><a
href="http://www.blippr.com/apps/336650-Facebook" target="benhuoer_new">(<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Facebook" align="absMiddle" />)</a>，以及 <a
href="http://mashable.com/category/youtube" target="benhuoer_new">YouTube</a><a
href="http://www.blippr.com/apps/336658-YouTube" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="YouTube" align="absMiddle" />)</a> [即将不支持]: </strong>Digg和YouTube都发布公告宣称，他们将逐渐<a
href="http://blog.digg.com/?p=878" target="benhuoer_new">放弃对IE6的支持</a>。Facebook已经开始对IE6用户下手——使用IE6登录会出现一条建议你升级浏览器的提示信息。是的，在不远的将来，你将无法使用Digg挖文章，用Youtube收看视频…… <em>（笨活儿：在墙内，根本不用等到将来…）</em></p></blockquote><p>其他互联网公司也宣称，IE6对它们造成了很大限制。<a
href="http://37signals.com" target="benhuoer_new">37Signals</a>，很多极为流行的基于Web的商业软件（如<a
href="http://basecamphq.com" target="benhuoer_new">Basecamp</a><a
href="http://www.blippr.com/apps/338368-Basecamp" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_05.png?1237094634" alt="Basecamp" align="absMiddle" />)</a>）的缔造者，就决定<a
href="http://37signals.blogs.com/products/2008/07/basecamp-phasin.html" target="benhuoer_new">削减对IE6的支持</a>。他们说：“继续支持IE6就代表我们无法优化用户界面，或者为我们的程序添加增强的客户体验。”<em>（笨活儿：国内互联网好像还未见有公司有这么勇敢？）</em></p><p>那么，为什么还有那么多人使用这过时的IE6呢？我觉得有两大主要原因：一是Windows XP绑定了IE6，将其作为系统的默认浏览器；二是很多公司的IT部门都怕麻烦而懒得为公司的电脑升级——还得去说服那些电脑小白去习惯新浏览器。小白们都很容易满足，除非遇到什么大事——比如说Google在IE6下打不开了——他们才不会有什么不满。</p><p>尽管如此，Web世界还是勉强能够突破IE6强加的重重限制。不过，“好日子”不长了，新技术正在攻占Web世界的战略要地。有一项IE6完全无法处理的重大技术即将登场：<strong>HTML 5</strong>。</p><h3>下一站： HTML 5</h3><p>HTML （超文本标记语言）是塑造万维网的基础 —— 任何一个写博客的人，肯定都接触过HTML标签。HTML 5是下一代HTML语言，随之而来的一系列特性是非常耀眼的，尤其是自从<a
href="http://mashable.com/category/google" target="benhuoer_new">Google</a><a
href="http://www.blippr.com/apps/336661-Google" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_07.png?1237094634" alt="Google" align="absMiddle" />)</a> 和 <a
href="http://mashable.com/category/apple" target="benhuoer_new">Apple</a> 公司的专家加入之后（分别是Ian Hickson 和 Dave Hyatt），新特性的光芒越发闪耀。</p><p>Google尤为努力地推动着HTML 5的发展。因为HTML 5确实能带来可用性的增强，也将为Web开发提供无限可能。 在今年的Google I/O会议上，Google介绍了HTML 5的预期功能<em>（有<a
href="http://www.youtube.com/watch?v=AusOPz8Ww80" target="_blank">视频</a>（需翻墙），<a
href="http://blog.benhuoer.com/" target="_blank">笨活儿</a>过几天发布中文字幕版）</em>。其中最酷的地方包括：</p><blockquote><p>- <strong><a
href="http://www.w3school.com.cn/html5/html5_video.asp" target="_blank">Video 标签</a>:</strong> 通过使用&lt;video&gt;标签来标记视频，你可以直接在HTML里插入视频。而且，你能很容易地控制视频播放界面的外观。</p><p>- <strong><a
href="http://www.w3school.com.cn/html5/html5_audio.asp" target="_blank">Audio 标签</a>:</strong> 和视频标签类似，&lt;audio&gt;让您更容易地插入音频。</p><p>- <strong><a
href="http://www.w3school.com.cn/html5/html5_time.asp" target="_blank">Time 标签</a>:</strong> 此标签能让浏览器识别HTML页面里的时间。同时也提供<a
href="http://www.w3school.com.cn/html5/html5_meter.asp" target="_blank">&lt;meter&gt;标签</a>标记度量值。</p><p>- <strong>拖放:</strong> 尽管这一特性还存在争议，但HTML 5将最终实现直接拖放文件到浏览器中给HTML页面处理的功能。拖放操作在Google即将发布的通讯整合产品<a
href="http://mashable.com/tag/google-wave" target="benhuoer_new">Google Wave</a><a
href="http://www.blippr.com/apps/348749-Google-Wave" target="benhuoer_new"> (<img
style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://static1.blippr.com/images/inline-face_07.png?1237094634" alt="Google Wave" align="absMiddle" />)</a>中应用广泛，这大概也是他们如此努力推动这项功能的重要原因之一。</p><p>- <strong>本地存储:</strong> Web应用使用起来的感觉已经和桌面应用差不多了，只是它们还无法直接在本地电脑上保存你的工作。HTML 5将解决这一问题。</p><p>- <strong>地理位置:</strong> 使用HTML 5，您可以实现让Web应用通过读取你的所在地信息而提供更加密切关联的信息。随着<a
href="http://mashable.com/2009/07/12/location-based-services/" target="_blank">利用所在地位置的移动设备</a>的崛起，这一点将越来越重要。</p><p>- <strong>即时二维绘图:</strong> <a
href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29" target="benhuoer_new">HTML的canvas元素</a>允许你利用脚本来绘制位图。也就是说你可以完全在HTML的框架内绘制漂亮的图像。很多Web应用的界面将变得更加丰富和有动感。 <a
href="https://bespin.mozilla.com/" target="benhuoer_new">Mozilla Bespin</a> 是一个非常强大的项目，它利用HTML 5实现了一个在线代码编辑器。你应该也猜得到，它并不支持IE6。</p></blockquote><p>和任何一门优秀的语言一样，未来的HTML 5还会加入更多功能。如果你有兴趣完整了解HTML 5，我推荐您阅读IBM developerWorks上的一篇文章：<a
href="http://www.ibm.com/developerworks/cn/xml/x-html5/" target="_blank">HTML 5 中的新元素</a>。不过，重点在于：旧有的浏览器也能处理使用HTML 5标记的网站，只不过有部分新功能无法实现罢了。只要越来越多的公司放弃IE6，就可以将这部分守旧的用户忽视不管了。</p><h3>IE6已经阻碍我们的创造力太久太久</h3><p><img
style="margin: 6px 0px 5px 10px; display: inline" src="http://ec.mashable.com/wp-content/uploads/2009/07/browser-logos1.jpg" alt="Browser Logos Image" align="right" />从2001年起，我们就持续忍受着IE6百年不变的苦瓜脸，现在终于就要抵达突破的时刻。各大互联网公司都对此有所察觉。YouTube和Digg显然已经失去了继续支持老旧浏览器的耐心，才会放出话来说他们将逐渐放弃对IE6的支持。越来越多的公司加入进来，因为他们最终都会发现，付出那些让网站在微软的破浏览器里也正常运作的代价，是越来越不值得了。</p><p>不过如果我们向前展望，HTML 5作为标准将方便我们建立起更为丰富多彩的Web应用。我们的生活和互联网的联系越来越紧密，<a
href="http://mashable.com/category/facebook" target="benhuoer_new">Facebook</a> 之类的应用将更为不可或缺。Google适时地宣布了<a
href="http://mashable.com/2009/07/11/google-equation/" target="benhuoer_new">Google Chrome OS</a>的消息。这一建立在浏览器基础上的操作系统将能够完美运行各种Web应用程序。然而，如Google Wave之类的富应用项目，如果必须屈身于一只老旧的浏览器，它的潜能将会或多或少（或者完全地）被埋没。</p><p>IE6在2001年时的确够用了， 但对于不断发展的Web应用程序——那些作为工具的需要和桌面应用一样无缝运行的Web应用——来说，这种需要大量HACK，需要花费大量时间和精力才能保证网页正常工作的浏览器实在应该靠边站。现在，让保守者升级浏览器的唯一方法只能是——让他们发现自己最喜爱的网络工具突然不能在IE6下正常使用了。而只有让用户转变，开发者才能更放心地使用HTML 5这种新技术，而不是继续在过时的技术中沉迷。</p><p>简而言之，我们正处在Web技术发展的十字路口，要继续前行而不走弯路，我们就必须把IE6这个路障清除干净。行动起来吧，朋友们！</p><h3>笨活儿的旁白</h3><p>这篇文章是在Twitter的热门关键词里发现的。前天“IE6 Must Die”一直在Twitter上晃来晃去。</p><p>原文在此：<a
title="http://mashable.com/2009/07/16/ie6-must-die/" href="http://mashable.com/2009/07/16/ie6-must-die/">http://mashable.com/2009/07/16/ie6-must-die/</a></p><p>目前，mashable发起的这一抵制IE6的活动已经有7700多名Twitter用户的参与（并且还在不断增加中……）。你也可以到Twibbon参加这个<a
href="http://twibbon.com/join/IE6-Must-Die" target="_blank">改头像请愿的活动</a>。</p><p>而在实际项目的开发中，你也可以和你的产品经理商量一下，要么给IE6用户增加一些提示升级的推广信息；要么对他们关闭某些功能（前提是务必说明你有这些高级功能，并且为什么给他关了……）。【更多实际行动，请参考<a
href="http://shawphy.com/2009/07/ie6-must-die.html" target="_blank">Shawphy的这篇博文</a>。】</p><p><a
href="http://blog.benhuoer.com/" target="_blank">笨活儿博客</a>就添加了明显的“扰民信息”……</p><p
style="text-align: center"><a
href="http://blog.benhuoer.com/"><img
title="upgrade-message" src="http://blog.benhuoer.com/wp-content/uploads/2009/07/upgrademessage_thumb.jpg" alt="upgrade-message" width="422" height="183" /></a></p><p>“<a
href="http://fallwith.me/no-ie.html" target="_blank">升级您的浏览器</a>”链接到这里：<a
title="http://fallwith.me/no-ie.html" href="http://fallwith.me/no-ie.html">http://fallwith.me/no-ie.html</a>。<strong>欢迎您直接套用我的模板。</strong></p><p>本文极为渴求被转发！不注明出处也没关系！！<strong>搞前端的，都行动起来吧！</strong></p><p>本文蓝色理想讨论帖：<a
href="http://bbs.blueidea.com/thread-2939958-1-1.html" target="_blank">http://bbs.blueidea.com/thread-2939958-1-1.html</a></p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/my-first-project.html" rel="bookmark">果冻恙 &mdash; 我的第一个作品</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology" title="查看 Web技术 中的全部文章" rel="category tag">Web技术</a>        标签: <a
href="http://blog.benhuoer.com/tag/css" rel="tag">CSS</a>, <a
href="http://blog.benhuoer.com/tag/html5" rel="tag">HTML5</a>, <a
href="http://blog.benhuoer.com/tag/web%e6%a0%87%e5%87%86" rel="tag">Web标准</a>, <a
href="http://blog.benhuoer.com/tag/%e6%b5%8f%e8%a7%88%e5%99%a8" rel="tag">浏览器</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/ie6-must-die.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/ie6-must-die.html#comments" target="_blank">已经有33条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/ie6-must-die.html&title=Web技术要发展，IE6必须先消失！&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/ie6-must-die.html/feed</wfw:commentRss> <slash:comments>33</slash:comments> </item> <item><title>固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</title><link>http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html</link> <comments>http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html#comments</comments> <pubDate>Mon, 13 Jul 2009 08:26:02 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[网页设计]]></category> <category><![CDATA[A List Apart]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Smashing Magazine]]></category> <category><![CDATA[布局]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1556</guid> <description><![CDATA[英文原文：Fixed vs. Fluid vs. Elastic Layout: What’s The Right One For You? 译文原文：固定 vs. 流动 vs. 弹性：哪种布局更适合你？ ©请尊重作者和译者   若需转载   请依原样保留本声明 另有一篇《自适应CSS布局——流动布局新时代》，在我草稿箱里放了快一个月了，一直没翻译完。但另有高手已经完成，请看：http://www.denisdeng.com/?p=324 有一个问题已经困扰网页设计师们很久了：该使用固定、流动、弹性，还是混合布局呢？它们各有优缺点。最终的决定取决于网站的可用性，单用某一种布局就想达到目的，可能没那么容易。那么，既然如此令人困惑，是否有做出正确决定的诀窍呢？考虑好几个问题，恰当地设定目标结果，你也能做出融合各方优点的成功布局设计。 本文将讨论每种布局方案的利与弊。其实，只要你时刻注意可用性，每种方案都能实现成功的网站布局。 您也可以参考一下我们以前的文章： Flexible Layouts: Challenge For The Future 讨论弹性布局对未来的挑战 Applying Divine Proportion To Your Web Designs 阐述如何将神圣比例（divine proportion）运用到固定布局中 为什么要争论这些？网页设计受可用性的大棒指引，而由于网站用户的多样性，已经很难做出对不同用户都有足够可用性的网站。 当设计的网站会面向众多用户时，设计师必须考虑访客之间的下列潜在差异： 屏幕分辨率 用的哪款浏览器 浏览窗口是否最大化 是否启用占位置的浏览器的额外组件（如历史、书签、Google工具栏等等） 乃至操作系统和硬件情况 由于并无标准规定网页大小，网页设计师工作时就需要解决不计其数的问题。 1. 固定布局和流动布局的差异 尽管大部分设计师和开发者都对固定和流动网页布局有基本的了解，我们还是简单明确一下概念。 固定网页布局 固定网页布局指网站内容被一个固定宽度的容器包裹，容器内的区块都有固定的百分比或者像素宽度值。最重要的一点——容器是不能移动的。不管屏幕分辨率如何变化，访客看到的都是固定宽度的内容。 上图显示了固定宽度网页布局大体上的实现方式。内部组件被分别设定为固定的520、200、200像素宽。960像素宽度已经成了现代网页设计的一项标准，因为大多数用户的屏幕分辨率都在1024×768及以上。 流动网页布局 [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html" rel="bookmark">提升设计品质的8种布局方案[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/5-simple-tricks-to-bring-light-and-shadow-into-your-designs.html" rel="bookmark">五个为你的设计添加光影效果的简单技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<blockquote><p>英文原文：<a
href="http://www.smashingmagazine.com/2009/06/02/fixed-vs-fluid-vs-elastic-layout-whats-the-right-one-for-you/" target="_blank">Fixed vs. Fluid vs. Elastic Layout: What’s The Right One For You?</a></p><p>译文原文：<a
href="http://www.smashingmagazine.com/2009/06/02/fixed-vs-fluid-vs-elastic-layout-whats-the-right-one-for-you/" target="_blank">固定 vs. 流动 vs. 弹性：哪种布局更适合你？</a></p><p>©请尊重作者和译者   若需转载   请依原样保留本声明</p></blockquote><blockquote><p>另有一篇《<a
href="http://www.denisdeng.com/?p=324">自适应CSS布局——流动布局新时代</a>》，在我草稿箱里放了快一个月了，一直没翻译完。但另有高手已经完成，请看：<a
href="http://www.denisdeng.com/?p=324">http://www.denisdeng.com/?p=324</a></p></blockquote><p>有一个问题已经困扰网页设计师们很久了：该使用固定、流动、弹性，还是混合布局呢？它们各有优缺点。最终的决定取决于网站的可用性，单用某一种布局就想达到目的，可能没那么容易。那么，既然如此令人困惑，<strong>是否有做出正确决定的诀窍呢</strong>？考虑好几个问题，恰当地设定目标结果，你也能做出融合各方优点的成功布局设计。</p><p>本文将讨论每种布局方案的利与弊。其实，只要你时刻注意可用性，每种方案都能实现成功的网站布局。</p><p><span
id="more-1556"></span></p><p>您也可以参考一下我们以前的文章：</p><ul><li><a
title="Flexible Layouts: Challenge For The Future" href="http://www.smashingmagazine.com/2008/06/26/flexible-layouts-challenge-for-the-future/?cp=6" target="_blank">Flexible Layouts: Challenge For The Future</a><br
/> 讨论弹性布局对未来的挑战</li><li><a
title="Applying Divine Proportion To Your Web Designs" href="http://www.smashingmagazine.com/2008/05/29/applying-divine-proportion-to-web-design/" target="_blank">Applying Divine Proportion To Your Web Designs</a><br
/> 阐述如何将神圣比例（divine proportion）运用到固定布局中</li></ul><p>为什么要争论这些？网页设计受可用性的大棒指引，而由于网站用户的多样性，已经很难做出对不同用户都有足够可用性的网站。</p><p>当设计的网站会面向众多用户时，设计师必须考虑<strong>访客之间的下列潜在差异</strong>：</p><ul><li>屏幕分辨率</li><li>用的哪款浏览器</li><li>浏览窗口是否最大化</li><li>是否启用占位置的浏览器的额外组件（如历史、书签、Google工具栏等等）</li><li>乃至操作系统和硬件情况</li></ul><p>由于并无标准规定网页大小，网页设计师工作时就需要解决不计其数的问题。</p><h3>1. 固定布局和流动布局的差异</h3><p>尽管大部分设计师和开发者都对固定和流动网页布局有基本的了解，我们还是简单明确一下概念。</p><h4>固定网页布局</h4><p>固定网页布局指网站内容被一个固定宽度的容器包裹，容器内的区块都有固定的百分比或者像素宽度值。最重要的一点——容器是不能移动的。不管屏幕分辨率如何变化，访客看到的都是固定宽度的内容。</p><p><a
href="http://blog.benhuoer.com" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed.jpg" alt="Fixed Website Layout" /></a></p><p>上图显示了固定宽度网页布局大体上的实现方式。内部组件被分别设定为固定的520、200、200像素宽。960像素宽度已经成了现代网页设计的一项标准，因为大多数用户的屏幕分辨率都在1024×768及以上。</p><h4>流动网页布局</h4><p>流动网页布局，也称为<strong>流体网页布局</strong>，其实现方法则是大多数组件（包括主容器）都设成百分比宽度，并且根据用户的屏幕分辨率自适应。</p><p><a
href="http://blog.benhuoer.com" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fluid.jpg" alt="Fluid Website Layout" /></a></p><p>上图展示了一个流动网页布局。尽管大多数设计师会给流动布局内某些特定元素（如外边距和内留白）以固定宽度，整个布局大体上还是使用百分比宽度，并根据用户不同而自动调整实际宽度。</p><h3>2. 固定布局的网页设计</h3><p>很多设计师都更喜欢固定布局，因为他们觉得固定的比较保险：<strong>设计师看到什么，用户看到的就是什么</strong>。不过，说到其利与弊，则同流动布局一样让人揪心。</p><h4>利</h4><ul><li>固定宽度布局的设计更简便，更容易自定义。</li><li>任意浏览器下的显示宽度都一样，对于图像、表单、视频等宽度固定的内容，潜在的冲突更少。</li><li>不用设定min-width（最小宽度）和max-width（最大宽度），这两个属性并不被所有浏览器支持。</li><li>即使网页被设计成兼容最小屏幕分辨率800×600的大小，在大分辨率显示器下，内容仍然足够易读。</li></ul><h4>弊</h4><ul><li>固定宽度的布局可能会给高分辨率屏幕用户带来巨大的页面空白，从而破坏“神圣比例”、“<a
href="http://zl.pcw.com.cn/post/287/58078" target="_blank">三分割法则</a>”、整体平衡，乃至其他设计原则。</li><li>小屏幕上可能会出现水平滚动条，影响用户体验。</li><li>无缝材质拼图，纹样和其他连续图像需要针对大分辨率做出优化。</li><li>总体来说，固定宽度的可用性更低。</li></ul><h4>固定布局的设计实例</h4><p>下列五个网页的设计师都充分利用了固定布局网页的特征。这些网站无不融合了大量设计元素，<strong>利用固定布局创建出完美的场景</strong>。在固定宽度的助益下，设计师方能更好地控制站点内容周边额外的设计元素，从而更为精准地调节内容和导航的宽度。</p><p><a
href="http://lebloe.com/" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed1.jpg" alt="Lebloe.Com" /></a></p><p><a
href="http://www.corvusart.com/" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed2.jpg" alt="Corvus Art Design Studio" /></a></p><p><a
href="http://nathan-sanders.com/" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed3.jpg" alt="Nathan-Sanders.Com" /></a></p><p><a
href="http://www.nineliondesign.com/" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed4.jpg" alt="Nine Lion Design" /></a></p><p><a
href="http://www.colourpixel.com/" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fixed5.jpg" alt="Colour Pixel" /></a></p><p>请特别注意设计师们是如何针对宽屏幕设计连续图像的（不妨把你的屏幕分辨率调高一点试试）。</p><h3>3. 规避固定布局的坏处</h3><p>如果你已经决定要用固定布局，下面这些小技巧你可就不得不知。它们帮你弱化固定布局的坏影响，助你做出成功的设计。</p><p
class="attention">译注：下面这段有凑字数赚稿费之嫌，<a
href="#skip_t1">点此跳过这段</a>。</p><h4>先看下统计数据</h4><p>现在大部分设计师都是假定大部分互联网用户都使用的1024×768或更高的分辨率。 <a
href="http://www.w3schools.com/browsers/browsers_display.asp">W3Schools公布的一份投票</a>结果显示，事实并非如此（请注意W3Schools的数据并不能完全相信，后面会有详细解释）：</p><p><a
href="http://blog.benhuoer.com" target="_blank"><img
src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/piechart.jpg" alt="Screen Resolution Pie Chart" /></a></p><p>如您所见， 640×480 甚至不够格在这张表上出现。W3Schools的数据表明这个分辨率似乎已经完全被用户抛弃了。而事实上，确实还有用户在使用这个分辨率，只不过用户数量太少，设计师完全把他们忽略掉，去做一些更合适、对较高分辨率有更佳可用性的设计。</p><p>即使对于使用这种分辨率的用户来说，他们也可能只是在一些方便携带的小型电脑商使用，并不是他们平常使用的主要屏幕分辨率。</p><p>不过，这里的统计数据可能也<strong>没有</strong>大家期待的那么准确。因为W3Schools的访客基本上都是一个特定群体（设计师和网页开发者），结果会和普通公众有点偏差。不过，其他调查也都大同小异。根据一些独立公司在2009年的调查显示，800×600的分辨率使用者比例在10%以下。（译注：根据笨活儿的网站统计数据，这个数值在2%以下）</p><p>下面这张有趣的表格来自<a
href="http://sohtanaka.com/">SohTanaka.com</a>，他们研究了一些大型网站对屏幕分辨率的兼容情况：</p><p><a
href="http://www.sohtanaka.com/web-design/how-much-longer-will-we-design-for-1024" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/topsiteaccomodations.jpg" alt="Screen Resolution Accommodations of some top websites." /></a></p><p>调查中涉及到的所有网站，最终都完成了华丽大变身。即使是最大的互联网公司，也都确定他们的主要受众是拥有较大屏幕分辨率的用户。</p><p>关于屏幕分辨率的其他研究，您还可以参考下面的资源：</p><ul><li><a
href="http://www.w3counter.com/globalstats.php" target="_blank">W3Counter</a></li><li><a
href="http://www.thecounter.com/stats/2009/March/res.php" target="_blank">TheCounter.com Global Stats</a></li><li><a
href="http://www.onestat.com/html/aboutus_pressbox31.html" target="_blank">OneStat.com</a></li></ul><h4 id="skip_t1">960px 还是 760px?</h4><p>综上所述，大多数设计师都是要么选择960，要么选择760作为总的像素宽度。前者更适合1024×768以及更高分辨率的屏幕，还能有一点留白。后者则是800×600分辨率下的最佳显示宽度，设置成这一宽度能够照顾到那10%，而较大屏幕上看起来也还不赖。</p><h4>总是将布局整体居中对齐</h4><p>如果要使用固定宽度设计，务必保证主容器居中对齐，以保持平衡（一般利用<code>margin: 0 auto;</code>就可以了）。不然，遇上宽屏用户，你的内容就会被挤到某个角落，很不好看。</p><h3>4. 流动页面布局</h3><p>设计师有很多理由不使用流动布局，不过大家很多时候也看不到流动布局的好。下面列出有运用流动布局时的打算时需要考虑的利与弊：</p><h4>利</h4><ul><li>流动网页布局拥有更强的亲和力，因为它能根据客户端的情况自适应。</li><li>在不同浏览器和屏幕分辨率下的额外空白量都差不多，更符合视觉吸引力要求。</li><li>如果设计得当，流动布局能避免在小屏幕上的水平滚动条。</li></ul><h4>弊</h4><ul><li>设计师对客户端的显示效果更难以控制，由于他们使用特定大小的屏幕，也更不容易发现潜在问题。</li><li>图片、视频以及其他拥有固定宽度的内容不得不被设置上不同宽度，以配合不同的屏幕分辨率。</li><li>对于特别大的显示屏，内容不够多的话就会造成过量空白，破坏美感。</li></ul><h4>流动布局的实例</h4><p>下面两例都使用了百分比宽度来适应不同屏幕分辨率。第一个例子通过调整内容区块的宽度来适应，第二个例子则调整空白区域大小。</p><p><a
href="http://www.simplebits.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fluid1_large.jpg" alt="Simple Bits" /></a></p><p><a
href="http://www.simplebits.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fluid1_small.jpg" alt="Simple Bits" /></a></p><p><a
href="http://www.blossomgraphicdesign.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fluid2_large.jpg" alt="Blossom Graphic and Web Design Boutique" /></a></p><p><a
href="http://www.blossomgraphicdesign.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/fluid2_small.jpg" alt="Blossom Graphic and Web Design Boutique" /></a></p><h3>5. 设计适用的流动网页布局</h3><p>尽管流动布局会带来某些问题，但这些问题其实能通过一点小把戏解决。</p><h4>采用简单设计</h4><p>应用到流动网页布局的<strong>图案和复杂技巧</strong>越少，其建立和维护也就越容易。同时也能更方便地适应不同屏幕分辨率。有了更加精炼的代码和设计，就能更好得避免、发现和解决兼容问题。</p><p>以<a
href="http://www.smashingmagazine.com" target="_blank">Smashing Magazine</a>为例，他们就采用了流动布局。设计非常简单，只有顶部的黑色+橘色导航条是延伸开的，各内容区域的宽度会根据情况有一定的改变。利用CSS兼容了所有可能的情形，杜绝了侧边栏和内部内容发生错位。</p><h4>最小宽度(min-width)和最大宽度(max-width)</h4><p>这两个CSS属性，min-width 和 max-width，可以用来为过大或过小屏幕的用户指定一个固定宽度。屏幕过小的时候，内容区块固定成指定宽度，屏幕下方也出现一个水平滚动条；屏幕过大的时候，内容也固定到最大宽度，以免延展得太开，影响文字的可读性。更多细节请参考：</p><ul><li><a
href="http://www.w3school.com.cn/css/pr_dim_max-width.asp">W3School上关于CSS最大宽度属性的页面</a>，</li><li><a
href="http://www.w3school.com.cn/css/pr_dim_min-width.asp" target="_blank">W3School 上关于CSS最小宽度属性的页面</a>。</li></ul><p>不幸的是，大多数版本的IE浏览器都不支持这两个属性值。这一问题可以通过IE特有的expression来解决：<a
href="http://perishablepress.com/press/2007/01/16/maximum-and-minimum-height-and-width-in-internet-explorer/">Maximum and Minimum Height and Width in Internet Explorer</a>（另：<a
href="http://space.chinavisual.com/html/83/207583-27129.html" target="_blank">中文参考</a>）。</p><h3>6. 弹性设计</h3><p>其实设计网页布局时还有第三种选择。部分设计师更喜欢采用<strong>糅合了两种主要布局类型特点</strong>的所谓“弹性布局(elastic layout)”。其要点就在于使用单位<tt>em</tt>来定义元素宽度。下面的引言介绍了何谓em，而它又是如何发挥作用的：</p><blockquote><p>“电脑屏幕上的‘像素’是一个不可缩放的点，而em则是相对于字体大小的单位宽度。它随着字体大小的变化而变化，反应用户对字体大小的设定。”<br
/> - <a
href="http://www.alistapart.com/articles/elastic">Patrick Griffiths, A List Apart</a></p></blockquote><p>尽管弹性设计貌似会带来很多好处，它仍然像前两种布局一样有利有弊。</p><h4>利</h4><ul><li>如果合理运用，这种布局设计能带来非常友好的用户界面。目标效果是所有东西都能根据用户的偏好增大或缩小尺寸。</li><li>弹性布局更适合面对流动和固定布局难以抉择的设计师，因为二者的优点弹性布局都有。</li></ul><h4>弊</h4><ul><li>尽管第一条“利”说得没错，弹性布局还是为可用性埋下了很多地雷。得需要十分的聪明才智和不断测试才能让布局适合所有用户。</li><li>这种布局比前述两种要难实现得多，可能那一小点的可用性并不值得你花这么多功夫。</li><li>由于这种布局的特殊性，有些弹性布局设计可能需要额外的样式表，并针对IE6做些特别的调整</li></ul><h4>弹性布局的实例</h4><p>弹性布局的流动布局表面上看起来十分相似，因为大部分时候大家都把它们混淆了。其根本区别在于，弹性布局的长宽单位是em，而流动布局使用百分比，并且弹性布局的尺寸主要根据字体大小而变化。这类设计根据用户浏览器中的字体大小来做出自适应。</p><p><a
href="http://clearleft.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/elastic1_large.jpg" alt="Clear Left" /></a></p><p><a
href="http://clearleft.com/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/elastic1_small.jpg" alt="Clear Left" /></a></p><p><a
href="http://www.mirella-furlan.de/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/elastic2_large.jpg" alt="Mirella Furlan" /></a></p><p><a
href="http://www.mirella-furlan.de/" target="_blank"><img
style="display: inline" src="http://s635.photobucket.com/albums/uu71/benhuoer/bh/layout-vs/elastic2_small.jpg" alt="Mirella Furlan" /></a></p><h3>7. 哪一种布局更适合你？</h3><p>选择何种布局应该<strong>由网站的性质决定</strong>。权衡上述利弊，根据你的网站需求找到合适的解决方案</p><p>以作品集网站为例，这种网站可能固定宽度布局最为适用。这样你就能做出更有设计感的东西。你不仅能更好地控制设计中的单个元素，作品的图像展示也变得更易处理。对很多设计师来说（包括那些非作品集站点的设计师），固定布局就是一个既容易相处，又能给人安全感的好朋友。</p><p>而那些要<strong>追求100%的兼容性</strong>的设计师最好就考虑一下花点时间在流动布局上。最大的挑战不在于宽屏上的可能出现的过多留白，而是那一小撮小屏幕上的显示效果。对于有大量用户的网站来说，百分比很小的用户群，绝对数目也相当可观。就算不考虑这点，大网站也应该有简洁干练的设计感，而这可以利用流动布局高效率地实现。</p><p>还是做不了决定？别担心，还有弹性或部分弹性的布局设计可供选择。如果运用得当，弹性布局能完全整合两大主要布局的优点。聪明的设计师懂得如何利用弹性设计的原则，在字体和容器大小上使用em单位，然后混合运用百分比和像素宽度来设定其他布局元素。</p><h4>其他设计师怎么说</h4><p>Heidi Cool 在帖子 <a
href="http://cuwebd.ning.com/forum/topic/show?id=1763934%3ATopic%3A22003">Fixed vs. Liquid vs. Elastic Layout</a> 上的回复</p><p>这位设计师的发言针对与他人合作运用布局的情况，而这些人可能对网页设计了解得并不多：</p><blockquote><p>“我反复思考过这一问题。在case.edu上我们最终采用了固定布局，因为：</p><ol><li>流动布局更复杂，我们<strong>为那些有不同技能的用户提供了模板化的设计，而他们的工作非常容易破坏流动布局</strong>（模板只是一些普通的HTML文件，并不是Dreamweaver模板）。</li><li>我们不想看到网站维护者们做出太宽的页面——那种文本行很长，非常难以阅读的页面。</li><li>我们想限制那些总是想填满所有空白的人所面对的空白量。如果他们用的是大屏幕显示器，就很容易把页面填满，而忽略了在小屏幕上其显示效果是多么糟糕。</li></ol><p>大家都看得出来，最主要的问题还是集中在我们的网站是由拥有不同技能水平的人所维护、构建、增删内容这一事实上。如果是我一个人做网站，写代码的时候我可能就会更多地根据目标、内容等等来做决定。”</p></blockquote><p>madr 在 <a
href="http://www.sitepoint.com/blogs/2009/04/17/flexible-designs-dying-ou">Where Have All the Flexible Designs Gone?</a> 上的回复</p><p>他提出了固定宽度布局的另外两个优点：</p><blockquote><p>“<strong>barner和广告通常都是用图像和Flash来实现的</strong>，这些内容让弹性或灵活的布局更难制作。我曾在newspaper world工作过一年半，广告给区块真的特别难伺候。文章配图也是，如果用上弹性布局，阅读区就可能变得过大，相对顶部图片而言。</p><p>除了Safari 3及以下（Safari 4马上就要来了[笨活儿:已经来了…]）、Firefox 2及以下、IE6及以下（马上就要被淘汰了…）的所有浏览器<strong>都支持了按照页面整张缩放，而不是只缩放字体</strong>。这种情况让设计灵活的弹性布局显得更无实用性，大部分用户甚至都注意不到你的一片好心。”</p></blockquote><p>jphilapy 在 <a
href="http://www.sitepoint.com/blogs/2009/04/17/flexible-designs-dying-ou">Where Have All the Flexible Designs Gone?</a> 上的回复</p><p>流动布局的两个值得支持的地方：</p><blockquote><p>“流动布局的网站可以适应很多分辨率。这样你就不用去调查讨论用户的屏幕大小。况且，屏幕分辨率的统计数据始终是个谜；几乎没人在全屏模式运行浏览器，然后还有很多工具栏、边栏、小工具之类的东西，造成了不计取数的屏幕状况。</p><p>移动电话（就说iPhone吧），游戏机等也渐渐成为网页浏览器家族的一大成员。总之，这类设备的屏幕分辨率都很小，能够从灵活的网页布局设计中获益。</p></blockquote><p>Calrion 在 <a
href="http://www.456bereastreet.com/archive/200504/about_fluid_and_fixed_width_layouts">About Fluid- and Fixed-Width Layouts</a> 上的回复</p><p>明确说明了运用弹性布局的情况：</p><blockquote><p>“我觉得‘弹性’布局是最佳选择。<strong>某种程度上是流动的</strong>，但又有固定宽度来保证文本行不会变的过长。</p><p>我是Windows用户，一般情况下都最大化窗口。</p><p>之所以要最大化，是因为这样我能更好的关注我正在使用的应用程序。要知道我桌面上总是有很多东西。另外，最大化我的浏览器（Firefox）能给界面元素提供最多空间，尤其是书签工具栏和标签卡区域。</p><p>说到可用性，<strong>流动布局对有经验的用户可能最好用了</strong>。因为他们会主动控制浏览窗口尺寸。对于经验较少的用户，<strong>弹性布局可能最好用</strong>，因为它能自发的阻止自己变得过分宽大。</p></blockquote><p>Georg 在 <a
href="http://www.456bereastreet.com/archive/200504/about_fluid_and_fixed_width_layouts">About Fluid- and Fixed-Width Layouts</a> 的回复</p><p>为什么混合运用三种布局能获得最佳结果：</p><blockquote><p>“<strong>我更喜欢主区域流动，侧边栏固定，（也可以）再加一点弹性部分。</strong>我也总是为文本区设定600像素的最大宽度。</p><p>使用min/max来设定整个页面，宽度保持在600至1200像素之间，并且居中对齐。</p><p>在600到2400宽度的屏幕上全面测试，其他宽度就等用户自己解决吧。文本行从不会太宽（600就是最大宽度了），页面也不会在挤压下过早错位。</p><p>我收获的大部分反馈是，<strong>用户几乎没注意到有什么东西让他们困惑</strong>。网页很易读。说明我的做法是一项<strong>有用的妥协</strong>。</p><p>你的站在我这儿看起来不错，所以我觉得它是有用的妥协。我年迈的双眼觉得文字实在太小了，那我就在1280宽屏上的Opera里把页面放大至120%。始终不会有问题。”</p></blockquote><h3>更多资源</h3><p>您可能会愿意参考下列文章：</p><ul><li><a
href="http://green-beast.com/blog/?p=199">CSS Layouts: The Fixed. The Fluid. The Elastic.</a><br
/> 讨论了三种布局的优缺点：固定、流动和弹性布局。</li><li><a
href="http://www.flyte.biz/resources/newsletters/04/12-fluid-v-fixed-web-pages.php">Fluid vs. Fixed Websites: Which is right for you?</a><br
/> 解释了选择正确布局类型的问题所在，告诉你如何正确选用。</li><li><a
href="http://www.stuffandnonsense.co.uk/archives/fixed_or_fluid_you_decide.html">Fixed or Fluid, you decide</a><br
/> 聚焦于某位设计师的选择过程。</li><li><a
href="http://960.gs/">960 Grid System</a><br
/> 固定宽度布局的流行解决方案。</li><li><a
href="http://fluid.newgoldleaf.com/">Fluid Grid System</a><br
/> 和960网格系统类似，不过适用于流动布局。</li><li><a
href="http://www.sohtanaka.com/web-design/how-much-longer-will-we-design-for-1024">How Much Longer Will We Design for 1024?</a><br
/> 讨论近期的屏幕分辨率统计数据。</li></ul><h4>关于作者</h4><p><em>Kayla Knight 是一名大学生，兼职网页开发，自由职业者，blogger。他利用业余时间维护<a
href="http://webitect.net/">Webitect.net</a>，一个面向网站管理员的博客，提供教程、文章、技巧和资源等。</em></p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html" rel="bookmark">提升设计品质的8种布局方案[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/5-simple-tricks-to-bring-light-and-shadow-into-your-designs.html" rel="bookmark">五个为你的设计添加光影效果的简单技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-design" title="查看 网页设计 中的全部文章" rel="category tag">网页设计</a>        标签: <a
href="http://blog.benhuoer.com/tag/a-list-apart" rel="tag">A List Apart</a>, <a
href="http://blog.benhuoer.com/tag/css" rel="tag">CSS</a>, <a
href="http://blog.benhuoer.com/tag/smashing-magazine" rel="tag">Smashing Magazine</a>, <a
href="http://blog.benhuoer.com/tag/%e5%b8%83%e5%b1%80" rel="tag">布局</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html#comments" target="_blank">已经有7条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html&title=固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html/feed</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>即刻提升jQuery性能的十个技巧[TUTS+]</title><link>http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html</link> <comments>http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html#comments</comments> <pubDate>Fri, 10 Jul 2009 05:54:37 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[前端开发]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[TutsPlus]]></category> <category><![CDATA[教程]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1569</guid> <description><![CDATA[本文提供即刻提升你的脚本性能的十个步骤。不用担心，这并不是什么高深的技巧。人人皆可运用！ 这些技巧包括： 使用最新版本 合并、最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前后文 建立缓存 避免DOM操作 避免使用concat()，利用join()处理长字串 返回false值 利用小抄和参考文档 1. 使用最新版本 jQuery一直处于不断的开发和改进过程中。 John 和他的团队不断研究着提升程序性能的新方法。 一点题外话，几个月前他还发布了Sizzle，一个据说能在Firefox中把程序性能提升3倍的JS选择器库。 如果你不想时刻关注是否有新版本，然后再花时间下载上传，Google 就又能帮你一把了。他们的服务器上存储了大量Ajax库供您选择。 &#60;!-- 利用一个简单的script标签调用API --&#62; &#60;script type="text/javascript" src="http://www.google.com/jsapi"&#62;&#60;/script&#62; &#60;script type="text/javascript"&#62; /* 加载 jQuery v1.3.2 */ google.load ("jquery", "1.3.2", {uncompressed: false}); /* 加载完成后弹出消息 */ function onLoad () { alert ("jQuery + Google API!"); } google.setOnLoadCallback (onLoad); &#60;/script&#62; 编辑按：另一个更为简单快速的方法是直接使用脚本链接。如果要使用特定版本的jQuery，你可以使用上面的方法；如果想直接使用最新版，下面这句代码就够了： [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/anatomy-of-a-drupal-theme.html" rel="bookmark">[Drupal模板制作手册-2]主题的解剖</a></li><li><a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" rel="bookmark">正则表达式高级技巧背后的关键概念[SM]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>本文提供即刻提升你的脚本性能的十个步骤。不用担心，这并不是什么高深的技巧。人人皆可运用！<br
/> 这些技巧包括：</p><ol><li> 使用最新版本</li><li>合并、最小化脚本</li><li>用for替代each</li><li>用ID替代class选择器</li><li>给选择器指定前后文</li><li>建立缓存</li><li>避免DOM操作</li><li>避免使用concat()，利用join()处理长字串</li><li>返回false值</li><li>利用小抄和参考文档</li></ol><p> <span
id="more-1569"></span><br
/><h3>1. 使用最新版本</h3><div><img
style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://nettuts.s3.amazonaws.com/359_jqueryTips/j2.png" alt="jQueryTips-Use_Latest" /></div><p>jQuery一直处于不断的开发和改进过程中。 <a
href="http://ejohn.org/" target="_blank">John</a> 和他的团队不断研究着提升程序性能的新方法。</p><p>一点题外话，几个月前他还发布了<a
href="http://sizzlejs.com/" target="_blank">Sizzle</a>，一个据说能在Firefox中把程序性能提升3倍的JS选择器库。</p><p>如果你不想时刻关注是否有新版本，然后再花时间下载上传，Google 就又能帮你一把了。他们的服务器上存储了大量<a
href="http://code.google.com/apis/ajaxlibs/" target="_blank">Ajax库</a>供您选择。</p><pre class="brush:jscript">&lt;!-- 利用一个简单的script标签调用API --&gt;
&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
/* 加载 jQuery v1.3.2 */
google.load ("jquery", "1.3.2", {uncompressed: false});
/* 加载完成后弹出消息 */
function onLoad () {
alert ("jQuery + Google API!");
}
google.setOnLoadCallback (onLoad);
&lt;/script&gt;</pre><p><strong>编辑按：</strong>另一个更为简单快速的方法是直接使用脚本链接。如果要使用特定版本的jQuery，你可以使用上面的方法；如果想直接使用最新版，下面这句代码就够了：</p><pre class="brush:jscript">&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"&gt;&lt;/script&gt;</pre><p><strong>笨活儿</strong>：特定版本的还可以这样加载：</p><pre class="brush:jscript">&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&gt;&lt;/script&gt;</pre><h3>2. 合并、最小化脚本</h3><p
style="text-align:center;"><img
src="http://nettuts.s3.amazonaws.com/359_jqueryTips/jquery.png" alt="Minify" width="460" height="147" /></p><p>大部分浏览器都不能同时处理多个脚本文件，所以它们都是排队加载——加载时间也相应地延长了。</p><p>考虑到你网站的每个页面都会加载这些脚本，你应该考虑把它们放到单个文件中，然后利用压缩工具（比如 <a
href="http://dean.edwards.name/packer/" target="_blank">Dean Edwards</a> 的<a
href="http://dean.edwards.name/packer/" target="_blank">这款</a>）把它们最小化。更小的文件无疑将带来更快的加载速度。</p><blockquote><p>JavaScript和CSS压缩的目的是在保持脚本的执行性能的同时，减少数据传递的字节数（可以通过减小原始文件，也可以利用gzip。大多数产品级的网络服务器都把gzip作为HTTP协议的一部分）。</p><p>— 引自 <a
href="http://developer.yahoo.com/yui/compressor/" target="_blank">YUI compressor</a>，一款 <strong>jQuery官方推荐</strong>的压缩脚本的工具。</p></blockquote><h3>3. 用for替代each</h3><p>原生函数总是比辅助组件更快。</p><p>如果遇到需要遍历对象的情况（如从远程接收的JSON对象），你最好<strong>重写</strong>你的（JSON）对象为一个数组，数组的循环处理要容易些。</p><p>利用<a
href="http://getfirebug.com/" target="_blank">Firebug</a>，我们能测定每个函数的执行时间。</p><pre class="brush:jscript">var array = new Array ();
for (var i=0; i&lt;10000; i++) {
array[i] = 0;
}
console.time('native');  //原生for函数
var l = array.length;
for (var i=0;i</pre><p
style="text-align:center;"><img
src="http://chartgizmo.com/GenerateChart?id=6757" alt="a chart" /></p><p>上面的结果显示原生代码只需2毫秒就做到的事，利用jQuery的each方法需要26毫秒。而且这还只是我在本机上测试一个基本上啥也没做的函数的结果，当遇到更复杂的情况，例如设置css属性或DOM操作时，时间差异肯定更大。</p><h3>4. 用ID替代class选择器</h3><p>利用ID选择对象要好得多，因为这时jQuery会使用浏览器的原生函数getElementByID()来获取对象，查询速度很快。</p><p>因此，比起利用那些方便的css选择技巧，使用更为复杂的选择器也是值得的（jQuery也为我们提供了复杂选择器）。你也可以手工书写自己的选择器（其实比你想象中简单），或者为你想要选择的元素指定一个有ID的容器。</p><pre class="brush:jscript">//下例创建一个列表并且填充条目内容
//然后每个条目都被选择一次
//首先使用class选择
console.time('class');
var list = $('#list');
var items = '
<ul>';
for (i=0; i&lt;1000; i++) {
items += '
<li>item</li>
';
}
items += '</ul>
';
list.html (items);
for (i=0; i&lt;1000; i++) {
var s = $('.item' + i);
}
console.timeEnd('class');
//然后利用ID选择
console.time('id');
var list = $('#list');
var items = '
<ul>';
for (i=0; i&lt;1000; i++) {
items += '
<li id="item' + i + '">item</li>
';
}
items += '</ul>
';
list.html (items);
for (i=0; i&lt;1000; i++) {
var s = $('#item' + i);
}
console.timeEnd('id');</pre><p>上面的例子很好地说明了不同选择方式之间的显著性能差异。请看下图，利用class来做选择，时间无限增大，甚至超过了五秒：</p><p
style="text-align:center;"><img
src="http://chartgizmo.com/GenerateChart?id=6758" alt="" /></p><h3>5. 给选择器指定前后文</h3></p><p><a
href="http://docs.jquery.com/Core/context" target="_blank">jQuery的参考文档</a>里说：</p><blockquote><p>传递给jQuery() 原始DOM节点的前后文（如果没有东西被传递，则前后文为整个文档）。</p><p>目的是连同选择器一起，实现更为准确的查询。</p></blockquote><p>所以，如果你一定要利用class来指定目标，至少为选择器<a
href="http://docs.jquery.com/Core/context" target="_blank">指定上下文</a>，以免jQuery费精力去遍历整个DOM文档：</p><p>与其这样写：</p><pre class="brush:jscript">$('.class').css ('color' '#123456');</pre><p>为选择器加上前后文比较好（expression: 目标选择器；context: 前后文）：</p><pre class="brush:jscript">$(expression, context)</pre><p>也就是说：</p><pre class="brush:jscript">$('.class', '#class-container').css ('color', '#123456');</pre><p>这样做要快得多，因为它不用遍历整个DOM。只要找到#class-container就好了。</p><h3>6. 建立缓存</h3><p>不要犯不断重新选择同一个东西的错误。你应该把你要处理的元素缓存为一个变量。</p><p><strong>更不要</strong>在一个循环里重复选择同一个元素！这样做十分影响速度！</p><pre class="brush:jscript">$('#item').css('color', '#123456');
$('#item').html('hello');
$('#item').css('background-color', '#ffffff');
// 这样写更好
$('#item').css('color', '#123456').html('hello').css('background-color', '#ffffff');
// 甚至这样
var item = $('#item');
item.css('color', '#123456');
item.html('hello');
item.css('background-color', '#ffffff');
// 遇到循环,这样做非常不好
console.time('no cache');
for (var i=0; i&lt;1000; i++) {
$('#list').append(i);
}
console.timeEnd('no cache');
// 下面这样要好得多
console.time('cache');
var item = $('#list');
for (var i=0; i&lt;1000; i++) {
item.append (i);
}
console.timeEnd('cache');</pre><p>如下图所示，即使是相对较短的迭代，缓存的效果还是很明显的。</p><p
style="text-align:center;"><img
src="http://chartgizmo.com/GenerateChart?id=6759" alt="" /></p><h3>7. 避免DOM操作</h3><p>DOM操作应该越少越好，因为诸如<a
href="http://docs.jquery.com/Manipulation/prepend" target="_blank">prepend()</a>，<a
href="http://docs.jquery.com/Manipulation/append" target="_blank">append()</a>，<a
href="http://docs.jquery.com/Manipulation/after" target="_blank">after()</a>的插入动作都很费时。</p><p>上面的例子如果用<a
href="http://docs.jquery.com/Html" target="_blank">html()</a>会更快：</p><pre class="brush:jscript">var list = '';
for (var i=0; i&lt;1000; i++) {
list += '
<li>'+i+'</li>
';
}
('#list').html (list);</pre><h3>8. 避免使用concat()，利用join()处理长字串</h3><p>听起来可能挺奇怪，不过这样做真的能提升速度，尤其是当连接特别长的字串时。</p><p>先建立一个数组，放入你想要串联的东西。join()方法比字符串的concat()函数要快得多。</p><pre class="brush:jscript">var array = [];
for (var i=0; i< =10000; i++) {
array[i] = '
<li>'+i+'';
}
$('#list').html(array.join (''));</pre><p>近期一项由<a
href="http://www.sitepen.com/blog/2008/05/09/string-performance-an-analysis/" target="_blank">Tom Trenka</a>发起的测试中，得出了下表的结果：</p><div><img
style="width: 600px; display: block; float: none; margin-left: auto; margin-right: auto;" src="http://www.sitepen.com/blog/wp-content/uploads/2008/05/stringperf.png" alt="" /></div><blockquote><p>“ += 操作符更快——比把字串片段放到数组中然后join起来还要快”，“作为字串缓冲（string buffer）的数组在大部分浏览器中都比string.prototype.concat.apply方法效率更高，Windows下的Firefox 2.0.0.14例外。”</p><p>— Tom Trenka</p></blockquote><h3>9. 返回false值</h3><p>您可能已经注意到，如果函数执行后不返回false，你就会被跳转到页面顶部。</p><p>如果页面较长，这种反应是很烦人的。</p><p>所以，与其这样：</p><pre class="brush:jscript">$('#item').click (function () {
// stuff here
});</pre><p>不如多加一句：</p><pre class="brush:jscript">$('#item').click (function () {
// stuff here
return false;
});</pre><h3>10. 额外小贴士 &#8211; 小抄和参考文档</h3><p
style="text-align:center;"><img
src="http://nettuts.s3.amazonaws.com/359_jqueryTips/cheatsheet.png" alt="" /></p><p>这条建议并不直接提升函数的执行速度，不过如果你肯花时间在这上面，研究研究这些<a
href="http://colorcharge.com/jquery/" target="_blank">小抄</a>和<a
href="http://docs.jquery.com/" target="_blank">参考文档</a>，你将来定能节约很多时间。</p><p>请在手边随时放一张小抄以作快速参考。</p><blockquote><p>英文原文来自NetTut+：<a
href="http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/" target="_blank">10 Ways to Instantly Increase Your jQuery Performance</a></p><p>译文原文来自笨活儿：<a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html">十种方式即刻提升您的jQuery代码性能[TUTS+]</a>。</p><p>©请尊重作者和译者。若需转载，务必保留原文链接。</p></blockquote><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/anatomy-of-a-drupal-theme.html" rel="bookmark">[Drupal模板制作手册-2]主题的解剖</a></li><li><a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" rel="bookmark">正则表达式高级技巧背后的关键概念[SM]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-apps-development" title="查看 前端开发 中的全部文章" rel="category tag">前端开发</a>        标签: <a
href="http://blog.benhuoer.com/tag/css" rel="tag">CSS</a>, <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/jquery" rel="tag">jQuery</a>, <a
href="http://blog.benhuoer.com/tag/tutsplus" rel="tag">TutsPlus</a>, <a
href="http://blog.benhuoer.com/tag/%e6%95%99%e7%a8%8b" rel="tag">教程</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html#comments" target="_blank">已经有3条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html&title=即刻提升jQuery性能的十个技巧[TUTS+]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>果冻恙 &#8212; 我的第一个作品</title><link>http://blog.benhuoer.com/posts/my-first-project.html</link> <comments>http://blog.benhuoer.com/posts/my-first-project.html#comments</comments> <pubDate>Tue, 23 Jun 2009 13:18:00 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[Web技术]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[rewrite]]></category> <category><![CDATA[果冻恙]]></category> <category><![CDATA[虚拟主机]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/posts/%e6%9e%9c%e5%86%bb%e6%81%99-%e6%88%91%e7%9a%84%e7%ac%ac%e4%b8%80%e4%b8%aa%e4%bd%9c%e5%93%81.html</guid> <description><![CDATA[相信学网页的都是从自己的个人主页做起，今天我也来特别放送我的这第一个网页作品。 果冻恙 &#8211; Jelly Young 这是大一暑假，也就是整整两年前做的东西。当时抱着本台湾人编的CSS实例教程（没有系统化讲解，都是一些基本属性的实例应用，书名我忘了），还有一部《Ajax基础教程》，一个人在家里捣鼓，基本上是零基础，家里又没有联网，没办法看网上的教程，基本上就靠着这两本书了。嗯…. 以及Dreamweaver的帮助文档，呵呵。 果冻恙? 嗯哼？ 当年的自我介绍是这样写的： 我在我的世界里轻轻的歌唱。果冻软滑的质感，明亮的色彩，丰富而甜蜜的口味，让人开心，不得不开心呵！我做那只年轻的让认人开心的果冻，我却无力诋毁我内心的忧伤。果冻有恙，无恙？无所依矣！ 同学，不装逼你会死啊？！“我在我的世界里轻轻的歌唱”这句话到底是哪里看来的？好像非常具有代表性…… 嗯哼嗯哼…… 最后一句“无所依矣！”是个嘛东西？你认为大家都像你一样不懂古文吗？唉…… 所以呀，现在我虽然挺讨厌装逼的人，也没想鄙视他们。是的，大家都要经历这个阶段。 个篱小朋友要送我域名一个，让我自己选，我本着单纯而美好的愿望，挖空心思想了这么一个“果冻恙”。想起来，jellyyoung听起来也蛮悦耳的。可惜，后来我们才发现，搜索“果冻恙”会提示：你是不是要找“果冻样”——而这结果，可就不太雅观了…… 哈哈哈。Anyway，当年做这个站的时候，还是对这事儿毫无知觉…… 外观 当年已经学过一点PS，所以你能看到主页的左边放了些我自己P的图。不过，我还不知道用Photoshop来做效果图，所以这个站整个外观都是直接用CSS写的，颜色什么的也是不断改代码试出来的，没有什么mockup之类的东东…  只有背景，是一条渐变图的平铺。因为那本CSS教程上就有讲背景图啦！但是好像现在看起来渐变不够明显？还不如用纯色呢！而且哟，当年我都不知道设置背景图片的同时还可以设背景色的…… 也不知道是哪里学来的设计技巧，每个子页面都是高纯度色。这种做法我一直念念不忘，乃至到后来做学生会网站的时候，也用了四种高纯度色。现在看来，这些色彩，都好囧啊。不是说看着累，而是在某些显示器上看着累…… 显示器稍微有点色差就会受不了。适用范围不广。 首页那个Flash啊，好囧啊。转圈圈，转圈圈，关键词，关键词…… 多么纯真无邪呀～ 不过最囧的还是，里面用到的一个单词meditate，我居然想不起来是啥意思了…… 刚才有道了一下，是“冥思”的意思…… 是的，热情、冥思、自信、善良，就构成了这只让人开心却要自己忧伤的果冻……   嗯…. 严肃，大家都严肃！ 还有那些ＰＳ的图片，唉，看了就让我伤感呀…… 想当年我还是凌厉的小正太一枚，如今就已蜕变成面向猥琐、胡子拉碴、双目无光、人人第一印象都是“你是宅男吧？”的幽怨大叔了…… 技术 都说我基本上是零基础，手边有没有网上的系统教程，所以做的时候都是靠的我对软件的敏感，自己在Dreamweaver里摸索。“站点管理”、“网页模板” 些东西都是自己搞懂的…… 然后JavaScript，是几乎毫无基础，直接抱着《Ajax基础教程》啃，然后自己写出来的。说实话，显得我的JS也不咋地，没有google就写不下去的，连最基本的字符串操作函数都必须随时有参考文档才行…… 想成大事，是还是要费脑子去背才行。 虽说我看了《Ajax基础教程》，但看懂这本书还需要Java基础和servlet的环境实践，所以我也就看了些最基本的概念就没有深入研究了。果冻恙的Ajax用在了日志和友链页面里。 突然从当年的日志里发现，原来我一直都是一个workaholic，只要专心去做一件事了，完全可以废寝忘食。不过啊，要是自己不想做的事，打死也不会去做…… 即使早就过了deadline都还是要推…… 解决办法只有让自己爱上它，或者寄希望与通过一点责任心来控制自己，不然真的没办法强迫的…… 一个下午都耗在Mod_rewrite上了… 由于我的虚拟主机不支持域名绑定子目录，所以我就需要通过rewrite来实现子网站的虚拟主机。前段时间换成了Linux主机，而Apache下的mod_rewrite又和IIS上的ISAPI Rewrite的作用机制有点不一样。我试了很久发现好像mod_rewrite的[L]（停止重修）这个flag没有起作用？不知道是哪里的全局设置出了问题，还是我自己对这一flag的理解没对？有没有高手解释一下？ 最终我选定的方案是： [php]RewriteCond $1 !(test&#124;portfolio&#124;pf&#124;src&#124;demo)/ RewriteCond %{HTTP_HOST} ^(test&#124;portfolio&#124;pf&#124;src&#124;demo)\.benhuoer\.com$ RewriteRule ^(.*) /%1/$1[/php] 核心是判断host name，然后rewrite到子目录下。之所以把HTTP_HOST这个condition放到第二句是需要在RewriteRule里调用那些host前缀，使用%1进行匹配。$1匹配的是前面的RewriteRule的Pattern。第一句是为了防止已经rewrite过的再被rewrite… [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/isapi-rewiter-for-vhost.html" rel="bookmark">用ISAPI Rewiter代替虚拟主机，实现一个空间多个域名共用</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>相信学网页的都是从自己的个人主页做起，今天我也来特别放送我的这第一个网页作品。</p><blockquote><p><a
title="Demo" href="http://demo.benhuoer.com/jellyyoung/" target="_blank">果冻恙 &#8211; Jelly Young</a></p></blockquote><p>这是大一暑假，也就是整整两年前做的东西。当时抱着本台湾人编的CSS实例教程（没有系统化讲解，都是一些基本属性的实例应用，书名我忘了），还有一部《<a
href="http://www.douban.com/subject/1472607/">Ajax基础教程</a>》，一个人在家里捣鼓，基本上是零基础，家里又没有联网，没办法看网上的教程，基本上就靠着这两本书了。嗯…. 以及Dreamweaver的帮助文档，呵呵。</p><p><span
id="more-1564"></span></p><h3>果冻恙? 嗯哼？</h3><p>当年的自我介绍是这样写的：</p><blockquote><p>我在我的世界里轻轻的歌唱。果冻软滑的质感，明亮的色彩，丰富而甜蜜的口味，让人开心，不得不开心呵！我做那只年轻的让<span
style="text-decoration: line-through;">认</span>人开心的果冻，我却无力诋毁我内心的忧伤。果冻有恙，无恙？无所依矣！</p></blockquote><p>同学，不装逼你会死啊？！“我在我的世界里轻轻的歌唱”这句话到底是哪里看来的？好像非常具有代表性…… 嗯哼嗯哼…… 最后一句“无所依矣！”是个嘛东西？你认为大家都像你一样不懂古文吗？唉…… 所以呀，现在我虽然挺讨厌装逼的人，也没想鄙视他们。是的，大家都要经历这个阶段。</p><p>个篱小朋友要送我域名一个，让我自己选，我本着单纯而美好的愿望，挖空心思想了这么一个“果冻恙”。想起来，jellyyoung听起来也蛮悦耳的。可惜，后来我们才发现，搜索“果冻恙”会提示：你是不是要找“果冻样”——而<a
href="http://www.google.cn/search?hl=zh-CN&amp;q=%E6%9E%9C%E5%86%BB%E6%81%99" target="_blank">这结果</a>，可就不太雅观了…… 哈哈哈。Anyway，当年做这个站的时候，还是对这事儿毫无知觉……</p><h3>外观</h3><p>当年已经学过一点PS，所以你能看到主页的左边放了些我自己P的图。不过，我还不知道用Photoshop来做效果图，所以这个站整个外观都是直接用CSS写的，颜色什么的也是不断改代码试出来的，没有什么mockup之类的东东…  只有背景，是一条渐变图的平铺。因为那本CSS教程上就有讲背景图啦！但是好像现在看起来渐变不够明显？还不如用纯色呢！而且哟，当年我都不知道设置背景图片的同时还可以设背景色的……</p><p>也不知道是哪里学来的设计技巧，每个子页面都是高纯度色。这种做法我一直念念不忘，乃至到后来做<a
href="http://www.sausu.com.cn/" target="_blank">学生会网站</a>的时候，也用了四种高纯度色。现在看来，这些色彩，都好囧啊。不是说看着累，而是在某些显示器上看着累…… 显示器稍微有点色差就会受不了。适用范围不广。</p><p>首页那个Flash啊，好囧啊。转圈圈，转圈圈，关键词，关键词…… 多么纯真无邪呀～ 不过最囧的还是，里面用到的一个单词meditate，我居然想不起来是啥意思了…… 刚才有道了一下，是“冥思”的意思…… 是的，热情、冥思、自信、善良，就构成了这只<strong>让人开心却要自己忧伤</strong>的果冻……   嗯…. 严肃，大家都严肃！</p><p>还有那些ＰＳ的图片，唉，看了就让我伤感呀…… 想当年我还是凌厉的小正太一枚，如今就已蜕变成面向猥琐、胡子拉碴、双目无光、人人第一印象都是“你是宅男吧？”的幽怨大叔了……</p><h3>技术</h3><p>都说我基本上是零基础，手边有没有网上的系统教程，所以做的时候都是靠的我对软件的敏感，自己在Dreamweaver里摸索。“站点管理”、“网页模板” 些东西都是自己搞懂的…… 然后JavaScript，是几乎毫无基础，直接抱着《Ajax基础教程》啃，然后自己写出来的。说实话，显得我的JS也不咋地，没有google就写不下去的，连最基本的字符串操作函数都必须随时有参考文档才行…… 想成大事，是还是要费脑子去背才行。</p><p>虽说我看了《Ajax基础教程》，但看懂这本书还需要Java基础和servlet的环境实践，所以我也就看了些最基本的概念就没有深入研究了。果冻恙的Ajax用在了<a
href="http://demo.benhuoer.com/jellyyoung/blog/" target="_blank">日志</a>和<a
href="http://demo.benhuoer.com/demo/jellyyoung/links/" target="_blank">友链</a>页面里。</p><p>突然从当年的日志里发现，原来我一直都是一个workaholic，只要专心去做一件事了，完全可以废寝忘食。不过啊，要是自己不想做的事，打死也不会去做…… 即使早就过了deadline都还是要推…… 解决办法只有让自己爱上它，或者寄希望与通过一点责任心来控制自己，不然真的没办法强迫的……</p><h2>一个下午都耗在Mod_rewrite上了…</h2><p>由于我的虚拟主机不支持域名绑定子目录，所以我就需要通过rewrite来实现子网站的虚拟主机。前段时间换成了Linux主机，而Apache下的mod_rewrite又和IIS上的ISAPI Rewrite的作用机制有点不一样。我试了很久发现好像mod_rewrite的[L]（停止重修）这个flag没有起作用？不知道是哪里的全局设置出了问题，还是我自己对这一flag的理解没对？有没有高手解释一下？</p><p>最终我选定的方案是：</p><p>[php]RewriteCond $1 !(test|portfolio|pf|src|demo)/<br
/> RewriteCond %{HTTP_HOST} ^(test|portfolio|pf|src|demo)\.benhuoer\.com$<br
/> RewriteRule ^(.*)  /%1/$1[/php]</p><p>核心是判断host name，然后rewrite到子目录下。之所以把HTTP_HOST这个condition放到第二句是需要在RewriteRule里调用那些host前缀，使用%1进行匹配。$1匹配的是前面的RewriteRule的Pattern。第一句是为了防止已经rewrite过的再被rewrite…</p><p>有谁能提供更好的写法吗？[L]到底是怎么回事呀？谁能告诉我！</p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/isapi-rewiter-for-vhost.html" rel="bookmark">用ISAPI Rewiter代替虚拟主机，实现一个空间多个域名共用</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology" title="查看 Web技术 中的全部文章" rel="category tag">Web技术</a>        标签: <a
href="http://blog.benhuoer.com/tag/css" rel="tag">CSS</a>, <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/rewrite" rel="tag">rewrite</a>, <a
href="http://blog.benhuoer.com/tag/%e6%9e%9c%e5%86%bb%e6%81%99" rel="tag">果冻恙</a>, <a
href="http://blog.benhuoer.com/tag/%e8%99%9a%e6%8b%9f%e4%b8%bb%e6%9c%ba" rel="tag">虚拟主机</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/my-first-project.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/my-first-project.html#comments" target="_blank">已经有2条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/my-first-project.html&title=果冻恙 &mdash; 我的第一个作品&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/my-first-project.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>给JavaScript新手的24条实用建议[TUTS+]</title><link>http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html</link> <comments>http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html#comments</comments> <pubDate>Sat, 20 Jun 2009 02:43:41 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[前端开发]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[TutsPlus]]></category> <category><![CDATA[入门]]></category> <category><![CDATA[教程]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1532</guid> <description><![CDATA[为JavaScript做一点性能小提升吧！ 本文列出了24条能让你的代码编写过程更为轻松高效的建议。也许您还是JavaScript初学者，刚刚写完自己的Hello World，那这里有很多对您的工作将十分有用的小贴士；也许有些技巧您已经知道，那就试试快速浏览一下，看能不能发现一点新东西吧！ 注：本文多次用到Firebug的console对象，请参考Firebug Console API 。关于firebug的更详细介绍，请猛击这里。 1. 用 === 代替 == JavaScript里有两种不同的相等运算符：===&#124;!== 和==&#124;!=。相比之下，前者更值得推荐。请尽量使用前者。 “如果两个比较对象有着同样的类型和值，===返回true，!==返回false。” - JavaScript: The Good Parts 不过，如果使用==和!=，在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前，JavaScript会试图将它们转换为字符串、数字或 Boolean量。 2. 避免使用Eval函数 Eval函数把一个字串作为参数，并把字串作为JavaScript语句执行，返回结果（参考）。 此函数不仅会降低你脚本的执行效率，而且还大大增加了安全风险，因为它赋予了作为文本的参数太大的权利。千万别用！ 3. 不要使用快速写法 技术上说，你可以省略掉大部分花括弧和句尾分号，绝大多数浏览器都能正确执行以下语句： if(someVariableExists) x = false 不过，如果是这样的呢： if(someVariableExists) x = false anotherFunctionCall(); 你可能会认为它和下面的语句相等： if(someVariableExists) { x = false; anotherFunctionCall(); } 不幸的是，事实并非如此。现实情况是它等价于： if(someVariableExists) { x = false; } [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li><li><a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" rel="bookmark">正则表达式高级技巧背后的关键概念[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/anatomy-of-a-drupal-theme.html" rel="bookmark">[Drupal模板制作手册-2]主题的解剖</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>为JavaScript做一点性能小提升吧！</p><p>本文列出了24条能让你的代码编写过程更为轻松高效的建议。也许您还是JavaScript初学者，刚刚写完自己的Hello World，那这里有很多对您的工作将十分有用的小贴士；也许有些技巧您已经知道，那就试试快速浏览一下，看能不能发现一点新东西吧！</p><p> <span
id="more-1532"></span><p
class="attention">注：本文多次用到Firebug的console对象，请参考<a
href="http://getfirebug.com/console.html" target="_blank">Firebug Console API</a> 。关于firebug的更详细介绍，请<a
title="IBM开发者中心上的文章" href="http://www.ibm.com/developerworks/cn/web/wa-aj-firebug/" target="_blank">猛击这里</a>。</p><h3>1. 用 === 代替 ==</h3><p>JavaScript里有两种不同的相等运算符：<code>===|!==</code> 和<code>==|!=</code>。相比之下，前者更值得推荐。请尽量使用前者。</p><blockquote><p>“如果两个比较对象有着同样的类型和值，===返回true，!==返回false。”</p><p>- JavaScript: The Good Parts</p></blockquote><p>不过，如果使用<code>==</code>和<code>!=</code>，在操作不同数据类型时, 你可能会遇到一些意想不到的问题。在进行相等判断前，JavaScript会试图将它们转换为字符串、数字或 Boolean量。</p><h3>2. 避免使用Eval函数</h3><p>Eval函数把一个字串作为参数，并把字串作为JavaScript语句执行，返回结果（<a
title="W3School里的介绍" href="http://www.w3school.com.cn/js/jsref_eval.asp" target="_blank">参考</a>）。</p><p>此函数不仅会降低你脚本的执行效率，而且还大大增加了安全风险，因为它赋予了作为文本的参数太大的权利。千万别用！</p><h3>3. 不要使用快速写法</h3><p>技术上说，你可以省略掉大部分花括弧和句尾分号，绝大多数浏览器都能正确执行以下语句：</p><pre class="brush:jscript">if(someVariableExists)
 x = false
</pre><p>不过，如果是这样的呢：</p><pre class="brush:jscript">if(someVariableExists)
 x = false
 anotherFunctionCall();
</pre><p>你可能会认为它和下面的语句相等：</p><pre class="brush:jscript">if(someVariableExists) {
 x = false;
 anotherFunctionCall();
}
</pre><p>不幸的是，事实并非如此。现实情况是它等价于：</p><pre class="brush:jscript">if(someVariableExists) {
 x = false;
}
anotherFunctionCall();
</pre><p>如您注意到的，再漂亮的缩进也不能代替这华丽的花括弧。在所有情况下都请写清楚花括号和句尾分号。在只有一行语句的时候能偶尔省略掉，虽然下这么做也是极度不被推荐的：</p><pre class="brush:jscript">if(2 + 2 === 4) return 'nicely done';
</pre><h4>多考虑下将来吧，孩子</h4><p>假设，在将来的开发过程中，你需要为这个 if 语句添加更多的命令呢？到时候你还不是得把括号给加上？</p><h3>4. 好好利用JS Lint</h3><p><a
href="http://www.jslint.com/" target="_blank">JSLint</a> 是由 Douglas Crockford 编写的一个调试器。你只需要贴上你的代码，它就能快速为您扫描出任何明显的错误和问题。</p><blockquote><p>“JSLint 扫描接收的代码。发现问题，描述问题，并给出其在源码中的大概位置。可发现的问题包括但不限于语法错误，虽然语法错误确实是最常见的。JSLint也会用约定俗成的习惯检查代码的格式化风格，以及结构错误。通过JSLint的扫描并不能保证你的程序就完全正确。它只是为您提供了额外一双发现错误的眼睛。”</p><p>- JSLint 文档</p></blockquote><p>完成代码之前，把它放到JSLint里检查一下，快速消灭你的无心之过。</p><h3>5. 在页面底部加载脚本</h3><p>正如下图所示：</p><div><img
style="width: 600px;" src="http://nettuts.s3.amazonaws.com/327_30Musts/javascriptButton.png" alt="Place JS at bottom" /></div><p>请记住—— 我们要千方百计保证客户端的页面载入速度尽可能的快。而脚本没载入完成，浏览器就没法加载页面的剩余部分。</p><p>如果你的JS文件只是添加一些额外功能——例如，为点击某链接绑定事件——那大可以等页面加载基本完成后再做。把JS文件放到页面最后，body的结束标签之前，这样做最好了。</p><h4>更好的写法是</h4><pre class="brush:jscript">&lt;p&gt;超哥是世界上最帅的人。benhuoer.com是世界上最好看的博客。&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/file.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/anotherFile.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><h3>6. 在 For 语句外部声明变量</h3><p>当需要执行冗长的for语句时，不要让JavaScript引擎每次都重复那些没有必要的操作。例如：</p><h4>这样不好</h4><pre class="brush:jscript">for(var i = 0; i &lt; someArray.length; i++) {
 var container = document.getElementById('container');
 container.innerHtml += 'my number: ' + i;
 console.log(i);
}
</pre><p>这段代码每次都重新定义数组长度，每次都在遍历DOM寻找container元素 —— 太傻了！</p><h4>这样好多了</h4><pre class="brush:jscript">var container = document.getElementById('container');
for(var i = 0, len = someArray.length; i &lt; len;  i++) {
 container.innerHtml += 'my number: ' + i;
 console.log(i);
}
</pre><p>我要给留言改进这段代码的人额外惊喜！欢迎大家留言讨论！</p><h3>7. 快速构建字串</h3><p>要对一个数组或对象做循环操作时，不要老惦记着一表人才的for语句，拿点创意出来嘛！明明就还有很多更快的办法：</p><pre class="brush:jscript">var arr = ['item 1', 'item 2', 'item 3', ...];
var list = '&lt;ul&gt;&lt;li&gt;' + arr.join('&lt;/li&gt;&lt;li&gt;') + '&lt;/li&gt;&lt;/ul&gt;';</pre><blockquote><p>“没那么多繁文缛节来烦你；你就信我一次好了（或者你也可以自己试一试）—— 这真的是迄今能找到的最快办法了！</p><p>用点土办法，也别管它背后究竟发生了什么抽象的东西，通常土办法都比那些优雅的办法要快捷得多！”</p><p>- James Padolsey, james.padolsey.com</p></blockquote><h3>8. 减少全局变量</h3><blockquote><p>“把你踩在全局的那些乱七八糟的脚印都归于一人名下，能显著降低与其他应用、小工具或JS库冲突的可能性。”</p><p>- Douglas Crockford</p></blockquote><pre class="brush:jscript">var name = 'Jeffrey';
var lastName = 'Way';
function doSomething() {...}
console.log(name); // Jeffrey -- or window.name
</pre><h4>更好的写法</h4><pre class="brush:jscript">var DudeNameSpace = {
 name : 'Jeffrey',
 lastName : 'Way',
 doSomething : function() {...}
}
console.log(DudeNameSpace.name); // Jeffrey
</pre><p>注意看，我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的。</p><h3>9. 写好注释</h3><p>可能一开始你会觉得并无必要，但相信我，你将来会<strong>主动想</strong>要尽可能写好代码的注释的。当你几个月后再回看某项目时，结果却发现很难想起当时写某句东西时脑子在想的什么了，是不是很让人沮丧呢？或者，如果有同事要修订你的代码呢？一定，一定要为你代码里的重要部分加上注释。</p><pre class="brush:jscript">// 遍历数组，输出各自名称
for(var i = 0, len = array.length; i &lt; len; i++) {
 console.log(array[i]);
}
</pre><h3>10. 试试渐进增强</h3><p>一定要记得为未启用JavaScript的情况提供替代方案。大家可能会认为，“大部分我的访客都启用了JavaScript的，我才不用担心”。这样的话，你可就大错特错了！</p><p>你有没有试过看看禁用JavaScript后你那漂亮的滑动器都成啥样了？（你可以下载 <a
href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Web Developer ToolBar</a> 轻松完成这项任务。）禁用之后你的网站可能就彻底失去了可用性！经验之谈：开发初期总是按照没有JavaScript来设计你的网站，之后再进行<strong>渐进地功能增强</strong>，小心翼翼地改变你地布局。</p><h3>11. 不要传递字串给 “setInterval” 或 “setTimeout”</h3><p>看看下面的代码：</p><pre class="brush:jscript">setInterval(
&quot;document.getElementById('container').innerHTML += 'My new number: ' + i&quot;, 3000
);
</pre><p>不仅执行不高效，而且和 eval 函数有着同样的高风险。千万不要把字串传递给 setInterval 和 setTimeout。恰当的做法是，传递一个函数名：</p><pre class="brush:jscript">setInterval(someFunction, 3000);
</pre><h3>12. 不要使用with语句</h3><p>初识之下，“with”语句似乎还挺好用的。它用于设置代码在特定对象中的作用域。其基本用法是提供深入到对象中处理元素的快速写法。例如：</p><pre class="brush:jscript">with (being.person.man.bodyparts) {
 arms = true;
 legs = true;
}
</pre><p>– 等价于 —</p><pre class="brush:jscript">being.person.man.bodyparts.arms = true;
being.person.man.bodyparts.legs= true;
</pre><p>不幸的是，测试表明，若你要为对象插入新成员，with的表现非常糟糕，它的执行速度非常缓慢。替代方案是声明一个变量：</p><pre class="brush:jscript">var o = being.person.man.bodyparts;
o.arms = true;
o.legs = true;
</pre><h3>13. 使用 {}，而不用New Object()</h3><p>在JavaScript有多种方式能新建对象。最传统的方法是 new 语句，如下：</p><pre class="brush:jscript">var o = new Object();
o.name = 'Benhuoer';
o.lastName = 'Yang';
o.someFunction = function() {
 console.log(this.name);
}
</pre><p>不过，这一方法读起来却比较糟糕。我强烈建议你采用下面这种在文字样式上更为强健的写法：</p><h4>更好的写法</h4><pre class="brush:jscript">var o = {
 name: 'Jeffrey',
 lastName = 'Way',
 someFunction : function() {
 console.log(this.name);
 }
};
</pre><p>注意，如果你想新建一个空对象，用 {} 就能行：</p><pre class="brush:jscript">var o = {};
</pre><blockquote><p>“对象字面符(Objects literals)帮助我们写出支持很多特性，同时又关联性强、简明直接的代码。没必要直接调用新建语句，然后再费心维护声明变量和传递变量的语句之间的正确顺序，等等。” &#8211; <a
href="http://www.dyn-web.com/tutorials/obj_lit.php" target="_blank">dyn-web.com</a></p></blockquote><h3>14. 使用[]，而不用New Array()</h3><p>新建数组时的同类型运用。</p><h4>行得通的写法</h4><pre class="brush:jscript">var a = new Array();
a[0] = &quot;Joe&quot;;
a[1] = 'Plumber';
</pre><h4>更好的写法</h4><pre class="brush:jscript">var a = ['Joe','Plumber'];
</pre><blockquote><p>“在JavaScript编程中经常遇到的一个错误是，该用数组时却用了对象，该用对象时却用了数组。规则其实很简单：当属性名是小的连续整数时，你应该使用数组。其他情况，使用对象。” &#8211; Douglas Crockford</p></blockquote><h3>15. 一长列变量声明？别写那么多var，用逗号吧</h3><pre class="brush:jscript">var someItem = 'some string';
var anotherItem = 'another string';
var oneMoreItem = 'one more string';
</pre><h4>更好的写法</h4><pre class="brush:jscript">var someItem = 'some string',
 anotherItem = 'another string',
 oneMoreItem = 'one more string';
</pre><p>…不言自明。我不知道这样做能否提升代码执行速度，但是确实让你的代码干净许多。</p><h3>17. 千万千万记得写分号</h3><p>大部分浏览器都允许你不写句尾分号：</p><pre class="brush:jscript">var someItem = 'some string'
function doSomething() {
 return 'something'
}
</pre><p>之前已经说过，这样做会造成潜在的更大、更难以发现的问题：</p><h4>更好的写法</h4><pre class="brush:jscript">var someItem = 'some string';
function doSomething() {
 return 'something';
}
</pre><h3>18. “For in” 语句</h3><p>遍历对象时，你可能会发现你还需要获取方法函数。所以遇到这种情况时，请一定记得给你的代码包一层 if 语句，用以过滤信息。</p><pre class="brush:jscript">for(key in object) {
 if(object.hasOwnProperty(key) {
 ...then do something...
 }
}
</pre><p><em>引自</em><em> Douglas Crockford 所作：</em><em> JavaScript: The Good Parts </em></p><h3>19. 使用Firebug的“Timer”功能优化你的代码</h3><p>想要轻松地快速了解某项操作的用时吗？使用Firebug的timer功能来记录结果好了。</p><pre class="brush:jscript">function TimeTracker(){
 console.time(&quot;MyTimer&quot;);
 for(x=5000; x &gt; 0; x--){}
 console.timeEnd(&quot;MyTimer&quot;);
}
</pre><h3>20. 读，读，读……Read, Read, Read…</h3><p>虽然我是Web开发博客（就像这个！）的超级粉丝，但吃饭和睡觉前除了看<strong>书</strong>好像也别无选择~ 在你的床头柜上摆一本Web开发的好书吧！下列书单都是我的最爱：</p><ul><li><a
href="http://www.packtpub.com/object-oriented-javascript-applications-libraries/book" target="_blank">Object-Oriented JavaScript</a>（暂无中文版）</li><li><a
href="http://oreilly.com/catalog/9780596517748/" target="_blank">JavaScript: The Good Parts</a>（<a
href="http://www.douban.com/subject/3590768/" target="_blank">中文版</a>）</li><li><a
href="http://www.packtpub.com/learning-jquery-1.3/boo" target="_blank">Learning jQuery 1.3</a>（暂无中文版，但你可以看看<a
href="http://www.douban.com/subject/3082293/" target="_blank">老版本的中文版</a>）</li><li><a
href="http://oreilly.com/catalog/9780596527464/" target="_blank">Learning JavaScript</a>（<a
title="豆瓣" href="http://www.douban.com/subject/1232061/" target="_blank">中文版</a>）</li></ul><p>阅读他们…… 反复阅读很多次！我现在都还在读。</p><h3>21. 自决的函数</h3><p>相比于调用函数，让函数在页面载入或者某一父函数被调用时自动执行，是十分简单方便的做法。你只需要把你的函数包在父辈之内，然后添上一个额外的括号，本质上这括号就触发了你定义的函数（<a
href="http://20032334.javaeye.com/blog/288989" target="_blank">了解更多</a>）。</p><pre class="brush:jscript">(function doSomething() {
 return {
 name: 'jeff',
 lastName: 'way'
 };
})();
</pre><h3>22. 原生 JavaScript 总是会比使用代码库来的快</h3><p>诸如jQuery和Mootools这样的JavaScript库，能为你写代码的过程省下不少时间——尤其是当需要 AJAX 操作时。不过你可得记住，只要你的代码写得恰当，原生JavaScript总是会比利用代码库的写法执行得快一些。</p><p>jQuery的“each” 方法对于循环操作十分便利，但是使用原生态的for语句总归会快很多。</p><h3>23. Crockford 的 JSON.Parse</h3><p>尽管 JavaScript 2会内建JSON处理器，但写这篇文章之时，我们还是需要自己实现。Douglas Crockford，JSON的创建者，已经为我们创作出能直接使用的处理器了。您可以在这里<a
href="http://www.json.org/json2.js" target="_blank">下载</a>。</p><p>导入这段代码，你就能新建 JSON 全局对象，然后处理你的 .json 文件。</p><pre class="brush:jscript">var response = JSON.parse(xhr.responseText);
var container = document.getElementById('container');
for(var i = 0, len = response.length; i &lt; len; i++) {
 container.innerHTML += '&lt;li&gt;' + response[i].name + ' : ' + response[i].email + '&lt;/li&gt;';
}
</pre><p>关于JSON，请查看<a
href="http://www.json.org/json-zh.html" target="_blank">更多介绍</a>。</p><h3>24. 移去“Language”</h3><p>很多年前，language还是每段script标签必备属性：</p><pre class="brush:jscript">&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot;&gt;
...
&lt;/script&gt;
</pre><p>不过现在，这属性已经没啥用很久了…… 所以，删掉算啦！</p><h3>就这些了，朋友们~</h3><p>就是这些了，这就是我给JavaScript初学者的24条小建议。各位亲爱的朋友，你们的看法呢？你们有什么快速小贴士吗？感谢你的耐心阅读。</p><blockquote><p>英文原文：<a
href="http://net.tutsplus.com/tutorials/javascript-ajax/24-javascript-best-practices-for-beginners/" target="_blank">24-javascript-best-practices-for-beginners</a></p><p>译文原文：<a
rel="bookmark" href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" target="_blank">给JavaScript新手的24条建议</a></p><p>© 请尊重版权，若需转载，务必保留链接。</p></blockquote><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/info-files-for-themes.html" rel="bookmark">[Drupal模板制作手册-4]主题的.info文件</a></li><li><a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" rel="bookmark">正则表达式高级技巧背后的关键概念[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/anatomy-of-a-drupal-theme.html" rel="bookmark">[Drupal模板制作手册-2]主题的解剖</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-apps-development" title="查看 前端开发 中的全部文章" rel="category tag">前端开发</a>        标签: <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/jquery" rel="tag">jQuery</a>, <a
href="http://blog.benhuoer.com/tag/tutsplus" rel="tag">TutsPlus</a>, <a
href="http://blog.benhuoer.com/tag/%e5%85%a5%e9%97%a8" rel="tag">入门</a>, <a
href="http://blog.benhuoer.com/tag/%e6%95%99%e7%a8%8b" rel="tag">教程</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html#comments" target="_blank">已经有6条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html&title=给JavaScript新手的24条实用建议[TUTS+]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>拒绝臆想，让我们脚踏实地做设计！[ALA]</title><link>http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html</link> <comments>http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html#comments</comments> <pubDate>Tue, 16 Jun 2009 10:28:29 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[交互和UE]]></category> <category><![CDATA[网页设计]]></category> <category><![CDATA[A List Apart]]></category> <category><![CDATA[用户体验]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1498</guid> <description><![CDATA[好的创意为成功的网站带来生命力。不过，有时候那些有创意的点子或解决方案更像是单凭臆想完成的工作——而臆想又往往是件很危险的事。那么，设计师该如何告诉客户，其实自己用的是脚踏实地的策略，并且目标效果也最为恰当呢？下面的练习将助你了解如何探讨和记录设计的方方面面，以帮助客户消除对你创意的疑虑，鼓励他们也参与到设计过程中来。 确定明晰目标 有些人总认为自己很了解建某个站点的目的是什么，却拒绝建立起直接的、可量化的目标。模棱两可的目标叙述迫使客户自行推断，而客户一般都会把事情往好的方向想，过高的期待又往往带来失望——结果，你们之间好不容易建立起来的信任就毁掉了。像“卖更多东西”、“提高曝光率”这种目标还是少来为妙，它们太模糊了，几乎没有指导意义。 改进的验收准则练习（modified acceptance criteria exercise）是我发现用于建立清晰有力目标的最简单有效的工具。精明的开发者利用验收准则来说明为什么要执行某项任务，以及他们该如何融入大图景之中。只需做一点小优化，你就能完美地捕捉到设计目标。 样例需求: 我们想要重新设计我们的网站，因为我们需要更多流量和一个新形象，希望我们成为行业里更受尊敬的企业。 样例目标模板: 我们希望 __________ 因为____________ 然后 ___________. 样例目标: 我们希望把访问量提高20%，因为我们想有更高曝光率，然后我们就能每个月新建立八条客户渠道。 我们希望改变现在的形象，因为我们想让客户觉得更亲切，然后我们才敢把服务费提高10%。 我们希望每个月能写四篇行业相关的文章，因为我们想为这个行业做贡献，然后我们就能每个月找到两个合作伙伴。 请思考，区分开“手段”、“原因”、“结果”的过程是如何让项目持有者的目标变得明晰的，而且这一过程还能解释他们为什么有这些目标，又打算怎样达到目标。为设计确立验收准则是挖掘出更深层次的可能还不为所知的需求的极佳方式。它帮助设计师和项目持有者做出更好的决定，以免将来设计执行过程中遭遇“不速之情景”。请修正目标，直至项目相关各方都同意并理解这些目标。 额外提醒：多建立几个目标，以方便你自己捕获二级甚至三级目标，不过千万不要让事情失去控制——所有网站都只需要一小撮高水平目标就够了。 组织页面 人们一般都只热爱那些不用他们多做思考就能成事儿的站点。用户的精力是用来解决他们自己的问题的，而不应该浪费在搞清楚网站怎么用上面。 卡片分类是安排网站内容的好方法。要利用卡片分类，列出你网站的所有页面，把它们写在一些索引卡上。然后，把所有卡片铺到桌子上，移动卡片位置，直至所有的目录和子目录归档方式都最为有理有据。 如果你没法亲自做卡片分类，或者你们团队没有时间做这件事，那你们还可以试试利用数据表在线商讨。以下是使用一些虚拟数据在Google Docs里创建的一家新西兰投资公司网站的示例。 如果你的项目是针对某网站的再设计，那你应该先看看该站点的访问统计数据，找出哪些页面获得的流量更多，哪些更少。这么做的好处是能推断出设计的内容在哪部分还不够，在哪部分又太过了。然后，紧缩或合并类似页面，简化复杂页面。 即使已经过了正式的设计过程，好的卡片分类实践也能大大提高一个网站的可用性和内容传递效率。这是一种让网站保持关联性和实效性的聪明训练。要了解更多关于这方面的信息，请参见 用框线图 实现卡片分类（英文）， Usability.gov上的卡片分类介绍（英文），或者阅读这本关于卡片分类的专著（英文）。 额外提醒：让不熟悉公司业务的人来帮忙进行卡片分类，有助于发现大众成见，获得意想不到的反馈 铺展页面 接下来，我们需要深入理解设计的视觉优先顺序。这里我们采用注意力地图(Attention Map)并且做一点算术。 注意力地图就是为页面指定一系列目标，并且为每个目标分配一个吸引力指数。总点数不要太多，足够分配就好，这样点数之间才能更容易对比和互相参考；但也不要太少，以免分配出太多过于接近的点数。这么做的目的是让你深入理解各个目标之间的联系，从而确立稳妥的内容层次。 样例点数分配： 四个目标，一共分配15点 样例结果： 服务介绍：7点 带来的益处：4点 行业文章：2点 相关新闻：2点 比起简单的优先级列表，注意力地图更为高效，因为它还直观反映了各个目标在页面中占据多少空间。由于“服务介绍”的点数比“益处”所占点数要高3点（几乎是两倍了），所有你能肯定“服务介绍”需要吸引大量更多注意力。 用草图表达满足目标、适合内容组织、符合注意力地图的设计选项时，应当简明直率，且富有战略。说不定这样你就能少很多搜索枯肠的烦恼。 额外提醒: 完成之后，试试反转草图，或者从镜子里面看它，看看还是否能用。为你自己的草图挑刺儿（包括那奇怪的镜像草图），能帮你想出一系列新点子。 开发个性 强健的原型(archetype)能建立起一条直接而充满力量的情感纽带。所谓原型是指一系列性格特征和行为特点，常见于一群说共同语言或有着共同历史的族群。每一原型都有其强势、弱点、天赋和畏惧。当你无所顾忌地运用这人性特征的方方面面时，人们将从内心深处对你的设计产生共鸣。这有助于强化记忆和建立信任。 Margaret Mark 和 Carol S. Pearson [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/inclusion-principle-ala.html" rel="bookmark">网页设计中的包容原则[ALA]</a></li><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>好的创意为成功的网站带来生命力。不过，有时候那些有创意的点子或解决方案更像是单凭臆想完成的工作——而臆想又往往是件很危险的事。那么，设计师该如何告诉客户，其实自己用的是脚踏实地的策略，并且目标效果也最为恰当呢？下面的练习将助你了解如何探讨和记录设计的方方面面，以帮助客户消除对你创意的疑虑，鼓励他们也参与到设计过程中来。</p><p><span
id="more-1498"></span></p><p><img
style="float: right;" src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/take-guesswork-out/guesswork.jpg" alt="让天马行空的猜想付诸设计实践" width="270" height="532" /></p><h2>确定明晰目标</h2><p>有些人总认为自己很了解建某个站点的目的是什么，却拒绝建立起直接的、可量化的目标。模棱两可的目标叙述迫使客户自行推断，而客户一般都会把事情往好的方向想，过高的期待又往往带来失望——结果，你们之间好不容易建立起来的<strong>信任</strong>就毁掉了。像“卖更多东西”、“提高曝光率”这种目标还是少来为妙，它们太模糊了，几乎没有指导意义。</p><p>改进的验收准则练习（modified acceptance criteria exercise）是我发现用于建立清晰有力目标的最简单有效的工具。精明的开发者利用验收准则来说明为什么要执行某项任务，以及他们该如何融入大图景之中。只需做一点小优化，你就能完美地捕捉到设计目标。</p><p>样例需求:</p><ul><li>我们想要重新设计我们的网站，因为我们需要更多流量和一个新形象，希望我们成为行业里更受尊敬的企业。</li></ul><p>样例目标模板:</p><ul><li>我们希望 __________ 因为____________ 然后 ___________.</li></ul><p>样例目标:</p><ul><li>我们希望把访问量提高20%，因为我们想有更高曝光率，然后我们就能每个月新建立八条客户渠道。</li><li>我们希望改变现在的形象，因为我们想让客户觉得更亲切，然后我们才敢把服务费提高10%。</li><li>我们希望每个月能写四篇行业相关的文章，因为我们想为这个行业做贡献，然后我们就能每个月找到两个合作伙伴。</li></ul><p>请思考，区分开“手段”、“原因”、“结果”的过程是如何让项目持有者的目标变得明晰的，而且这一过程还能解释他们为什么有这些目标，又打算怎样达到目标。为设计确立验收准则是挖掘出更深层次的可能还不为所知的需求的极佳方式。它帮助设计师和项目持有者做出更好的决定，以免将来设计执行过程中遭遇“不速之情景”。请修正目标，直至项目相关各方都同意并理解这些目标。</p><p><em><strong>额外提醒</strong>：多建立几个目标，以方便你自己捕获二级甚至三级目标，不过千万不要让事情失去控制——所有网站都只需要一小撮高水平目标就够了。</em></p><h2>组织页面</h2><p>人们一般都只热爱那些不用他们多做思考就能成事儿的站点。用户的精力是用来解决他们自己的问题的，而不应该浪费在搞清楚网站怎么用上面。</p><p>卡片分类是安排网站内容的好方法。要利用卡片分类，列出你网站的所有页面，把它们写在一些索引卡上。然后，把所有卡片铺到桌子上，移动卡片位置，直至所有的目录和子目录归档方式都最为有理有据。</p><p>如果你没法亲自做卡片分类，或者你们团队没有时间做这件事，那你们还可以试试利用数据表在线商讨。以下是使用一些虚拟数据在Google Docs里创建的一家新西兰投资公司网站的示例。</p><div
class="wp-caption aligncenter" style="width: 410px"><a
href="http://blog.benhuoer.com"><img
title="一张数据表" src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/take-guesswork-out/guessing-spread.png" alt="一张数据表" width="400" height="272" /></a><p
class="wp-caption-text">利用数据表进行卡片分类的示例</p></div><p>如果你的项目是针对某网站的再设计，那你应该先看看该站点的访问统计数据，找出哪些页面获得的流量更多，哪些更少。这么做的好处是能推断出设计的内容在哪部分还不够，在哪部分又太过了。然后，紧缩或合并类似页面，简化复杂页面。</p><p>即使已经过了正式的设计过程，好的卡片分类实践也能大大提高一个网站的可用性和内容传递效率。这是一种让网站保持关联性和实效性的聪明训练。要了解更多关于这方面的信息，请参见 <a
href="http://www.boxesandarrows.com/view/card_sorting_a_definitive_guide"><cite>用框线图</cite> 实现卡片分类（英文）</a>， <a
href="http://www.usability.gov/design/cardsort.html">Usability.gov上的卡片分类介绍（英文）</a>，或者<a
href="http://www.rosenfeldmedia.com/books/cardsorting/">阅读这本关于卡片分类的专著（英文）</a>。</p><p><em><strong>额外提醒</strong>：让不熟悉公司业务的人来帮忙进行卡片分类，有助于发现大众成见，获得意想不到的反馈</em></p><h2>铺展页面</h2><p>接下来，我们需要深入理解设计的视觉优先顺序。这里我们采用注意力地图(Attention Map)并且做一点算术。</p><p>注意力地图就是为页面指定一系列目标，并且为每个目标分配一个吸引力指数。总点数不要太多，足够分配就好，这样点数之间才能更容易对比和互相参考；但也不要太少，以免分配出太多过于接近的点数。这么做的目的是让你深入理解各个目标之间的联系，从而确立稳妥的内容层次。</p><p>样例点数分配：</p><ul><li>四个目标，一共分配15点</li></ul><p>样例结果：</p><ul><li>服务介绍：7点</li><li>带来的益处：4点</li><li>行业文章：2点</li><li>相关新闻：2点</li></ul><p>比起简单的优先级列表，注意力地图更为高效，因为它还直观反映了各个目标在页面中占据多少空间。由于“服务介绍”的点数比“益处”所占点数要高3点（几乎是两倍了），所有你能肯定“服务介绍”需要吸引大量更多注意力。</p><div
class="wp-caption aligncenter" style="width: 550px"><a
href="http://blog.benhuoer.com"><img
title="布局分块吸引力指数" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/take-guesswork-out/guessing-layout.png" alt="使用注意力地图在网页上划分重要性的归类所在区域" width="540" height="270" /></a><p
class="wp-caption-text">使用注意力地图在网页上划分重要性区域</p></div><p>用草图表达满足目标、适合内容组织、符合注意力地图的设计选项时，应当简明直率，且富有战略。说不定这样你就能少很多搜索枯肠的烦恼。</p><p><em><strong>额外提醒</strong>: 完成之后，试试反转草图，或者从镜子里面看它，看看还是否能用。为你自己的草图挑刺儿（包括那奇怪的镜像草图），能帮你想出一系列新点子。</em></p><h2>开发个性</h2><p>强健的原型(archetype)能建立起一条直接而充满力量的情感纽带。所谓<a
href="http://cn.blurtit.com/q458251.html" target="_blank">原型</a>是指一系列性格特征和行为特点，常见于一群说共同语言或有着共同历史的族群。每一原型都有其强势、弱点、天赋和畏惧。当你无所顾忌地运用这人性特征的方方面面时，人们将从内心深处对你的设计产生共鸣。这有助于强化记忆和建立信任。</p><p>Margaret Mark 和 Carol S. Pearson 所著<cite><a
href="http://www.amazon.com/Hero-Outlaw-Building-Extraordinary-Archetypes/dp/0071364153">《英雄与歹徒(The Hero and the Outlaw)》</a></cite>一书，强有力地覆盖了人类文明几乎所有方面的12种原型。</p><p>这些原型包括：</p><ul><li>纯真 Innocent</li><li>探索者 Explorer</li><li>圣人 Sage</li><li>英雄 Hero</li><li>法外之徒 Outlaw</li><li>魔术师 Magician</li><li>普通人 Regular Guy/Gal</li><li>情人 Lover</li><li>弄臣 Jester</li><li>看护者 Caregiver</li><li>创造者 Creator</li><li>统治者 Ruler</li></ul><p>如果你选择了法外之徒（想一想 <a
href="http://images.google.com/images?q=Harley%20Davidson&amp;hl=zh-CN&amp;client=firefox-a&amp;rls=org.mozilla:zh-CN:official&amp;hs=K9T&amp;newwindow=1&amp;lr=lang_zh-CN|lang_zh-TW&amp;nxpt=20.3396804312541271739951&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;tab=wi">Harley Davidson</a> | <span
style="color: #999999;">译注：一个摩托车品牌</span>），那就开始批判你自己违背法外之徒特征的一切行为吧。说不定你会想起众多新奇有趣的想法，连你自己都要大吃一惊呢。</p><p>法外之徒的特征：</p><ul><li>渴望复仇和/或革命</li><li>想要摧毁一切没用的东西</li><li>痛恨自己无能为力或被轻视</li><li>尝试扰乱或震惊大众</li><li>希望给与人们绝对的自由</li><li>通常被误会为魔鬼</li><li>有犯罪倾向</li></ul><p>如果你能把这些“个性”持续融入不同的设计中，并且考虑如何将其用于与顾客发生交互的领域，之后再密切留意顾客的反应。那你就能建立起一个强大的品牌。</p><p><em><strong>额外提醒</strong>：人们经常把公司个性与他本人的个性混而为一。请明确项目持有者或者其他重要</em><em>相关</em><em>人物的个性，以把个人特性与公司个性区分开来。</em></p><h2>界定何为适度，完成</h2><p>对特征进行设计能直接支持和强化内容。不幸的是，要让所有受众都能连贯地正确理解付诸视觉风格的特征，并不是一件容易的事。列出反面特征制造违规界限，是一个不错的办法。这有助于你清楚认识某项设计的特定外观，并为你提供一个在评估设计时进行量化和批判的标准。</p><p>要完成这一步，一个很好的办法是，找出会显著影响设计效果的对立特征，把它们置于滑块标尺上，如下图：</p><p
style="text-align: center;"> </p><div
class="wp-caption aligncenter" style="width: 550px"><a
href="http://blog.benhuoer.com"><img
title="一张滑块标尺图" src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/take-guesswork-out/guessing-traits.png" alt="一张滑块标尺图" width="540" height="180" /></a><p
class="wp-caption-text">用于定义反面设计特征的滑块标尺示例</p></div><p>有了特征尺度，设计师就能切实体会到网站内容究竟该向用户提供何种感受。如果设计师关于“活跃”的想法太强烈，有了“冷静vs活跃”的标尺，就能很容易地确定他的“强烈”程度，然后再做适度的调整。由是产生的批判，远比仅仅一句“太强烈了”更加有建设性。</p><p>根据需要添加、删除、修改特征标尺。但请记住批判必须是可量化、可讨论的。诸如“高科技”这样的特征过分依赖于设计师的个人品味和观点，一千个人眼里就有一千种不同的“高科技”。有时候，像“高科技”这样的特征，本质上其实是一系列其他特征的组合。“高科技”可以包括“现代”、“简约”、“正式”等 —— 这些才是能放在标尺上被即使没有设计背景的人界定和讨论的特征。</p><p><em><strong>额外提醒：项目完成后，评估哪一系列特征对项目的成败最至关重要，跟踪那些你后悔没有放进去的特征。</strong></em></p><h2>自信地设计</h2><p>可靠而全面地理解站点目标、内容组织、页面布局、个性开发、恰如其分地完成等内容，能为你建立起一种环境氛围。在这环境中，你和项目持有者进行着值得信赖的严谨讨论和对想法的准确记录。通过合作，你们将会犯更少的错误，遭遇更少的恼人意外，完成目标明确的探索，最终，创造出更好的设计。</p><p
style="text-align: right;">题图由 <a
href="http://www.alistapart.com/authors/c/kevincornell">Kevin Cornell</a> 绘制</p><h4>译后感：</h4><p>太囧了。这文章太高深了。译言上先前有人发过一篇译稿，比原文还难懂…… （译者莫生气哈…… 大家都是学习交流~ ）希望大家看我这个版本的时候还不算太迷糊。</p><p>欢迎留言讨论，这其实是一个很值得认真探讨的话题。别认为在中国我们就没法做这种“特别花精力”的所谓“高端”设计。很高端吗？都是一些与客户交流和安排自己工作的实际技巧而已。不是你能不能做高端，而是你自己到底想不想。就算做不出高端，“想做高端”也比“自甘堕落”要值得褒奖得多吧。</p><blockquote><p>Source:  <a
href="http://www.alistapart.com/articles/taking-the-guesswork-out-of-design/">Taking the Guesswork Out of Design</a> by <a
href="http://www.alistapart.com/authors/r/dritzenthaler">Daniel Ritzenthaler</a></p><p>Translated with the permission of <a
href="http://www.alistapart.com/">A List Apart Magazine</a> and the author[s].</p><p>Translator: <a
href="http://blog.benhuoer.com/">Benhuoer</a></p><p>若需转载，务必依原样保留本声明。</p></blockquote><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/inclusion-principle-ala.html" rel="bookmark">网页设计中的包容原则[ALA]</a></li><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/interactive-and-ue" title="查看 交互和UE 中的全部文章" rel="category tag">交互和UE</a>, <a
href="http://blog.benhuoer.com/category/web-technology/web-design" title="查看 网页设计 中的全部文章" rel="category tag">网页设计</a>        标签: <a
href="http://blog.benhuoer.com/tag/a-list-apart" rel="tag">A List Apart</a>, <a
href="http://blog.benhuoer.com/tag/%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c" rel="tag">用户体验</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html#comments" target="_blank">已经有7条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html&title=拒绝臆想，让我们脚踏实地做设计！[ALA]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/taking-the-guesswork-out-of-design-ala.html/feed</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>提升设计品质的8种布局方案[SM]</title><link>http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html</link> <comments>http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html#comments</comments> <pubDate>Sun, 14 Jun 2009 13:52:41 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[网页设计]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Smashing Magazine]]></category> <category><![CDATA[TutsPlus]]></category> <category><![CDATA[布局]]></category> <category><![CDATA[用户体验]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=1127</guid> <description><![CDATA[网页设计中，内容组织恐怕是最至关重要、最影响设计品质的方面了。如何将信息组织到好的布局中，是一个网站的基础，并且应该在考虑外观之前就决定好。没有好的布局，网页信息流就不能正确传递，所有东西都不能建立起合理的联系。 在这篇文章中，我们将讨论八个布局解决方案/技巧，这些方案和技巧将有助于你创建整洁有序的内容布局。这八个技巧包括滑门(sliders)、标签式、渐进布局(progressive layouts)、结构网格、模态窗口(modal window)、翻转元素、手风琴效果(accordions)以及超大下拉菜单(mega drop-down-menus)。 1. 滑动样式与传送带(Sliders and Carousels) 滑门(Sliders)，也可称为传送带(carousels)，是一种有序的、交互性强、十分平滑地展示内容的方式。滑门样式是一个非常流行的技巧，大家都觉得它很好用，能让你在固定的区块内填充上大量内容。没有滑门的帮助，这些内容可能就要分开放到页面中的各个地方。而大多数时候，你在使用页面空间时总是捉襟见肘。或者，有些内容是你希望“用户要求”后才出现。这有助于让用户一次只关注一个内容区块，也符合他们自己的便利需求。 滑门样式的实例 导航区提供缩略图与图标 运用滑门和幻灯样式时，最好在导航区提供图标或缩略图，以便使导航更加简单直观。缩略图和图标给用户指出明路，向他们解释当前所在位置，以及有哪些浏览选项可供选择（比如说幻灯片的导航可以是水平的，也可以是垂直的）。另外，还能方便他们快速选择特定滑门页。 Coda网站的滑门顶部设计了标签卡，他们使用的是“滑动门+标签卡”的混合样式。这个主意绝顶聪明，因为通过看缩略图，用户就能快速得知特定滑门页的内容。而且，这些图标也提供了强大的、令人印象深刻的、干净整洁的视觉支持。除了图标和标签你也可以在标题前加上小图片， 或者只用数字也行。 用于展示产品的滑门样式 与上面的例子对应，滑门不仅能用于大容量信息的组织，也能为用户浏览大量产品条目提供方便。 SourceBits (见下图)使用了多层滑门（一个水平的，一个垂直的），用唱片封面作为导航条目。 水平滑门两端都有大的圆形箭头图标，实时反映左右导航的可用性。滑动的时候有平滑的动画，用起来非常舒服。同时，你也能看到，各个元素间距都精心设计过，这有助于内容组织，也提升了可用性。鼠标滑过时，每个条目还有漂亮的聚光灯效果。 垂直滑动的内容以及超大的水平“点击条” 接下来看看 QuickSnapper 的滑门。这是一个完美融入页面整体布局的十分好用的垂直滑门。滑门内容中有大量截屏图，内容被有序地组织起来。这个滑门最赞的地方就是上下方的按钮导航。按钮宽及整个滑门，大的按钮让“推拉”滑门更加容易。 还有，这些按钮的:active和:focus效果也很漂亮。 滑门脚本 你可以参考下面的脚本、技巧和教程制作你自己的滑门： Slick Accessible Slideshow using jQuery Coda-Slider 1.1.1 jquery.scrollable 1.0.2 Create an Amazon Books Widget with jQuery and XML Agile Carousel Easy Image or Content Slider Slider Gallery Coda [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/5-simple-tricks-to-bring-light-and-shadow-into-your-designs.html" rel="bookmark">五个为你的设计添加光影效果的简单技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<p>网页设计中，内容组织恐怕是最至关重要、最影响设计品质的方面了。如何将信息组织到好的布局中，是一个网站的基础，并且应该在考虑外观之前就决定好。没有好的布局，网页信息流就不能正确传递，所有东西都不能建立起合理的联系。</p><p>在这篇文章中，我们将讨论<strong>八个布局解决方案/技巧</strong>，这些方案和技巧将有助于你创建整洁有序的内容布局。这八个技巧包括滑门(sliders)、标签式、渐进布局(progressive layouts)、结构网格、模态窗口(modal window)、翻转元素、手风琴效果(accordions)以及超大下拉菜单(mega drop-down-menus)。</p><p><span
id="more-1127"></span></p><h3>1. 滑动样式与传送带(Sliders and Carousels)</h3><p>滑门(Sliders)，也可称为传送带(carousels)，是一种有序的、交互性强、十分平滑地展示内容的方式。滑门样式是一个非常流行的技巧，大家都觉得它很好用，能让你在固定的区块内填充上大量内容。没有滑门的帮助，这些内容可能就要分开放到页面中的各个地方。而大多数时候，你在使用页面空间时总是捉襟见肘。或者，有些内容是你希望“用户要求”后才出现。这有助于让用户一次只关注一个内容区块，也符合他们自己的便利需求。</p><h4>滑门样式的实例</h4><p><strong>导航区提供缩略图与图标</strong><br
/> 运用滑门和幻灯样式时，最好在导航区提供图标或缩略图，以便使导航更加简单直观。缩略图和图标给用户指出明路，向他们解释当前所在位置，以及有哪些浏览选项可供选择（比如说幻灯片的导航可以是水平的，也可以是垂直的）。另外，还能方便他们快速选择特定滑门页。</p><p><a
href="http://www.panic.com/coda/" target="_blank">Coda网站</a>的滑门顶部设计了标签卡，他们使用的是“滑动门+标签卡”的混合样式。这个主意绝顶聪明，因为通过看缩略图，用户就能快速得知特定滑门页的内容。而且，这些图标也提供了强大的、令人印象深刻的、干净整洁的视觉支持。除了图标和标签你也可以在标题前加上小图片， 或者只用数字也行。</p><p><a
href="http://www.panic.com/coda/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/coda.jpg" alt="Screenshot" /></a></p><p><strong>用于展示产品的滑门样式</strong><br
/> 与上面的例子对应，滑门不仅能用于大容量信息的组织，也能为用户浏览大量产品条目提供方便。 <a
href="http://www.sourcebits.com/nerve/" target="_blank">SourceBits</a> (见下图)使用了多层滑门（一个水平的，一个垂直的），用唱片封面作为导航条目。</p><p>水平滑门两端都有大的圆形箭头图标，实时反映左右导航的可用性。滑动的时候有平滑的动画，用起来非常舒服。同时，你也能看到，各个元素间距都精心设计过，这有助于内容组织，也提升了可用性。鼠标滑过时，每个条目还有漂亮的聚光灯效果。</p><p><a
href="http://www.sourcebits.com/nerve/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/nerve2.jpg" alt="Screenshot" width="500" height="294" /></a></p><p><strong>垂直滑动的内容以及超大的水平“点击条”</strong><br
/> 接下来看看 <a
href="http://www.quicksnapper.com/" target="_blank">QuickSnapper</a> 的滑门。这是一个完美融入页面整体布局的十分好用的垂直滑门。滑门内容中有大量截屏图，内容被有序地组织起来。这个滑门最赞的地方就是上下方的按钮导航。按钮宽及整个滑门，大的按钮让“推拉”滑门更加容易。</p><p>还有，这些按钮的:active和:focus效果也很漂亮。</p><p><a
href="http://www.quicksnapper.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/quicksnapper.jpg" alt="Screenshot" /></a></p><h4>滑门脚本</h4><p>你可以参考下面的脚本、技巧和教程制作你自己的滑门：</p><ul><li><a
href="http://sixrevisions.com/tutorials/javascript_tutorial/create-a-slick-and-accessible-slideshow-using-jquery/" target="_blank">Slick Accessible Slideshow using jQuery</a></li><li><a
href="http://www.ndoherty.com/demos/coda-slider/1.1.1/" target="_blank">Coda-Slider 1.1.1</a></li><li><a
href="http://www.flowplayer.org/tools/scrollable.html" target="_blank">jquery.scrollable 1.0.2 </a></li><li><a
href="http://nettuts.com/tutorials/javascript-ajax/create-an-amazoncom-books-widget-with-jquery-and-xml/" target="_blank">Create an Amazon Books Widget with jQuery and XML</a></li><li><a
href="http://plugins.jquery.com/project/agile-carousel" target="_blank">Agile Carousel</a></li><li><a
href="http://cssglobe.com/post/3783/jquery-plugin-easy-image-or-content-slider" target="_blank">Easy Image or Content Slider</a></li><li><a
href="http://jqueryfordesigners.com/slider-gallery/" target="_blank">Slider Gallery</a></li><li><a
href="http://jqueryfordesigners.com/coda-slider-effect/" target="_blank">Coda Slider Effect</a></li><li><a
href="http://zendold.lojcomm.com.br/icarousel/" target="_blank">iCarousel</a></li></ul><h3>2.标签卡导航元素</h3><p>本质上标签卡导航和滑门效果是差不多的技巧。它们都能帮你把一大片内容放到一小块区域里。标签卡导航很常见，但也有很多不常见的运用方式。我们这里关注的是在一个页面内部的标签卡，而不是用于在不同页面之间跳转的标签样式主导航。标签卡很明显地将内容划分到不同区块，最终又把他们融合到占地面积很小的一个区块中。</p><h4>标签卡的样式范例</h4><p><strong>出众的背景，大的可点击区域，明显的分割</strong><br
/> 第一个例子来自 <a
href="http://www.apple.com/macpro/performance.html" target="_blank">Mac Pro网站</a> 的“Performance”部分，其标签元素的组织非常值得学习。这些标签卡上的文字都十分易读，可点击区域很大，各标签视觉上的区分也很明显，这正是大部分用户期待的样式啊。你也应该能注意到，当前标签卡上还有着十分微妙的渐变背景，与主内容区块很好地融合在了一起。未激活的标签背景则略暗，主内容区块在其上有微弱的投影，这种做法加强了深度感和立体效果。十分简单而有效的技巧。</p><p><a
href="http://www.apple.com/macpro/performance.html" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/macpro.jpg" alt="Screenshot" /></a></p><p><strong>按钮区分的简洁标签卡</strong><br
/> 以下是另一个利用标签卡紧凑地展示信息的实例。根据 <a
href="http://www.atebits.com/tweetie-iphone/" target="_blank">Atebits</a> 的布局结构，介绍性内容的空间被挤压，不太适合做成多区块样式。所以他们介绍内容的三大部分被组织到了标签中，保持了布局的整洁有序。再一次地，当前标签卡的背景与主内容区融合，不活动标签卡则是较暗的灰色背景。你同样也会发现标签卡之间有着漂亮的分割线，使得每个标签卡看起来都像是独立的按钮。</p><p><a
href="http://www.atebits.com/tweetie-iphone/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/tweetie.jpg" alt="Screenshot" /></a></p><p><strong> 为整个标签集提供清晰的分割线</strong><br
/> <a
href="http://www.bohemiancoding.com/fontcase/index.html" target="_blank">Fontcase</a> 的标签卡设计也很精妙，很有现代感。尽管在未激活标签之间没有分割线，当前标签却有明显的边线。你也能注意到，在整个标签集的上方和下方各有一条边线。标签卡使用了图标与留白来突出文字，提高了易用性。</p><p><a
href="http://www.bohemiancoding.com/fontcase/index.html" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/fontcase.jpg" alt="Screenshot" /></a></p><h4>标签卡效果脚本</h4><ul><li><a
href="http://nettuts.com/html-css-techniques/how-to-create-a-slick-tabbed-content-area/" target="_blank">Create a Slick Tabbed Content Area using CSS &amp; jQuery</a></li><li><a
href="http://www.barelyfitz.com/projects/tabber/" target="_blank">JavaScript tabifier</a></li><li><a
href="http://www.kminek.pl/lab/yetii/" target="_blank">Yetii &#8211;  A JavaScript Tab Interface</a></li><li><a
href="http://www.crackajax.net/tabs.php" target="_blank">Tabbed Page Interface</a></li><li><a
href="http://blog.cutterscrossing.com/index.cfm/2007/6/15/Updated-JQuery-Nested-Tab-Set-with-Demo" target="_blank">Updated JQuery Nested Tab Set</a></li><li><a
href="http://wiki.github.com/madrobby/scriptaculous/tabs" target="_blank">Scriptaculous Tabs</a></li><li><a
href="http://www.nyokiglitter.com/tutorials/tabs.html" target="_blank">Accordian Tabs</a></li></ul><h3>3. 模态窗口</h3><p>模态窗口（Modal windows），或者称为浮窗，一般用于在空间紧张的页面中展示额外信息。在模态窗口中，你可以放置放大版的图像、额外内容、警告/提示信息、视频等等。用模态窗口展示信息时，记得要同时明确地提示用户如何关闭它。</p><p>同时，用于打开模态窗口的链接、缩略图、图标或者其他图形元素，一定要保证与模态窗口要展示的内容有足够的关联。相似的图标、摘要、图形元素都能帮助用户建立原始链接与打开的窗口的联系。</p><h4>模态窗口的例子</h4><p><strong>运用</strong><strong>到登录和注册流程中的浮窗</strong><br
/> 模态窗口最典型的运用就是登录／注册窗口了（与诸如图像、音频、视频、Flash等“传统”媒体文件相比）。登录和注册表单不是用户每次浏览页面都要用到的必要部分，所占页面空间理所应当被节约下来。而使用浮窗，则又为用户省去了重开一个页面的时间，毕竟这只是一个很简单的非常用动作。他们能在网站的任何页面中登录/注册，而不用中断现有流程——只要网站的设计者能提供基于Ajax的“静悄悄的” 登录/注册。</p><p><a
href="http://listen.grooveshark.com/" target="_blank">Grooveshark</a> 整个站点的每一个页面中，这个漂亮的登录窗口都触手可及。注意，点击登录（ Lodin&gt; ）按钮后并不会载入一个新页面，而是直接把注册表单替换成了登陆表单（使用了手风琴效果）。非常方便，非常友好的用户界面。</p><p><a
href="http://listen.grooveshark.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/grooveshark.jpg" alt="Screenshot" /></a></p><p><strong>消隐页面/使用投影</strong><br
/> 如果要使用模态窗口，让窗口下面的页面淡出焦点十分重要。你可以用半透明背景覆盖或者为窗口添加投影，或者两者结合。这么做有两个作用：一是能让用户将注意力集中到浮窗上，然后暂时忽视掉背后的页面。另外，也能增加窗口和页面之间的深度感和区分度，让人在视觉上觉得这窗口确实是漂浮着的。注意看下面的例子(<a
href="http://www.kissmetrics.com/" target="_blank">KissMetrics</a>)，半透明的黑色背景让页面消隐，有助于登录浮窗暂时成为视觉重点。另外，取消和关闭窗口的按钮也设计得很好，够明显，够漂亮。</p><p><a
href="http://www.kissmetrics.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/kissmetrics.jpg" alt="Screenshot" /></a></p><p><a
href="http://www.realmacsoftware.com/rapidweaver/themes/index.php" target="_blank">RealMacSoftware</a> 的浮窗只做了投影，而没有让整个页面消隐。只要深度感和区分度做得足够，这样也很有效。</p><p><a
href="http://www.realmacsoftware.com/rapidweaver/themes/index.php" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/rapidweaver.jpg" alt="Screenshot" /></a></p><h4>模态窗口的脚本</h4><ul><li><a
href="http://fancy.klade.lv/home" target="_blank">Fancy Lightbox</a></li><li><a
href="http://www.lokeshdhakar.com/projects/lightbox2/" target="_blank">Lightbx 2</a></li><li><a
href="http://www.dynamicdrive.com/dynamicindex4/facebox/index.htm" target="_blank">Facebook Image/Content Viewer</a></li><li><a
href="http://woork.blogspot.com/2008/01/lightbox-using-mootools-and-pathfusion.html" target="_blank">Woork Mootools Lightbox</a></li><li><a
href="http://nyromodal.nyrodev.com/" target="_blank">nyroModal JQuery Plugin</a></li><li><a
href="http://nyromodal.nyrodev.com/" target="_blank">JQuery Alert Dialog</a></li><li><a
href="http://stickmanlabs.com/lightwindow/" target="_blank">LightWindow</a></li><li><a
href="http://prototype-window.xilinus.com/" target="_blank">ThickBox 3.1</a></li></ul><h3>4. 翻转元素 Rollover Elements</h3><p>翻转元素目前被越来越多地运用于商业网站、作品集站点和产品展示页。翻转元素的核心概念就是当用户鼠标移到某个按钮或网页元素上时，处于另一个布局区域的元素就自动显示出来。请看下面的例子深入了解我说的“翻转元素”究竟是什么。</p><h4>翻转实例</h4><p><strong>标签卡</strong><strong>翻转</strong><br
/> 下图是 <a
href="http://www.getmiro.com/" target="_blank">Miro主页</a> 的截屏，他们设计了一个十分精妙的巨大翻转元素。这 本质上和滑门类似 —— 只不过内容切换时不需要点击罢了。</p><p><a
href="http://www.getmiro.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/miro.jpg" alt="Screenshot" /></a></p><p><strong>小地方的</strong><strong>微妙</strong><strong>翻转</strong><br
/> <a
href="http://www.taoeffect.com/espionage/" target="_blank">TaoEffect</a> 向我们完美展示了如何通过设计精巧漂亮的翻转元素来添加清爽整洁的额外信息（这种效果最早是应用于前文提到过的<a
href="http://www.panic.com/coda/" target="_blank">Coda网站</a>，但我们选择了TaoEffect作为这一节的实例）。信息的展示十分友好，您只需要把鼠标移到按钮上即可。</p><p>访问网站你会发现，翻转时有非常轻柔的动画，垂直跳动 + 淡入淡出。你应该也能注意到它的背景是半透明的，跳出来的卡片边缘还有高光和投影，与背景很好的区分开来。</p><p><a
href="http://www.taoeffect.com/espionage/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/espionage.jpg" alt="Screenshot" /></a></p><p><strong>内容地图上的翻转元素</strong><br
/> <a
href="http://onehub.com/features/user-home" target="_blank">OneHub</a> 则利用翻转元素实现了另一种效果。这个页面有点像地图，在不同区域做出了标注。鼠标移到标注上时，会显示该标注的额外信息。这种方法用在需要分区域详细解释的产品介绍页上将有特效。</p><p><a
href="http://onehub.com/features/user-home" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/onehub.jpg" alt="Screenshot" /></a></p><p><strong>与幻灯切换结合的翻转元素</strong><br
/> 另一个蛮有趣的设计来自 <a
href="http://squaredeye.com/" target="_blank">SquaredEye</a> —— 他们在导航按钮上用翻转元素来展示下一页内容的预览图。</p><p><a
href="http://squaredeye.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/sq.jpg" alt="Screenshot" /></a></p><h4>小提示/翻转元素的脚本</h4><ul><li><a
href="http://www.nickstakenburg.com/projects/prototip2/" target="_blank">Prototip 2</a></li><li><a
href="http://jqueryfordesigners.com/coda-popup-bubbles/" target="_blank">Coda Popup Bubbles</a></li><li><a
href="http://net.tutsplus.com/tutorials/javascript-ajax/build-a-better-tooltip-with-jquery-awesomeness/" target="_blank">Build a Better Tooltip with jQuery Awesomeness</a></li><li><a
href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/" target="_blank">jQuery plugin: Tooltip</a></li><li><a
href="http://net.tutsplus.com/tutorials/javascript-ajax/create-a-simple-powerful-product-highlighter-with-mootools/" target="_blank">Create a Simple, Powerful Product Highlighter with MooTools</a></li><li><a
href="http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery" target="_blank">Easiest Tooltip and Image Preview Using jQuery</a></li></ul><h3>5. 渐进布局Progressive Layouts</h3><p>“渐进布局”的意思是站点内容按照一定的顺序一块一块地显示给用户。这种组织内容的做法比较反常，但也能在很多网站上看到。渐进布局能帮助用户更容易地深入一长串信息。</p><h4>渐进布局的实例</h4><p><strong>整个站点都由渐进布局构成</strong><br
/> <a
href="http://www.sursly.com/#tyler" target="_blank">Sursly.com</a>（貌似被墙，请<a
href="https://bypass-filter.appspot.com/www.sursly.com/#tyler" target="_blank">点击这里代理访问</a>）的整个作品集站点都基于渐进布局。您应该能注意到，页面右上角有一个“GO”按钮，每一页面都是从上一页面中的GO按钮链接过来的。这种页面之间的渐进系统代替了传统的导航和菜单。当然，这样做也有一个很明显的缺点：导航的交互性下降了，用户只能按照网站建设者想要的顺序获取内容。<span
style="color: #ff9900;">（译注：还有一个缺点是，在不同分辨率屏幕上的显示差异太大，因为你必须考虑到页面内部各区块的位置问题）</span></p><p>尽管单个页面布局能被存为书签（使用# 锚记），但对于随机访问者来说，则无法通过一个明晰的导航对站点内容建立起直接的整体感知。而且，这种布局一般只有一个“航向”，从易用性的角度上来说，所谓“导航”的概念在这里几乎不能适用。</p><p><a
href="http://www.sursly.com/#tyler" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/tyler.jpg" alt="Screenshot" /></a></p><p><span
style="color: #ff9900;">译注：这种水平布局的网站大都采用了渐进布局。和上面的站非常类似的一个网站是： <a
href="http://www.peter-pearson.com/" target="_blank">peter-pearson.com</a> 相对于简单的滚动，这个站还在背景里做了非常可爱的线条，十分漂亮。另外推荐 <a
title="Permanent Link: 26个水平布局网站设计" rel="bookmark" href="http://www.qianduan.net/26-horizontal-websites-design.html">26个水平布局网站设计</a>，在英文原文的留言里还有很多bonus可看。</span></p><p><strong>垂直方向的渐进布局</strong><br
/> <a
href="http://www.dannyblackman.com/" target="_blank">Danny Blackman</a> 的作品集也是仅通过一张渐进式布局页面来实现的。各块元素相互独立，在一张页面上垂直展示。相邻元素之间有滚动按钮，每个元素都有返回顶部的按钮。菜单或所谓导航还是没有被使用。</p><p><a
href="http://www.dannyblackman.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/dannyblackman.jpg" alt="Screenshot" /></a></p><p><span
style="color: #ff9900;">译注：推荐一个做得更好的例子：<a
href="http://searchinsidevideo.com/#home" target="_blank">searchinsidevideo.com</a> 他们使用了固定在顶端的导航，字体也非常大的，极富视觉冲击力，用起来也很方便。</span></p><h4>ScrollTo 脚本</h4><ul><li><a
href="http://plugins.jquery.com/project/ScrollTo" target="_blank">ScrollTo</a> &#8211; 使用这个jQuery插件，就能轻松建立渐进式布局。</li></ul><h3>6. 网格</h3><p>讨论布局的文章是不可能避开网格不谈的。网格通常被认为是任何平衡、有序、简练的网页布局的基础。很多设计师都认为网格是处理信息容量很大的页面时的必备武器。有时候单独使用网格就能很好的展示信息，甚至不需要其他技巧。好的网格能够将一个页面中的全部内容都整合进流动布局里，而内容的可读性，或者如果用户想快速浏览，都不会受到影响。</p><p>下面的网站使用了严格的网格布局。整个站点只有一张页面，需要融入大量信息。不过，全部信息被整合进这整洁的两栏布局网格中。整个布局严谨、强健、稳固，留白恰到好处。浏览或仔细研读内容都非常方便。</p><p><a
href="http://www.neutroncreations.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/neutron.jpg" alt="Screenshot" /></a></p><p><strong>使用不同背景区分网格区域</strong><br
/> 使用网格一般是因为你需要在一个很紧凑的区域内放置大量内容。你想要创建整洁有序的网站布局，但是又不能随意添加很多留白来区分区块。如此的话，你就需要使用不同背景来区分网格区域。没了网格间的大量留白，只要网格内还有少量的内边距，也可以看起来很不错。<a
href="http://valleycreek.org/" target="_blank">Valleycreek.org</a> 就用了这种战术，尽管已经有一条细线来分割网格区域，背景色的差异还是被用到，以提供更明显的区分。</p><p><a
href="http://valleycreek.org/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/valleycreek.jpg" alt="Screenshot" /></a></p><h4>网格生成器、模版和更多工具</h4><ul><li><a
href="http://www.gridsystemgenerator.com/" target="_blank">Grid System Generator</a></li><li><a
href="http://spry-soft.com/grids/" target="_blank">Variable Grid Systems Generator</a></li><li><a
href="http://960.gs/" target="_blank">960 Grid System</a></li><li><a
href="http://grid.mindplay.dk/" target="_blank">Grid Designer</a></li><li><a
href="http://www.29digital.net/grid/" target="_blank">Grid Calculator</a></li><li><a
href="http://www.smashingmagazine.com/2009/01/27/css-typographic-tools-and-techniques/" target="_blank">50 Useful Design Tools For Beautiful Web Typography</a> (including grid-resources)</li></ul><h3>7. 手风琴效果（折叠菜单）</h3><p>折叠菜单和滑动门以及标签卡涉及同一个概念：把大量信息压缩到一小块区域里。“手风琴效果”指的是一些被水平或垂直组织的区块，通过点击，一个内容区块滑向另一个区块，并将其内部内容展示出来，和手风琴的推拉过程有点相似。</p><h4>手风琴效果的实例</h4><p><strong>功能性和大点击区域</strong><br
/> <a
href="http://www.alexcohaniuc.com/" target="_blank">Alex Cohaniuc</a> 的手风琴菜单设计的很好。把作品项目藏到手风琴里是的做法其实挺有道理的，因为这能把每个项目的不必要信息隐藏起来，等访客有需要的时候再显示。说这项设计好是因为：一，每块画布的标题都很大，很好点击；二，每块标签卡都使用了一个小箭头来反映开合状态；三，鼠标滑过时，当前标签卡有将它区分出来的不同背景色。</p><p><a
href="http://www.alexcohaniuc.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/pf.jpg" alt="Screenshot" /></a></p><p><strong>水平内容滚动</strong><br
/> <a
href="http://www.jasonreedwebdesign.com/" target="_blank">Jason Reed</a> 使用手风琴将整个站点糅合进一张页面里。他没有赋予手风琴以特别不一般的视觉特征，而是让它融入了页面之中。另外，这是一个水平方向推拉的手风琴（尽管标签卡是垂直方向的）。请注意看他的标签卡，每个标签卡之间的距离很大，这些标签卡，或者说标题，并不像上一个例子有那么明显的区分，设计师利用了留白来将它们各自独立。鼠标移上去的时候，这些十分易读的标签就会变成橙色，让用户能够非常明确地了解到自己将要点击的标签后面都有什么。</p><p><a
href="http://www.jasonreedwebdesign.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/jasonreed.jpg" alt="Screenshot" /></a></p><p><strong>包含图像和信息的手风琴</strong><br
/> <a
href="http://www.mariusroosendaal.com/" target="_blank">Marius Roosendaal</a> 使用另一个非常漂亮的手风琴来“储藏”他的作品图像。与上面两个例子一样，每一个内容区块都是一个项目的展示。不过，此例的手风琴里的每个图像还附加有一些文字介绍。你能注意到一个小按钮被用来显示/隐藏介绍。他同时也提供到更详细介绍或者更大预览图的链接。在一个小小的手风琴里当然不能塞进特别特别多的信息，所以如果可以的话，还是尽量给每个项目都加上到详细内容的链接吧。</p><p><a
href="http://www.mariusroosendaal.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/marius.jpg" alt="Screenshot" /></a></p><h4>手风琴脚本</h4><ul><li><a
href="http://nettuts.com/javascript-ajax/create-a-simple-intelligent-accordion-effect-using-prototype-and-scriptaculous/" target="_blank">Create a Simple, Intelligent Accordion Effect Using Prototype and Scriptaculous</a></li><li><a
href="http://jqueryfordesigners.com/slide-out-and-drawer-effect/" target="_blank">Apple.com Downoads Page Slide out and drawer effect</a></li><li><a
href="http://docs.jquery.com/UI/Accordion" target="_blank">UI/API/1.7.1/Accordion jQuery Plugin</a></li><li><a
href="http://jquery.bassistance.de/accordion/demo/" target="_blank">jQuery UI Accordion</a></li><li><a
href="http://www.i-marco.nl/weblog/jquery-accordion-menu/" target="_blank">Simple JQuery Accordion menu</a></li><li><a
href="http://www.i-marco.nl/weblog/jquery-accordion-menu/" target="_blank">jQuery Accordion Madness</a></li><li><a
href="http://designreviver.com/tutorials/jquery-examples-horizontal-accordion/" target="_blank">jQuery Examples &#8211; Horizontal Accordion</a></li></ul><h3>8. 超大下拉菜单</h3><p>导航不一定非得是几个简单的超链接组合。最近，导航设计有一个流行趋势：不仅仅提供“航向”选择，也提供网站内各“终点站”位置以及“终点站”之间的从属关系。所谓“超大”下拉菜单常见于电子常务网站，用于展示他们庞杂的商品分类。这种样式正成为设计趋势，因为它能通过普通的翻转就提供大量分类信息，而不需要用户额外的点击。</p><h4>超大下拉菜单的实例</h4><p>超大下拉菜单的一个经典例子是 <a
href="http://guides.rubyonrails.org/contribute.html" target="_blank">Ruby On Rails Guide</a> 的Guide Index。这个菜单提供了一个组织良好、样式精美的二级导航。注意，与一般的做法不同，激活二级菜单需要用户点击，Guide Index右边有“切换” 图标，并且有着与将要弹出的二级菜单相融合的背景色。弹出的二级菜单也有细微的投影。</p><p><span
style="color: #999999;">译注：这站点在IE的Quirks模式下有显示异常……（话说显示不异常的页面还基本上没有……）</span></p><p><span
style="color: #999999;">下面的截图里的投影，我也看不到……</span></p><p><a
href="http://www.gateway.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/ror.gif" alt="Screenshot" /></a></p><p><strong>带更多信息的多级菜单</strong><br
/> <a
href="http://www.porsche.com/usa/" target="_blank">Porsche</a> 对于上面说到的技巧来说，简直是一个完美的例子。Porsche 的主页提供一个多级菜单，让用户不用一次点击就能快速了解他们生产的所有汽车。第三级菜单中，所选汽车的信息被直接提供：包括图片、许多链接、以及其他关于本车的快读信息。当然，这个更大的区块就是一个巨大的可点击区域。所有细节和特别介绍都直接链到相应页面。要了解究竟是怎么回事，就点击下面的图片自己去看看吧！</p><p><a
href="http://www.porsche.com/usa/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/911.gif" alt="Screenshot" /></a></p><p><strong>在下拉列表里显示搜索结果</strong><br
/> 最近还比较流行的一个技巧和上面谈到的有点类似：在下拉列表里显示搜索结果。 <a
href="http://kb.mediatemple.net/" target="_blank">Media Temple Knowledge Base</a> 就使用了这一技巧。他们没有使用一个新页面来显示用户的搜索结果，搜索结果在一个下拉列表里随着你的输入而实时变化。不过，请注意，完整搜索结果页的链接仍然存在，您若要在自己的设计中使用这种设计，还请不要忘记这一点。</p><p><a
href="http://kb.mediatemple.net/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/mediatemple.jpg" alt="Screenshot" /></a></p><p><strong>在下拉区块中显示额外信息</strong><br
/> <a
href="http://www.gateway.com/" target="_blank">Gateway.com</a> 继续登场。你能看到他们在顶部菜单中使用了超大的下拉区块来展示产品。下拉区块中的产品排列组织得非常好，图片提供了强健的视觉支持。这个菜单还提供了诸如价格和屏幕尺寸等额外信息，让顾客能够在查看具体页面之前就有所选择。因为很多人都很关心产品价格——至少对于很多有购买需求的人来说。</p><p><a
href="http://www.gateway.com/" target="_blank"><img
src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/layout-solution/gateway.jpg" alt="Screenshot" /></a></p><h4>菜单脚本</h4><ul><li><a
href="http://www.clarklab.net/blog/posts/animated-drop-down-menu-with-jquery/" target="_blank">Animated Drop Down Menu with jQuery</a></li><li><a
href="http://users.tpg.com.au/j_birch/plugins/superfish/#examples" target="_blank">Superfish v1.4.8 &#8211; JQuery Drop Down Menu</a></li><li><a
href="http://www.sitepoint.com/blogs/2009/03/31/make-a-mega-drop-down-menu-with-jquery/" target="_blank">Make a Mega Drop-Down Menu with jQuery</a></li><li><a
href="http://buildinternet.com/2009/01/how-to-make-a-smooth-animated-menu-with-jquery/" target="_blank">How to Make a Smooth Animated Menu with jQuery</a></li><li><a
href="http://css-tricks.com/designing-the-digg-header-how-to-download/" target="_blank">Designing the Digg Header: How To &amp; Download</a></li><li><a
href="http://www.kriesi.at/archives/create-a-multilevel-dropdown-menu-with-css-and-improve-it-via-jquery" target="_blank">Create a multilevel Dropdown menu with CSS and improve it via jQuery</a></li></ul><h3>更多资源</h3><p>你应该也会喜欢（全是英文）：</p><ul><li><a
href="http://www.smashingmagazine.com/2008/08/11/5-useful-coding-solutions-for-designers-and-developers/" target="_blank">5 Useful Coding Solutions For Designers and Developers</a>（代码解决方案）</li><li><a
href="http://www.smashingmagazine.com/2009/03/24/designing-drop-down-menus-examples-and-best-practices/" target="_blank">Designing Drop-Down Menus: Examples and Best Practices</a>（下拉菜单）</li><li><a
href="http://www.smashingmagazine.com/2009/03/09/slideshows-in-web-design-when-and-how-to-use-them/" target="_blank">Slideshows in Web Design: Where And How To Use Them</a>（幻灯片）</li><li><a
href="http://www.smashingmagazine.com/2008/09/03/40-creative-design-layouts-getting-out-of-the-box/" target="_blank">40 Creative Design Layouts: Getting Out Of The Box</a>（40个创新性布局）</li><li><a
href="http://www.smashingmagazine.com/2009/01/14/web-design-trends-for-2009/" target="_blank">Web Design Trends For 2009</a>（2009年网页设计趋势）</li><li><a
href="http://www.smashingmagazine.com/2009/04/08/from-table-hell-to-div-hell/" target="_blank">Table Layouts vs. Div Layouts: From Hell To… Hell?</a>（表格布局vsDiv布局：走出地狱，升入……地狱？ ）</li></ul><h4>关于作者</h4><p><em>Matt Cronin 是一位富有激情的平面设计师，网页设计师/开发者，Cocoa程序员，摄影师，数字艺术家，等等。他也热爱写作，已经为Smashing Magazine写过很多好文。他现在正着手于一个叫做i VAEOU 的项目，不久之后就能面试。 <a
href="http://twitter.com/vaeou" target="_blank">Follow Matt on Twitter.</a></em></p><p>译文原文来自笨活儿，转载请保留本链接：<a
title="提升设计品质的8个布局方案" href="http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html">提升设计品质的8个布局方案</a>。</p><p>英文原文：<a
title="8 Layout Solutions To Improve Your Designs" rel="bookmark" href="http://www.smashingmagazine.com/2009/05/19/8-layout-solutions-to-improve-your-designs/">8 Layout Solutions To Improve Your Designs</a></p><blockquote><p>本文译自Smashing Magazine。从今以后，凡是译自Smashing Magazine的文章都在标题后加注SM，不再另行说明。</p><p>然 后，刚才发现译言上已经有本文的翻译了，不过是分上下篇发的。虽然有译文，我还是自己独立把本文给译完了。我想说的是，我这人比较耿直，绝对不会把 原文切割，分为几个部分来发。翻译的时候忠实原文也是我很看重的，所以我不会随意精简原作者的话，大家如何觉得罗嗦，还是多多包涵吧！</p></blockquote><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/5-simple-tricks-to-bring-light-and-shadow-into-your-designs.html" rel="bookmark">五个为你的设计添加光影效果的简单技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-design" title="查看 网页设计 中的全部文章" rel="category tag">网页设计</a>        标签: <a
href="http://blog.benhuoer.com/tag/css" rel="tag">CSS</a>, <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/jquery" rel="tag">jQuery</a>, <a
href="http://blog.benhuoer.com/tag/smashing-magazine" rel="tag">Smashing Magazine</a>, <a
href="http://blog.benhuoer.com/tag/tutsplus" rel="tag">TutsPlus</a>, <a
href="http://blog.benhuoer.com/tag/%e5%b8%83%e5%b1%80" rel="tag">布局</a>, <a
href="http://blog.benhuoer.com/tag/%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c" rel="tag">用户体验</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html#comments" target="_blank">已经有14条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html&title=提升设计品质的8种布局方案[SM]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/8-layout-solutions-to-improve-your-designs.html/feed</wfw:commentRss> <slash:comments>14</slash:comments> </item> <item><title>正则表达式高级技巧背后的关键概念[SM]</title><link>http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html</link> <comments>http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html#comments</comments> <pubDate>Mon, 01 Jun 2009 10:09:50 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[前端开发]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[php]]></category> <category><![CDATA[Smashing Magazine]]></category> <category><![CDATA[教程]]></category> <category><![CDATA[正则表达式]]></category> <category><![CDATA[编程]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=971</guid> <description><![CDATA[英文原文来自Smashing Magazine。由笨活儿翻译。转载请注明出处。 正则表达式(Regular Expression, abbr. regex) 功能强大，能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是，简单的正则表达式对于一些高级运用，功能远远不够。若要进行筛选的结构比较复杂，你可能就需要用到高级正则表达式。 本文为您介绍正则表达式的高级技巧。我们筛选出了八个常用的概念，并配上实例解析，每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解，请先阅读这篇文章，或者这个教程，或者维基条目。 这里的正则语法适用于PHP，与Perl兼容。 1. 贪婪/懒惰 所有能多次限定的正则运算符都是贪婪的。他们尽可能多地匹配目标字符串，也就是说匹配结果会尽可能地长。不幸的是，这种做法并不总是我们想要的。因此，我们添加“懒惰”限定符来解决问题。在各个贪婪运算符后添加“?”能让表达式只匹配尽可能短的长度。另外，修改器“U”也能惰化能多次限定的运算符。理解贪婪与懒惰的区别是运用高级正则表达式的基础。 贪婪操作符 操作符 * 匹配之前的表达式零次或零次以上。它是一个贪婪操作符。请看下面的例子： preg_match( '/&#60;h1&#62;.*&#60; \/h1&#62;/', '&#60;/h1&#62;&#60;h1&#62;这是一个标题。&#60;/h1&#62; &#60;h1&#62;这是另一个。&#60;/h1&#62;', $matches ); 句点(.)能代表除换行符外的任意字符。上面的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号(*)来匹配标签内的所有内容。匹配结果如下： 这是一个标题。 这是另一个。 整个字串都被返回。* 操作符会连续匹配所有内容—— 甚至包括中间的 h1 闭合标签。因为它是贪婪的，匹配整个字串是符合其利益最大化原则。 懒惰操作符 把上面的式子稍作修改，加上一个问号(?)，能让表达式变懒惰： /&#60;h1&#62;.*?&#60; \/h1&#62;/&#60;/h1&#62; 这样它会觉得，只需匹配到第一个 h1 结尾标签就完成任务了。 另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上，如果没有加上问号，它会寻找尽可能多的重复次数，加上的话，则会尽可能少重复（当然也就是“重复n次”最少）。 # 建立字串 $str = 'hihihi oops hi'; # 使用贪婪的{n,}操作符进行匹配 preg_match( '/(hi){2,}/', $str, [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/sub-themes-their-structure-and-inheritance.html" rel="bookmark">[Drupal模板制作手册-3]子主题，结构与继承</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<blockquote><p>英文原文来自<a
title="Smashing Magazine" href="http://www.smashingmagazine.com/2009/05/06/introduction-to-advanced-regular-expressions/" target="_blank">Smashing Magazine</a>。由<a
title="正则表达式高级技巧" href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" target="_blank">笨活儿</a>翻译。转载请注明出处。</p></blockquote><p>正则表达式(Regular Expression, <em>abbr. regex</em>) 功能强大，能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是，简单的正则表达式对于一些高级运用，功能远远不够。若要进行筛选的结构比较复杂，你可能就需要用到<strong>高级正则表达式</strong>。</p><p>本文为您<strong>介绍正则表达式的高级技巧</strong>。我们筛选出了八个常用的概念，并配上实例解析，每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解，请先阅读<a
title="正则表达式入门" href="http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#introduction" target="_blank">这篇文章</a>，或者<a
href="http://www.regexlab.com/zh/deelx/syntax.htm" target="_blank">这个教程</a>，或者<a
title="维基百科" href="http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" target="_blank">维基条目</a>。</p><p>这里的正则语法适用于PHP，与<a
title="维基百科" href="http://zh.wikipedia.org/wiki/Perl" target="_blank">Perl</a>兼容。</p><p><span
id="more-971"></span></p><h3>1. 贪婪/懒惰</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/greed.jpg" alt="Greed" width="400" height="300" /></p><p>所有能多次限定的正则运算符都是贪婪的。他们<strong>尽可能多</strong>地匹配目标字符串，也就是说匹配结果会<strong>尽可能地长</strong>。不幸的是，这种做法并不总是我们想要的。因此，我们添加“懒惰”限定符来解决问题。在各个贪婪运算符后添加“?”能让表达式只匹配<strong>尽可能短</strong>的长度。另外，修改器“U”也能惰化能多次限定的运算符。理解贪婪与懒惰的区别是运用高级正则表达式的基础。</p><h4>贪婪操作符</h4><p>操作符 * 匹配之前的表达式零次或零次以上。它是一个贪婪操作符。请看下面的例子：</p><pre class="brush:php">preg_match( '/&lt;h1&gt;.*&lt; \/h1&gt;/', '&lt;/h1&gt;&lt;h1&gt;这是一个标题。&lt;/h1&gt;
&lt;h1&gt;这是另一个。&lt;/h1&gt;', $matches );</pre><p>句点(.)能代表除换行符外的任意字符。上面的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号(*)来匹配标签内的所有内容。匹配结果如下：</p><pre class="brush:php">
<h1>这是一个标题。</h1>
<h1>这是另一个。</h1>
</pre><p>整个字串都被返回。* 操作符会连续匹配所有内容—— 甚至包括中间的 h1 闭合标签。因为它是贪婪的，匹配整个字串是符合其利益最大化原则。</p><h4>懒惰操作符</h4><p>把上面的式子稍作修改，加上一个问号(?)，能让表达式变懒惰：</p><pre class="brush:php">/&lt;h1&gt;.*?&lt; \/h1&gt;/&lt;/h1&gt;</pre><p>这样它会觉得，只需匹配到第一个 h1 结尾标签就完成任务了。</p><p>另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上，如果没有加上问号，它会寻找尽可能多的重复次数，加上的话，则会尽可能少重复（当然也就是“重复n次”最少）。</p><pre class="brush:php"># 建立字串
$str = 'hihihi oops hi';
# 使用贪婪的{n,}操作符进行匹配
preg_match( '/(hi){2,}/', $str, $matches );  # matches[0] 将是 'hihihi'
# 使用堕化了的 {n,}? 操作符匹配
preg_match( '/(hi){2,}?/', $str, $matches );  # matches[0] 将是 'hihi'</pre><h3>2. 回返引用(Back referencing)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/back.jpg" alt="Back Referencing" width="300" height="290" /></p><h4>有什么用？</h4><p><strong>回返引用(Back referencing)</strong>一般被翻译成“反向引用”、“后向引用”、“向后引用”，个人觉得“回返引用”更为贴切[<a
title="笨活儿" href="http://blog.benhuoer.com/">笨活儿</a>]。它是在正则表达式内部引用<strong>之前捕获到的内容</strong>的方法。例如，下面这个简单例子的目的是匹配出引号内部的内容：</p><pre class="brush:php"># 建立匹配数组
$matches = array();
# 建立字串
$str = "\"This is a 'string'\"";
# 用正则表达式捕捉内容
preg_match( "/(\"|').*?(\"|')/", $str, $matches );
# 输出整个匹配字串
echo  $matches[0];</pre><p>它会输出：</p><pre class="brush:php">"This is a'</pre><p>显然，这并不是我们想要的内容。</p><p>这个表达式从开头的双引号开始匹配，遭遇单引号之后就错误地结束了匹配。这是因为表达式里说：<code>("|')</code>，也就是双引号（<code>"</code>）和单引号（<code>'</code>）均可。要修正这个问题，你可以用到回返引用。<strong>表达式\1,\2,…,\9</strong> 是对前面已捕获到的各个子内容的编组序号，能作为对这些编组的“指针”而被引用。在此例中，第一个被匹配的引号就由<code>1</code>代表。</p><h4>如何运用？</h4><p>将上面的例子中，后面的闭合引号替换为1：</p><pre class="brush:php">preg_match( '/("|\').*?\1/', $str, $matches );</pre><p>这会正确地返回字串：</p><pre class="brush:php">"This is a 'string'"</pre><blockquote><p><strong>译注思考题：</strong></p><p>如果是中文引号，前引号和后引号不是同一个字符，怎么办？</p></blockquote><p>还记得PHP函数 <code>preg_replace</code> 吗？其中也有回返引用。只不过我们没有用 \1 … \9，而是用了 $1 … $9 … $n （此处任意数目均可）作为回返指针。例如，如果你想把所有的段落标签 <code>&lt;p&gt; </code>都替换成文本：</p><pre class="brush:php">$text = preg_replace( '/&lt;p&gt;(.*?)&lt; \/p&gt;/',
'&amp;lt;p&amp;gt;$1&amp;lt;/p&amp;gt;', $html );</pre><p>参数$1是一个回返引用，代表段落标签<code> </code></p><p><code> </code></p><p>内部的文字，并插入到替换后的文本里。这种简便易用的表达式写法为我们提供了一个获取已匹配文字的简单方法，甚至在替换文本时也能使用。</p><h3>3. 已命名捕获组(Named Groups)</h3><p>当在一个表达式内多次用到回返引用时，很容易就会把自己弄糊涂，判断N个数字（\1 … \9）都到底代表哪一部分会比较困难。这是就可以用到带名字的捕获组（下文简称“有名组”）。有名组使用<code>(?P&lt;pattern&gt;)</code>来设定，name代表组名，pattern是配合该有名组的正则结构。请看下面的例子：</p><pre class="brush:php">/(?P&lt;quote&gt;"|').*?(?P=quote)/</pre><p>上式中，quote就是组名，<code>"|'</code>是改组匹配内容的正则。后面的(?P=quote)是在调用组名为quote的有名组。这个式子的效果和上面的回调引用实例一样，只不过是用了有名组来实现。是不是更加易读易懂了？</p><p>有名组也能用于处理已匹配内容之数组的内部数据。赋予特定正则的组名也能作为所匹配到的内容在数组内部的索引词。</p><pre class="brush:php">preg_match( '/(?P&lt;quote&gt;"|\')/', "'String'", $matches );
# 下面的语句输出“'”(不包括双引号)
echo $matches[1];
# 使用组名调用，也会输出“'”
echo $matches['quote'];</pre><p>所以，有名组并不只是让写代码更容易，它也能用于组织代码。</p><h3>4. 字词边界(Word Boundaries)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/boundary.jpg" alt="Word Boundaries" width="400" height="284" /></p><p><strong>字词边界</strong>是字串里的字词字符（包括字母、数字和下划线，自然也包括汉字）和非字词字符之间的位置。其特殊之处就在于，它并不匹配某个实在的字符。它的长度是<strong>零</strong>。 \<code>b</code> 匹配所有字词边界。</p><p>可惜，字词边界大多数情况下都被无视了，很多人并不知道如何实际运用。 下面举个例子。比如说你想要匹配单词“import”：</p><pre class="brush:php">/import/</pre><p>注意了！正则表达式有时候很调皮的。下面的字串也能和上面的式子匹配成功：</p><pre class="brush:php">important</pre><p>你或许觉得，只要在import前后加上空格，不就可以匹配 import 这个独立的单词了：</p><pre class="brush:php">/ import /</pre><p>那如果遇上这种情况呢：</p><pre class="brush:php">The trader voted for the import</pre><p>当 import 这个词在字串开头或者结尾时，修改后的表达式仍然不能用。因此，考虑各种情况是必须的：</p><pre class="brush:php">/(^import | import | import$)/i</pre><p>别慌，还没完呢。如果遇到标点符号呢？就为了满足这一个单词的匹配，你的正则可能就需要这样写：</p><pre class="brush:php">/(^import(:|;|,)? | import(:|;|,)? | import(\.|\?|!)?$)/i</pre><p>对于只匹配一个单词来说，这样做实在是有点大动干戈了。正因如此，字词边界才显得意义重大。要满足上述要求，以及<strong>很多其他情况</strong>，利用字符边界，只需如此写：</p><pre class="brush:php">/\bimport\b/</pre><p>上面所有情况都得到了解决。\ <code>b</code> 的灵活性就在于，它是一个没有长度的匹配。它只匹配两个实际字符之间想象出的位置。它检查两个相邻字符是否是一个为单字，另一个为非单字。情况符合，就返回匹配。如果遇到了单词的开头或结尾， \<code>b</code> 会把它当成是非单词字符对待。由于import里面的 <code>i</code> 仍然被看成是单词字符，import 就被匹配出来了。</p><p>注意，与<code>\b</code>相对，我们还有\<code>B</code>，此操作符匹配两个单字或者两个非单字之间的位置。因此，如果你想匹配在某个单词内部的‘hi’，可以使用：</p><pre class="brush:php">\Bhi\B</pre><p>“this”、“hight”，都会返回匹配，而“hi there”则不会返回匹配。</p><h3>5. 最小组团(Atomic Groups)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/groups.jpg" alt="Advanced Operators" width="400" height="266" /></p><p><strong>最小组团</strong>是无捕捉的特殊正则表达式分组。通常用来提高正则表达式的效能，也能用于消除特定匹配。一个最小组团可以用(?&gt;pattern) 来定义，其中pattern是匹配式。</p><pre class="brush:php">/(?&gt;his|this)/</pre><p>当正则引擎针对最小组团进行匹配时，它会跳过组团内标记的回溯位置。以单词“smashing”为例，当用上面的正则表达式匹配时，正则引擎会先尝试在“smashing”里寻找“his”。显然，找不到任何匹配。此时，最小组团就发挥作用了：正则引擎会放弃所有回溯位置。也就是说，它不会尝试再从“smashing”里查找“this”。为什么要这样设置？因为“his”都没有返回匹配结果，包含有“his”的“this”当然就更匹配不了了！</p><p>上面的例子并没有什么实用性，我们用<code>/t?his?/</code> 也能达到效果。再看看下面的例子：</p><pre class="brush:php">/\b(engineer|engrave|end)\b/</pre><p>如果把“engineering”拿去匹配，正则引擎会先匹配到“engineer”，但接下来就遇到了字词边界，\<code>b</code>，所以匹配不成功。然后，正则引擎又会尝试在字串里寻找下一个匹配内容：engrave。匹配到eng的时候，后面的又对不上了，匹配失败。最后，尝试“end”，结果同样是失败。仔细观察，你会发现，一旦engineer匹配失败，并且都抵达了字词边界，“engrave”和“end”这两个词就已经不可能匹配成功了。这两个词都比engineer短小，正则引擎不应该再多做无谓的尝试。</p><pre class="brush:php">/\b(?&gt;engineer|engrave|end)\b/</pre><p>上面的替代写法更能节省正则引擎的匹配时间，提高代码的工作效率。</p><h3>6. 递归(Recursion)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/recursion.jpg" alt="Recursion" width="400" height="300" /></p><p><strong>递归(Recursion)</strong>用于匹配嵌套结构，例如括弧嵌套， (this (that))，HTML标签嵌套<code> </code></p><p><code> </code></p><p><code> </code></p><p><code> </code></p><p>。我们使用<code>(?R)</code>来代表递归过程中的子模式。下面是一个匹配嵌套括弧的例子：</p><pre class="brush:php">/\(((?&gt;[^()]+)|(?R))*\)/</pre><p>最外层使用了反义符的括号“<code>(</code>”匹配嵌套结构的开端。然后是一个多选项操作符<code>( * | * )</code>，可能匹配除括号外的所有字符 “<code>(?&gt;[^()]+)</code>”，也可能是通过子模式“<code>(?R)</code>”来再次匹配整个表达式。请注意，这个操作符会尽量多地匹配所有嵌套。</p><p>递归的另一个实例如下：</p><pre class="brush:php">/&lt;([\w]+).*?&gt;((?&gt;[^&lt;&gt;]+)|((?R)))*&lt;\/\1&gt;/</pre><p>以上表达式综合运用了字符分组，贪婪操作符、回溯，以及最小化组团来匹配嵌套标签。第一个括弧内分组<code>([\w]+)</code>匹配出标签名，用于接下来的应用。若找到这尖括号样式的标签，则尝试寻找标签内容的剩余部分。下一个括弧括起来的子表达式和上一个实例非常相似：要么匹配不包括尖括号的所有字符 <code>?&gt;[^&lt;&gt;]+</code>，要么递归匹配整个表达式<code>(?R)</code>。表达式最后的<code>&lt;\/1&gt;</code>代表闭合标签。</p><h3>7. 回调(Callbacks)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/call.jpg" alt="Callbacks" width="400" height="290" /></p><p>匹配结果中的特定内容有时可能会需要某种特别的修改。要应用多重而复杂的修改，正则表达式的<strong>回调</strong>就有了用武之地。回调是用于函数<code>preg_replace_callback</code>中的动态修改字串的方式。你可以为<code>preg_replace_callback</code>指定某个函数为参数，此函数能接收匹配结果数组为参数，并将数组修改后返回，作为替换的结果。</p><p>例如，我们想将某字串中的单词全部转换为首字母大写。十分不巧，PHP没有直接转化字母大小写的正则操作符。要完成这项任务，就可以用到正则回调。首先，我们要匹配出所有需要被大写的字母：</p><pre class="brush:php">/\b\w/</pre><p>上式同时使用了字词边界和字符类。光有这个式子还不够，我们还需要一个回调函数：</p><pre class="brush:php">function upper_case( $matches ) {
return strtoupper( $matches[0] );
}</pre><p>函数<code>upper_case</code>接收匹配结果数组，并将整个匹配结果转化成大写。 在此例中，<code>$matches[0]</code>代表需要被大写的字母。然后，我们再利用<code>preg_replace_callback</code>完成这次回调：</p><pre class="brush:php">preg_replace_callback( '/\b\w/', 'upper_case', $str );</pre><p>一个简单的回调即有这般强大的力量。</p><h3>8. 注释(Commenting)</h3><p><img
src="http://i27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/regular-expression/comment.jpg" alt="Commenting" width="400" height="300" /></p><p><strong>注释</strong>不用来匹配字串，但确实是正则表达式中最重要的部分。当正则越写越深入，越写越复杂，要推译出究竟什么东西被匹配就会变得越来越困难。在正则表达式中间加上注释，是最小化将来的迷糊和困惑的最佳方式。</p><p>要在正则表达式内部加上注释，使用<code>(?#comment)</code>格式。把“comment”替换成你的注释语句：</p><pre class="brush:php">/(?#数字)\d/</pre><p>如果你打算把代码公之于众，为正则表达式加上注释就显得尤为重要。这样别人才能更容易看懂和修改你的代码。和其他场合的注释一样，这样做也能为你重访自己以前写的程序时提供方便。</p><p>考虑使用“x”或“(?x)”标记位来格式化注释。这个修改器让正则引擎忽略表达式参数之间的空格。“有用的”空格仍然能够通过<code>[ ]</code>或\<code>s</code>，或者\<code> </code>（反义符加空格）来匹配。</p><pre class="brush:php">/
\d    #digit
[ ]   #space
\w+   #word
/x</pre><p>上面的代码与下面的式子作用一样：</p><pre class="brush:php">/\d(?#digit)[ ](?#space)\w+(?#word)/</pre><p>请时刻注意代码的可读性。</p><h3>更多资源（英文）</h3><ul><li><a
href="http://www.regular-expressions.info/" target="_blank">Regular-Expressions.info</a> Comprehensive website on regular expressions</li><li><a
href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/" target="_blank"> Cheat Sheet</a>Informative regular expressions cheat sheet</li><li><a
href="http://www.jslab.dk/tools.regex.php" target="_blank"> Regex Generator</a>JavaScript regular expressions generator</li></ul><h4>关于作者</h4><p><em>Karthik Viswanathan 是一个喜欢编程和做网站的高中生。你可以到他的博客上查看他的作品：<a
href="http://www.lateralcode.com/" target="_blank">Lateral Code</a>。你也可以关注一下他的线上<a
href="http://twitter.lateralcode.com/" target="_blank">Twitter应用</a>。</em></p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/sub-themes-their-structure-and-inheritance.html" rel="bookmark">[Drupal模板制作手册-3]子主题，结构与继承</a></li><li><a
href="http://blog.benhuoer.com/posts/40-stand-alone-javascript-libraries-for-specific-purposes.html" rel="bookmark">40个实用的轻量级JavaScript库[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/24-javascript-best-practices-for-beginners.html" rel="bookmark">给JavaScript新手的24条实用建议[TUTS+]</a></li><li><a
href="http://blog.benhuoer.com/posts/10-tips-for-jquery-performance.html" rel="bookmark">即刻提升jQuery性能的十个技巧[TUTS+]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-apps-development" title="查看 前端开发 中的全部文章" rel="category tag">前端开发</a>        标签: <a
href="http://blog.benhuoer.com/tag/javascript" rel="tag">JavaScript</a>, <a
href="http://blog.benhuoer.com/tag/php" rel="tag">php</a>, <a
href="http://blog.benhuoer.com/tag/smashing-magazine" rel="tag">Smashing Magazine</a>, <a
href="http://blog.benhuoer.com/tag/%e6%95%99%e7%a8%8b" rel="tag">教程</a>, <a
href="http://blog.benhuoer.com/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f" rel="tag">正则表达式</a>, <a
href="http://blog.benhuoer.com/tag/%e7%bc%96%e7%a8%8b" rel="tag">编程</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html#comments" target="_blank">已经有10条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html&title=正则表达式高级技巧背后的关键概念[SM]&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/crucial-concepts-behind-advanced-regular-expressions.html/feed</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>高品质的网页设计: 实例与技巧</title><link>http://blog.benhuoer.com/posts/quality-within-web-design.html</link> <comments>http://blog.benhuoer.com/posts/quality-within-web-design.html#comments</comments> <pubDate>Sun, 17 May 2009 10:48:57 +0000</pubDate> <dc:creator>慵云</dc:creator> <category><![CDATA[网页设计]]></category> <category><![CDATA[showcase]]></category> <category><![CDATA[Smashing Magazine]]></category> <category><![CDATA[细节]]></category> <guid
isPermaLink="false">http://blog.benhuoer.com/?p=973</guid> <description><![CDATA[提升网页和博客设计品质的一些实例和技巧 “高品质”是所有人追求的目标，在网页设计的世界中也不例外。不过何为“品质”，如何判断一项设计的品质是好还是坏？笔者恰好有一套找出网页设计中品质焦点的方法。一旦你了解到如何判断一项高品质的设计究竟好在哪里，你就掌握了让自己的设计更趋完美的大量技巧。 接下来我会给大家列一些要点，并附上相应的例子，与大家分享一下我在别人的网页设计中寻找“高品质”的过程。 01. 留白 在好的网页设计中我最留意的是那些对设计元素之间留白的聪明运用。留心不同内容区块之间的间距和排列方式，能让你的设计的整体感官大不一样，从而提升设计的品质。 我觉得处理好留白的关键是从整体上感知设计元素。把设计稿缩小观看会是个好办法。 出色的留白处理的实例 Good.is 页面整洁而有开放感，全都得益于设计师对文字和图像之间留白量的准确把握。 Digital Mash 在大空白上展示的元素往往更具吸引力。Digital Mash的网站创造了极佳的亲和力。 Creatica Daily 的大量空白 优秀的留白运用又一次让网页内容成为焦点。每篇文章中都有大量内容，不过该站点的设计师们并不惮于给这么多内容之间填上大量留白。并不是说你的文字不够多，就不能用很多留白。 Postbox 上也有很多空白 仔细观察Postbox的网站，你能看到边缘处的留白应该如何处理。它的方框边缘有60像素的边内留白。听起来似乎挺大的，实际看起来效果却好极了。 留白时的错误 大家在设计留白时的最常见问题就是各个区块的内容到边缘距离太小。不论你的设计多么有风格，如果你硬要把东西塞得紧紧的，这些风格连同设计的品质，就都流失了。 留白不够的例子 我们已经看到PostBox的网站那些大留白创造了多么动人的效果，所以下面我们修改一下它的页面，看看减少留白会是什么效果： 品质感明显下降了。留白的影响就有这么大。 高效控制留白的技巧 各种不同情况下，留白要求都不尽相同。你需要不断训练自己，做到对留白所能带来的改变时刻心中有数，从而有效地利用留白满足设计需求。这要靠个人感觉的，不过都能从实践中锻炼出来。 使用网格辅助设计 利用网格当然能帮助你理解元素之间的空白。 不断尝试 不断尝试—失败—尝试，直到找到最佳方案。 留白并不是浪费空间 空白并不总是等着你去填充的。 没错，少就是多 与其用尽心思填满某个区域，不如就把它留空，只保留至关重要的信息就好。 02.  像素级的完美 有一个方法能够看出某人在完成一项网页设计时是否真的用心了。有时候创造奇迹的就是一些小细节，一些别人几乎无法察觉的细节。我所说的“像素级的完 美”就是指在线条、边缘和边框描边上仔细推敲。与其就用一条单一的线，不如多加一些细节。细节可以是细微的渐变，也完全可以只是一条1像素宽的细线（用作表现阴影或高光）。有了这些细节， 你的设计会大不一样。有些设计师在这方面特擅长： Collis Ta’eed, David Leggett 以及 Wolfgang Bartelme. 像素级完美细节的实例 Envato的细节鉴赏 下图的Example 1 (例子1)中，绿色内容框的边缘有一条更亮的绿色线。而Example 2处，区块内边缘有柔和的渐变阴影，而边缘之上还有一像素的白色描边。这做法非常聪明，用阴影来强调高光。后面的绿色区域有非常柔和细微的光影效果，有助于将注意力吸引到下面的白色区块中那清新脆爽的细节上去。 尽管这种做法并不是总能让设计看起来更加精致，不过它们的确能帮助你赋予设计以三维的真实感。于是设计元素就成了镶嵌在页面上的宝石，而不是平铺在上面的一张毫无动感的纸。 [...]<div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/photoshop-action-for-screenshot.html" rel="bookmark">[教程]Photoshop动作功能实例-制作规范化的截屏图</a></li><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li></ol></div> ]]></description> <content:encoded><![CDATA[<h2 class="description">提升网页和博客设计品质的一些实例和技巧</h2><p>“高品质”是所有人追求的目标，在网页设计的世界中也不例外。不过何为“品质”，如何判断一项设计的品质是好还是坏？笔者恰好有一套找出网页设计中品质焦点的方法。一旦你了解到如何判断一项高品质的设计究竟好在哪里，你就掌握了让自己的设计更趋完美的大量技巧。</p><p>接下来我会给大家列一些要点，并附上相应的例子，与大家分享一下我在别人的网页设计中寻找“高品质”的过程。</p><p><span
id="more-973"></span></p><p><a
href="http://blog.benhuoer.com/2009/05/quality-within-web-design/"><img
title="高品质的网页设计: 实例与技巧 - 笨活儿 - Beleben Design" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_in_web_design.jpg" alt="quality in web design" width="490" height="200" /></a></p><h4>01. 留白</h4><p>在好的网页设计中我最留意的是那些对设计元素之间留白的聪明运用。留心不同内容区块之间的间距和排列方式，能让你的设计的整体感官大不一样，从而提升设计的品质。</p><p>我觉得处理好留白的关键是从整体上感知设计元素。把设计稿缩小观看会是个好办法。</p><h4>出色的留白处理的实例</h4><h3>Good.is</h3><p>页面整洁而有开放感，全都得益于设计师对文字和图像之间留白量的准确把握。</p><p><a
href="http://www.good.is/"><img
title="Quality Spacing, Good.is" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_1.jpg" alt="good spacing" width="490" height="360" /></a></p><h3>Digital Mash</h3><p>在大空白上展示的元素往往更具吸引力。Digital Mash的网站创造了极佳的亲和力。</p><p><a
href="http://digitalmash.com/"><img
title="Quality Spacing, Digital Mash" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_2.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>Creatica Daily 的大量空白</h3><p>优秀的留白运用又一次让网页内容成为焦点。每篇文章中都有大量内容，不过该站点的设计师们并不惮于给这么多内容之间填上大量留白。并不是说你的文字不够多，就不能用很多留白。</p><p><a
href="http://daily.creattica.com/"><img
title="Quality Spacing, Creatica" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_5.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>Postbox 上也有很多空白</h3><p>仔细观察Postbox的网站，你能看到边缘处的留白应该如何处理。它的方框边缘有60像素的边内留白。听起来似乎挺大的，实际看起来效果却好极了。</p><p><a
href="http://www.postbox-inc.com/"><img
title="Quality Spacing Postbox" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_3.jpg" alt="screenshot" width="490" height="360" /></a></p><h4>留白时的错误</h4><p>大家在设计留白时的最常见问题就是各个区块的内容到边缘距离太小。不论你的设计多么有风格，如果你硬要把东西塞得紧紧的，这些风格连同设计的品质，就都流失了。</p><h3>留白不够的例子</h3><p>我们已经看到PostBox的网站那些大留白创造了多么动人的效果，所以下面我们修改一下它的页面，看看减少留白会是什么效果：</p><p><img
title="Example of bad Spacing" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_4_copy.jpg" alt="screenshot" /></p><p>品质感明显下降了。留白的影响就有这么大。</p><h3>高效控制留白的技巧</h3><p>各种不同情况下，留白要求都不尽相同。你需要不断训练自己，做到对留白所能带来的改变时刻心中有数，从而有效地利用留白满足设计需求。这要靠个人感觉的，不过都能从实践中锻炼出来。</p><blockquote><ul
class="dot-list"><li><em><strong>使用网格辅助设计</strong><br
/> 利用网格当然能帮助你理解元素之间的空白。<br
/> </em></li><li><em><strong>不断尝试</strong><br
/> 不断尝试—失败—尝试，直到找到最佳方案。<br
/> </em></li><li><em><strong>留白并不是浪费空间</strong><br
/> 空白并不总是等着你去填充的。</em></li><li><em><strong>没错，少就是多</strong><br
/> 与其用尽心思填满某个区域，不如就把它留空，只保留至关重要的信息就好。</em></li></ul></blockquote><h4>02.  像素级的完美</h4><p>有一个方法能够看出某人在完成一项网页设计时是否真的用心了。有时候创造奇迹的就是一些小细节，一些别人几乎无法察觉的细节。我所说的“像素级的完  美”就是指在线条、边缘和边框描边上仔细推敲。与其就用一条单一的线，不如多加一些细节。细节可以是细微的渐变，也完全可以只是一条1像素宽的细线（用作表现阴影或高光）。有了这些细节， 你的设计会大不一样。有些设计师在这方面特擅长： <a
title="Collis Ta'eed Homepage" href="http://collistaeed.com/">Collis Ta’eed</a>, <a
title="Tutorial9 Website" href="http://www.tutorial9.net/">David Leggett</a> 以及 <a
title="Wolfgang Bartelme " href="http://www.bartelme.at/">Wolfgang Bartelme</a>.</p><h4>像素级完美细节的实例</h4><h3>Envato的细节鉴赏</h3><p>下图的<strong>Example 1 (例子1)</strong>中，绿色内容框的边缘有一条更亮的绿色线。而<strong>Example 2</strong>处，区块内边缘有柔和的渐变阴影，而边缘之上还有一像素的白色描边。这做法非常聪明，用阴影来强调高光。后面的绿色区域有非常柔和细微的光影效果，有助于将注意力吸引到下面的白色区块中那清新脆爽的细节上去。 尽管这种做法并不是总能让设计看起来更加精致，不过它们的确能帮助你赋予设计以三维的真实感。于是设计元素就成了镶嵌在页面上的宝石，而不是平铺在上面的一张毫无动感的纸。</p><p><a
href="http://www.envato.com/"><img
title="Quality Design; Envato\'s Pixel Perfection" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_6.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>Tutorial9.net上的细节</h3><p>David Leggett 对于如何制造 <a
title="Tutorial9 - 5 Pixel Popping Techniques" href="http://www.tutorial9.net/photoshop/5-pixel-popping-techniques/">单像素顶边条</a> 有很深的理解。他最近重新设计的 tutorial9 集合了很多非常棒的像素化技巧。 <strong>Example 1</strong> 处你能看到，他是如何仅仅通过添加一条1像素的高光，而将导航标签变得更有质感。<strong>Example 2 </strong>处使用的技巧则更多了。相机图标的投影，下方白色区域的阴影与高光，以及导航条上的1像素高光。</p><p><a
href="http://tutorial9.net/"><img
title="Quality in Web Design; Tutorial 9 Pixel Perfection" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_7.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>RedBrick Health上 按钮和分割线上的完美像素级细节</h3><p>这个漂亮的导航菜单，由<a
title="Web Designer, Ryan Scherf" href="http://www.ryanscherf.net/">Ryan Scherf</a> 创造，是使用完美像素级细节提升设计品质的绝佳实例。红色按钮有1像素的高亮，链接之间的分割线也有同等的品质与细节。正如你所看到的，他没有满足于只用一条灰色线分割，Ryan还在下面添加了一条1像素宽的高光线，避免了设计看起来过于平坦。</p><p><a
href="https://www.redbrickhealth.com/"><img
title="Quality Web Design; RedBrick Health Pixel Perfection" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_8.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>完美像素级细节也适用于Grunge风格: AvalonStar</h3><p><em>译注：Grunge风格有“做旧”、“迷幻摇滚”、“做脏”等几层意思在里面，算是平面艺术中的一个流派。</em></p><p>下面的例子是漂亮的AvalonStar：Distortion（扭曲）主题博客，有着极赞的grunge风格。不过，即便是肮脏做旧的grunge风，利用1像素高光也能创造大不同。下图的<strong>Example 1</strong> 处，上面的棕色区域有一个渐变阴影，下面的绿色区块的顶部则有着一条1像素高亮线。阴影与1像素线的结合，让这些区块显得更为精致。</p><p><a
href="http://avalonstar.com/blog/"><img
title="Avalon Star, Pixel Perfection on a Grunge Design" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_9.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>完美细节小贴士</h3><p>要在这一技巧上达到完美，不断的实践尤为重要。如您所见，一条1像素线这么简单的东西就能给设计添加非常酷的深度感。你甚至不一定要用到那些倒角或渐变，费尽心力做一些实实在在的置于某对象之上的效果。</p><blockquote><ul><li><em><strong>一定得是细节</strong><br
/> 小细节完善内容感官是关键。</em></li><li><em><strong>思考像素级问题</strong><br
/> 描边、渐变、线条、阴影等等，不用太宽大也能有效增强设计</em></li><li><em><strong>前后对比</strong><br
/> 应用效果后注意与没有这种效果之前进行对比。如此你就能知道这些细节到底带来了哪些改观。</em></li></ul><p><em></em></p></blockquote><h4>03. 文字排列与字体选用的诀窍</h4><p>尽管设计师大都不会亲自撰写网站的实际内容，不过他们对于内容的整体品质仍然至关重要。设计师的作用就是要保证内容的展现方式足够易读。有很多方法能保证你的字体易读易用，不过我不会给大家列一些该做什么或者不能做什么的规矩和条款，我带给大家的是一些聪明运用字体的实例和分析。</p><h4>仔细考虑了字体的实例</h4><h3>The Netsetter上大而漂亮的字体</h3><p>网页设计中，标题很重要，对于博客设计来说尤为如此。最近流行在标题上使用大而粗的字体。这样做有很多好处，不仅能提高特定内容区块的可用性，而且有助于组织设计中的空间和结构。 <a
title="Collis Ta'eed Netsetter" href="http://netsetter.com/">Netsetter</a> 在这方面做得非常好，如您所见，标题字体很大，周围有大量留白，十分易读。</p><p><a
href="http://thenetsetter.com/blog/"><img
title="Quality in Web Design - Typography - The NetSetter" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_10.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>行间空白和字符间距</h3><p><a
title="Viget Web Design" href="http://viget.com/">Viget</a> 的网站是字体究竟对网页设计有多重要的完美实例。下面的截图来自他们的作品集展示页，再一次展示了大字体是如何帮助创建开放空间的。即使是这种清爽的细线体，他们也使用了宽阔的空白。另一个值得称道的地方是他们对于<strong>行高 (line height) [行间空白]</strong>的的绝妙选择。行间距被设定得比默认值大很多，大大增强了文字可读性。也许下次你可以在自己的设计中也试一试这个技巧。</p><p><a
href="http://www.viget.com/work/ng-expeditions/"><img
title="Quality in Web Design - Typography - Viget" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_11.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>Web Design Ledger, 配合情绪的字体</h3><p>要找到完美的字体需要不断的尝试和失败，或者你还可以根据字体所代表的“情绪”来选择字体。下面的例子，<a
title="Web Design Ledger" href="http://webdesignledger.com/">Web Design Ledger</a>， 在给人以复古和做旧感的同时，也饱含开放的情绪与现代感。他成功的关键就在于选择了能唤起人们相应情绪的字体。Henry Jones (该站的设计师) 为标题选择了一种流行的传统衬线字体：Georgia，为怀旧复古风的实现提供了很大裨益。现代感则来自与标题完全不同的字体——主内容使用的Helvetica字体，一种无衬线的、滑溜的、开放的字体。</p><p><a
href="http://webdesignledger.com/"><img
title="Quality in Web Design - Typography - Web Design Ledger" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_12.jpg" alt="screenshot" width="490" height="360" /></a></p><h3>网页设计中字体选用的快速决断</h3><p>看了上面这么多好例子，将来你选用起字体来应该会更加得心应手。不过，为什么他们给人的感觉这么好？下一次在你自己的设计中，你又该如何运用？</p><blockquote><ul><li><em><strong>是否可读？</strong><br
/> 不要怕尝试粗大的字体</em></li><li><em><strong>你可否考虑过间距？</strong><br
/> 间距对于可读性有很大决定作用</em></li><li><em><strong>你的字体带给人什么情绪？</strong><br
/> 确保字体选择适合你的设计风格</em></li></ul></blockquote><p>这方面还有大量值得关注的地方，不过我不是这方面的专家，我也只是刚刚学会了如何鉴赏那些用得极好的字体而已。如果你想在这方面了解更多，强烈建议你看一下来自Smashing Magazine的<a
title="Fantastic Typography Blogs for your Inspiration - Smashing Magazine" href="http://www.smashingmagazine.com/2009/03/12/fantastic-typography-blogs-for-your-inspiration/">这篇文章</a>。</p><h4>04. 元素的组织</h4><p>设计师这一职业对很多人都有吸引力，因为那些制造创意的过程，实在是十分有趣。我知道组织内容的过程就没有那么有趣了，不过一旦你养成了组织内容的好习惯，你就会发现其实它也没有想象中那么枯燥。组织内容的方式总是需要看情况而定，比如说，这站点是什么类型？某项特定内容在页面上的重要性如何？</p><p>如何放置内容，以及放到哪里，可能的排列组合实在太多了。不过还是有一些技巧可循的。最基础的就是，先决定你的设计需要达到的效果。例如，你是在做<a
title="Designing to Sell on Zygote" href="http://zygote.egg-co.com/designing-to-sell/">卖东西</a>的网站吗？是要做内容展示吗？或者是在做一个用户注册页？推广页面？等等……</p><h3>靠设计做买卖: 37Signals</h3><p>看看这个广受欢迎的 37 signals 的网站。他们的东西能卖这么好，可不是靠的运气。他们的网站让你尽可能容易地了解了他们的产品， 帮你做出最终决定。你所看见的东西都被精妙地设计而呈现。</p><p>如图中所示，他们提供了四大理由让你购买他们的产品。吸引<strong>注意力(Attention)</strong>是第一步，他们做了一个黑色区块，放上关于产品的简单介绍，并且使用了粗大的标题。 接着，他们通过一些漂亮的插画把你的<strong>兴趣(Interest)</strong>吸引到对产品优点的介绍上。再然后，他们想要让你产生购买<strong>需求(Desire)</strong>，这能通过放置客户评论引言和产品获奖证书来实现。在这一实例中，他们是通过几个“What our Customers  have to say”（我们的客户如是说）的视频来实现的。最后要实现的即促成购买<strong>行动(Action)</strong>； <a
title="37Signals Homepage" href="http://37signals.com/">37Signals</a> 的网站上有大量行动点(action points，即引导用户进行下一步操作的链接)贯穿于整个页面，由于页面很长，页面底部还放置了更多的行动点。</p><p><a
href="http://37signals.com/"><img
title="Quality in Web Design - Organization of Elements - Designing to Sell: 37Signals" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_13.jpg" alt="37signals" width="490" height="725" /></a></p><h3>为内容(Blog)而设计: Well Medicated</h3><p>设计博客页面时的情况则大不一样了。你不用花力气劝说你的用户信任你的产品，你的“产品”已经展示在他们面前—— 也就是你的博客内容。你要做的就是确保用户能轻松阅读你的文章，探索内容，与你和你的博客产生联系。</p><p><strong>内容(Content) </strong>应该是博客中出现在读者眼前的首要部分（之一）。在下面的例子中，一个粉红色粗体字的标题，很好地吸引了你的注意力，引导你直接关注文章内容。左侧放了张大小合适的预览图，右边则是两三段文章摘要，和一个“继续阅读”的链接。当然，也有标准的日期和作者信息。这简直就是我心目“内容设计”的完美实例。<strong>注意力(Attention)</strong> 可以被引导到任何有趣的事物上。在这个例子中，漂亮的RSS订阅按钮成为了焦点。且不说这个焦点让读者产生了与内容的联系感，它还能帮助网站获得更多的订阅量。鼓励你的读者探索你的内容相当简单，只需在边栏上加一些最新文章或最受欢迎文章的链接列表，或者制作一个下拉菜单，或者组织一个其他你想要推送的内容的高效列表。做起来很简单，效果却足够有效，尤其是对博客来说。博客是一个私人领地，通过不同的途径告诉读者你的<strong>联系方式(Connect)</strong> ，能帮助他们了解你，也说不定会带来意外的好处。</p><p><a
href="http://wellmedicated.com/"><img
title="Quality in Web Design - Organization of Elements - Designing for Content: Well Medicated" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_14.jpg" alt="wellmedicated" width="490" height="725" /></a></p><h3>组织内容小贴士</h3><p>你当然可能会遇到需要打破常规，选用非同寻常方式的时候，不过你还是可以遵循这些简单技巧，以保证内容结构和阅读顺序的良好。</p><blockquote><ul><li><em><strong>你为何而设计?</strong><br
/> 如前所述，确定设计的目标。</em></li><li><em><strong>利用网格</strong><br
/> 网格帮助你发挥页面的最大潜能。</em></li><li><em><strong>测试元素位置</strong><br
/> 以访问者的角度考察内容的易用性。</em></li><li><em><strong>移除所有不必要元素</strong><br
/> 不必要的东西都应该被消灭，或者至少不要放到显眼的地方</em></li><li><em><strong>注意力的均衡</strong><br
/> 有些东西需要被简单化，好让另外的事物闪耀光辉</em></li></ul></blockquote><h4>05. 自我克制与精妙细节</h4><p>设计师总是在寻找制造<strong>冲击力</strong>的方式，总是想做一个独一无二的设计，创造些前所未有的效果。不过有时候通过<strong>自我克制</strong>也能形成冲击力。量变产生质变，过多的“好”也会带出不好的结果。好的设计师晓得平衡点在哪里，并且能避免让过多的特殊效果毁了一项设计。</p><h3>“Things”网站上的柔和渐变</h3><p>对于我访问过的站点，我总是很关注他们的细微渐变。听起来可能有点恼火，不过我就是忍不住要去研究别人的那些小细节，以积累我将来设计时的灵感。<strong>渐变</strong>是最被滥用的设计方法之一，不过运用成功的话，还是能让设计增色不少，它所能提供的真实感和深度感是其他技巧所不能达到的。大部分人都不太注意渐变，不过别人对渐变的运用确实是我最好的灵感来源。</p><p><a
href="http://culturedcode.com/things/"><img
title="Quality in Web Design - Subtlety, Soft Gradients: Things" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_15.jpg" alt="things-mac" width="490" height="360" /></a></p><h3>Icon Dock 上的投影</h3><p>Icon Dock的网站简直就是各种精妙细节聚在一起开大会。像素级高光，渐变，以及投影。不过在这里我们只关注它的<strong>投影</strong>。不是很大，透明度也被调高，小心翼翼地烘托着内容区块，让其成为真正的焦点。实在漂亮~</p><p><a
title="Quality in Web Design - Subtlety, Soft Gradients: Icon Dock" href="http://icondock.com/"><img
title="Quality in Web Design - Subtlety, Soft Gradients: Icon Dock" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_16.jpg" alt="Quality in Web Design - Subtlety, Soft Gradients: Icon Dock" width="490" height="360" /></a></p><h3>精细的背景材质：Scouting for Girls</h3><p>材质性背景要么成全你的设计，要么毁掉你的设计。很多复杂的背景除了分散读者注意力，没有带来任何好处。最终使得设计品质大为降低。所以，最好还是一直保持你的<strong>背景材质细微而柔和</strong>。 Scouting for  Girls的网站在运用材质打造整体风格和设计品质方面做得极好。</p><p><a
href="http://www.scoutingforgirls.co.uk/"><img
title="Quality in Web Design - Subtle Textures: Scouting for Girls" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_17.jpg" alt="scouting for girls" width="490" height="360" /></a></p><h3>做旧与撕碎的启发： Viget Advance</h3><p>我从来不觉得越细微越好，任何细节的“细度”都以可见为前提。可能人们并没有清楚地意识到，不过这些细节必定<strong>确实</strong>产生了影响。博客Viget Advance的例子中，在<strong>做旧与撕碎</strong>效果方面，能给我们一点启发。 只是非常细微的做旧，不过如果没有这效果，这张人造纸就会显得平淡无奇，枯燥乏味了。正是这些小小的“不完美”让这画面显得更可信，更真实。</p><p><a
href="http://www.viget.com/advance/"><img
title="Quality in Web Design - Subtle Wear / Grunge in Viget Advance" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_18.jpg" alt="viget advance" width="490" height="360" /></a></p><h3>WebDesignerWall 上的水彩效果</h3><p>使用水彩效果的时候，关键是要确保颜色混合得足够柔和，浓淡变化适宜，而且&#8230; 足够“水”。水彩效果为你的设计提供很多好处：精细而和谐的多种色彩，感染力极强的材质感…… 正因如此，越来越多的设计师选择了在他们的设计中创造水彩效果。</p><p><a
href="http://www.webdesignerwall.com/"><img
title="Quality in Web Design - Subtle Watercolour Elements - Web Designer Wall" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_19.jpg" alt="web design wall" width="490" height="360" /></a></p><h3>精妙的植物：Dara’s Garden</h3><p>下面是一个充满智慧的关于<strong>精妙植物</strong>细节的设计。网上还有很多更加栩栩如生的植物图案，而且也非常漂亮，不过这个例子中，我关注的是背景上那些更清淡更微妙的细节。这个例子展现了细节的重要性，柔和的色彩，做旧的效果，唤起你对细节的感知，不过却并不形成为主要焦点。</p><p><a
href="http://www.darasgarden.com/"><img
title="Quality in Web Design - Subtle Floral on Dara\'s Garden" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_20.jpg" alt="subtle flowers" width="490" height="360" /></a></p><h3>运用精妙细节的小贴士</h3><p>我认为，精妙细节能让一项好的设计升华为灿烂夺目的设计。如果你还在寻找让设计与众不同的方法，精妙细节是个不错的尝试方向。 以下是关于运用精妙细节的小贴士：</p><blockquote><ul><li><em><strong>创建细节图层</strong><br
/> 不要在一个笔刷或材质上吊死，多加些图层，多做点细节</em></li><li><em><strong>尝试不同透明度和色彩</strong><br
/> 有时候只有 3% 的不透明度也能产生正面影响</em></li><li><em><strong>拒绝缩手缩脚</strong><br
/> 不要担心太多细微，或者太不明显</em></li></ul><p><em></em></p></blockquote><h4>06.  发挥色彩的全部潜能</h4><p>设计师一般喜欢按照自己的品味来选择颜色，这可实在太不专业了。要决定哪种颜色是最适用的，你的脑子里想的应该一直是品牌需求，然后选好色彩的搭配组合，指定其专属的主题和目标情绪。</p><h4>网页设计中色彩运用的绝妙例子</h4><h3>无趣并不代表无色：Oypro</h3><p><a
title="Oypro Real Estate" href="http://www.oypro.com/">Oypro</a>的网站让我喜欢的地方是，他们告诉了我们，一项“无聊”的行业相应的设计并不一定也得“无聊”。通常企业的网站都不允许设计师有太多视觉创意上的发挥。保持简单、单调、淡彩色成了不成文的规定。不过Oypro的例子证明，<strong>不用束缚自己</strong>，你也能创造出一个有足够“企业感”的网站。</p><p><a
href="http://www.oypro.com/"><img
title="Quality in Web Design: Colourful Real Estate Website" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_21.jpg" alt="oypro" width="490" height="360" /></a></p><h3>让色彩相互联系：Tennessee Summertime</h3><p>Summertime in Tennessee(田纳西州夏日观光) 是一个充满活力的、明亮的，非常温暖的站点。所有一切看起来都是为了推送夏日活动而设计。该站点使用了非常多不同色相的高饱和度色，但每一种颜色都切中要害，没有一种是不适合主题的。高品质设计的色彩搭配必定与其要呈现的服务或产品密切关联。好的设计并不总是需要费尽心力选一些出奇制胜的颜色，那些最明显最该用的颜色反而能创造更好的效果。比如说 <a
title="Hell Design" href="http://helldesign.net/">Hell Design</a>(地狱设计)，不用象征地狱的火红色简直说不过去。</p><p><a
href="http://summer.tnvacation.com/"><img
title="Quality in Web Design: Keeping your Colours Relevant" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_22.jpg" alt="tennessee summertime" width="490" height="360" /></a></p><h3>背景还可以大作文章：Saturized Studio</h3><p>只涂一层单调的背景色可没法让你的设计变得有趣。<strong>有一点变化</strong>的背影才是最好的背景。此例中我们看到，漂亮的橙/红色被运用到各种各样的光照和渐变效果中。这种为背景增加变化的做法，有效避免了平淡和沉闷。另一个需要特别注意的地方是，暗深橙色背景与上层明亮内容区的<strong>对比</strong>产生了非常戏剧化的漂亮的视觉冲击。</p><p><a
href="http://www.saturized.com/"><img
title="Quality in Web Design: Background Colour &amp; Lighting" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_23.jpg" alt="saturized studio" width="490" height="360" /></a></p><h3>在网页设计中运用颜色的小贴士</h3><p>颜色永远是值得探索和尝试的区域。尝试不同的组合变化能为设计带来无限可能。不过选择颜色和色彩搭配时，应该做到对下面的要点心中有数：</p><blockquote><ul><li><em><strong>尝试突破</strong><br
/> 无趣的主题并不一定得使用无趣的色彩组合。</em></li><li><em><strong>多变</strong><br
/> 尝试在你多彩的背景上使用渐变、重复图案、笔刷，光有颜色可不容易让设计显得好看。</em></li><li><em><strong>坚持主题</strong><br
/> 确保你的用色与你需要呈现的产品/服务有关联。</em></li></ul><p><em></em></p></blockquote><h4>07. 做别人没做过的事</h4><p>最好的网站中有一些非同寻常的，奇怪的，甚至可以算得上诡异的设计。不过那些挑战传统的尝试说不定会已经改变了传统的定义。话说回来，要做到完全原创，创造出没人做过的东西实在是<strong>设计过程中最难做的事</strong>。</p><p>打破常规之后，成功与失败只有一步之遥。你要么做出令人惊艳的聪明设计，要么做出一堆垃圾饱受批评。别人从来不这么做是<strong>有原因</strong>的，因为有些点子实在是<strong>糟透了</strong>。要从人们知道并喜欢的区域走出来，你得非常勇敢才行。下面是一些相关实例：</p><h3>MB Dragan 上的独特导航</h3><p>不是你通常所见的站点导航，但看起来还是一个网站，同那些标准导航同样的好。这样做有点冒险，但结果非常符合该网站特质。十分切题的设计，很难让人不欣赏这导航与整个设计之间的配合呼应。</p><p><a
href="http://www.mbdragan.com/"><img
title="Quality In Web Design: Unique Navigation - MB Dragan" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_24.jpg" alt="mb dragan" width="490" height="360" /></a></p><h3>Visualbox(视觉盒子) 非常视觉化的导航</h3><p>Visualbox的网站只有一个目标，向你展示他们充满智慧的作品。所以他们没有用多少文字，你第一眼看到的就是他们的名字和作品选集。 鼠标滑过预览图片时，会显示出项目名称，点击时会带你滑到页面中该项目的相应位置。这是非常高效而实用的解决方案，而且比简单地堆一个列表出来要吸引人得多。</p><p><a
href="http://www.visualboxsite.com/"><img
title="Quality in Web Design: Visualbox: Unique Visual Navigation" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_25.jpg" alt="visual box" width="490" height="360" /></a></p><h3>废话不多说的Nikola Mircic</h3><p>假设你是位交互设计师，你需要别人看了你的作品，能感动得雇用你。Nikola Mircic 为我们展示了“直截了当”对建造一个令人难忘的站点有多大的作用。一打开他的站点，各种风格的作品就向你问好，他的名字和职业放在页顶的醒目位置，当然，联系链接没少。没有大量多余文字来劝说你雇佣他，作品本身就证明了他的实力。当然，点击作品缩略图会出现一个详细介绍页，里面就有足够的文字了。实在喜欢他组织内容的方式。</p><p><a
href="http://www.nikolamircic.com/"><img
title="Quality in Web Design: Unique Layout - Nikola Mircic" src="http://s27.photobucket.com/albums/c156/jyyjcc/benhuoer-blog/quality-within-web-design/quality_26.jpg" alt="collection" width="490" height="360" /></a></p><h3>实践新鲜想法的小贴士</h3><p>上面的例子并不是为了“激发”你的独特创意，只是一些我发现的一些很独特的站点，仅此而已。事实上，你也不应该到处搜寻，寻找新想法的灵感，因为这样你的点子也是受别人的启发，与完全创新是相悖的。所以如果你打算做真的非同寻常的东西出来，就赶快<strong>忘掉这一部分</strong>！</p><blockquote><ul
class="dot-list"><li><em><strong>保证事物之间的联系</strong><br
/> 如果你打算做一些特别特别特立独行的事，先问问自己“真的有必要吗?”，“这样说得过去么？”，“和品牌诉求符合吗？”…… 如果答案是肯定的，再采取行动！</em></li><li><em><strong>忘掉所有已知事物！</strong><br
/> 好吧其实也并不是所有，基本原则还是要的。话说回来，也没必要从全新的想法里面寻找灵感，因为那样很容易误入歧途。</em></li><li><em><strong>保证品质和水准</strong><br
/> 基本上我觉得如果你的新想法足够好，判断品质究竟如何对你来说应该很容易。</em></li></ul></blockquote><h4>对于高品质设计你有什么看法？</h4><p>让一项设计因高品质脱颖而出，实在涉及到太多方面。我只能说我列出了一些基本要点。所以我希望能听听<a
href="#commentform"><strong>您对这一问题有何高见</strong></a>？在判断一件网页设计作品是否显示出高品质时，你最关注的是什么呢？</p><h4>推荐阅读(均为中文译文)：</h4><blockquote><ul><li>对于设计细节中的光影效果，你还可以参考：《<a
title="设计细节中的光影效果" rel="bookmark" href="http://blog.benhuoer.com/2009/05/5-simple-tricks-to-bring-light-and-shadow-into-your-designs/">五个为你的设计添加光影效果的简单技巧</a>》</li><li>与此文类似，但更加简洁的分析和技巧：《<a
title="更加简洁的分析和技巧" rel="bookmark" href="http://blog.benhuoer.com/2009/04/10-simple-and-impressive-design-techniques/">十个简单好用的设计技巧 </a>》</li><li>关于建立作品集网站的更多注意事项：《<a
title="关于建立作品集网站的更多注意事项" rel="bookmark" href="http://blog.benhuoer.com/2009/03/ten-steps-to-a-perfect-potfolio-site/">构建完美作品集网站十步走</a>》</li><li>更多漂亮的博客页面设计鉴赏：《<a
title="更多漂亮的博客页面设计鉴赏" rel="bookmark" href="http://blog.benhuoer.com/2009/04/a-showcase-of-elegant-blogs/">优雅的原创博客，一场视觉盛宴</a>》</li></ul></blockquote><h4>关于作者与译者</h4><p>原文出自<a
title="WeFunction" href="http://wefunction.com/2009/04/quality-within-web-design/" target="_blank">WeFunction</a>，作者是 <a
title="Posts by liam" href="http://wefunction.com/author/liam/">liam</a>，初发表于2009年4月13日。<br
/> 译文由<a
href="http://blog.benhuoer.com/">笨活儿</a>翻译。原始网址：<a
title="高品质网页设计" href="http://blog.benhuoer.com/2009/05/quality-within-web-design/" target="_blank">http://blog.benhuoer.com/2009/05/<span
id="editable-post-name-full">quality-within-web-design/</span></a> 。</p><p>转载请保留出处。</p><div
class="related-post"> <strong>你应该也会喜欢：</strong><ol><li><a
href="http://blog.benhuoer.com/posts/10-simple-and-impressive-design-techniques.html" rel="bookmark">十个简单好用的设计技巧[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/ten-steps-to-a-perfect-potfolio-site.html" rel="bookmark">构建完美作品集网站十步走[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/a-showcase-of-elegant-blogs.html" rel="bookmark">优雅的原创博客，一场视觉盛宴[SM]</a></li><li><a
href="http://blog.benhuoer.com/posts/photoshop-action-for-screenshot.html" rel="bookmark">[教程]Photoshop动作功能实例-制作规范化的截屏图</a></li><li><a
href="http://blog.benhuoer.com/posts/fixed-fluid-elastic-css-layout-comparement.html" rel="bookmark">固定 vs. 流动 vs. 弹性：哪种布局更适合你？[SM]</a></li></ol></div><div
style="border-top:dashed 1px #ccc;  border-bottom:dashed 1px #ccc;padding:0.3em 0;">分类于：<a
href="http://blog.benhuoer.com/category/web-technology/web-design" title="查看 网页设计 中的全部文章" rel="category tag">网页设计</a>        标签: <a
href="http://blog.benhuoer.com/tag/showcase" rel="tag">showcase</a>, <a
href="http://blog.benhuoer.com/tag/smashing-magazine" rel="tag">Smashing Magazine</a>, <a
href="http://blog.benhuoer.com/tag/%e7%bb%86%e8%8a%82" rel="tag">细节</a></div><p><small>©2009 <a
href="http://blog.benhuoer.com" target="_blank">笨活儿</a> | <a
href="http://blog.benhuoer.com/posts/quality-within-web-design.html" target="_blank">永久链接</a> | <a
href="http://blog.benhuoer.com/posts/quality-within-web-design.html#comments" target="_blank">已经有20条评论了</a> | <a
href="http://9.douban.com/recommend/?url=http://blog.benhuoer.com/posts/quality-within-web-design.html&title=高品质的网页设计: 实例与技巧&v=1&n=1" target="_blank">推荐到豆瓣</a> <br/> </small></p>]]></content:encoded> <wfw:commentRss>http://blog.benhuoer.com/posts/quality-within-web-design.html/feed</wfw:commentRss> <slash:comments>20</slash:comments> </item> </channel> </rss>
<!-- Dynamic page generated in 3.118 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-10 13:42:39 -->

