美文网首页
前端css\js浏览器兼容性问题及处理方案

前端css\js浏览器兼容性问题及处理方案

作者: 子木话 | 来源:发表于2019-10-09 20:29 被阅读0次

常见的浏览器内核主要有四种:Webkit内核、Presto内核、Trident内核、Gecko内核。

  1. HTML兼容
  2. CSS兼容
  3. JavaScript兼容

1. HTML兼容

对于HTML兼容,这是由于低版本浏览器不能识别一些高版本浏览器使用的标签,从而导致不能解析,比如Html5 新语义标签 如header, section, footer, aside, nav, main, article, figure等 IE9及以上全支持。这类兼容性问题比较容易处理。(不使用就可以了😁)

2. CSS兼容

问题一:不同浏览器的标签默认的外补丁(margin)和内补丁(padding)不同
问题表现:标签在不加样式的情况下外补丁(margin)和内补丁(padding)存在差异
解决方法:在css里添加如下代码

*{
  margin: 0;
  padding: 0;
}

问题二:IE6下margin值双倍边距问题
问题表现:IE6下元素浮动之后margin值变成双倍
解决方法:将元素转为行内属性

{
  display: inline;
}

问题三:height值设置过小问题
问题表现:IE6、IE7下设置标签高度小于10px,存在超出已设置的高度的问题
解决方法:为超出高度的元素添加溢出部分隐藏

{
  overflow: hidden;
}

问题四:标签min-height属性不兼容问题
问题表现:min-height属性本身就是一个不兼容CSS属性,所以min-height不能很好地被各个浏览器兼容
解决方法:例如要为一个标签设置最小高度为200px

{
  min-height: 200px;
  height: auto!important;
  height: 200px;
  overflow: visible;
}

问题五:图片元素img下默认有间距
问题表现:IE6下图片元素img出现多余空白
解决方法:图片使用float属性

问题六:opacity多浏览器透明度兼容问题
问题表现:opacity是css3里的属性,只有部分浏览器支持
解决方法:使用各个浏览器的私有属性以支持opacity

{
  filter: alpha(opacity=50);/*IE*/
  -moz-opacity: 0.5;/*老版Mozilla*/
  -khtml-opacity: 0.5;/*老版Safari*/ 
  opacity: 0.5;
}

问题七:Firefox和Chrome不兼容cursor:hand
解决方法:cursor:poniter兼容所有浏览器

问题八:IE6的3px Bug
问题表现:一个标签浮动,另一个不浮动的元素自然上浮与之靠近出现3px间距
解决方法:对浮动的标签设置_margin-right: -3px;

{
  _margin-right: -3px;
}

问题九:display:inline-block元素之间空隙
问题表现:将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block,原因是HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度
解决方法:
(1)标签不换行。
(2)父级标签font-size:0px;

问题十:CSS3 @media 查询 支持ie9及以上
解决方法:js辅助判断

问题十一:background-size ie9及以上支持 /现在的浏览器不需要加前缀了/
解决方法:

.parent {
                width: 400px;
                height: 400px;
                margin: 100px;
                border: 1px solid red;
                background: url(img/aaa.jpg) no-repeat center center;
                background-size: 100% 100%;
                /*针对IE8的hack,目的是除掉之前background*/
                background: none\9;
                /*下一行为关键设置*/
                filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/aaa.jpg', sizingMethod='scale');
            }

问题十二:
transtation属性只支持ie10及以上,所以过渡效果不一定有效

@keyframe 规则和 animation 属性只支持ie10及以上

transform :
IE10、Firefox、Opera 支持 transform 属性。
IE9 支持替代的 -ms-transform 属性(仅适用于 2D 转换)。
Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D 转换)。
Opera 只支持 2D 转换。

问题十三:border-radius 只支持ie9以上

问题十四:rgba 只支持ie9及以上浏览器,ie8要用滤镜处理

3. JavaScript兼容

问题一:event.x与event.y
问题表现:IE下,event对象有x,y属性,但是没有pageX,pageY属性;其它,event对象有pageX,pageY属性,但是没有x,y属性。
解决方法:

eventX = event.x ? event.x : event.pageX

问题二:event.srcElement
问题表现:IE下,even对象有srcElement属性,但是没有target属性
解决方法:

eventTarget = event.srcElement ? event.srcElement : event.target

问题三:获取事件对象

var e = eve || window.event

问题四:获取键盘编码

var e = eve || window.event
var keyValue = e.keyCode || e.charCode || e.which

问题五:阻止事件冒泡

var e = eve || window.event
e.stopPropagation ? e.stopPropagation : e.cancleBubble = true;

问题六:阻止超链接的默认行为

var e = eve || window.event
e.preventDefault ? e.preventDefault() : e.returnValue = false

