当前位置:文档之家› 浏览器兼容性问题汇总_web前端_html_css

浏览器兼容性问题汇总_web前端_html_css

浏览器兼容性问题汇总_web前端_html_css
浏览器兼容性问题汇总_web前端_html_css

一、兼容性问题:

1、div的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一

样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内

容不要换行。

2、margin加倍的问题:设置为float的div在ie下设置的margin会加倍。

这是一个ie6都存在的bug。解决方案是在这个div里面加上

display:inline;例如:

相应的css为

#IamFloat{ float:left; margin:5px;/*IE下理解为10px*/

display:inline;/*IE下再理解为5px*/}

#box{ float:left; width:100px; margin:0 0 0 100px; //这种情况之下IE会产

生200px的距离 display:inline; //使浮动忽略} 这里细说一下block与

inline两个元素:block元素的特点是,总是在新行上开始,高度,宽度,行高,

边距都可以控制(块元素);inline元素的特点是,和其他元素在同一行上,不可

控制(内嵌元素); #box{ display:block; //可以为内嵌元素模拟为块元素

display:inline; //实现同一行排列的效果 display:table。

3、IE与宽度和高度的问题: IE 不认得min-这个定义,但实际上它把正常的

width和height当作有min的情况来使。这样问题就大了,如果只用宽

度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和

min-height的话,IE下面根本等于没有设置宽度和高度。比如要设置

背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:

#box{ width: 80px; height: 35px;} html>body #box{ width: auto;

height: auto; min-width: 80px; min-height: 35px;}

min -width是个非常方便的CSS命令,它可以指定元素最小也不能小于

某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把

width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个

放到 标签下,然后为div指定一个类, 然后CSS这样设

计: #container{ min-width: 600px;

width:expression(document.body.clientWidth < 600? "600px":

"auto" );} 第一个min-width是正常的;但第2行的width使用了

Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实

际上通过Javascript的判断来实现最小宽度。

4、DIV浮动IE文本产生3象素的bug :左边对象浮动,右边采用外补丁

的左边距来定位,右边对象内的文本会离左边有3px的间距.

#box{ float:left; width:800px;} #left{ float:left; width:50%;}

#right{ width:50%;} *html #left{ margin-right:-3px; //这句是关键}

5、IE捉迷藏的问题:当div应用复杂的时候每个栏中又有一些链接,DIV

等这个时候容易发生捉迷藏的问题。有些内容显示不出来,当鼠标选择

这个区域是发现内容确实在页面。解决办法:对#layout使用line-height 属性或者给#layout使用固定高和宽。页面结构尽量简单。

6、float的div闭合;清除浮动;自适应高度;

①例如:<#div id=”floatA” ><#div id=”floatB” ><#div id=”

NOTfloatC” >这里的NOTfloatC并不希望继续平移,而是希望往下排。

(其中floatA、floatB的属性已经设置为 float:left;) 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标

签闭合。在 <#div class=”floatB”> <#div class=”NOTfloatC”>之

间加上 < #div class=”clear”>这个div一定要注意位置,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。

并且将clear这种样式定义为为如下即可: .clear{ clear:both;}

②作为外部 wrapper 的 div 不要定死高度,为了让高度能自动适应,要在

wrapper里面加上overflow:hidden; 当包含float的 box的时候,高度

自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE

啊!)用zoom:1;可以做到,这样就达到了兼容。例如某一个wrapper

如下定义: .colwrapper{ overflow:hidden; zoom:1; margin:5px

auto;}

③对于排版,我们用得最多的css描述可能就是float:left.有的时候我们需要

在n栏的float div后面做一个统一的背景,譬如:

right”>

比如我们要将page的背景设置成蓝色,以达到

所有三栏的背景颜色是蓝色的目的,但是我们会发现随着left center right

的向下拉长,而 page居然保存高度不变,问题来了,原因在于page不是

float属性,而我们的page由于要居中,不能设置成float,所以我们应该这样解决

float:left;width:100%”>

center”>

嵌入一个float left而宽度是100%的DIV解决之。

④万能float 闭合(非常重要!) 关于 clear float 的原理可参见 [How To

Clear Floats Without Structural Markup],将以下代码加入Global CSS

中,给需要闭合的div加上 class="clearfix" 即可,屡试不爽. /* Clear Fix

*/ .clearfix:after { content:"."; display:block; height:0; clear:both;

visibility:hidden; } .clearfix { display:inline-block; } /* Hide from IE

Mac */ .clearfix {display:block;} /* End hide from IE Mac */ /* end of

clearfix */ 或者这样设置:.hackbox{ display:table; //将对象作为块元素级

的表格显示}

7、高度不适应:高度不适应是当内层对象的高度发生变化时外层高度不能自

动进行调节,特别是当内层对象使用margin 或paddign 时。例:

#box {background-color:#eee; } #box p {margin-top:

20px;margin-bottom: 20px; text-align:center; }

p对象中的内容

解决方法:在P对象上下各加2

个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV

加上border属性。

8、IE6下为什么图片下有空隙产生:解决这个BUG的方法也有很多,可以是

改变html的排版,或者设置img 为display:block 或者设置vertical-align

属性为 vertical-align:top | bottom |middle |text-bottom 都可以解决.

9、如何对齐文本与文本输入框:加上 vertical-align:middle;

type="text/css">

10、web标准中定义id与class有什么区别吗?

一、web标准中是不容许重复ID的,比如 div id="aa" 不容许重复2次,

而class 定义的是类,理论上可以无限重复, 这样需要多次引用的定义便可以

使用他.

二、属性的优先级问题 ID 的优先级要高于class,看上面的例子

三、方便JS等客户端脚本,如果在页面中要对某个对象进行脚本操作,那么

可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到

它,这是相对浪费时间资源,远远不如一个ID来得简单.

11、LI中内容超过长度后以省略号显示的方法:此方法适用与IE与OP浏览

12、为什么web标准中IE无法设置滚动条颜色了?解决办法是将body换成

html :

"https://www.doczj.com/doc/ef1457238.html,/TR/xhtml1/DTD/xhtml1-strict.dtd">

equiv="Content-Type" content="text/html; charset=gb2312" />

type="text/css">

13、为什么无法定义1px左右高度的容器:IE6下这个问题是因为默认的行高

造成的,解决的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-

height:1px。

14、怎么样才能让层显示在FLASH之上呢?解决的办法是给FLASH设置透明

15、怎样使一个层垂直居中于浏览器中?这里我们使用百分比绝对定位,与外补

丁负值的方法,负值的大小为其自身宽度高度除以二

type="text/css">

