美文网首页
常见的兼容处理范例

常见的兼容处理范例

作者: AuraAura | 来源:发表于2019-02-25 22:27 被阅读0次
    • 条件注释

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

    <!--[if IE 6]>
    <p>这句话仅在IE6浏览器显示</p>
    <!endif-->
    <!--[if !IE]><!-->
    <script>所有浏览器都不显示这句话</script>
    <!--endif-->
    <!--[if IE 8]>
    <link href="ie8only.css" rel="stylesheet">
    <!endif-->
    

    条件注释的页面可以在IE9上正常工作,无法在IE10正常工作因为IE10不再支持条件注释。
    条件注释

    项目 范例 说明
    [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
    • IE hack

    不同的浏览器对CSS样式的解析不同,导致同一个页面的呈现效果存在差异,IE hack为能够解决不同浏览器的兼容性,针对不同浏览器编写不同的CSS,使页面呈现相同的页面的效果。
    CSS hack大致有3种表现形式,CSS属性前缀法、选择器前缀法、IE条件注释法(HTML头部引用if IE)Hack。

    1. 属性前缀法(即类内部Hack):例如IE6能识别下划线“”和星号“”,IE7能识别星号“”,但不能识别下划线“”,
      IE6~IE10都认识“\9”,但Firefox前述三个都不能识别。
    .box{
      color: red;
      _color: blue; /*ie6*/
      *color: pink; /*ie67*/
      color: yellow\9;  /*ie/edge 6-8*/
    }
    
    1. 选择器前缀法
    ie6:
    选择器{_属性/**/:/**/值;}
    选择器{_属性:值;}
    *html 选择器{属性:值;}
    ie7:
    *+html 选择器{属性:值;}
    *:first-child+html 选择器{属性:值;}
    选择器{*属性:值;}
    
    1. 条件注释法
    • js 能力检测

    js能力检测,是识别浏览器的能力,不是识别特定的浏览器。
    基本模式如下:

    if(object.propertyInQuestion){
    
    }
    

    例如:IE5之前的版本不支持document.getElementById()这个DOM方法。但可以使用document.all[]方法。于是可以:

    function getElement(id){
        if( document.getElementById){
        return document.getElementById(id);
        }else if (document.getAll){
        return document.getAll[id];
        }else{
                throw new Erroor("No way to retrieve element !");
        }
    }
    

    html5提出的新元素不被该工具通过document.createElement实现自定义标签,html5shiv.js让ie低版本等浏览器支持html5标签的解决方案。

    respond.js为IE9以下浏览器(IE6-8)支持CSS3中屏幕自适应的js插件。是一个快速、轻量的polyfill。

    早期的浏览器支持和解析CSS的样式不同,导致渲染页面时效果不同。CSS reset就是一个CSS文件,清除了浏览器默认的CSS样式,为浏览器配置适合设计的基础样式。

    相比css reset,在保护浏览器默认的样式前提下进行部分样式重置。根据作者的描述:

    1.Preserves useful defaults, unlike many CSS resets.
    保护有用的浏览器默认样式而不是完全重置它们

    1. Normalizes styles for a wide range of elements.
      为大部分HTML元素提供一般化的样式
    2. Corrects bugs and common browser inconsistencies.
      修复浏览器自身的bug并保证各浏览器的一致性
    3. Improves usability with subtle improvements.
      用一些小技巧优化CSS可用性
    4. Explains what code does using detailed comments.
      用注释和详细的文档来解释代码

    js文件,html5和css3能自动兼容低版本浏览器,Modernizr.js能使老版本的浏览器支持html5,并保证新浏览器渐进增强的用户体验。主要原理就是对浏览器进行“功能检测”,Modernizr.js该工具在html标签中追加一些类名。

    <html class="js flexbox geolocation postmessage indexeddb history
     websockets rgba hsla multiplebgs backgroundsize borderimage 
    borderradius boxshadow textshadow opacity cssanimations 
    csscolumns cssgradients cssreflections csstransforms 
    no-csstransforms3d csstransitions fontface generatedcontent
    video audio localstorage sessionstorage 
    applicationcache -webkit-">
    

    从这些类名可知该浏览器支持哪些特性,不支持哪些(no前缀表示)。然后我们可以针对class,设置样式:

    .no-csstransforms3d{
          background:#000;
    }
    

    postCSS是一款依赖js插件对CSS进行处理的工具。将CSS转换成抽象语法树(AST),调用插件处理AST得到结果。postCSS一般不单独使用,与已有的构建工具进行集成如Webpack、Grunk和Gulp,然后选择满足功能需求的插件进行配置。通过postCSS可以对CSS进行不同的转换和处理,从而将繁杂的工作交由程序去处理。

    /*利用伪类清除浮动*/
    .clearfix:after{
    content:' ';
    display:block;
    clear:both;
    }
    
    /*只针对ie6、7的清除浮动*/
    .clearfix{
    *zoom:1;
    }
    
    /*为元素添加高度*/
    .target{
    display:inline-block;
    *display:inline;
    *zoom:1;
    }
    
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    
    /*针对不同版本的ie浏览器在头部导入样式,针对不同版本的浏览器编写样式*/
    <!DOCTYPE html>
    <!--[if IEMobile 7]> <html dir="ltr" lang="en-US"class="no-js iem7"> <![endif]-->
    <!--[if lt IE 7 ]> <html dir="ltr" lang="en-US" class="no-js ie6 oldie"> <![endif]-->
    <!--[if IE 7 ]>    <html dir="ltr" lang="en-US" class="no-js ie7 oldie"> <![endif]-->
    <!--[if IE 8 ]>    <html dir="ltr" lang="en-US" class="no-js ie8 oldie"> <![endif]-->
    <!--[if (gte IE 9)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html dir="ltr" lang="en-US" class="no-js"><!--<![endif]-->
    

    相关文章

      网友评论

          本文标题:常见的兼容处理范例

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