浏览器兼容

一,什么是css hack?

CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safar,Mozilla Firefo,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。 简单的说,CSS hack的目的就是使你的CSS代码兼容不同的。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。

二,谈一谈浏览器兼容的思路

  • 要不要做
    产品的角度:产品的受众、受众的浏览器比例、效果优先还是基本功能优先
    成本的角度 :有无必要做某件事

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

  • 如何做
    根据兼容需求选择技术框架/库(jquery)
    根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr)
    postCSS
    条件注释、CSS Hack、js 能力检测做一些修补

三,列举5种以上浏览器兼容的写法

1.属性前缀法(即类内部Hack):

例如 IE6能识别下划线""和星号" * ",IE7能识别星号" * ",但不能识别下划线"",IE6~IE10都认识"\9",但firefox前述三个都不能认识

.top{
   _color:red;/*只被ie6所解析*/
   *color:blue;/*只被ie6、ie7所解析*/
    color:white/9;/*可被ie6~ie10所解析*/
}
2.条件注释法

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










用于非 IE 
3.选择合适的框架和属性

框架如:

  • Bootstrap (>=ie8)
  • jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9)
  • Vue (>= ie9)

属性如:
inline-block: >=ie8
min-width/min-height: >=ie8
:before,:after: >=ie8
div:hover: >=ie7
inline-block: >=ie8
background-size: >=ie9
圆角: >= ie9
阴影: >= ie9
动画/渐变: >= ie10

4.浏览器私有前缀法
  • -moz代表firefox浏览器私有属性
  • -ms代表IE浏览器私有属性
  • -webkit代表chrome、safari私有属性
5.使用Modernizr等类似工具来帮助页面进行各新旧浏览器的兼容

四,以下工具/名词是做什么的?

  • 条件注释:一种安全的区分IE浏览器版本的语法,且被认为是取代针对IE css hack的首选办法,对IE的版本和非IE有优秀的区分能力。
  • IE Hack:针对IE浏览器各版本的漏洞或特性,来分别兼容IE各版本浏览的做法,常用的方法如条件注释。
  • js 能力检测:利用js进行浏览器的能力检测,能力检查的目标不是识别特定的浏览器,而是识别浏览器的能力,然后根据浏览器的能力,设定不同的兼容方案。
  • html5shiv.js:用于解决IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题。
  • respond.js:帮助ie6~ie8浏览器支持响应式布局。
  • css reset:默认样式重置
  • Normalize:在默认的HTML元素样式上提供了跨浏览器的高度一致性。它的主要目的是
    1.保护有用的浏览器默认样式而不是完全去掉它们
    2.一般化的样式:为大部分HTML元素提供
    3.修复浏览器自身的bug并保证各浏览器的一致性
    4.优化CSS可用性:用一些小技巧
    5.解释代码:用注释和详细的文档来
  • Modernizr:是一个用来检测浏览器功能支持情况的 JavaScript 库,它会在会在页面加载后立即检测特性;然后创建一个包含检测结果的 JavaScript 对象,同时在 html 元素加入方便你调整 CSS 的 class 名。
  • POSTCSS: 它可以被理解为一个平台,可以让一些插件在上面跑,它提供了一个解析器,可以将CSS解析成抽象语法树,通过PostCSS这个平台,我们能够开发一些插件,来处理CSS。

查询属性兼容性的常用网站:

http://caniuse.com

你可能感兴趣的:(浏览器兼容)