渐进增强和优雅降级之间有什么不同?

本文深入探讨了渐进增强和优雅降级两种前端开发策略的区别与应用场景,解析其核心理念,帮助开发者理解何时何地使用何种策略,以达到最佳的用户体验。

这里是修真院前端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析前端知识/技能。

本篇分享的是:【渐进增强和优雅降级之间有什么不同?】

一.背景介绍:

渐进增强和优雅降级是在CSS3出现之后才火起来的。由于低级浏览器,(特)比(别)如(是)IE6等,不支持CSS3的浏览器,但是CSS3的样式又特别优秀不忍放弃 ,所以在高级浏览器中应用CSS3样式,在低级浏览器只保证基本功能。

“渐进增强”是被Steven Champeon创造于2003年3月11日在奥斯汀的SXSW互动大会,并于2003年3月和6月间通过一系列Webmonkey教程文章的公布。 (我找了半天资料,翻了下英文文章也只找到这段历史,无奈脸),谷歌公司是很支持这种开发方式的啊,我认为渐进增强不仅是一个前端开发思想,更加是一个程序开发思想。

二.知识剖析

1.什么是渐进增强

在网页开发中,渐进增强认为应该专注于内容本身。一开始针对低版本的浏览器构建页面,满足最基本的功能,再针对高级浏 览器进行效果,交互,追加各种功能以达到更好用户体验,换句话说,就是以最低要求,实现最基础功能为基本,向上兼容。以css为例,以下这种写法就是渐进增强。

2.什么是优雅降级

在网页开发中,优雅降级指的是一开始针对一个高版本的浏览器构建页面,先完善所有的功能。然后针对各个不同的浏览器进行测试,修复,保证低级浏览器也有基本功能 就好,低级浏览器被认为“简陋却无妨 (poor, but passable)” 可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较 大的错误之外,其它的差异将被直接忽略。也就是以高要求,高版本为基准,向下兼容。同样以css为例,优雅降级的写法如下。

3.二者区别

1.)如果你采用渐进增强的开发流程,先做一个基本功能版,然后针对各个浏览器进行渐进增加,增加各种功能。相对于优雅降级来说,开发周期长,初期投入资金大。 你想一下不可能拿个基本功能版给客户看呀,多寒酸,搞不好一气之下就不找你做了,然后就炸了。但是呢,也有好处,就是提供了较好的平台稳定性,维护起来资金小, 长期来说降低开发成本。

2.)那采用优雅降级呢,这样可以在较短时间内开发出一个只用于一个浏览器的完整功能版,然后就可以拿给PM找客户谈呀,可以拿去测试,市场试水呀,对于功能尚未确定的 产品,优雅降级不失为一种节约成本的方法。

从技术出发

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

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

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

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

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

.transition { /渐进增强写法/

-webkit-border-radius:30px 10px;

-moz-border-radius:30px 10px;

border-radius:30px 10px;

}

.transition { /优雅降级写法/

border-radius:30px 10px;

-moz-border-radius:30px 10px;

-webkit-border-radius:30px 10px;

}

从技术出发

按理说这两种写法效果应该是一样的,但是我们现在浏览器停留在操蛋的第三阶段,也就是现在,既支持前缀写法,又支持正常写法,这样就要出问题了。

当属性超过一个参数值的时候,不同属性产生的作用是不一样的!

点击链接查看效果

可以看到,采用优雅降级的写法,如果一个浏览器同时支持前缀写法和正常写法,后面的旧版浏览器样式就覆盖了新版样式,出现一些奇怪的问题 ,但是用渐进增强的写法就不存在这个问题。这种属性不止border-radius一个,所以为了避免这个不必要的错误,建议大家都采用渐进增强的写法。

三.常见问题

渐进增强和优雅降级如何抉择

四.解决方案

如果开发时间充裕,开发资金到位,就不存在抉择这个问题了,肯定是渐进增强好呀!

但是现实往往很骨感。

这个时候,就要看你开发产品的受众,受众使用的客户端。如果受众年龄覆盖面广,客户端从移动到平板到电脑,比如淘宝这种页面,那没得选,老老实实选渐进增强。

如果受众客户端单一,例如一个移动端页面,再渐进增强PC端就没那么重要了。

各有优势,但现实是绝大多数公司采用的都是渐进增强方式,毕竟业务优先,体验不会凌驾在业务上。

五.更多讨论

问题1:大网站一般采取什么方式

回答1:当场搜了一下,大网站直接采用一个-webkit-xxxxxx这种方式,并未采取增强或降级

问题2:为什么加前缀

回答2:比如谷歌,老旧版本只支持前缀的写法,新版本则都兼容

问题3:为什么会出现这两个概念

回答3:主要是CSS3的出现,不同浏览器的支持程度不同

六.参考资料

《需警惕css3属性的书写顺序》 --张鑫旭

《认识优雅降级和渐进增强》 --Angus

《渐进增强 VS 优雅降级》 – 康斌

### 含义 - **渐进增强**:在Vue中,渐进增强是针对低版本浏览器进行页面构建,保证最基本的功能,之后针对高级浏览器进行效果、交互等改进追加功能,以达到更好的用户体验。它从最基本的功能开始构建应用,先确保所有用户都能访问基本的内容功能,再为使用更高级浏览器或设备的用户提供增强体验[^1][^2][^4]。 - **优雅降级**:一开始就构建完整的功能,然后针对低版本浏览器进行兼容处理,确保即使在旧版浏览器或设备中也能提供基本的可用性。即在高级浏览器中实现丰富的功能,在低版本环境中逐步减少功能,保证核心内容功能始终可用[^1][^2][^4]。 ### 原理 - **渐进增强**:原理是先专注于核心的HTML结构基本的JavaScript功能,确保在所有浏览器中都能正常工作。随着浏览器支持的能力提升,再通过CSSJavaScript添加额外的样式交互效果。例如,在Vue项目中,先确保基本的组件渲染数据展示功能正常,再为支持新特性的浏览器添加动画效果复杂交互。 - **优雅降级**:先在高级浏览器中实现完整的功能丰富的体验,然后通过特性检测等手段,判断低版本浏览器缺少哪些功能,针对这些功能进行兼容处理或者去除。例如,在Vue项目中,在高级浏览器中使用新的API实现一些特效,对于不支持的低版本浏览器,使用替代方案或者直接去掉这些特效,保证核心功能可用。 ### 应用 - **渐进增强应用示例**: ```vue <template> <div> <p>{{ message }}</p> <!-- 基本功能,所有浏览器都能正常显示 --> <button @click="toggleContent">Toggle Content</button> <div v-if="showContent"> <!-- 增强功能,依赖JavaScript --> <p>This is some additional content.</p> </div> </div> </template> <script> export default { data() { return { message: 'Hello, Vue!', showContent: false }; }, methods: { toggleContent() { this.showContent = !this.showContent; } } }; </script> ``` 在这个示例中,基本的文本显示是所有浏览器都能支持的核心功能,而点击按钮切换内容的交互则是针对支持JavaScript的浏览器进行的增强功能。 - **优雅降级应用示例**: ```vue <template> <div> <!-- 在高级浏览器中显示动画效果 --> <div v-if="isModernBrowser" class="animated-element">Animated Content</div> <!-- 在低版本浏览器中显示普通内容 --> <div v-else>Static Content</div> </div> </template> <script> export default { data() { return { isModernBrowser: this.checkBrowserSupport() }; }, methods: { checkBrowserSupport() { // 这里可以使用特性检测来判断浏览器是否支持某些功能 return 'requestAnimationFrame' in window; } } }; </script> <style scoped> .animated-element { animation: slideIn 1s ease-in-out; } @keyframes slideIn { from { transform: translateX(-100%); } to { transform: translateX(0); } } </style> ``` 在这个示例中,在支持`requestAnimationFrame`的高级浏览器中显示带有动画效果的内容,在不支持的低版本浏览器中显示普通的静态内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值