1、Div居中问题:div设置 margin-left, margin-right 为 auto 时已经居中,IE 不

行,IE需要设定body居中,首先在父级元素定义text-algin: center;这个的意思就是在父级元素内的内容居中。

2、链接(a标签)的边框与背景: a 链接加边框和背景色,需设置 display: block, 同时设

置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

3、超链接访问过后hover样式就不出现的问题:被点击访问过的超链接样式不在具有

hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-A Code:

4、游标手指cursor:cursor: pointer可以同时在 IE FF 中显示游标手指状, hand 仅

IE 可以。

5、UL的padding与margin:ul标签在FF中默认是有padding值的,而在IE中只有

margin默认有值,所以先定义ul{margin:0;padding:0;}就能解决大部分问题。

6、FORM标签:这个标签在IE中,将会自动margin一些边距,而在FF中margin则是

0,因此,如果想显示一致,所以最好在css中指定margin和padding,针对上面两个问题,我的css中一般首先都使用这样的样式ul,form{margin:0;padding:0;}给定义死了,所以后面就不会为这个头疼了。(在公共样式,如style.css里面就把这些定义死。)

7、BOX模型解释不一致问题:在FF和IE 中的BOX模型解释不一致导致相差2px。

解决方法:div{margin:30px!important; margin:28px;}注意这两个 margin的顺序一定不能写反, important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div {maring:30px;margin:28px}。重复定义的话按照最后一个来执行,所以不可以只写margin:xx px!important; #box{ width:600px; //for ie6.0- 注:所有浏览器都能识别。 w\idth:500px;//for ff+ie6.0,ie低版本不能识别(所以前面的宽度相当于是给ie低版本设置的)。} #box{ width:600px!important; //for ff width:600px; //for ff+ie6.0 width /*仅ie6不识别*/:500px; //for ie6.0-}

https://www.doczj.com/doc/ef1457238.html,/thread-2738996-1-1.html

8、CSS Hack汇总快查:

屏蔽IE浏览器(也就是IE下不显示):

*:lang(zh) select {font:12px !important;}/*FF 可见,特别声明:由于Opera最新的更新,此句目前已经成为FF的专用HACK*/

select:empty {font:12px !important;} /*safari可见*/

这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。

仅IE7识别:

*+html {…}

当面临需要只针对IE7做样式的时候就可以采用这个HACK。

IE6及IE6以下识别:

* html {…}

这个地方要特别注意很多地主都写了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。

html/**/ >body select {……}

这句与上一句的作用相同。

仅IE6不识别:

select { display /*IE6不识别*/:none;}

这里主要是通过CSS注释分开一个属性与值,流释在冒号前。

仅IE6与IE5不识别:

select/**/ { display /*IE6,IE5不识别*/:none;}

这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。

仅IE5不识别:

select/*IE5不识别*/ { display:none;}

这一句是在上一句中去掉了属性区的注释。只有IE5不识别

盒模型解决方法:

selct {width:IE5.x宽度; voice-family :"\"}\""; voice-family:inherit; width:正确宽度;}

盒模型的清除方法不是通过!important来处理的。这点要明确。

清除浮动:

select:after {content:"."; display:block; height:0; clear:both;

visibility:hidden;}

在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级做一次定义,那么就可以解决这个问题。截字省略号:

select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-

space:nowrap; overflow:hidden; }

这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。

只有Opera识别:

@media all and (min-width: 0px){ select {……} }

针对Opera浏览器做单独的设定。

以上都是写CSS中的一些HACK,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。

IE5.x的过滤器,只有IE5.x可见:

@media tty {

i{content:"\";/*" "*/}} @import 'ie5win.css'; /*";}

}/* */

IE5/MAC的过滤器,一般用不着:

/*\*//*/

@import "ie5mac.css";

/**/

IE的if条件Hack:

所有的IE可识别

只有IE5.0可以识别

IE5.0包换IE5.5都可以识别

仅IE6可识别

IE6以及IE6以下的IE5.x都可识别

仅IE7可识别

9、属性选择器(这个不能算是兼容,是隐藏css的一个bug) : p[id]{}div[id]{} 这个对

于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的。

10、最狠的手段 - !important; 如果实在没有办法解决一些细节问题,可以用这个方

法.FF对于”!important”会自动优先解析,然而IE则会忽略.如

下 .tabd1{ background:url(/res/images/up/tab1.gif) no-repeat 0px

0px !important; /*Style for FF*/ background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过。

11、IE,FF的默认值问题:或许你一直在抱怨为什么要专门为IE和FF写不同的

CSS,为什么IE这样让人头疼,然后一边写css,一边咒骂那个可恶的M$ IE.其实对于css的标准支持方面,IE并没有我们想象的那么可恶,关键在于IE和FF的默认值不一样而已,掌握了这个技巧,你会发现写出兼容FF和IE的css并不是那么困难,或许对于简单的css,你完全可以不用”!important”这个东西了。我们都知道,浏览器在显示网页的时候,都会根据网页的 css样式表来决定如何显示,但是我们在样式表中未必会将所有的元素都进行了具体的描述,当然也没有必要那么做,所以对于那些没有描述的属性,浏览器将采用内置默认的方式来进行显示,譬如文字,如果你没有在css中指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div或者其他元素的背景,如果在 css中没有被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如此。所以有很多东西出现FF和IE显示不一样的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我知道在w3中有没有对应的标准来进行规定,因此对于这点也就别去怪罪IE了。

12、为什么FF下文本无法撑开容器的高度:标准浏览器中固定高度值的容器是不会象

IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义: { height:auto!important; height:200px; min-height:200px; }。

13、firefox下如何使连续长字段自动换行:众所周知IE中直接使用 word-

wrap:break-word 就可以了, FF中我们使用JS插入 的方法来解决

type="text/css">

id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaa

/*

var strContent=obj.innerHTML; var strTemp="";

while(strContent.length>intLen){ strTemp+=strContent.substr(0,intLen)+" ";

strContent=strContent.substr(intLen,strContent.length); }

strTemp+=" "+strContent; obj.innerHTML=strTemp; } if(document.getElementById && !document.all) toBreakWord("ff", 37); /* ]]> */

14、为什么IE6下容器的宽度和FF解释不同呢

encoding="gb2312"?>

"https://www.doczj.com/doc/ef1457238.html,/TR/xhtml1/DTD/xhtml1-strict.dtd">

content="text/html; charset=gb2312" />

让firefox与IE兼容

问题的差别在于容器的整体宽度有没有将边框(border)的宽度算在其内,这里IE6解释为200PX ,而FF则解释为220PX,那究竟是怎么导致的问题呢?大家把容器顶部的xml去掉就会发现原来问题出在这,顶部的声明触发了IE的qurks mode,关于qurks mode、 standards mode的相关知识,请参考:http:

//https://www.doczj.com/doc/ef1457238.html,/china/msdn/library/webservices/https://www.doczj.com/doc/ef1457238.html,/

ASPNETusStan.mspx?mfr=true。

15、IE6,IE7,FF :IE7.0 出来了,对CSS的支持又有新问题。浏览器多了,网页兼容

性更差了,疲于奔命的还是我们,为解决IE7.0的兼容问题,找来了下面这篇文章:现在我大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!下面是三个浏览器的兼容性收集.

第一种,是CSS HACK的方法 height:20px; /*For firefox*/ *height:25px; /*For IE7 & IE6*/ _height:20px; /*For IE6*/注意顺序。这样也属于CSS HACK,不过没有上面这样简洁。 #example { color: #333; } /* Moz */ * html #example { color: #666; } /* IE6 */ *+html #example { color: #999; } /* IE7 */

href="ie7.css" />

第三种,css filter的办法,以下为经典从国外网站翻译过来的。. 新建一个css样式如下: #item { width: 200px; height: 200px; background:

red; } 新建一个div,并使用前面定义的css的样式:

