vlambda博客
学习文章列表

(Ⅰ)处理浏览器兼容问题的思路是怎样的?| CSS 拓展:① 浏览器兼容

原创:itsOli  @前端一万小时

本文版权归作者所有,未经授权,请勿转载!


 
   
   
 
 1. 渐进增强和优雅降级分别是什么意思?
 2. 什么是 CSS Hack?在哪个网站查看标签(属性)的浏览器兼容情况?
 3. IE6、7 的 Hack 写法是?
 4. 尽可能多的列举浏览器兼容的处理范例?
 5. CSS Reset 是什么?CSS 预编译器是什么?后编译器(PostCSS)是什么?
 6. CSS Reset 和 Normalize.css 有什么区别?
 7. 尽可能多的写出浏览器兼容性问题?
 8. 如何让 Chrome 浏览器显示小于 12px 的文字?
 9. CSS 预处理器的比较:Less、Sass?
10. 常见兼容性问题?

🙋上方面试题“参考答案详解”,请点击文末“阅读原文”查看!



前言: 什么是浏览器兼容问题?同一份代码,有的浏览器效果正常,有的不正常。

其实最主要就是对 IE 浏览器的兼容问题,可以大致分为:

  • A 级兼容(Chrome、Firefox、IE9+):要保证在最新浏览器上完美实现设计稿;

  • B 级兼容(IE8):能用且差别不大;

  • C 级兼容(IE7 以下):能用。

1 处理兼容问题的思路

首先以最大程度完善设计稿为基础,再考虑兼容性,不能盲目为了兼容问题而弃用方便简洁的新方法(如 HTML5、CSS3);当然也不能用过新的技术方法使得兼容性过于低、实用性差。

渐进增强和优雅降级

1.1 渐进增强(Progressive enhancement)

针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

1.2 优雅降级(Graceful degradation)

一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

1.3 区别

  • 优雅降级是从复杂的现状开始,并试图减少用户体验的供给;而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。

  • 降级(功能衰减)意味着往回看,而渐进增强则意味着朝前看,同时保证其根基处于安全地带。

1.3.1 要不要做
  • 产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)

  • 成本的角度(有无必要做某件事)

1.3.2 做到什么程度
  • 让哪些浏览器支持哪些效果。

1.3.3 如何做

(现阶段的前端工作,90% 都不需要去管 IE8 以下的兼容问题,工作重心最主要还是集中在 JS。对于浏览器兼容不需要花太多精力,理解相关的解决思路就好了。)

  • 根据兼容需求选择技术框架、库——用的时候留一个心眼就行:
  
    
    
  
Bootstrap (>=IE8)
jQuery 1.~ (>=IE6), jQuery 2.~ (>=IE9)
Vue (>=IE9)
...
  • 根据兼容需求选择兼容工具(html5shiv.js、Respond.js、CSS Reset、Normalize.css、Modernizr);

  • PostCSS;

  • 一些老的技术手段,如:条件注释(处理 IE 的方式)、CSS Hack、JS 能力检测做一些修补。

1.4 条件注释

条件注释(conditional comment)是 HTML 源码中被 IE 有条件解释的语句。条件注释可被用来向 IE 提供及隐藏代码。

项目 范例 说明
! [if !IE] 非 IE
lt [if lt IE 5.5] 小于 IE5.5
lte [if lte IE 6] 小于等于 IE6
gt [if gt IE 5] 大于 IE5
gte [if gte IE 7] 大于等于 IE7
\ [if (IE 6)(IE 7)] IE6 或者 IE7

例:

<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->



<!--[if !IE]><!-->
<script>alert(1);</script>
<!--<![endif]-->


<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->

❗️使用了条件注释的页面在 Windows Internet Explorer 9 中可正常工作,但在 Internet Explorer 10 中无法正常工作, IE10 不再支持条件注释。

1.5 CSS Hack

(用一些奇怪的手段达到兼容的方式!

由于不同厂商的浏览器,比如 Internet Explorer、Safari、Mozilla Firefox、Chrome 等,或者是同一厂商的浏览器的不同版本,如 IE6 和 IE7,对 CSS 的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。

这个时候我们就需要针对不同的浏览器去写不同的 CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。

常见 Hack 写法:
(💡 browserhacks.com
http://browserhacks.com/
查 Hack 的写法)

.box {
  color: red;
  _color: blue; /* IE6 下它生效 */
  *color: pink; /* IE67 下它生效 */
  color: yellow\9/* IE/Edge 6-8 下它生效 */
}


<!–-[if IE 7]>
<link rel="stylesheethref="ie7.csstype="text/css" />
<![endif]->


下一篇我们继续讲解“浏览器兼容”相关的知识点。

祝好,qdywxs ♥ you!



点击“ 阅读原文 ”,获取本篇面试题“参考答案详解”~