• javaScript与css、html常见的兼容


      最近几天总是遇到兼容问题,就整理了一下javaScript和html、css出现的常见兼容。有不全面或不对的欢迎大家指正。也希望这条博客可以帮到一些刚学习的前端的朋友。

    一、javaScript出现的兼容问题

    1、DOM样式操作
    获取行内/非行内样式(不能用来设置,只能获取)
        正常浏览器写法:
                      getComputedStyle(element, false).attr 获取外部样式,false表示不是伪类。(IE9可以,IE8以下不支持)
        IE浏览器写法:
                      element.currentStyle.attr

      // function getStyle(ele,attr){                 //ele元素,attr属性
            if (ele.currentStyle) {
                return ele.currentStyle[attr];
            } else {
                return getComputedStyle(ele, false)[attr];
            }

    2、事件对象的获取
        正常浏览器:事件处理函数的第一个参数  ( eve)
        IE浏览器:通过window找event属性   (window.event)
        兼容写法:

      element.onclick = function (eve) {
                var e = eve || window.event;
                console.log(e);
            }

    3、键盘事件对象
        正常浏览器:e.keyCode
        IE: e.which
        兼容写法:

         document.onkeydown = function (eve) {
                var e = eve || window.event;
                var code = e.keyCode || e.which;
            }

    4、阻止事件冒泡
        当内层元素的事件被触发时,会依次向上触发所有父级的相同事件
        正常浏览器:e.stopPropagaction
        IE浏览器:e.cancelBubble=true
        兼容写法:封装一个名为stopBbble的函数

    function stopBubble(e){
                    if(e.stopPropagation){
                            e.stopPropagation();
                    }else{
                            e.cancelBubble = true;
                    }
            }

    5、阻止默认事件
        系统提供了都属于默认
        正常浏览器:e.preventDefault()
        IE浏览器:e.returnValue=false
        兼容写法:

    function stopDefault(e){
                    if(e.preventDefault){
                            e.preventDefault()
                    }else{
                            e.returnValue = false;
                    }
            }

    6、事件委托target的兼容
        // 将多个子元素的相同事件,加给共同的现有的父元素,实现节省事件的目的
        正常浏览器:e.target
        IE浏览器:e.srcElement
        兼容写法:

    var target=e.target||e.srcElement

    7、绑定事件与删除事件

    正常浏览器写法:
      监听式绑定事件(可以重复绑定事件区别于赋值式)

    
    
    obox.addElementListener=("click",function(){
            console.log("hello");
        },false)

      删除监听式绑定事件

    obox.addElementListener=("click",fn1,flase)
      function fn1(){
        console.log(2);
      }
    obox.removeElementListener=("click",fn1,false);

    IE浏览器写法
         绑定事件:

    obox.attachEvent("onclick", function(){
            console.log(1);
        })

      删除事件

    obox.detachEvent("onclick",fn1)

    绑定事件的兼容写法:

    function addEvent(ele,type,cb){      //ele参数   type事件类型  cb回调函数
      if(ele.attachEvent){
         ele.attachEvent("on"+type,cb)
       }else{
         ele.addEventListener(type,cb,false)
                        }
       }

    删除事件的兼容写法

    function removeEvent(ele, type, cb) {
      if (ele.detachEvent) {
        ele.detachEvent("on" + type, cb)
      } else {
        ele.removeEventListener(type, cb, false)
      }
    }

    二、下面是css和html的一些常见的兼容

    1、双倍浮动BUG:

    描述:块状元素设置了float属性后,又设置了横向的margin值,在IE6下显示的margin值要比设置的值大;

    解决方案:给float的元素添加 display:inline;将其转换为内联元素;

    2、表单元素行高不一致:

    解决方案:

       a、给表单元素添加vertical-align:middle;

       b、给表单元素添加float:left;

    3、IE6(默认16px为最小)不识别较小高度的标签(一般为10px):

    解决方案:

      a、给标签添加overflow:hidden;

      b、给标签添加font-size:0;

    4、图片添加超链接时,在IE浏览器中会有蓝色的边框:

    解决方案:

      给图片添加border:0或者border:none;

    5、最小高度min-height不兼容IE6;

    解决方案:

      a、min-height:100px;_height:100px;

      b、min-height:100px;height:auto!important;height:100px;

    6、图片默认有间隙:

    解决方案:

      a、给img添加float属性;

      b、给img添加display:block;

    7、按钮默认大小不一:

    解决方案:

      a、如果按钮是一张图片,直接用背景图作为按钮图片;

      b、用a标记模拟按钮,使用JS实现其他功能;

    8、百分比BUG:

    描述:父元素设置100%,子元素各50%,在IE6下,50%+50%大于100%;

    解决方案:

      给右边的浮动元素添加clear:right;

    9、鼠标指针BUG:

      cursor:hand 只有IE浏览器识别;

      cursor:pointer;IE及以上浏览器和其他浏览器都识别(手型);

    10、透明度设置,IE不识别opacity属性:

    解决方案:

      标准写法:opacity:value;(取值范围0-1);

      兼容IE浏览器 filter:alpha(opacity=value);(取值范围1-100);

    11、上下margin重叠问题:

    描述:给上面的元素设置margin-bottom,给下面的元素设置margin-top,只能识别其中较大的那个值;

    解决方案:  

      a、margin-top和margin-bottom 只设置其中一个值;

      b、给其中一个元素再包裹一个盒子,并设置over-flow:hidden;

    12、给子元素设置margin-top.应用在了父元素上:

    解决方案:

      a、把给子元素设置的margin-top改为给父元素设置padding-top;

      b、给父元素设置1px的border,即border-top:1px solid transparent;

      c、给父元素设置over-flow:hidden;

      d、给父元素设置float:left;

  • 相关阅读:
    真正的成长就是颠覆你以前的世界观
    别蠢到用暴露自己软肋的方式,去表达你对别人的信任
    微信企业号的JAVA开发平台
    谁的青春不迷茫
    我才懒得去想我十年后是什么样子,我只在乎十年后的自己怎么看现在的我。
    2016年03月书单
    在人山人海里,你不必记得我
    Android模拟器Intel Atom下载安装配置
    Git与TortoiseGit使用方法
    Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/paixiaoxin/p/12000810.html
Copyright © 2020-2023  润新知