some

text here

在body表现这里加入lang属性,中文为zh:

lang="en"> 现在对div元素再定义一个样式: *:lang(en)

#item{ background:green !important; } 这样做是为了用!important覆盖原来的css样式,由于:lang选择器ie7.0并不支持,所以对这句话不会有任何作用,于是也达到了ie6.0下同样的效果,但是很不幸地的是,safari同样不支持此属性,所以需要加入以下css样式: #item:empty { background:

green !important } :empty选择器为css3的规范,尽管safari并不支持此规范,但是还是会选择此元素,不管是否此元素存在,现在绿色会现在在除ie各版本以外的浏览器上。对IE6和FF的兼容可以考虑以前的!important 个人比较喜欢用。

16、IE6/IE77对FireFox

*+html 与 *html 是IE特有的标签, firefox 暂不支持.而*+html 又为 IE7特有标签.

代码:

注意:

*+html 对IE7的兼容必须保证HTML顶部有如下声明:

代码:

"https://www.doczj.com/doc/ef1457238.html,/TR/html4/loose.dtd">

其他兼容技巧:

1、FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会.(可

用!important解决) ;

2、居中问题:

1).垂直居中.将 line-height 设置为当前 div 相同的高度, 再通过 vetical-align:

middle.( 注意内容不要换行.) 。

2).水平居中. margin: 0 auto;(当然不是万能) 。

3、若需给 a 标签内内容加上样式, 需要设置 display: block;(常见于导航标签)。

4、 FF 和 IE 对 BOX 理解的差异导致相差 2px 的还有设为 float的div在ie下 margin

加倍等问题。

5、 ul 标签在 FF 下面默认有 list-style 和 padding . 最好事先声明, 以避免不必要的麻烦.

(常见于导航标签和内容列表)。

6、作为外部 wrapper 的 div 不要定死高度, 最好还加上 overflow: hidden.以达到高度自

适应。

7、兼容代码:兼容最推荐的模式。

/* FF */

.submitbutton {

float:left;

width: 40px;

height: 57px;

margin-top: 24px;

margin-right: 12px;

}

/* IE6 */

*html .submitbutton {

margin-top: 21px;

}

/* IE7 */

*+html .submitbutton {

margin-top: 21px;

}

8、div ul li 的嵌套顺序:

