渐进增强(progressive enhancement):即向上兼容。一开始只构建站点的最少特性,然后针对新的浏览器追加功能。
广义来说,其实要定义一个基准线,在此之上的增强叫做渐进增强,在此之下的兼容叫优雅降级。这个基准线对于我,是允许使用javascript、cookie和css的IE8浏览器。
不过狭义而言,渐进增强一般说的是使用CSS3技术,在不影响老浏览器的正常显示与使用情形下来增强体验,而优雅降级则是体现html标签的语义,以便在js/css的加载失败/被禁用时,也不影响用户的相应功能。
渐进增强的例子:
- transition属性,用于在某个数值属性突然改变的时候,在一定时间段里面输出中间的值,类似于jQuery.animate实现的动态效果。
有何好处呢?使用jQuery.animate做动画的时候,是全浏览器兼容的,对于渲染效率低下、时不时有重绘bug的IE6、IE7,只会造成“页面卡”的感觉,并不会因此增强用户体验,若使用transition属性来做动画,则IE6~9是瞬间变化(并不会造成任何布局上的问题),而现代浏览器则是匀变。
虽然没有数据支持,但我一直觉得,用户的配置越好,他们使用现代浏览器的可能性更高,因此我们可以对使用现代浏览器的用户给予更好的体验。针对更现代的浏览器(通常这意味着更高的用户配置)做相应增强,并且不会影响旧浏览器的正常运行,大概就是渐进增强的意义吧。
优雅降级的例子:
- 假如你写了一个表单,没有用到
<input type="submit">表单元素,用了一个<a>标签的click事件做提交,但如果Javascript被禁用了怎么办?
使用如下的文档结构,就可以在javascript被禁用时,依然可以提交。
<form>
<input type="text">
<input type="submit">
</form>
优雅降级需要正确地体现HTML标签的语义,符合“浏览器的预期”。让你的网页在各种情况—下——包括降级(javascript被禁用,css传输失败等等)的情形都可以运作良好。这是我理解的优雅降级的意义。
P.S. 其实优雅降级和渐进增强都是页面的加分项,是针对技术的一种形而上的要求。保证尽可能多的用户都能正常使用网站是第一步,在此之上才需要考虑降级的极端情形和现代浏览器的体验增强。
优雅降级:
使用优雅降级方案,Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,绝大多数Web设计师和开发者都通过专门的样式表或针对不同版本的IE的hack实践过优雅降级了;
使用优雅降级技术时,你必须首先完整的实现了网站,其中包括所有的功能和效果。然后再为那些无法支持所有功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。
渐进增强:
从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能。渐进增强是值得所有开发者采用的做法。渐进增强方案并不假定所有用户都支持javascript,而总是提供一种候补方法,确保用户可以访问(主要的)内容。
使用渐进增强时,无需为了一个已成型的网站在旧式浏览器下正常工作而做逆向工程。首先,只需要为所有的设备和浏览器准备好清晰且语义化的HTML以及完善的内容,然后再以无侵入(unobtrusive)的方式向页面增加无害于基础浏览器的额外样式和功能。当浏览器升级时,它们会自动地呈现出来并发挥作用。
想让网站在任何环境下看起来都保持一致是不可能的,不管为此付出多少努力,结局依旧会令你失望。与其试图让IE看起来堪比年轻它十岁的浏览器,不如努力改善网站的可访问性,或是进行更多的可用性测试,而不仅仅是让页面看起来“更靓一点”。
某些CSS3特性在不支持它的浏览器中简直是“无法模拟实现”的,但若使用渐进增强,就无需为了能让你的网站适合所有人而放弃这些技术。仅仅因为部分人不愿或不能升级浏览器,却让使用新型浏览器的用户无法享受CSS3所提供的伟大技术,这是毫无道理可言的。
我们应该先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。随着时间的推移,当越来越多的人开始升级浏览器而浏览器本身的支持度也不断提升时,就会有越来越多的人体验到这些增强和改进,它持续有效的使网站越来越好,却如需你刻意做什么。只需要一次实现,它就让网站的体验与时俱进。
留言