一些浏览器兼容问题

浏览器兼容  

为什么会有兼容问题?

  由于市场上浏览器种类众多,而不同浏览器其内核亦不尽相同,所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容。现在市面上使用较多的内核例如:

使用Trident内核的浏览器:IE、Maxthon、TT;

使用Gecko内核的浏览器:Netcape6及以上版本、FireFox;

使用Presto内核的浏览器:Opera7及以上版本;

使用Webkit内核的浏览器:Safari、Chrome。

主要的兼容问题也是出在IE浏览器和其它流行的浏览器之间的问题,对于IE浏览器本身而已,每个版本跨度都有差别,IE8以上和IE8以下都存在很多兼容的问题。

在前端的工作中解决浏览器兼容问题是我们必须掌握的一项技能。

  对浏览器兼容问题,可以总结为HTML,Javascript兼容,CSS兼容。 其中html相关问题比较容易处理,无非是高版本浏览器用了低版本浏览器无法识别的元素,导致其不能解析,所以平时注意一点就是。特别是HTML5增加了许多新标签,低版本浏览器有点影响时代进步啊。

  css是一个难点,css兼容问题是主要的浏览器兼容问题,解决css兼容问题是至关重要的。

  这里就简单介绍一些css兼容问题和解决方法。

  1.css hake技术,对兼容问题了解不深时,常常采用的方法。

    1、区别IE6,IE7,IE8,FF

    【区别符号】:「\9」、「*」、「_」

    2、区别IE6、IE7、Firefox(方法1)

    【区别符号】:「*」、「_」

    3、区别IE6、IE7、Firefox(方法2)

    【区别符号】:「*」、「!important」

    4、区别IE6、IE7(方法1)

    【区别符号】:「*」、「_」

    5、区别IE6、IE7(方法2)

    【区别符号】:「!important」

  2.条件注释法   

  <!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本。 <![endif]-->
  <!--[if gte IE 6]> 这段文字仅显示在 IE6及IE6以上版本。 <![endif]-->
  <!--[if gt IE 6]> 这段文字仅显示在 IE6以上版本(不包含IE6)。 <![endif]-->
  <!--[if IE 5.5]> 这段文字仅显示在 IE5.5。 <![endif]-->
  <!--在 IE6及IE6以下版本中加载css-->
  <!--[if lte IE 6]> <link type="text/css" rel="stylesheet" href="css/ie6.css" mce_href="css/ie6.css" /><![endif]-->
  缺点是在IE浏览器下可能会增加额外的HTTP请求数。

  3.一些常见的兼容性问题bug   

1、IE6怪异解析之padding与border算入宽高
原因:未加文档声明造成非盒模型解析
解决方法:加入文档声明<!doctype html>

2、IE6在块元素、左右浮动、设定marin时造成margin双倍(双边距)
解决方法:display:inline

3、以下三种其实是同一种bug,其实也不算是个bug,举个例子:父标签高度20,子标签11,垂直居中,20-11=9,9要分给文字的上面与下面,怎么分?IE6就会与其它的不同,所以,尽量避免。
1)字体大小为奇数之边框高度少1px
解决方法:字体大小设置为偶数或line-height为偶数
2)line-height,文本垂直居中差1px
解决方法:padding-top代替line-height居中,或line-height加1或减1
3)与父标签的宽度的奇偶不同的居中造成1px的偏离
解决方法:如果父标签是奇数宽度,则子标签也用奇数宽度;如果是父标签偶数宽度,则子标签也用偶数宽度

4、内部盒模型超出父级时,父级被撑大
解决方法:父标签使用overflow:hidden

5、line-height默认行高bug
解决方法:line-height设值

6、行标签之间会有一小段空白
解决方法:float或结构并排(可读性差,不建议)

7、标签高度无法小于19px
解决方法:overflow: hidden;

8、左浮元素margin-bottom失效
解决方法:显示设置高度 or 父标签设置_padding-bottom代替子标签的margin-bottom or 再放个标签让父标签浮动,子标签
margin- bottom,即(margin-bottom与float不同时作用于一个标签)

9、img于块元素中,底边多出空白
解决方法:父级设置overflow: hidden; 或 img { display: block; } 或 _margin: -5px;

10、li之间会有间距
解决方法:float: left;

11、块元素中有文字及右浮动的行元素,行元素换行
解决方法:将行元素置于块元素内的文字前

12、position下的left,bottom错位
解决方法:为父级(relative层)设置宽高或添加*zoom:1

13、子级中有设置position,则父级overflow失效
解决方法:为父级设置position:relative

14、 IE6下图片下方有空隙产生;解决这个BUG的方法也有很多,可以是改变html的排版,或者设置img 为display:block,
或者设置vertical-align 属性为vertical-align:top bottom middle text-bottom都可以解决.(但是最近我发现这个问题在其它浏览器中也有所体现)

15、IE6 3px bug 两个浮动层中间有间隙,这个IE的3PX BUG也是经常出现的,
解决的办法是给右边元素也同样浮动 float:left 或者相对IE6定义.left margin-right:-3px;
经典两列布局,float: left;width:200px; 第二个,margin-left,200px; 他们之间会产生3px的间距。

16、 在IE6中没有min-width的概念,其默认width就是min-width,所以有时字体过多它会选择撑开容器。

17、 IE6无法定义1px左右高度的容器,是因为默认的行高造成的,解决的方法也有很多, 例如: overflow:hidden zoom:0.08 line-height:1px ⑦ 使用margin : 0 auto;方法使容器居中依然在IE6中行不通,我们要对其父容器使用

