由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器中使用CSS3,而在低级浏览器只保证最基本的功能。二者的目的都是关注不同浏览器下的不同体验,但是它们侧重点不同,所以导致了工作流程上的不同。

百科解释:

渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。
优雅降级(Graceful Degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。
其实渐进增强和优雅降级并非什么新概念,只是旧的概念换了一个新的说法。在传统软件开发中,经常会提到向上兼容和向下兼容的概念。渐进增强相当于向上兼容,而优雅降级相当于向下兼容。向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本,向上兼容的很少。大多数软件都是向下兼容的,比如说Office2010能打开Office2007,Office2006,Office2005,Office2003等建的word文件,但是用Office2003就不能打开用Office2007,Office2010等建的word文件!
渐进增强和优雅降级的区别:
优雅降级和渐进增强只是看待同种事物的两种观点。优雅降级和渐进增强都关注于同一网站在不同设备里不同浏览器下的表现程度。关键的区别则在于它们各自关注于何处,以及这种关注如何影响工作的流程。
优雅降级观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE、Mozilla 等)的前一个版本。在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。
渐进增强观点则认为应关注于内容本身。请注意其中的差别:我甚至连“浏览器”三个字都没提。内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得渐进增强成为一种更为合理的设计范例。
通过案例分析:
看如下这两段代码的书写顺序,表示了我们开发的着重点。
.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;
}

前缀CSS3(-webkit-* / -moz-* / -o-*)和正常CSS3在浏览器中的支持情况是这样的:
  1. 很久以前:浏览器前缀CSS3和正常CSS3都不支持;
  2. 不久之前:浏览器只支持前缀CSS3,不支持正常CSS3;
  3. 现在:浏览器既支持前缀CSS3,又支持正常CSS3;
  4. 未来:浏览器不支持前缀CSS3,仅支持正常CSS3.
渐进增强的写法,优先考虑老版本浏览器的可用性,最后才考虑新版本的可用性。在时期3前缀CSS3和正常CSS3都可用的情况下,正常CSS3会覆盖前缀CSS3。优雅降级的写法,优先考虑新版本浏览器的可用性,最后才考虑老版本的可用性。在时期3前缀CSS3和正常CSS3都可用的情况下,前缀CSS3会覆盖正常的CSS3。
就CSS3这种例子而言,我更加推崇渐进增强的写法。因为前缀CSS3的某些属性在浏览器中的实现效果有可能与正常的CSS3实现效果不太一样,所以最终还是得以正常CSS3为准。如果你好奇究竟是什么属性在前缀CSS3和正常CSS3中显式效果不一样,可以看看这篇文章《需警惕CSS3属性的书写顺序》。

如何抉择


如果软件开发的预算和时间充足,就不存在抉择的问题。然而现实很残酷,要么开发周期短,要么开发预算少,或者二者兼而有之,这个时候该如何抉择?就我个人而言,讲讲我的观点。
根据你的用户所使用的客户端的版本来做决定。请注意我的措辞,我没有用浏览器,而是用客户端。因为渐进增强和优雅降级的概念本质上是软件开发过程中低版本软件与高版本软件面对新功能的兼容抉择问题。服务端程序很少存在这种问题,因为开发者可以控制服务端运行程序的版本,就无所谓渐进增强和优雅降级的问题。但是客户端程序则不是开发者所能控制的(你总不能强制用户去升级它们的浏览器吧)。我们所谓的客户端,可以指浏览器,移动终端设备(如:手机,平板电脑,智能手表等)以及它们对应的应用程序(浏览器对应的是网站,移动终端设备对应的是相应的APP)。
现在有很成熟的技术,能够让你分析使用你客户端程序的版本比例。如果低版本用户居多,当然优先采用渐进增强的开发流程;如果高版本用户居多,为了提高大多数用户的使用体验,那当然优先采用优雅降级的开发流程。
然而事实情况是怎么样的呢?绝大多数的大公司都是采用渐进增强的方式,因为业务优先,提升用户体验永远不会排在最前面。例如:新浪微博网站前端的更新,拥有这种亿级用户的网站,绝对不可能追求某个特效而不考虑低版本用户可不可用,一定是确保低版本到高版本的可访问性,再去渐进增强,采用新功能给高版本用户提供更好的用户体验。但也不是没有反例。如果你开发的是一款面向青少年的软件(或网站),你知道这个群体的人总是喜欢尝试新事物,总是喜欢酷炫的特效,总是喜欢把它们的软件更新到最新版本(而不像我们老一辈的用户)。面对这种情况,渐进增强的开发流程实为上选。

