杂谈:渐进增强与优雅降级

作为一名前端开发人员,最头疼的莫过于浏览器兼容。远古时期万恶的IE6,到现在CSS3不兼容的IE7/8.为了保证不同版本浏览器都有共同或更优化的用户体验,前端搬砖的我们不得不与浏览器兼容顽强斗争。而渐进增强优雅降级两种不同的开发流程,也是在我们项目初期做调研选型时会考虑的一个点。

渐进增强(Progressive Enhancement)

一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。

优雅降级(graceful degradation)

一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。

初一看这两个概念有点高大上,其实作为开发人员来说,多多少少已经在项目中运用只是你自己不察觉而已。换个词汇就比较好理解了,渐进增强(向上/前兼容),优雅降级(向下兼容),向上兼容高版本浏览器,向下兼容低版本浏览器。

二者区别

渐进增强优雅降级只是看待同种事物的两种观点。渐进增强和优雅降级都关注于同一网站在不同设备里不同浏览器下的表现程度。关键的区别则在于它们各自关注的着重点不同,以及这种不同的关注点如何影响项目开发的流程。

优雅降级观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 Chrome,Safari,IE、FireFox等)的前一个版本。在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

渐进增强观点则认为应关注于内容本身。请注意其中的差别:我甚至连“浏览器”三个字都没提。内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得渐进增强成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其“分级式浏览器支持 (Graded Browser Support)”策略的原因所在。

概括:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

代码案例

.transition { /*渐进增强写法*/
  -webkit-transition: all .5s;
     -moz-transition: all .5s;
       -o-transition: all .5s;
          transition: all .5s;
}
.transition { /*优雅降级写法*/
          transition: all .5s;
       -o-transition: all .5s;
     -moz-transition: all .5s;
  -webkit-transition: all .5s;
}
// -webkit- / -moz- / -o- (浏览器前缀)
  1. 很久以前:浏览器前缀CSS3和正常CSS3都不支持;
  2. 不久之前:浏览器只支持前缀CSS3,不支持正常CSS3;
  3. 现在:浏览器既支持前缀CSS3,又支持正常CSS3;
  4. 未来:浏览器不支持前缀CSS3,仅支持正常CSS3.

渐进增强的写法,优先考虑老版本浏览器的可用性,最后才考虑新版本的可用性。在时期3中前缀CSS3和正常CSS3都可用的情况下,正常CSS3会覆盖前缀CSS3。优雅降级的写法,优先考虑新版本浏览器的可用性,最后才考虑老版本的可用性。在时期3中前缀CSS3和正常CSS3都可用的情况下,前缀CSS3会覆盖正常的CSS3。

现实项目开发中,推荐使用渐进增强的写法(postcss的autofixer也是这种写法),因为前缀CSS3的某些属性在浏览器中的实现效果有可能与正常的CSS3实现效果不太一样,所以最终还是得以正常CSS3为准。

可参考张鑫旭大神的文章《需警惕CSS3属性的书写顺序

如何选择

  • 低版本浏览器用户占比居多,优先采用渐进增强的开发流程;
  • 高版本浏览器用户占比居多,优先采用优雅降级的开发流程;

事实上绝大多数的大公司都是采用渐进增强的方式,因为业务优先,提升用户体验永远不会排在最前面。例如,淘宝,京东,新浪微博等网站前端的更新,不可能追求某个特效而不考虑低版本用户可不可用,一定是确保低版本到高版本的可访问性,再去渐进增强,采用新功能给高版本用户提供更好的用户体验。当然也有一些反例如阿里云,本身就是面向软件开发者,这个群体的人总是喜欢尝试新事物,总是喜欢酷炫的特效,总是喜欢把它们的软件更新到最新版本,而且大多用的是谷歌浏览器,即使用IE浏览器,也是高版本IE浏览器,面对这种情况,优雅降级的开发流程才是更好的选择。


参考文章

  1. 渐进增强、优雅降级
  2. 渐进增强 VS 优雅降级
  3. 渐进增强和优雅降级之间的有什么不同?
  4. 需警惕CSS3属性的书写顺序
  5. 优雅降级和渐进增强的区别

作者:以乐之名
本文原创,有不当的地方欢迎指出。转载请指明出处。

原文地址:https://www.cnblogs.com/homehtml/p/11875789.html

时间: 2024-10-11 04:18:50

杂谈:渐进增强与优雅降级的相关文章

网页设计时的渐进增强和优雅降级原则