18、被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题, 解决方法是改变CSS属性的排列顺序: L-V-H-A <style type=”text/css”> a:link {} a:visited {} a:hover {} a:active {} /style>

19、 在使用绝对定位/相对定位时,设置z-index在ie中可能会失效,是因为其元素依赖于其父元素的z-index,而父元素默认为0 ?所以子元素z-index高,而父元素底,依然不会改变其显示顺序;

      

  

时间: 2024-11-05 16:02:55

一些浏览器兼容问题的相关文章

浏览器兼容 各浏览器的Hack写法 [出处:W3CPLUS]

Hack是针对不同的浏览器去写不同的CSS样式,从而让各浏览器能达到一致的渲染效果,那么针对不同的浏览器写不同的CSS CODE的过程,就叫CSS HACK,同时也叫写CSS Hack.然后将Hack放在浏览器特定的CSS文件中,让其符合条件的浏览器解析这些代码,就如前面所说的条件样式,我们将CSS Hack代码放入条件样式文件中,符合条件的浏览器就解析,不符合的将不解析,从面达到您所需要的页面渲染效果.总的一句话来说使用CSS Hack将会使用你的CSS代码部分失去作用,然后借助条件样式,使用

CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

目录 一.浏览器兼容 1.1.概要 1.2.浏览器内核 1.3.浏览器市场份额(Browser Market Share) 1.4.兼容的一般标准 1.5.CSS Reset 1.6.CSS Hack 1.6.1.条件注释法 1.6.2.样式内属性标记法 1.6.3.选择器前缀法 1.7.文档模式 (X-UA-Compatible) 1.8.javascript兼容 二.前端性能优化 2.1.概要 2.2.减少HTTP请求数量 2.2.1.图片地图 2.2.2.精灵图片(Sprite) 2.2.

关于浏览器兼容问题及hack写法

浏览器的兼容问题 1.浏览器内核: Mozilla Firefox ( Gecko ) Internet Explorer ( Trident ) Opera ( Presto ) Safari ( WebKit ) Google Chrome ( WebKit ) 2.css hack 解决浏览器兼容的主要方法是css hack 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. IE6 IE7 IE8 Fire

浏览器兼容问题汇总(持续更新)

所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果.所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题. 在学习浏览器兼容性之前,我想把前端开发人员划分为两类: 第一类是精确按照设计图开发的前端开发人员,可以说是精确到1px的,他们很容易就会发现设计图的不足,并且在很少的情况下会碰到浏览器的兼容性问题,而这些问题往往都死浏览器

【转】Web前端浏览器兼容初探

原文地址:http://blog.jobbole.com/38638/ 前言 浏览器兼容是前端开发人员必须掌握的一个技能,但是初入前端的同学或者其他后台web开发同学往往容易选择忽略,而形成两个极端: 1 我最开始都是使用IE6,IE6上没问题,其它浏览器坑爹(多出现与前端后端一起搞的同学,小生2年前就这种状态,鼓励人家用ie6....) 2 我要遵循标准,我只要ff就好,IE就是坑爹的玩意,我不必去理他(小生一年前的心态...) 现在看来,之前的想法都是不对的,我们诚然应该追求最新的浏览器使用

使用 audio 和 embed 实现浏览器兼容的网页声音播放

使用 audio 和 embed 实现浏览器兼容的网页声音播放 学习参考源码如下: function playSound() { var borswer = window.navigator.userAgent.toLowerCase(); if ( borswer.indexOf( "ie" ) >= 0 ) { //IE内核浏览器 var strEmbed = '<embed name="embedPlay" src="http://www

js快速判断IE浏览器(兼容IE10与IE11)

在很多时候,我们一般采用navigator.userAgent和正则表达来判断IE浏览器版本,下面介绍用IE浏览器中不同特性来判断IE浏览器   1 判断IE浏览器与非IE 浏览器 IE浏览器与非IE浏览器的区别是IE浏览器支持ActiveXObject,但是非IE浏览器不支持ActiveXObject.在IE11浏览器还没出现的时候我们判断IE和非IE经常是这么写的 ? 1 2 3 function isIe(){        return window.ActiveXObject ? tr

浅谈Web前端浏览器兼容问题

对于兼容最近一直困扰我,以前写的代码只是针对高质量用户来使用 不考虑IE7,8 这样的浏览器 ,但是最近我开发的时候必须要兼容,大喊一声我曹,没有办法,自己来吧! 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果.所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题. 在学习浏览器兼容性之前,我想把前端开发人员划分为两类: 第

浅谈CSS hack(浏览器兼容)

今天简单写一点关于浏览器兼容的处理方法,虽然百度上已经有很多,但是我还是要写! 先看一个图 这个图描述了2016年1月至8月网民们所使用的浏览器市场份额(来源:http://tongji.baidu.com/data/browser).令我感到欣慰的是chrome排第一,chrome一直以来对W3C标准都支持得比较友好,但是图中也反映了使用IE系列的人数也不少,所以我们日常做前端开发的时候还要考虑他们的感受. 以下是正文: 我的前任公司做前端的时候,要求兼容IE8及以上,谷歌,火狐三座大山.因为

浏览器兼容问题innerText nextElementSibling firstElementChild

//浏览器兼容 //获dom对象的innerText的取值 function getInnerText(element){ //判断浏览器是否支持innerText if(typeof element.innerText==="string"){ return element.innerText; }else{ return element.textContent; } } //设置dom对象innerText的值 function setInnerText(element,conte