浅谈css3中的渐进增强和优雅降级


Posted in HTML / CSS onDecember 01, 2017

渐进增强和优雅降级这两个概念是在 CSS3 出现之后火起来的。由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器中使用CSS3,而在低级浏览器
只保证最基本的功能。二者的目的都是关注不同浏览器下的不同体验,但是它们侧重点不同,所以导致了工作流程上的不同。

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

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

在传统软件开发中,经常会提到向上兼容和向下兼容的概念。渐进增强相当于向上兼容,而优雅降级相当于向下兼容。向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本,向上兼容的很少。大多数软件都是向下兼容的,比如说Office2010能打开Office2007,Office2006,Office2005,Office2003等建的word文件,但是用Office2003就不能打开用Office2007,Office2010等建的word文件!

两者的区别:

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

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

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

案例分析:

(1)代码

.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;
    }

(2)前缀CSS3(-webkit- / -moz- / -o-*)和正常CSS3在浏览器中的支持情况是这样的:

很久以前:浏览器前缀CSS3和正常CSS3都不支持;

不久之前:浏览器只支持前缀CSS3,不支持正常CSS3;

现在:浏览器既支持前缀CSS3,又支持正常CSS3;

未来:浏览器不支持前缀CSS3,仅支持正常CSS3.

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

就CSS3这种例子而言,我更加推崇渐进增强的写法。因为前缀CSS3的某些属性在浏览器中的实现效果有可能与正常的CSS3实现效果不太一样,所以最终还是得以正常CSS3为准。如果你好奇究竟是什么属性在前缀CSS3和正常CSS3中显式效果不一样。

(4)如何抉择

根据你的用户所使用的客户端的版本来做决定。请注意我的措辞,我没有用浏览器,而是用客户端。因为渐进增强和优雅降级的概念本质上是软件开发过程中低版本软件与高版本软件面对新功能的兼容抉择问题。服务端程序很少存在这种问题,因为开发者可以控制服务端运行程序的版本,就无所谓渐进增强和优雅降级的问题。但是客户端程序则不是开发者所能控制的(你总不能强制用户去升级它们的浏览器吧)。我们所谓的客户端,可以指浏览器,移动终端设备(如:手机,平板电脑,智能手表等)以及它们对应的应用程序(浏览器对应的是网站,移动终端设备对应的是相应的APP)。

现在有很成熟的技术,能够让你分析使用你客户端程序的版本比例。如果低版本用户居多,当然优先采用渐进增强的开发流程;如果高版本用户居多,为了提高大多数用户的使用体验,那当然优先采用优雅降级的开发流程。

然而事实情况是怎么样的呢?绝大多数的大公司都是采用渐进增强的方式,因为业务优先,提升用户体验永远不会排在最前面。例如:新浪微博网站前端的更新,拥有这种亿级用户的网站,绝对不可能追求某个特效而不考虑低版本用户可不可用,一定是确保低版本到高版本的可访问性,再去渐进增强,采用新功能给高版本用户提供更好的用户体验。但也不是没有反例。如果你开发的是一款面向青少年的软件(或网站),你知道这个群体的人总是喜欢尝试新事物,总是喜欢酷炫的特效,总是喜欢把它们的软件更新到最新版本(而不像我们老一辈的用户)。面对这种情况,渐进增强的开发流程实为上选。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
50个强大璀璨的CSS3/JS技术运用实例
Feb 27 HTML / CSS
时尚的CSS3进度条效果
Feb 22 HTML / CSS
用CSS3实现Win8风格的方格导航菜单效果
Apr 10 HTML / CSS
CSS3中Transition动画属性用法详解
Jul 04 HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
Feb 24 HTML / CSS
canvas绘制文本内容自动换行的实现代码
Jan 14 HTML / CSS
浅析HTML5:'data-'属性的作用
Jan 23 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 HTML / CSS
详解h5页面在不同ios设备上的问题总结
Mar 01 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
Nov 29 HTML / CSS
wordpress添加Html5的表单验证required方法小结
Aug 18 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
Oct 28 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
Nov 21 #HTML / CSS
详解CSS3 rem(设置字体大小) 教程
Nov 21 #HTML / CSS
纯css实现照片墙3D效果的示例代码
Nov 13 #HTML / CSS
用CSS3实现瀑布流布局的示例代码
Nov 10 #HTML / CSS
CSS3制作酷炫的条纹背景
Nov 09 #HTML / CSS
css3实现文字扫光渐变动画效果的示例
Nov 07 #HTML / CSS
css3实现画半圆弧线的示例代码
Nov 06 #HTML / CSS
You might like
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
python获取list下标及其值的简单方法
2016/09/12 Python
Python处理文本换行符实例代码
2018/02/03 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python爬取抖音视频的实例分析
2021/01/19 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
合作经营协议书范本
2014/04/17 职场文书
政协会议宣传标语
2014/10/09 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
植物园观后感
2015/06/11 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
基于python实现银行管理系统
2021/04/20 Python
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS