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

常见的兼容处理范例

作者: 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]-->

相关文章

  • 常见的兼容处理范例

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

  • Internationalization API(字符串本地化)

    实例 仅作为使用范例,启迪之用。 MDN上的更多方法 兼容性 现在已经有了不错的兼容性了

  • 前端:常见的事件兼容IE问题处理

    1.注册事件IE 事件模型使用 attachEvent() 方法注册事件DOM 事件模型使用 addEv...

  • 兼容处理

    谷歌浏览器获取滚动高度宽度方式 ie 获取方式 因此兼容处理这样写 获取浏览器窗口宽高 平幕高度 阻止冒泡 阻止浏...

  • 鼠标事件

    第二章 2.1 /鼠标位置|兼容处理 var oEvent=ev||event(处理兼容),oEvent.clie...

  • python学习笔记03

    文件处理 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。 读写文件前,我们先必须...

  • Android 的向前兼容和向后兼容

    向后兼容和向前兼容的概念 向后兼容(Backwards compatibility):较高版本的程序能够处理较低版...

  • 小程序-兼容性问题(必看)

    13条兼容问题处理方案 在做页面时遇到的一些关于兼容的问题处理方案: 1、...

  • 常见的js兼容

    1. 通过注释语句 2. 获取元素样式 3. requestAnimationFrame 4. getEl...

  • 常见的css兼容

    1. opacity:控制元素整体的透明程度 2. .clearfix::after 清除浮动 3. ca...

网友评论

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

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