美文网首页
浏览器兼容 hack

浏览器兼容 hack

作者: 不是我的简书 | 来源:发表于2017-02-06 15:26 被阅读115次

    虚拟机virtualbox

    1、谈一谈浏览器兼容的思路

    确定要不要做

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

    做到什么程度

    • 综合考量需要做到什么浏览器什么版本的兼容,比如兼容到IE7 还是IE6

    如何做

    1. 根据兼容需求选择技术框架/库(jquery)
    2. 根据兼容需求选择兼容工具(html5shiv.jsrespond.jscss resetnormalize.cssModernizr)
    3. postCSS
    4. 条件注释、CSS Hack、js 能力检测做一些修补

    渐进增强和优雅降级

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

    2、什么是 CSS hack

    由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。
    这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。

    CSS Hack大致有3种表现形式:
    1. 属性前缀法(即类内部Hack):
      例如 IE6能识别下划线"_"和星号" * ";
      IE7能识别星号" * ",但不能识别下划线"*;
      IE6~IE10都认识"\9";
      但firefox前述三个都不能认识。
    .box{
            color: red;  /*所有浏览器都支持*/
            color:red !important;   ⁄* Firefox、IE7支持 *⁄
            _color: blue; /*ie6支持*/
           *color: pink; /*ie6、7支持*/
            color: yellow\9;  /*ie/edge 6-8*/
    }
    
    1. 选择器前缀法(即选择器Hack)
      *html *前缀只对ie6生效
      *+html *+前缀只对ie7生效

    2. IE条件注释法(即HTML条件注释Hack,IE10+已经不再支持条件注释):
      针对所有IE:

      针对IE6及以下版本:
      ``;
      这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效

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

    处理兼容问题的手段:

    1. 合适的框架
    Bootstrap (>=ie8)
    jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9)
    Vue (>= ie9)
    
    1. 条件注释
    <!--[if IE 6]>
    <p>You are using Internet Explorer 6.</p>
    <![endif]-->
    
    1. CSS hack
    .box{
            color: red;  /*所有浏览器都支持*/
            color:red !important;   ⁄* Firefox、IE7支持 *⁄
            _color: blue; /*ie6支持*/
           *color: pink; /*ie6、7支持*/
            color: yellow\9;  /*ie/edge 6-8*/
    }
    
    1. 使用兼容工具
    2. 常见兼容处理范例
    .clearfix:after{
      content: '';
      display: block;
      clear: both;
    }
    .clearfix{
      *zoom: 1; /* 仅对ie67有效 */
    }
    

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

    • 条件注释(conditional comment)
      是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。
      IE10不再支持条件注释。
    项目 范例 说明
    [if !IE] 非IE
    lt [if lt IE 5.5] 小于IE 5.5
    lte [if lte IE 6] 小于等于IE6
    gt [if gt IE 5] 大于 IE5
    gte [if gte IE 7] 大于等于IE7
    • IE Hack
      针对IE浏览器编写不同的CSS的让IE能够正常渲染的过程

    • js 能力检测
      检测浏览器是否支持某种特定的能力,然后给出特定的解决方案。

    • html5shiv.js参考资料
      用于解决IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题。

    • respond.js
      让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览器支持查询。

    • css reset参考资料
      早期的CSS Reset的作用就是清除所有浏览器默认样式,这样更易于保持各浏览器渲染的一致性。暴力清零带来的问题:
      1.*{ margin:0; padding:0; }会带来性能问题
      2.使用通配符存在隐性问题
      3.过渡的标签重置等于画蛇添足
      4.过渡的标签重置导致语言元素失效

    • normalize.css
      是一个可定制的 CSS 文件,使浏览器呈现的所有元素,更一致和符合现代标准;是在现代浏览器环境下对于CSS reset的替代。
      该项目依赖于研究浏览器默认元素风格之间的差异,精确定位需要重置的样式。相比于传统的CSS Reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被用于Twitter Bootstrap、HTML5 Boilerplate、GOV.UK、Rdio、CSS Tricks 以及许许多多其他框架、工具和网站上。
      作用:
      1.保护有用的浏览器默认样式而不是完全去掉它们
      2.为大部分HTML元素提供一般化的样式
      修复浏览器自身的bug并保证各浏览器的一致性
      3.用一些小技巧优化CSS可用性
      4.用注释和详细的文档来解释代码

    • Modernizr参考资料
      Modernizr.js既能给老版本浏览器打补丁,又能保证新浏览器渐进增强的用户体验。

    • postCSS
      PostCSS 是一个使用 JS 插件来转换 CSS 的工具。这些插件可以支持使用变量,混入(mixin),转换未来的 CSS 语法,内联图片等操作。

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

    浏览器市场份额查询
    CSS属性兼容查询
    Hack 的写法

    6、常见属性的兼容情况

    属性 兼容
    div:hover >=ie7
    inline-block >=ie8
    min-width/min-height >=ie8
    :before,:after >=ie8
    background-size >=ie9
    border-radius圆角 >= ie9
    box-shadow阴影 >= ie9
    transform动画/渐变 >= ie10

    相关文章

      网友评论

          本文标题:浏览器兼容 hack

          本文链接:https://www.haomeiwen.com/subject/pbeyittx.html