最新文章:

您的位置: 富录-前端开发|web技术博客 > HTML&&CSS > 浏览器兼容问题与解决方法汇总

浏览器兼容问题与解决方法汇总

发布时间:2017年06月05日 评论数:抢沙发阅读数: 7535

    浏览器兼容问题是指,不同厂商开发的浏览器针对同一段代码的不同解析,造成页面展示效果出现差异的情况,很多时候为了追求显示效果的一直,前端开发人员就要针对不同兼容问题应用相应的方法处理,达到效果一致的目的。

    下面这些是平时开发过程中遇到的,做个汇总,方便查阅。

    1、<!DOCTYPE HTML>文档类型的声明
    产生条件:IE6浏览器,当我们没有书写这个文档声明的时候,会触发IE6浏览器的怪异解析现象;
    解决办法:书写文档声明。
    2、横向双外边距
    产生条件:在IE6中块元素浮动后(左浮左margin,右浮右margin),会出现横向双倍margin现象。
    解决办法:在float标签的样式控制中加入display:inline,或者左幅右margin,右浮左margin。
    3、默认行高
    产生条件:IE6\IE7遨游浏览器;设置的文字高度超出盒模型内容区域设置的高度时会影响布局。
    解决办法:给超出高度的标签设置overflow:hidden;或将文字的行高line-height设置为小于块的高度
    4、不同浏览器当中,很多的标签的默认样式不同,如默认的外补丁内补丁。
    产生条件:不同浏览器
    解决方法:利用CSS reset文件进行样式的清除,然后在根据需要进行设置。
    5、img外部的border
    产生条件:img外部有a标签,即img标签有链接时
    解决办法:设置img边框border:0;
    6、经典3像素bug
    产生条件:IE6浏览器,浮动块元素与未浮动块元素处于同一行,有默认的3px间距。
    解决办法:设置非浮动元素浮动。
    7、png格式图片
    产生条件:IE6浏览器,不支持透明;
    解决办法:使用JavaScript进行处理;或者使用GIF、JPG图像替代掉png图片的使用。
    8、默认行高
    产生条件:清浮动的时候,有些人会采取一种清浮动的方法,使用一个空的div,然后为这个div设置{clear:both}。在大部分浏览器当中,这样做是没有任何问题的,但是在IE6浏览器当中,div即使是空的,也会存在默认行高。
    解决方法:设置其高度为0,并设置overflow:hidden。{height:0;overflow:hidden;clear:both;}
    9、图片默认有间距
    产生条件:img标签(每个标签后敲了回车)
    解决方法:为img设置float的浮动布局方式。
    10、a标签hover不适用于所有标签
    产生条件:IE6浏览器中hover只支持a标签的使用,不支持一切其它标签使用;
    解决办法:合理用a标签嵌套其它行内标签或者用JavaScript模拟a的hover效果;
    11、table标签当中border-color属性设置无效
    产生条件:IE6中table设置属性border-color无效;
    解决办法:运用CSS样式进行控制,而不是使用属性进行样式的处理。
    12、透明rgba与opacity
    产生条件:IE6不支持此两种特命的设置方法;
    解决办法:使用IE6当中的滤镜filter替代掉,如:opacity:0.6;filter:alpha(opacity=60)
    13、子选择器在IE6中不能使用
    产生条件:IE6浏览器,使用E>F子选择器;
    解决办法:采用其他选择器或者采用后代选择器进行控制,如div p{margin:10px;}  div p p {margin:0;}替代掉div>p {margin:10px;}
    14、不支持最大最小宽度
    产生条件:IE6浏览器,标签的最小高度、宽度设置(min/max-height)
    解决办法:为IE6单独设置hack,即_height:最小高度值;_width:最小宽度值(对于IE6,当实际宽高超出定义的宽高时,元素会自动调整宽高)。对于最大高度和最大宽度,没有必要设置兼容,当前对于开发者来说,只需要保证IE6下正常显示即可。无需在它身上花费太多功夫
    .target{ min-height:100px; height:auto!important; height:100px; // IE6下内容高度超过会自动扩展高度 }
    15、纵向居中,IE6不支持display:table-cell
    产生条件:IE6浏览器,设置一个元素在另一个元素中垂直方向上居中对齐,不能够支持以单元格的方式来显示元素;
    解决办法:如果是单行文本,采用line-height和height的配合使得文本垂直居中,如果中间是其他元素或者多行文本,采用其他方法进行居中处理。
    16、input聚焦框颜色与样式不同
    产生条件:各个浏览器表现不同;
    处理方法:使用outline:none,清除默认样式之后再统一设置
    17、鼠标移上小手效果
    产生条件:IE6,cursor:hand  :IE完全支持。但是在Firefox是不支持的,没有效果。cursor:pointer:是CSS2.0的标注。所以Firefox是支持的,但是IE5.0即之前版本不支持。
    IE6开始支持。
    解决办法:设置两种cursor:pointer;cursor:hand.
    18、子标签无法撑开父标签的高度
    产生条件:父标签内部含一个或多个子标签,父标签没有设置浮动,而子标签发生浮动:
    处理方法:方法1:在子标签最后添加清除浮动的设置<div style="height:0;clear:both"></div>;方法2:为父标签添加{overflow:hidden}的样式;方法3:为父标签设置固定高度
    19、li的间距问题
    产生条件:IE6浏览器li标签设置宽高,且li里面的元素发生了浮动;
    处理方法:方法1:li不设置宽高;方法2:li内部的标签不进行浮动。
    olli的序号全为1,不递增。
    解决方法:为li设置样式display: list-item;
    20、行内元素布局混了
    产生条件:行内元素为包含框时,如果包含框包含的绝对定位元素以百分比单位进行定位;
    处理方法:在行内元素当中加入{zoom:1},出发IE的haslayout。
    21、多显示一个字
    产生条件:多个浮动元素中间夹杂HTML注释语句,浮动元素宽度设置为100%;则在下一行多显示一个上一行的最后一个字符;
    处理方法:果断删掉注释!
    22、CSS优先级 !important
    产生条件:IE6当中,在同一组CSS属性中,!important不起作用;
    处理方法:单独设置
    23、img图片下部高度多余5px
    产生条件:IE6浏览器;
    处理方法:将图片转化为块级对象,即display:block。还有四种其他方法,详细解释参见日志:IE6BUG图片元素img下高度超出,出现多余空白。

    A.将图片转换为块级对象

                即,设置img为“display:block;”。

    B.设置图片的垂直对齐方式

                即设置图片的vertical-align属性为“top,text-top,bottom,text-bottom”也可以解决。

    C.设置父对象的文字大小为0px

                即,在代码中添加一行:“font-size:0;”可以解决问题。但这也引发了新的问题,在父对象中的文字都无法显示。就算文字部分被子对象括起来,设置子对象文字大小依然可以显示,但在CSS效验的时候会提示文字过小的错误。

    D.改变父对象的属性

                如果父对象的宽、高固定,图片大小随父对象而定,那么可以设置“overflow:hidden;”来解决。

    设置图片的浮动属性

    即在本例中增加一行CSS代码: img {float:left;}”。如果要实现图文混排,这种方法是很好的选择。
    24、hack技术
    hack主要针对IE浏览器,如果想对某一款或某几款浏览器的样式进行调整,我们可以使用hack技术
    _IE6
    *IE6 IE7
    +IE6 IE7
    \9 IE6 IE7 IE8 IE9 IE10
    \0 IE8 IE9 IE10 IE11
    25、IE6不兼容position:fixed
    在 IE6 中实现 position:fixed; 在 IE6 中是不能直接使用 position:fixed; 。你需要一些 CSS Hack 来解决它。(当然,IE6 的问题也不仅仅 position:fixed;)

    让 <div id="top">...</div> 元素固定在浏览器的底部和距离右边的20个像素,代码如下:

    复制代码
    #top{ position:fixed; _position:absolute; bottom:0; right:20px; _bottom:auto; _top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));
    }
    复制代码

    right 跟 left 属性可以用绝对定位的办法解决,而 top 跟 bottom 就需要用上面的表达式来实现。其中在_position:absolute;中的_符号只有 IE6 才能识别,目的是为了区分其他浏览器。

    上面的只是一个例子,下面的才是最重要的代码片段:

    使元素固定在浏览器的顶部
    复制代码
    #top{ _position:absolute; _bottom:auto; _top:expression(eval(document.documentElement.scrollTop));
    } /*使元素固定在浏览器的底部*/
    #top{ _position:absolute; _bottom:auto; _top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));
    }
    复制代码

    这两段代码只能实现在最底部跟最顶部,你可以使用 _margin-top:10px; 或者 _margin-bottom:10px;修改其中的数值控制元素的位置。

    position:fixed; 闪动问题

    现在,问题还没有完全解决。在用了上面的办法后,你会发现:被固定定位的元素在滚动滚动条的时候会闪动。解决闪动问题的办法是在 CSS 文件中加入:

    *html{ background-image:url(about:blank); background-attachment:fixed;
    }

    其中 * 是给 IE6 识别的。

    26、IE6 7 8不支持background-size

    兼容写法:filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/image/xxx.jpg', sizingMethod='scale');
    27、IE6 7 z-index bug 自己层级尽管设置9999都不管用
    解决办法:父级层级提高。
    28、IE6透明兼容处理:
    复制代码
    .filter { /*background: #ce4138; */ background: rgba(211, 66, 55, 0.93); filter: progid:DXImageTransform.Microsoft.gradient( GradientType = 0,startColorstr = '#a3ce4138',endColorstr = '#eece4138' ); 
    }
    复制代码

    29、IE5-8不支持opacity,处理办法:

    .opacity{ opacity:0.4
        filter:alpha(opacity=60);/* for IE5-7 */ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";/* for IE 8*/ }






二维码加载中...
本文作者:DGF      文章标题: 浏览器兼容问题与解决方法汇总
本文地址: https://arbays.com/post/18     本文已被百度收录!
版权声明:若无注明,本文皆为“富录-前端开发|web技术博客”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论