渐进增强和优雅降级是两种不同的网页设计思想,是两种相反的思路达到同样的效果. 优雅降级:设计网页时,首先满足主流浏览器和最新版本浏览器的所有效果和互动.然后在此基础上,对非主流浏览器 和较低版本的浏览器进行效果删减来兼容,最终完成所有浏览器均能适用的方法.一般在学习过程中,均采用 该方法. 渐进增强:顾名思义,是在网页制作过程中,首先满足能适应由低到高,非主流到主流所有浏览器都能适用的网页,再针对高版本 浏览器和主流浏览器来添加高级效果和互动,最终让网页能适应所有浏览器的方法. 两种方法各有优劣

渐进增强和优雅降级

在网页编写中,有时候需要兼容高版本浏览器,有时候要兼容低版本浏览器,也就是我们常说的渐进增强和优雅降级.渐进增强:确定人群后,针对低版本浏览器构建页面,保证基本功能:再针对高级浏览器进行效果.交互.性能等进行改进,追加功能:优雅降级:一开始构建完整的功能,再针对低版本浏览器进行兼容:那什么时候需要渐进增强,什么时候需要优雅降级呢?首先,我们在网页开发中,都是以用户为核心的,在确定用户群体之后,根据用户的特性,所用浏览器的版本来决定增强还是降级.

渐进增强,优雅降级?

渐进增强(Progressive Enhancement)与优雅降级(Graceful Degradation) 2017-05-19 在以前,有一个说法:向上兼容.向下兼容.现在的渐进增强就相当于向上兼容,优雅降级相当于向下兼容.无论是增强还是降级都与兼容相关,所以二者都是为提升兼容性而提出的. 其意是: 确定目标群体客户: 满足基本的功能,逐渐增强功能交互效果等: 保证基本功能的同时,逐渐向低版本兼容. 写法 eg: 参考资料:如何选择渐进增强,优雅降级.需警惕css3属性的书写顺序

渐进增强和优雅降级之间的区别在哪里?

写在前面: 在前端开发的过程中,如果有注意的话,发现有些写css3属性时,兼容性的写法顺序不太一样,比如transition属性,有些把transition放在前面有些是放在后面,这就引出了两个概念:优雅降级和渐进增强. 渐进增强和优雅降级概念出现的原因: 翻看进度条,会发现渐进增强和优雅降级这两个概念是在 CSS3 出现之后火起来的.由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以产生了的一种解决方式在高级浏览器中使用CSS3,而在低级浏览器只保证最基本的功能. 何谓渐

渐进增强,优雅降级

css3之后出现了两个概念:渐进增强,优雅降级. 渐进增强:一开始构建基础的网站架构,逐渐增强交互功能, 优雅降级:满足大部分功能,并向低版本浏览器做兼容 二者区别: 优雅降级和渐进增强只是看待同种事物的两种观点.优雅降级和渐进增强都关注于同一网站在不同设备里不同浏览器下的表现程度.关键的区别则在于它们各自关注于何处,以及这种关注如何影响工作的流程. 优雅降级观点认为应该针对那些最高级.最完善的浏览器来设计网站.而将那些被认为"过时"或有功能缺失的浏览器下的测试工作安排在开发周期的最后

客户端考试之渐进增强与优雅降级

优雅降级(graceful degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复. 渐进增强(progressive enhancement):一开始只构建站点的最少特性,然后不断针对各浏览器追加功能.优雅降级:使用优雅降级方案,Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作.由于IE独特的盒模型布局问题,绝大多数Web设计师和开发者都通过专门的样式表或针对不同版本的IE的hack实践过优雅降级了: 使用优雅降

渐进增强与优雅降级

什么是优雅降级? 优雅降级(graceful degradation) 一开始就构建站点的完整功能,然后针对浏览器测试和修复. ps: 比如一开始使用 css3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack,使其可以在低版本浏览器上正常浏览. Code demo .transition{ -webkit-transition: all .5s; /* webkit 内核 */ -moz-transition: all .5s; /* firefox 内核 */ transition

所谓的渐进增强,优雅降级?

什么是渐进增强(progressive enhancement).优雅降级(graceful degradation)呢? 渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果.交互等改进和追加功能达到更好的用户体验. 优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容. 区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础

渐进增强和优雅降级之间的区别

渐进增强 progressive enhancement: 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果.交互等改进和追加功能达到更好的用户体验.优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容. 区别: 优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要.降级(功能衰减)意味着往回看:而渐进增强则意味着朝前看,同时保