问题七:添加事件监听

function addEventListener(obj,event,fn,boo){
    if(obj.addEventListener){
       obj.addEventListener(event,fn,boo);
     }else{
    obj.attachEvent("on" + event,fn);
  }
}
运用: addEventListener(oBtn,"click",fn1,false);

问题八:移除事件监听

function removeEventListener(obj,evt,fn,boo){
   if(obj.removeEventListener){
   obj.removeEventListener(evt,fn,boo);
   }else{
   obj.detachEvent("on" + evt,fn);
  }
}
运用:removeEventListener(oBtn,"click",fn2,false);

问题九:获取鼠标键值的 event.button

function getbutton(eve){
 var e = eve || window.event;
 if(eve){//判断是否为标准浏览器
  return e.button
  }else if(window.event){//判断是不是IE
    switch(e.button){
      case 1 :  return 0;
      case 4 :  return 1;
      case 2 :  return 2;
    }
  }
}

问题十:使用getAttribute获取className

<div id="box1"></div>

var oBox=document.getElementById("box1")
console.log(oBox.getAttribute("className"))//标准浏览器不支持,ie7支持
console.log(oBox.getAttribute("class")//标准浏览器支持,ie7不支持

兼容写法:
function fn(obj){
  if(obj.getAttribute("class"))==null{
    return obj.getAttribute("className");
  }else{
  return obj.getAttribute("class")
  }
}

问题十一:getElementsByClassName("class属性名称")不兼容

console.log(obj.getElementsByClassName("class属性名称"))//标准浏览器支持,ie8以下不支持

兼容写法:
function fn(obj.class属性名称){
   if(obj.getElementsByClassName){
      return obj.getElementsByClassName(className);
   }else{
      var list = [];
      var arr = obj.getElementsByTagName(*)//上一步是获取页面所有的标签元素
      for(var i = 0;i < arr.length;i ++){
        if(arr[i].className == className){
          list.push(arr[i]);
        }
      }
      return list;
   }
}
遍历所有元素,找出class名为指定名字的元素

问题十二:获取非行内样式的兼容

var oBox = document.getElementById("box");
function getStyle(obj,attr){
  return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true[attr];
};
var s = getStyle(oBox,"width");

问题十三:localStorage和sessionStorage ie8及以上支持
解决方法:低版本浏览器使用Cookie

问题十四:onselectstart 事件,用来禁用文字选中
webkit浏览器:行内加onselectstart="return false;"
firefox 行内或css加-moz-user-select:none;
标准写法:

<div class="arrow" id="arrow" onselectstart="return false;">123</div>
#arrow {
  -moz-user-select:none;
}

不全不对的地方请大家留言补充修改,谢谢!

相关文章

  • 浏览器兼容性问题及解决方案(JS部分)

    关于浏览器兼容性问题的姊妹篇《浏览器兼容性问题及解决方案(CSS部分)》请点击这里。 常见的JS兼容性部分的问题有...

  • 前端css\js浏览器兼容性问题及处理方案

    常见的浏览器内核主要有四种:Webkit内核、Presto内核、Trident内核、Gecko内核。 HTML兼容...

  • 2018-08-20 day06 js进阶

    基本知识 js的特点 很多语法非常的灵活 随意 兼容性问题。js、html、css浏览器翻译 浏览器分为高级、低...

  • 减少浏览器兼容性问题

    做为一个前端工程师,不少时间都在处理浏览器兼容性问题。本文对如何减少浏览器兼容性问题的方法做了些总结。 确定运行环...

  • day26 js基础2

    微软(ie)兼容性问题。js、html、css浏览器翻译浏览器分为高级、低级浏览器高级:火狐、谷歌、ie8以后低级...

  • 兼容性问题

    CSS兼容性问题PC页面布局兼容JS兼容问题移动页面兼容问题 CSS兼容问题.header {_width:100...

  • web前端笔记

    ##Javascript 多浏览器兼容性问题及解决方案 1 自定义属性问题 问题说明:IE下,可以使用获取常规属性...

  • 前端刷题(不停更新记录)

    1、css兼容性有哪几种处理方案?- 1、css初始化 margin:0;padding:0 2、各自浏览器适应 ...

  • 【前端】Vue.js 基础篇(上)

    前言 前端开发发展历程,目的都是为了提高开发效率: 原生JS Jquery之类的类库(解决不同浏览器兼容性问题) ...

  • gulp插件(9) - gulp-postcss & a

    功能描述 根据设置浏览器版本自动处理浏览器前缀。使用她我们可以很潇洒地写代码,不必考虑CSS针对浏览器的兼容性问题...

网友评论

      本文标题:前端css\js浏览器兼容性问题及处理方案

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