《浏览器兼容性汇总2012.8.8.doc》由会员分享,可在线阅读,更多相关《浏览器兼容性汇总2012.8.8.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流浏览器兼容性汇总2012.8.8.精品文档./*针对谷歌浏览器内核支持的CSS样式*/media screen and (-webkit-min-device-pixel-ratio:0) 样式/*针对IE6特制识别的CSS样式*/*HTML .SearchBox样式针对Firefox浏览器的内核CSS写法:-moz-document url-prefix() .font1 color:redIE8就是自己来调试了。调试一个浏览器,有不合适的地方可以在该内核css中重写对应的方法,只需把不合适的样式重写即可实现。*HTML中则例外,需要每重写
2、一个都要加*HTML单独处理。针对样式名如果只让ie6看见用*html .headcolor:#000;如果只让ie7看见用*+html .headcolor:#000;如果只让ff看见用:root body .headcolor:#000;如果只让ff、IE8看见用html/*/body .headcolor:#000;如果只是不让ie6看见用htmlbody .headcolor:#000; 即对IE 6无效如果只是不让ff、IE8看见用*body .headcolor:#000; 即对ff、IE8无效针对具体属性如果只让ie6看见用_ .head_color:#000;如果只让ie7看见
3、用+与_结合的方法: .head+color:#f00;!;_color:#000;IE8正式版hack9例:”margin:0px auto9;”.这里的”9可以区别所有IE8和FireFox.“*”IE6、IE7可以识别.IE8、FireFox不能.“_”IE6可以识别”_”,IE7、IE8、FireFox不能.如:.a color:#f00; color:#f609; +color:#00FF00; _color:#0000FF; 从左到右分别对应 FF,IE8 IE7 IE6还有写css样式一定要记住顺序:以下为引用的内容:#1 color: #333; /* Moz */* html
4、 #1 color: #666; /* IE6 */*+html #1 color: #999; /* IE7 */顺序很重要 JavaScript1. HTML对象获取问题FireFox:document.getElementById(idName);ie:document.idname或者document.getElementById(idName).解决办法:统一使用document.getElementById(idName);2. const问题说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量. 解决方法:统一使用var
5、关键字来定义常量.3. event.x与event.y问题说明:IE下,event对象有x,y属性,但是没有pageX,pageY属性;Firefox下,event对象有pageX,pageY属性,但是没有x,y属性. 解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX. 4. window.location.href问题说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使
6、用window.location. 解决方法:使用window.location来代替window.location.href.5. frame问题以下面的frame为例:(1)访问frame对象:IE:使用window.frameId或者window.frameName来访问这个frame对象. frameId和frameName可以同名。Firefox:只能使用window.frameName来访问这个frame对象.另外,在IE和Firefox中都可以使用window.document.getElementById(frameId)来访问这个frame对象.(2)切换frame内容:在
7、IE和Firefox中都可以使用window.document.getElementById(testFrame).src = xxx.html或window.frameName.location = xxx.html来切换frame的内容.如果需要将frame中的参数传回父窗口(注意不是opener,而是parent frame),可以在frame中使用parent来访问父窗口。例如:parent.document.form1.filename.value=Aqing;6. 模态和非模态窗口问题说明:IE下,可以通过showModalDialog和showModelessDialog打开模态
8、和非模态窗口;Firefox下则不能. 解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener; parWin.document.getElementById(Aqing).value = Aqing; 7. firefox与IE的父元素(parentElement)的区别IE:obj.parentElementfirefox:obj.parentNode解决方法: 因为firefox与I
9、E都支持DOM,因此使用obj.parentNode是不错选择.8. document.formName.item(”itemName”) 问题问题说明:IE下,可以使用document.formName.item(”itemName”) 或document.formName.elements elementName;Firefox 下,只能使用document.formName.elementselementName。解决方法:统一使用document.formName.elementselementName。9. 集合类对象问题问题说明:IE下,可以使用 () 或 获取集合类对象;Fire
10、fox下,只能使用 获取集合类对象。解决方法:统一使用 获取集合类对象。10. 自定义属性问题问题说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute() 获取自定义属性;Firefox下,只能使用getAttribute() 获取自定义属性。解决方法:统一通过getAttribute() 获取自定义属性。11. input.type属性问题问题说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写。解决办法:不修改input.type属性。如果必须要修改,可以先隐藏原来的input,然后在同样的位置再插入一个新的
11、input元素。12. event.srcElement问题问题说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性。解决方法:使用srcObj = event.srcElement ?event.srcElement : event.target;如果考虑第8条问题,就改用myEvent代替event即可。13. body载入问题问题说明:Firefox的body对象在body标签没有被浏览器完全读入之前就存在;而IE的body对象则必须在body标签被浏览器完全读入之后才存在。注
12、这个问题尚未实际验证,待验证后再来修改。注 经验证,IE6、Opera9以及FireFox2中不存在上述问题,单纯的JS脚本可以访问在脚本之前已经载入的所有对象和元素,即使这个元素还没有载入完成。14. 事件委托方法问题说明:IE下,使用document.body.onload = inject; 其中function inject()在这之前已被实现;在Firefox下,使用document.body.onload = inject();解决方法:统一使用document.body.onload=new Function(inject(); 或者document.body.onload =
13、function()/* 这里是代码 */注意 Function和function的区别。15. Table操作问题问题说明:ie、firefox以及其它浏览器对于 table 标签的操作都各不相同,在ie中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChild方法也不管用。解决方法:/向table追加一个空行:var row = otable.insertRow(-1);var cell = document.createElement(td);cell.innerHTML = ;cell.className = XXXX;row.appendC
14、hild(cell);注 由于俺很少使用JS直接操作表格,这个问题没有遇见过。建议使用JS框架集来操作table,如JQuery。16. 对象宽高赋值问题问题说明:FireFox中类似obj.style.height = imgObj.height的语句无效。 CSS1. cursor:hand VS cursor:pointerfirefox不支持hand,但ie支持pointer解决方法: 统一使用pointer2. innerText在IE中能正常工作,但在FireFox中却不行. 需用textContent。解决方法:if(navigator.appName.indexOf(Explo
15、rer) -1) document.getElementById(element).innerText = my text; else document.getElementById(element).textContent = my text;3. CSS透明IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。FF:opacity:0.6。4. css中的width和padding在IE7和FF中width宽度不包括padding,在Ie6中包括padding.5. FF和IEBOX模型解释不一致导致相差
16、2pxbox.stylewidth:100;border 1px; ie理解为box.width = 100 ff理解为box.width = 100 + 1*2 = 102 /加上边框2px 解决方法:divmargin:30px!important;margin:28px;注意这两个margin的顺序一定不能写反, IE不能识别!important这个属性,但别的浏览器可以识别。所以在IE下其实解释成这样:divmaring:30px;margin:28px重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;6. IE5 和IE6的BOX解释不一致IE
17、5下divwidth:300px;margin:0 10px 0 10px;div 的宽度会被解释为300px-10px(右填充)-10px(左填充),最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以 300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 divwidth:300px!important;width /*/:340px;margin:0 10px 0 10px7. ul和ol列表缩进问题消除ul、ol等列表的缩进时,样式应写成:list-style:none;margin:0px;padding:0px;经验证,在IE中
18、,设置margin:0px可以去除列表的上下左右缩进、空白以及列表编号或圆点,设置padding对样式没有影响;在 Firefox 中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须设置list- style:none才能去除列表编号或圆点。也就是说,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、 padding:0px以及list-style:none三项才能达到最终效果。8. 元素水平居中问题FF: margin:0 auto;IE: 父级 text-align:cent
19、er; 9. Div的垂直居中问题vertical-align:middle; 将行距增加到和整个DIV一样高:line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行。10. margin加倍的问题设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline; 例如:相应的css为#imfloat float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/11. IE与宽度和高度的问题IE不认得mi
20、n-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:#box width: 80px; height: 35px;htmlbody #box width: auto; height: auto; min-width: 80px; min-height: 35px;12. 页面的最小宽度如上一个问题,IE不识别min,要实现最小宽度,可用下面的方
21、法:#container min-width: 600px; width:expression(document.body.clientWidth 600? 600px: auto ); 第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。13. DIV浮动IE文本产生3象素的bug左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距. #box float:left; width:800px; #left float:left;
22、 width:50%; #right width:50%; *html #left margin-right:-3px; /这句是关键 /div/div14. IE捉迷藏的问题当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。解决办法:对#layout使用line-height属性或者给#layout使用固定高和宽。页面结构尽量简单。15. float的div闭合;清除浮动;自适应高度 例如:div id=”floatA”div id=”floatB”div id=”NOTfloatC”这里的NOTfl
23、oatC并不希望继续平移,而是希望往下排。(其中floatA、floatB的属性已经设置为float:left;) 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在div class=”floatB”div class=”NOTfloatC”之间加上div class=”clear”这个div一定要注意位置,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。并且将clear这种样式定义为为如下即可:.clearclear:both;作为外部 wrapper 的 div 不要定死高度,为了让高度能自
24、适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。例如某一个wrapper如下定义:.colwrapperoverflow:hidden; zoom:1; margin:5px auto;对于排版,我们用得最多的css描述可能就是float:left.有的时候我们需要在n栏的float div后面做一个统一的背景,譬如: /div/div/div比如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但
25、是我们会发现随着left center right的向下拉长,而page居然保存高度不变,问题来了,原因在于page不是float属性,而我们的page由于要居中,不能设置成float,所以我们应该这样解决:/div/div/div再嵌入一个float left而宽度是100%的DIV解决之。万能float 闭合(非常重要!) 关于 clear float 的原理可参见 How To Clear Floats Without Structural Markup,将以下代码加入Global CSS 中,给需要闭合的div加上class=clearfix 即可,屡试不爽。/* Clear Fix
26、*/ .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; /将对象作为块元素级的表格显示16. 高度不适应高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调
27、节,特别是当内层对象使用margin 或padding时。例:#box background-color:#eee; #box p margin-top: 20px;margin-bottom: 20px; text-align:center; p对象中的内容/p解决技巧:在P对象上下各加2个空的div对象CSS代码height:0px;overflow:hidden;或者为DIV加上border属性。17. IE6下图片下有空隙产生解决这个BUG的技巧有很多,可以是改变html的排版,或者设置img为display:block或者设置vertical-align属性为vertical-ali
28、gn:top/bottom/middle/text-bottom 都可以解决.18. 对齐文本与文本输入框加上vertical-align:middle; 经验证,在IE下任一版本都不适用,而ff、opera、safari、chrome均OK!19. LI中内容超过长度后以省略号显示此技巧适用与IE、Opera、safari、chrom浏览器,FF暂不支持。20. 为什么web标准中IE无法设置滚动条颜色了解决办法是将body换成html /style21. 为什么无法定义1px左右高度的容器IE6下这个问题是因为默认的行高造成的,解决的技巧也有很多:例如:overflow:hidden zo
29、om:0.08 line-height:1px16.怎么样才能让层显示在FLASH之上呢解决的办法是给FLASH设置透明22. 链接(a标签)的边框与背景a链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照menubar, 给 a 和menubar设置高度是为了避免底边显示错位, 若不设 height, 可以在menubar中插入一个空格。23. 超链接访问过后hover样式就不出现的问题被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决技巧是改变CSS属性的排列顺序: L-V-H-A Cod
30、e: 24. FORM标签这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0,因此,如果想显示一致,所以最好在css中指定margin和 padding,针对上面两个问题,我的css中一般首先都使用这样的样式ul,formmargin:0;padding:0;。25. 属性选择器(这个不能算是兼容,是隐藏css的一个bug)piddivid 这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如pid中,所有p标签中有id的都是同样式的.26. 为什么FF下文本
31、无法撑开容器的高度标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义: height:auto!important; height:200px; min-height:200px; 布局时应注意的几个浏览器兼容性问题 这天一直在写DIV,浏览器兼容性还真麻烦特,别是火狐浏览器最难伺候!下面这篇文章解决了不少浏览器兼容性问题。希望对大家有帮助! IE VS FireFox CSS 兼容要点:DOCTYPE 影响 CSS
32、处理 FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式 FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width, 如:height:30px !i
33、mportant; /* 这个 height 样式只对FF起作用 */ div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 4.关于脚本,在xhtml1.1中不支持language属性,只需要把代码改为 div css xhtml xml Example Source Code Example Source Code 1. body, ul, li, h1, h2, h3, h4, h5, h6, p, form, dl, dt, dd margin:
34、 0px; padding: 0px; fontsize: 12px; fontweight: normal; ul liststyle: none; img borderstyle: none; 标签默认样式 设置textreal居中 直接把行高设置和文本框高度一样就行了 不过这种方式只能适用于一行 文字和textreal在同一行 可以把文字设置成距下边距多少 而不去调整textreal的格式 这样比较方便 2. #myElement filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); /* 第一行在IE6, IE7和IE
35、8下有效 */ msfilter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); /*第二行仅在IE8下有效 */ IE下 设置不透明度 其他浏览器 3. #myElement opacity: .7; filter:alpha(opacity=0); 4. 分割线样式body 中加入overflow-y : visible页面滚动条去除1.图文混排,容易导致 扩展框问题.扩展框问题这样排版容易导致 扩展框问题. 尽量定义宽高给定值:* 浮动下降问题size=+0 加上 float:left; 即可 2.IE6的双倍边距BUG :解决
36、办法是加上display:inline定义页面内容显示方式的属性有两个:display属性和visibility属性。display属性是用来确定页面元素是否显示和显示方式。display 属性规定元素应该生成的框的类型。display属性的取值很多,我们仅将比较常用的一些做一下介绍。none:隐藏对象,同时元素所占有的空间也被清除了。block:定义元素为块对象。inline:定义元素为内联对象。将对象强制作为内联对象呈递,从对象中删除行list-item:定义元素为列表项目。inline-table:CSS2未支持。将表格显示为无前后换行的内联对象或内联容器所有可视的文档对象都是块对象(b
37、lock element)或者内联对象(inline element)。例如, div 是一个块对象。 span 是一个内联对象。块对象的特征是从新的一行开始且能包含其他块对象和内联对象。内联对象被呈递时不会从新行开始,能够包含其他内联对象和数据。改变此属性值对其周围内容布局的影响可能是:在属性值设为 block 的对象后面添加新行。从属性值设为 inline 的对象中删除一行。隐藏属性值设为 none 的对象并释放其在文档中的物理空间。3.IE6下为什么图片下方有空隙产生解决这个BUG的方法也有很多,可以是改变html的排版,或者设置img 为display:block或者设置vertica
38、l-align属性为vertical-align:top | bottom |middle |text-bottom都可以解决.4.IE6下这两个层中间怎么有间隙这个IE的3PX BUG也是经常出现的,解决的办法是给.right也同样浮动 float:left 或者相对IE6定义.left5.如何对齐文本与文本输入框遇到此种问题,设置文本框的 vertical-align:middle 就可以了6.为什么FF下文本无法撑开容器的高度size=+0 标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-heig
39、ht:200px; 这里为了照顾不认识min-height的IE6 可以这样定义:height:auto!important;height:200px;min-height:200px;7.怎么样才能让层显示在FLASH之上呢解决的办法是给FLASH设置透明或者8.怎样使一个层垂直居中于浏览器中使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以二.方法二:首先在父级元素定义text-align: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上margin-right:
40、auto; margin-left: auto; 需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,只要在每个拆出的div里定义margin-right: auto; margin-left: auto;就可以了。width:300px;margin-left:auto;margin-right:auto;9.针对firefox ie6 ie7的css样式现在大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!找到一个针对IE7不错的hack方式就是使用*+html,现在用IE7浏览一下,应该没有问题了。现在写一个CSS可以这样:#1 color: #333; * html #1 color: #666; *+html #1 color: #999; 那么在firefox下字体颜色显示为#333,IE6下字体颜色显示为#666,IE7下字体颜色显示为#999。10.页面的最小宽度min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能