转载于:https://www.cnblogs.com/chaojiaheng/p/8564801.html

浏览器兼容CSS渐进增强 VS 优雅降级如何选择相关推荐

  1. CSS 渐进增强与优雅降级

    你可能听过优雅降级(graceful degradation)和渐进增强(progressive enhancement)这两个词,它们是构建Web应用时,处理多浏览器支持的两种方法论,并在Web社区 ...

  2. 自定义字体样式引入使用方法、文本阴影、边框阴影、(边框)圆角、渐变、理解重绘与回流、渐进增强和优雅降级的区别

    目录 1.文本阴影 text-shadow 2.边框阴影 box-shadow 3.自定义字体样式方法 引入与使用方法举例: 4.(边框)圆角 5.渐变 6.过渡  transition 7.理论知识 ...

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

    作为一名前端开发人员,最头疼的莫过于浏览器兼容.远古时期万恶的IE6,到现在CSS3不兼容的IE7/8.为了保证不同版本浏览器都有共同或更优化的用户体验,前端搬砖的我们不得不与浏览器兼容顽强斗争.而渐 ...

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

    一省:HTML 16. 渐进增强和优雅降级之间的区别? 1. 渐进增强: 一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果.交互.追加功能达到更好的体验. 2. 优雅 ...

  5. 渐进增强和优雅降级有什么区别

    渐进增强: 针对低版本的浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果.交互等改进和追加功能达到更好的用户体验 优雅降级:一开始就构建完整的功能,然后再针对低版本的浏览器进行兼容 ...

  6. 前端学习(239):渐进增强和优雅降级

  7. 2021/1/3-每日三题第10弹:雨停了天晴了,你又觉得你行了?你知道渐进增强和优雅降级之间有什么不同吗???

    前言: "朋友们好啊,我是xxxxxx掌门人xx,今天有朋友给我发来几张截图,我一看,嗷,原来是元旦假期要结束了,我大意了啊,没有闪,~~~,我劝,这位朋友,耗子尾汁,好好反思,武林要讲武德 ...

  8. 浏览器兼容css hack,CSS Hack技术解决多浏览器兼容问题

    本文向大家描述一下如何使用CSS Hack技巧解决DIV+CSS布局多浏览器兼容问题,针对不同的浏览器写不同的CSS代码的过程,就叫CSS Hack,相信本文介绍一定会让你有所收获. CSS Hack ...

  9. hack (浏览器兼容css hack)

    1.hack的原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内 ...

最新文章

  1. 重磅丨2018年中国人工智能行业研究报告(77页PPT)
  2. Linu 修改maven的setting保护文件
  3. python人工智能方向面试准备_高薪直通车丨人工智能+Python面试经验分享(西安**思数据)...
  4. nopcommerce商城系统--源代码结构和架构
  5. 类型缩放Google map 地图类型
  6. php ci model条件查询,Laravel关系模型指定条件查询方法
  7. mirror - 映射在远端节点上的档案
  8. HDU1010-奇偶剪枝(DFS)
  9. 【Vue.js】iconfont中unicode引用和unicode引用失败,无法显示icon
  10. Tapestry5 事件处理函数返回结果处理策略
  11. 学习日记 | 云计算 - 服务模型 - 三层架构(深度学习)
  12. 起底白帽黑客郭盛华读过的学校,看完流眼泪了!
  13. ROS机器人学习历程三:Publisher 和Subscriber
  14. PyTorch(Python)训练MNIST模型移动端IOS上使用Swift实时数字识别
  15. snmpset对象不可写_写 I/O 路径 (FTT1/RF2) 对比 – Nutanix vs VMware vSAN
  16. projectManager
  17. 根据当前行情,计算历史上与当前最相似的行情python实现
  18. TA进阶实例34(Unreal制作水晶星光效果)
  19. uname -a了解
  20. python中的entry_point

热门文章

  1. java中重新加载指定文件_java-更改后重新加载属性文件
  2. js点击取消按钮关闭当前弹框_UI设计中“取消按钮”的分析详解
  3. 数据结构 算法与应用C 语言描述答案,数据结构算法与应用-C语言描述.pdf
  4. mysql lepus_MySQL 监控软件lepus天兔
  5. android studio点击图片,如何在Android Studio中的模拟器图库中添加图像?
  6. 王者荣耀微信哪个服务器人最少,王者荣耀:微信区王者人数锐减,大神们都去哪了?这些原因很真实...
  7. JavaScript中带有示例的Math.PI属性
  8. 线性表------栈
  9. 283. 移动零golang
  10. 解决QTreeWidget中item无法整行同时显示相同颜色