今天只讲一个规则。就是

  • 的三角关系。我的经验就是
    在最外面,里面是
      ,然后再是
    • ,当然
    • 里面又可以嵌套
      什么的,但是并不建议你嵌套很多东西。当你符合这样的规则的时候,那些倒霉的,不听话的间隙就不会在里面出现了,当你仅仅是
      里面放
    • ,而不用
        的时候,你会发现你的间隙十分难控制,一般情况下,IE6和IE7会凭空多一些间距。但很多情况你来到下一行,间隙就没了,但是前面的内容又空了很大一块,出现这种情况虽然你可以改变IE 的Margin,然后调整Firefox下面的Padding,以便使得两者显示起来得效果很相似,但是你得CSS将变得臭长无比,你不得不多考虑更多可能出现这种问题补救措施,虽然你知道千篇一律来兼容它们,但是你会烦得要命。

        9、具体嵌套写法:

        遵循上面得嵌套方式,

        然后在CSS 里面告诉 ul {Margin:0px;padding:0px;list- style:none;},其中list-style:none是不让
      • 标记的最前方显示圆点或者数字等目录类型的标记,因为IE和 Firefox显示出来默认效果有些不一样。因此这样不需要做任何手脚,你的IE6、和IE7、Firefox显示出来的东西(外距,间距,高度,宽度) 就几乎没什么区别了,也许细心的你会在某一个时刻发现一、两个象素的差别,但那已经很完美了,不需要你通过调整大片的CSS来控制它们的显示了,你愿意,你可以仅仅兼容一两个地方,而且通常这种兼容可以适应各种地方,不需要你重复在不同的地方调试不同的兼容方式–减轻你的烦恼。

        {overflow:hidden; } 这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。

        10、去掉ie有默认最低高度:

        其中height:2px为你要设的高度,overflow:hidden最为关键,他就是帮你去掉默认高度。

        二、其他兼容性问题:

        1、input text在IE6与IE7中边框问题:

        input text在IE6与IE7中用border:none边框并没有去掉(button类型的

        input有效果,边框已被去掉)。

        input{border:none;}/* IE8 火狐 chrome*/

        input[type=text]{ border:0; }/* 在所有input中类型是text的隐藏边框,兼容 ie7 ff

        chrome */

        input{border:0;}/* 包括所有input,兼容 ie6 ie7 ff chrome */

        border:none;与border:0;的区别体现有两点:一是理论上的性能差异;二是浏

        览器兼容性的差异。

        1.性能差异

        【border:0;】把border设为“0”像素虽然在页面上看不见,但按border默认值理解,浏览器依然对border-width/border-color进行了渲染,即已经占用了内存值。

        【border:none;】把border设为“none”即没有,浏览器解析“none”时将

        不作出渲染动作,即不会消耗内存值。

        2.兼容性差异

        【border:none;】当border为“none”时对IE6/7无效边框依然存在

        【border:0;】当border为“0”时,所有浏览器都一致把边框隐藏

        总结:

        1. 对比border:0;与border:none;之间的区别在于有渲染和没渲染,感觉他们和

        display:none;与visibility:hidden;的关系类似,而对于border属性的渲染性能

        对比暂时没找测试的方法,虽然认为他们存在渲染性能上的差异但也只能说是理

        论上。

        2. 如何让border:none;实现全兼容?只需要在同一选择符上添加背景属性即可

        3.对于border:0;与border:none;个人更向于使用,border:none;,因为

        border:none;毕竟在性能消耗没有争议,而且兼容性可用背景属性解决不足以成

        为障碍

        2、ie6中a:hover的bug:

        IE6不允许a:hover的属性与a:link的属性相同,如果a:hover 中没有样式的改变,hover就不会被触发,所以需要加一个属性来区别,不论a:hover里写入任

        何属性,都可以使之恢复正常,最常见的是a:hover{zoom:1;}

        3、ie6下z-index失效:

        IE下z-index的bug 在IE浏览器中,定位元素的z-index层级是相对于各自的

        父级容器,所以会导致z-index出现错误的表现。解决方法是给其父级元素定义

        z-index。

        4、谷歌浏览器兼容性问题:

        当鼠标焦点在input、textarea这些元素上时,Chrome默认的会给它们加上黄

        色的边框。

        解决方法:其实这是css的效果,outline这个属性。设置outline: none;就会去掉。

        三、

        浏览器兼容性问题及解决方案

        浏览器兼容新问题 W3C对标准的推进,Firefox,Chrome,Safari,Opera的出现,结束了IE雄霸天下的日子。 然而,这对开发者来说,是好事,也是坏事。 说它是好事,是因为浏览器厂商为了取得更多的市场份额,会促使各浏览器更符合W3C标准,而得到更好的兼容性,并且,不同浏览器的扩展功能(例如-moz,-webkit开头的样式),对W3C标准也是个推进;说它是坏事,因为,多个浏览器同时存在,这些浏览器在处理一个相同的页面时,表现有时会有差异。这种差异可能很小,甚至不会被注意到;也可能很大,甚至造成在某个浏览器下无法正常浏览。我们把引起这些差异的问题统称为“浏览器兼容性问题”。而正是这些“浏览器兼容性问题”,无形中给我们的开发增加了不少难度。 从浏览器内核的角度来看,浏览器兼容性问题可分为以下三类: 1. 渲染相关:和样式相关的问题,即体现在布局效果上的问题。 2. 脚本相关:和脚本相关的问题,包括JavaScript和DOM、BOM方面的问题。对于某些浏览器的功能方面的特性,也属于这一类。 3. 其他类别:除以上两类问题外的功能性问题,一般是浏览器自身提供的功能,在内核层之上的。 例如下面的页面,是一个渲染相关的问题: 在各个浏览器中都表现的不同,这就属于兼容性问题。 造成浏览器兼容性问题的根本原因就是浏览器各浏览器使用了不同的内核,并且它们处理同一件事情的时候思路不同。 现今常见的浏览器及其排版引擎(又称渲染引擎)及脚本引擎,如下:

        而造成浏览器兼容性问题的常见原因则是设计师写出了不规范的代码,不规范的代码会使不兼容现象更加突出。 例如: 不规则的嵌套: DIV 中直接嵌套LI 元素是不合标准的,LI 应该处于UL 内。此类问题常见的还有P 中嵌套DIV,TABLE等元素。 不规范的DOM接口和属性设置: 总之,人为的原因也占很大一部分。而人为造成兼容性问题的原因,除了粗心之外,大都源于浏览器bug 的存在,和开发者对标准的不了解。 比如,如果要做一个功能,功能是想让鼠标悬停在IMG 元素上方时,可以出现提示信息,经常针对IE 做开发的人,可能会使用IMG 元素的“alt” 属性,但其他浏览器中就是不给…alt? 属性面子。因为W3C 标准中规定要去做这件事的属性是”title“,大多浏览器符合标准,IE 不符合,这是IE 浏览器内核的问题;开发者不知道”title“ 才是正解,不遵循标准去写代码,是开发者的问题。所以,一个问题分两半,浏览器和开发者都有责任。 既然都有责任,就都有义务去解决兼容性问题。那么,从浏览器的角度来讲,它的厂商应该修复浏览器的bug和不合标准的地方,当某一天IE 的”alt“ 不能用于提示了,还有人用这个错误的属性去显示提示么?从开发者角度来讲,多了解标准,了解浏览器兼容性问题,就可以在开发的过程中,有效的避开兼容性问题,让你的页面在所有浏览器中畅通无阻。 废话少说,下面就讲讲如何有效的避免一些兼容性问题。 J AVA S CRIPT (4)

        软件兼容性测试

        软件兼容性测试 1软件兼容性与软件兼容性测试 兼容性问题,即应用程序在不同的环境中,是否会因接口、函数的不同而发生错误的问题。 1.1软件兼容性 软件兼容性是指某个软件能稳定地工作在某操作系统/平台之中,就说这个软件对这个操作系统/平台是兼容的,再就是在多任务操作系统中,几个同时运行的软件之间如果能稳定地工作,就说这几个软件之间的兼容性好,否则就是兼容性不好。 另一种情况是软件共享的数据,几个软件之间无需复杂的转换,即能方便地共享相互间的数据,也称为兼容。因此,软件兼容性是衡量软件好坏的一个重要指标。从这个意义上看,软件兼容性不良就是软件推广的最大阻碍,例如在微软历史上花费人力财力最多的Vista系统,发布了半年之久依然是叫好不叫座,据说原因之一是软件兼容性最为用户所诟病。 1.2软件兼容性测试 软件兼容性测试是指测试软件在特定的硬件产台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境中是否能很好地运行的测试。简单的说,兼容性测试是指测试某新开发的软件在某一特定环境下与各种软件的协调性,软件之间能否很好的运作。例如,会不会有相互不良的影响,还有软件和硬件之间能否发挥很好的效率工作,会不会影响或导致系统的崩溃等。 1.3配置测试与软件兼容性测试 配置测试是指验证在不同的硬件配置和软件配置下,应用程序能否正常工作。配置测试的目的是保证软件在其相关的硬件上能够正常运行,而兼容性测试主要

        是测试软件能否与不同的软件正确协作。 软件兼容性测试(Software Compatibility Testing)是指检查软件之间是否能够正确地进行交互和共享信息。其工作的目标是保证软件按照用户期望的方式进行交互。 2软件兼容性测试的内容 软件兼容性测试的主要内容: 1.操作系统/平台的兼容性 2.应用软件的兼容性,例如framework、flash等 3.浏览器之前的兼容性 4.数据库之间的兼容性 5.其他方面,例如操作系统语言、传输协议、代理服务器、防火墙、自身 产品集成 2.1操作系统/平台的兼容性 市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。应用软件的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个软件可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。因此,理想的软件应该具有平台无关性。 当然,有些软件只是针对某一系列的操作系统平台来开发的,不存在跨平台的需求。但同一操作系统也有多个版本,例如Windows系统也有不同的系列版本号,如Windows 2000 /XP/Vista等,他们之间可能也有许多不同的组件属性。因此,有些软件可能需要在不同操作系统平台上重新编译才可运行,有些软件需要重新开发或改动较大才能在不同平台运行。因此,在软件发布之前,需要在各种操作系统下对应用软件进行兼容性测试。 自行安装多种平台和模拟应用环境进行测试,但缺点是难以覆盖所有平台。一个软件产品的开发成功,不仅仅是编写完为使用者提供服务功能的程序而已,

        浏览器兼容性常见问题

        1.注释标签常用语法 1.1注释的注意事项

        1.2出错条件 1.3注释中多个地方出错时

        1.4两个出错的注释标签,其间的内容被视为注释的一部分 1.5解决方案 2.浏览器的字符编码 2.1问题描述 各浏览器对于字符编码别名支持的宽泛程度有差异,当指定了浏览器无法识别的字 符编码别名时,浏览器会以确定编码的优先级顺序采用设置的更低优先级的字符编码, 以此类推。而 Chrome Safari Opera 中对字符编码别名有着比其他浏览器更宽泛的支持。

        2.2文档的字符编码顺序 针对如何确定一个文档的字符编码,用户代码必须遵守下面的优先级顺序(优先级由高至低): (1)HTTP "Content-Type" 字段中的 "charset" 参数。 (2)META 声明中 "http-equiv" 为 "Content-Type" 对应的值中的 "charset" 的值。(3)元素的 charset 属性。 2.3实例1 上面是一段 PHP 代码,HTTP "Content-Type" 头字段设置了字符编码为 BIG5,页面中的 META 元素设置了字符编码为 UTF-8,页面本身的编码类型为 GB2312。页面执行时,通过脚本输出了当前浏览器所采用的字符编码类型。 这个动态页面在各浏览器中运行时均显示出了 BIG5,可见此时所有浏览器均遵照HTML4.01 规范所述,以更高优先级的 HTTP "Content-Type" 头字段的 "charset" 参数的值作为字符编码类型。

        2.4各浏览器默认编码格式 上面页面中没有设定任何的字符编码信息,则各浏览器对于这个页面将使用各自的默认编码。页面自身的编码为 GB2312。 各浏览器中运行效果如下: 2.5实例2 上面的动态页面自身的编码为 BIG5,HTTP "Content-Type" 头字段设置了字符编码为 maccyrillic,页面中的 META 元素设置了字符编码为 b.i.g+5。 各浏览器中运行效果如下:

        不同浏览器兼容报告

        Shuo de ——中国金融数据及工具首席服务商 IE、FF、Safari、OP不同浏览器兼容报告 柯伯勋 2011-03-08 上海万得资讯科技有限公司 Shanghai Wind Information Co., Ltd. 地址: 上海浦东新区福山路33号建工大厦9楼 邮编Zip : 200120 电话T el : (8621)6886 2280 传真Fax : (8621)6886 2281 Email : sales@https://www.doczj.com/doc/ef1457238.html, 主页:https://www.doczj.com/doc/ef1457238.html,

        1浏览器内核简介 浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“解释引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如HTML、JavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。 浏览器内核很多,如果加上所有的几乎没有什么人在用的非商业的免费内核,那么可能大约有10款以上甚至更多,不过通常我们比较常见的大约只有以下四种,下面先简单介绍一下。 1.1Trident: IE浏览器使用的内核,该内核程序在1997年的IE4中首次被采用,是微软在Mosaic代码的基础之上修改而来的,并沿用到目前的IE8。Trident实际上是一款开放的内核,其接口内核设计的相当成熟,因此才有许多采用IE内核而非IE的浏览器涌现(如Maxthon、The World 、TT、GreenBrowser、AvantBrowser等)。此外,为了方便也有很多人直接简称其为IE内核(当然也不排除有部分人是因为不知道内核名称而只好如此说)。 由于IE本身的“垄断性”(虽然名义上IE并非垄断,但实际上,特别是从Windows 95年代一直到XP初期,就市场占有率来说IE的确借助Windows的东风处于“垄断”的地位)而使得Trident内核的长期一家独大,微软很长时间都并没有更新Trident内核,这导致了两个后果——一是Trident内核曾经几乎与W3C标准脱节(2005年),二是Trident内核的大量Bug等安全性问题没有得到及时解决,然后加上一些致力于开源的开发者和一些学者们公开自己认为IE浏览器不安全的观点,也有很多用户转向了其他浏览器,Firefox和Opera就是这个时候兴起的。非Trident内核浏览器的市场占有率大幅提高也致使许多网页开发人员开始注意网页标准和非IE浏览器的浏览效果问题。 1.2Gecko: Netscape6开始采用的内核,后来的Mozilla FireFox也采用了该内核,Gecko的特点是代码完全公开,因此,其可开发程度很高,全世界的程序员都可以为其编写代码,增加功能。因为这是个开源内核,因此受到许多人的青睐,Gecko内核的浏览器也很多,这也是Geckos内核虽然年轻但市场占有率能够迅速提高的重要原因。 事实上,Gecko引擎的由来跟IE不无关系,前面说过IE没有使用W3C的标准,这导致了微软内部一些开发人员的不满;他们与当时已经停止更新了的Netscape的一些员工一起创办了Mozilla,以当时的Mosaic 内核为基础重新编写内核,于是开发出了Geckos。不过事实上,Gecko 内核的浏览器仍然还是Firefox用户最多,所以有时也会被称为Firefox内核。此外Gecko也是一个跨平台内核,可以在Windows、BSD、Linux 和Mac OS X中使用。 1.3Presto: 目前Opera采用的内核,该内核在2003年的Opera7中首次被使用,该款引擎的特点就是渲染速度的优化达到了极致,也是目前公认网页浏览速度最快的浏览器内核,然而代价是牺牲了网页的兼容性。 实际上这是一个动态内核,与前面几个内核的最大的区别就在脚本处理上,Presto有着天生的优势,页

        网页兼容性测试

        网页兼容性测试 Web兼容性测试主要是针对不同的操作系统平台,浏览器,以及分辨率进行的测试。由于用户浏览器的不同,往往都会使我们的网页发生页面样式错乱,图片无法显示等问题。因此我们就需要对Web网页进行兼容性测试。对于web应用,我们无法预计用户的客户端配置和运行环境。所以,做好兼容性测试是非常重要的。 1.1. 操作系统兼容性测试 常见的操作系统有Windows,Unix,Linux等,对于普通用户来讲,最常用的是Windows操作系统。Windows操作系统包括Windows XP,windows 2003,vista,Win2000/NT,Windows9x等等。 1.2. 浏览器兼容性测试 浏览器是Web系统中最核心的组成构件,来自不同厂家的浏览器对Javascript、ActiveX或不同的HTML规格有不同的支持,即使是同一厂家的浏览器,也存在不同的版本的问题。不同的浏览器对安全性和JAVA的设置也不一样。 使用不同的浏览器(Firefox IE7 IE6)访问同一个网站,或者页面的时候,在一种浏览器下显示正常,在另一种下就乱了。 不同的浏览器对CSS解释不同。 常见的浏览器兼容性问题,主要表现在如下两方面; 1)页面显示 页面显示的美观性是Web应用程序中重要需求,不同浏览器上呈现给用户的同一个Web页面可能显示的不一样。这些差异性主要表现在对于页面元素的位置、大小、外观。如果在某款浏览器上显示不美观,就会成为一个问题,需要修改。 2)功能问题 Web软件中的功能性问题主要是不同浏览器对脚本的执行不一致,功能性问题极大的限制了用户对Web界面元素的使用。这类问题通常很难被发现,比如某个按钮可能显示正确但实际它是无法使用的,这个则需要用户真正的去使用它才能被发现。 3)现有解决方法 由于软件尽可能多的支持不同类型浏览器,近年来越来越多的成为一个趋势,因此测试的工作量也越来越大。而更多的方法是通过手工进行测试,如何减少工作量,当然想到的还是自动化。 在业内目前通过自动化的方法减少手工测试工作量,主要的过程如下: 1)录制手工操作 将手工操作过程在一个浏览器上通过软件的方式记录下来。记录的主要是鼠标与键盘的动作,同时对每一个操作后的结果,设置一个预期结果。 2)检查测试结果 根据上个步骤录制的脚本,在其他浏览器上进行回放(自动化操作),并比对实际结果与预期结果,如果一样则测试通过,否则测试失败。 上述自动化的主要问题在于: 1)录制时需要设置预期结果,存在额外的工作量。 2)页面变化是WEB软件开发中经常发生的,比如变化了界面显示的文字,移动存放的位置,都可能导致录制的脚本需要进行修改,脚本的维护工作量会比较大。 3)对于操作的结果检查,由于各个浏览器对于界面的展现各不相同,(比如字体的显示各不相同),因此结果可能是多种的,就会很容易产生展现的结果也是美观的,但被误报成测试失败的现象。 1.3. 分辨率兼容性测试

        Windows系统下各浏览器兼容性

        Windows系统下各浏览器常用CSS HACK汇总表 1. 此汇总表中测试浏览器的版本为: 微软系统自带:IE6、 IE7、IE8 火狐:Firefox 3.6.6 Safari:Safari 5.0 谷歌浏览器:Chrome 6.0.458.1 dev Opera浏览器:Opera 10.60 2. 其中,多数CSS hack是在selector{property:value;}基础上更改的。 selector代表CSS选择器,property代表CSS特性,value代表特性的值。 3. FF代表Firefox,Ch代表Chorme,Sa代表Safari,Op代表Opera 4. Q代表Quirks Mode,S代表Standards Mode。 5. Hack Type列的数字,指的是上面CSS hack的实现方式中的列表号。 1是指“利用浏览器对相同代码的解析和支持的不同实现的hack”,2是指以Firefox或Webkit特有的扩展样式实现的hack。

        一定遵守CSS hack的三条原则。CSS hack是没有办法的时候才使用的解决兼容性问题的招术,是用兼容性问题去解决兼容性问题,无异于饮鸩止渴。切莫一有兼容性问题就使用,时刻记得改掉用CSS hack修补的问题。 IE6、IE7、IE8、Firefox兼容性CSS HACK代码+示例 1.区别IE和非IE浏览器CSS HACK代码 #divcss5{ background:blue; /*非IE 背景藍色*/ background:red \9; /*IE6、IE7、IE8背景紅色*/ } 2.区别IE6,IE7,IE8,FF CSS HACK 【区别符号】:「\9」、「*」、「_」 【示例】: #divcss5{ background:blue; /*Firefox 背景变蓝色*/ background:red \9; /*IE8 背景变红色*/ *background:black; /*IE7 背景变黑色*/ _background:orange; /*IE6 背景变橘色*/ } 【说明】:因为IE系列浏览器可读「\9」,而IE6和IE7可读「*」(米字号),另外IE6可辨识「_」(底线),因此可以依照顺序写下来,就会让浏览器正确的读取到自己看得懂得CSS语法,所以就可以有效区分IE各版本和非IE浏览器(像是Firefox、Opera、Google Chrome、Safari等)。 3.区别IE6、IE7、Firefox (EXP 1) 【区别符号】:「*」、「_」 【示例】: #divcss5{ background:blue; /*Firefox背景变蓝色*/ *background:black; /*IE7 背景变黑色*/ _background:orange; /*IE6 背景变橘色*/ } 【说明】:IE7和IE6可读「*」(米字号),IE6又可以读「_」(底线),但是IE7却无法读

        最全整理浏览器兼容性问题与解决方案样本

        常用浏览器兼容性问题与解决方案所谓浏览器兼容性问题,是指由于不同浏览器对同一段代码有不同解析,导致页面显示效果不统一状况。在大多数状况下,咱们需求是,无论顾客用什么浏览器来查看咱们网站或者登陆咱们系统,都应当是统一显示效果。因此浏览器兼容性问题是前端开发人员经常会遇到和必要要解决问题。 在学习浏览器兼容性之前,我想把前端开发人员划分为两类: 第一类是精准按照设计图开发前端开发人员,可以说是精准到1px,她们很容易就会发现设计图局限性,并且在很少状况下会遇到浏览器兼容性问题,而这些问题往往都死浏览器bug,并且她们制作页面后期易维护,代码重用问题少,可以说是比较牢固放心代码。 第二类是基本按照设计图来开发前端开发人员,诸多细枝末节差距很大,不如间距,行高,图片位置等等经常会差几px。某种效果实现也是重复调试得到,详细为什么浮现这种效果还模模糊糊,整体布局十分脆弱。稍有改动就乱七八糟。代码为什么这样写还不知因此然。此类开发人员往往经常为兼容性问题所困。修改好了这个浏览器又乱了另一种浏览器。改来改去也毫无头绪。其实她们遇到兼容性问题大某些不应当归咎于浏览器,而是她们技术自身了。 文章重要针对是第一类,严谨型开发人员,因而这里重要从浏览器解析差别角度来分析兼容性问题。 浏览器兼容问题一:不同浏览器标签默认外补丁和内补丁不同 问题症状:随便写几种标签,不加样式控制状况下,各自margin 和padding差别较大。 遇到频率:100% 解决方案:CSS里*

        备注:这个是最常用也是最易解决一种浏览器兼容性问题,几乎所有CSS文献开头都会用通配符*来设立各个标签内外补丁是0。 浏览器兼容问题二:块属性标签float后,又有横行margin状况下,在IE6显示margin比设立大 问题症状:常用症状是IE6中背面一块被顶到下一行 遇到频率:90%(稍微复杂点页面都会遇到,float布局最常用浏览器兼容问题)解决方案:在float标签样式控制中加入display:inline;将其转化为行内属性 备注:咱们最惯用就是div+CSS布局了,而div就是一种典型块属性标签,横向布局时候咱们普通都是用div float实现,横向间距设立如果用margin实现,这就是一种必然会遇到兼容性问题。 浏览器兼容问题三:设立较小高度标签(普通不大于10px),在IE6,IE7,遨游中高度超过自己设立高度 问题症状:IE6、7和遨游里这个标签高度不受控制,超过自己设立高度 遇到频率:60% 解决方案:给超过高度标签设立overflow:hidden;或者设立行高line-height 不大于你设立高度。 备注:这种状况普通出当前咱们设立小圆角背景标签里。浮现这个问题因素是IE8之前浏览器都会给标签一种最小默认行高高度。虽然你标签是空,这个标签高度还是会达到默认行高。 浏览器兼容问题四:行内属性标签,设立display:block后采用float布局,又有横行margin状况,IE6间距bug 问题症状:IE6里间距比超过设立间距 遇到几率:20%

        关于浏览器兼容性问题

        关于浏览器兼容性问题 制作网页时总会遇到各种浏览器的兼容性问题,工作也有一段时间了,做了一点小总结希望分享给大家,共同进步。 1、float定位。 Float定位是css排版中的非常重要的手段,属性float值:left、right、none(默认值),当设定了元素向左或者向右浮动时,元素会向其父元素的左侧或右侧靠紧。 在用float的同时我们要注意到 (1)float元素的父元素不能指定clear属性。 这是因为MaeIE下如果对float的元素父元素使用clear属性,周围的float元素布局就会混乱。 (2)float元素无比知道那个width属性 很多浏览器在显示未指定width的float元素时会有bug,所以不管float元素的内容如何,一定要为其制定width属性。(注意:制定元素时尽量使用em而不是px)(3)float元素不能指定margin和padding的属性 ie在显示指定了margin和padding的float元素时有bug。你可以再float元素内部嵌套一个div来势之margin和padding,也可以使用hack方法为ie指定特定的值。 (4)float元素之核的宽度要小于100% 如果float元素的宽度和正好等于100%,为保证大多浏览器显示正常,要是宽度之和小于100 2、margin加倍的问题。 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 解决方案是在这个div里面加上display:inline; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/ 3、ie6中莫名出现多余的字符 我遇到的现象是:ie6下有些问题,重复出现在第二行,就是某些段落或某些文字的末尾N个字符,他另起一行重复出现,在选选着重复出现的文字时,原有的文字也被选中 解决方法:很简单,在重复出现文字的末尾补N个 ;就可以。 4、ie7中正常,但ie8中不正常,div的位置position:absolute在ie8中不起作用 解决方法:设置html兼容ie7,在head下加 5、针对ie 6、ie 7、火狐浏览器 (1)Ie6 、FF对!important;测试正常 Ie7对!important;可以正确解释。 为了使他们都正常: #style1{color:#333;} FF正常显示#333; *html #style1{color:#666;} ie6显示#666 *+html #style1{color:#999;} ie7显示#999 *+html与*html是ie特有的标签,firefox暂不支持,而*+html又为ie7特有的标签。 注意:顺序不能错了。 (2)FF: 链接加边框和背景色,需设置display: block, 同时设置float: left 保证不换行。 参照menubar, 给 a 和menubar 设置高度是为了避免底边显示错位, 若不设height,

        浏览器兼容性解决方案

        所有浏览器通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 *+height: 100px; IE7、FF 共用 height: 100px !important; 什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 IE6)访问同一个网站,或者页面的时候,会出现一些不兼容的问题,在这种浏览器下显示正常,在另一种下就乱了,我们在编写CSS的时候会很恼火,刚修复了这个浏览器的问题,结果另外一个浏览器却出了新问题。好吧,我服了行吧,那我就利用你们的不兼容各写一段css,让他们各执行各的,呵呵。 一、!important (功能有限) 随着IE7对!important的支持, !important 方法现在只针对IE6的兼容.(注意写法.记得该声明位置需要提前.) 例如: #example { width: 100px !important; /* IE7+FF */ width: 200px; /* IE6 */ }

        二、CSS HACK的方法(新手可以看看,高手就当路过吧) 首先需要知道的是: 所有浏览器通用 height: 100px; IE6 专用 _height: 100px; IE7 专用 *+height: 100px; IE6、IE7 共用 *height: 100px; IE7、FF 共用 height: 100px !important; 例如: #example { height:100px; } /* FF */ * html #example { height:200px; } /* IE6 */ *+html #example { height:300px; } /* IE7 */ 下面的这种方法比较简单 举几个例子: 1、IE6 - IE7+FF #example { height:100px; /* FF+IE7 */ _height:200px; /* IE6 */ } 其实这个用上面说的第一种方法也可以 #example { height:100px !important; /* FF+IE7 */ height:200px; /* IE6 */ } 2、IE6+IE7 - FF #example { height:100px; /* FF */ *height:200px; /* IE6+IE7 */ } 3、IE6+FF - IE7 #example { height:100px; /* IE6+FF */

        浏览器兼容性bug

        常见浏览器兼容性问题与解决方案 标签:前端开发浏览器兼容问题 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果。所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题。 在学习浏览器兼容性之前,我想把前端开发人员划分为两类: 第一类是精确按照设计图开发的前端开发人员,可以说是精确到1px的,他们很容易就会发现设计图的不足,并且在很少的情况下会碰到浏览器的兼容性问题,而这些问题往往都死浏览器的bug,并且他们制作的页面后期易维护,代码重用问题少,可以说是比较牢固放心的代码。 第二类是基本按照设计图来开发的前端开发人员,很多细枝末节差距很大,不如间距,行高,图片位置等等经常会差几px。某种效果的实现也是反复调试得到,具体为什么出现这种效果还模模糊糊,整体布局十分脆弱。稍有改动就乱七八糟。代码为什么这么写还不知所以然。这类开发人员往往经常为兼容性问题所困。修改好了这个浏览器又乱了另一个浏览器。改来改去也毫无头绪。其实他们碰到的兼容性问题大部分不应该归咎于浏览器,而是他们的技术本身了。 文章主要针对的是第一类,严谨型的开发人员,因此这里主要从浏览器解析差异的角度来分析兼容性问题。(相关文章推荐:主流浏览器CSS 3和HTML 5兼容清单) 浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。 碰到频率:100% 解决方案:CSS里 *{margin:0;padding:0;} 备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。

        各种浏览器兼容问题列表

        各种浏览器兼容问题列表 1、仅IE7与IE5.0可以识别 *+html select {…} 当面临需要只针对IE7与IE5.0做样式的时候就可以采用这个HACK。 2、仅IE7可以识别 *+html select {…!important;} 当面临需要只针对IE7做样式的时候就可以采用这个HACK。 3、IE6及IE6以下识别 * html select {…} 这个地方要特别注意很多博客都写成了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。 4、html/**/ >bod y select {…} 这句与上一句的作用相同。 5、仅IE6不识别,屏蔽IE6 select { display /*屏蔽IE6*/:none;} 这里主要是通过CSS注释分开一个属性与值,注释在冒号前。 6、仅IE6与IE5不识别,屏蔽IE6与IE5 select/**/ { display /*IE6,IE5不识别*/:none;} 这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。不屏蔽IE5.5 7、仅IE5不识别,屏蔽IE5 select/*IE5不识别*/ {…} 这一句是在上一句中去掉了属性区的注释。只有IE5不识别,IE5.5可以识别。 8、盒模型解决方法 selct {width:IE5.x宽度; voice-family :”\”}\”"; voice-family:inherit; width:正确宽度;} 盒模型的清除方法不是通过!important来处理的。这点要明确。 9、只有Opera识别 @media all and (min-width: 0px){ select {……} } 针对Opera浏览器做单独的设定。 以上都是写CSS中的一些HACK,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样

        div+css中常见的浏览器兼容性处理

        在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所有浏览器通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 *+height: 100px; IE7、FF 共用 height: 100px !important; 一、CSS 兼容 以下两种方法几乎能解决现今所有兼容. 1, !important (不是很推荐,用下面的一种感觉最安全) 随着IE7对!important的支持, !important 方法现在只针对IE6的兼容.(注意写法.记得该声明位置需要提前.) 代码: 2, IE6/IE77对FireFox *+html 与 *html 是IE特有的标签, firefox 暂不支持.而*+html 又为 IE7特有标签. 代码: 注意: *+html 对IE7的兼容必须保证HTML顶部有如下声明: 代码: 二、万能 float 闭合(非常重要!) 可以用这个解决多个div对齐时的间距不对, 关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup] 将以下代码加入Global CSS 中,给需要闭合的div加上class=”clearfix” 即可,屡试不爽. 代码: ********************************************************************* ************************************************** 三、其他兼容技巧(相当有用) 1, FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不 会.(可用!important解决)

        浏览器兼容性

        浏览器兼容性 浏览器的内核 Mozilla Firefox ( Gecko ) Internet Explorer ( Trident ) Opera ( Presto ) Safari ( WebKit ) Google Chrome ( WebKit ) 腾讯TT、世界之窗、360浏览器、遨游浏览器都是给IE加了个外壳,不过如果电脑上装的是ie8的话,这些浏览器还是调用ie7的内核。搜狗浏览器比较特殊,它有两种浏览模式:一是兼容模式,该模式使用IE内核;二是高速模式,该模式使用WebKit内核。解决ie7、ie8兼容性最好的办法是在head标签中加入meta 类型,只要IE8一读到这个标签,它就会自动启动IE7兼容模式 CSS Hack 解决浏览器兼容性问题的主要方法是CSS hack。由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack,也叫写CSS hack。 CSS Hack的原理是什么 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。比如 IE6能识别

        浏览器兼容性测试

        Rendering Engine(浏览器内核)与浏览器
        常见浏览器的内核简介
        2012-8-2 BLYK BLYK

        ----------BLYK 友情编辑
        目录
        Rendering Engine(浏览器内核)与浏览器 ...................................................... 错误!未定义书签。 1.浏览器内核介绍......................................................................................................................... 3 1.1 浏览器内核概念................................................................................................................. 3 1.2 主流浏览器内核介绍......................................................................................................... 3 1.2.1 Trident ...................................................................................................................... 3 1.2.2 Gecko ...................................................................................................................... 4 1.2.3 Presto ...................................................................................................................... 4 1.2.4 Webkit ..................................................................................................................... 4 1.3 排版引擎............................................................................................................................ 5 1.3.1 WebCore ................................................................................................................ 5 1.3.2 KHTML .................................................................................................................... 5 2. 主流浏览器所用内核简介 .......................................................................................................... 5 2.1 Firefox 浏览器 ........................................................................................................ 6 2.2 Internet Explorer(IE) ...................................................................................................... 7 2.2.1 6.0 版本 ............................................................................................................... 7 2.2.2 7.0 版本 ............................................................................................................... 7 2.2.3 8.0 版本 ............................................................................................................... 8 2.2.4 9.0 版本 ............................................................................................................... 9 2.3Google Chrome .................................................................................................................. 10 2.3.1 Google Chrome 市场份额 ................................................................................ 10 2.3.2 Google Chrome 版本分支.................................................................................. 10 2.4 Safari .............................................................................................................................. 11 2.5 360 安全浏览器............................................................................................................. 11 2.6 基于多内核的浏览器....................................................................................................... 11 2.6.1 傲游浏览器 3(Maxthon3.0+) ........................................................................ 11 2.6.2 QQ 浏览器 6.11 .................................................................................................. 11 2.6.3 搜狗高速浏览器(3.0+).................................................................................. 12 2.6.4 Lunascape(5.0+)............................................................................................. 12 3. 浏览器构成.............................................................................................................................. 12 渲染流程......................................................................................................................... 13 主流浏览器所使用的内核分类 ..................................................................................... 13 4. 浏览器兼容性测试策略.......................................................................................................... 13 4.1 浏览器兼容性测试策略 ................................................................................................ 14 4.1.1 快速..................................................................................................................... 14 4.1.2 精确..................................................................................................................... 14 4.1.3 完整..................................................................................................................... 14

        文本预览
    相关文档 最新文档