浏览器兼容

什么是 CSS hack

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

谈一谈浏览器兼容的思路

  • 为什么会有浏览器兼容问题

    1. 同一浏览器,版本越老 bug 越多;
    2. 同一浏览器,版本越新,支持的特性越多;
    3. 不同浏览器,标准不同,实现方式也有差异。
  • 处理兼容问题的思路

    • 要不要做
    1. 产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先);
    2. 成本的角度 (有无必要做某件事)
    • 做到什么程度
      让哪些浏览器支持哪些效果;
    • 如何做
    1. 根据兼容需求选择技术框架/库(如jquery 1.x.x);
    2. 根据兼容需求选择兼容工具:html5shiv、Respone.js、CSS Reset、normalize.css、Modernizr.js、postcss。
    3. 条件注释、CSS Hack、js 能力检测做一些修补
  • 渐进增强和优雅降级

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

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

 #box{
   color:red;    ⁄* 所有浏览器都支持 *⁄ 
   color:red !important;   ⁄* Firefox、IE7支持 *⁄
   _color:red;   ⁄* IE6支持 *⁄
   *color:red;   ⁄* IE6、IE7支持 *⁄
   *+color:red;   ⁄* IE7支持 *⁄
   color:red \9;   ⁄* IE6、IE7、IE8支持 *⁄
   color:red \0;   ⁄* IE8支持 *⁄
  }
   *     , ie6,ie7可以识别;
   _和- ,  ie6可以识别;
   !important  ,表示高优先级,ie7及以上,firefox都支持,ie6认识带!important的样式属性,但不认识!important的优先级;
  -webkit- ,针对safari,chrome浏览器的内核CSS写法
  -moz-,针对firefox浏览器的内核CSS写法
  -ms-,针对ie内核的CSS写法
  -o-,针对Opera内核的CSS写法

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

  • 条件注释
    是HTML源码中被 Microsoft Internet Explorer有条件解释的语句。条件注释可被用来向 Internet Explorer 提供及隐藏代码
  • IE Hack
    处理各个浏览器兼容问题
  • js 能力检测
    浏览器的能力检测目标不是检测特定的浏览器,而是检测浏览器的能力。这样,只需要检测浏览器是否支持特定的能力,就可以给出特定的解决方案。这一部分检测是解决浏览器兼容问题的主要检测
  • html5shiv.js
    由于IE6/IE7/IE8还有很大一部分用户,为了让网站浏览者都能正常的访问HTML5网站,解决方案就有下面:
    1. 使用Javascript来使不支持HTML5的浏览器支持HTML标签。目前大多网站采用的这种方式(Bootcss官方例子也是如此)。
    2. 利用脚本document.createElement(“”)创建对应的脚本,CSS选择器便可正确应用到该标签。
    3. 考虑到IE9是支持html5的,所以直接在HTML页面的head标签中添加脚本引用即可
  • respond.js
    Respond.js 是一个快速、轻量的 polyfill,用于为 [IE]6-8 以及其它不支持 CSS3 Media Querie 的浏览器提供媒体查询的 min-width 和 max-width 特性,实现响应式网页设计(Responsive Web Design)
  • css reset
    将浏览器的默认样式全部去掉,更准确说就是通过重新定义标签样式。“覆盖”浏览器的CSS默认属性。最最简单的说法就是把浏览器提供的默认样式覆盖掉!这就是CSS reset。
  • normalize.css
    Normalize.css 是一个可以定制的CSS文件,它让不同的浏览器在渲染网页元素的时候形式更统一
  1. 保留有用的默认值,不同于许多 CSS reset 的简单粗暴。
  2. 标准化的样式,适用范围广的元素。
  3. 纠正错误和常见的浏览器的不一致性。
  4. 一些细微的改进,提高了易用性。
  5. 使用详细的注释来解释代码。
  • Modernizr
    Modernizr 是一个很小的用来检测下一代 Web 技术原生实现可用性的 JavaScript 库
    HTML5 和 CSS3 都引入了各自的新特性,但是同时也有很多浏览器不支持这些新特性。
    Modernizr 提供了一种简单的方式检测任意新特性,从而让我们可以采取相应的操作。比如,浏览器还不支持视频特性,那么我们可以显示一个简单的页面。
    我们还可以基于某个特性的可用性来创建 CSS 规则,如果浏览器不支持某个新特性,那么这些规则将会自动应用到网页上
  • postCSS
    它可以被理解为一个平台,可以让一些插件在上面跑,它提供了一个解析器,可以将CSS解析成抽象语法树,通过PostCSS这个平台,我们能够开发一些插件,来处理CSS。热门插件如autoprefixer,它可以帮我们处理兼容问题,只需正常写CSS,autoprefixer可以帮我的自动生成兼容性代码。

一般在哪个网站查询属性兼容性?

http://browserhacks.com
http://caniuse.com/

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