1、JavaScriptjavascript
1.HTML对象获取问题css
FireFox:document.getElementById("idName");html
IE:document.idName或者document.getElementById("idName");java
解决办法:统一使用document.getElementById("idName");web
2.const问题chrome
FireFox下,可使用const关键字或者var关键字来定义常量express
IE下,只能使用var关键字来定义常量浏览器
解决:统一使用var关键字来定义常量app
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);来判断使用相应的属性
4.window.location.href问题
IE或者FireFox2.0.x下,可使用window.location或window.location.href
FireFox1.5.x下,只能使用window.location
解决:使用window.location来代替window.location.href
5.frame问题
如下面的frame为例:
<frame src = ''xxx.html' id="frameId" name="frameName" />
(1)访问frame对象:
IE使用window.frameId或者window.frameName来访问这个frame对象,frameId和frameName能够同名
FireFox只能使用window.frameName来访问frame对象
另,在IE和FireFox中均可以使用window.document.getElementById("frameId")来访问这个frame对象
(2)切换frame内容
在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下,可经过showModelDialog和showModelessDialog打开模态和非模态窗口,Firefox下则不能
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口
若是须要将子窗口中的参数传递回父窗口,能够在子窗口中使用window.opener来访问父窗口
例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";
7.firefox与IE的父元素(parentElement)的区别
IE:obj.parentElement
firefox:obj.parentNode
解决方法:由于firefox何IE都支持DOM,所以使用obj.parentNode
8.document.formName.item("itemName")问题
IE下,可使用document.formName.item(”itemName”) 或document.formName.elements ["elementName"];Firefox 下,只能使用document.formName.elements["elementName"]。
解决方法:统一使用document.formName.elements["elementName"]。
9. 集合类对象问题
问题说明:IE下,可使用 () 或 [] 获取集合类对象;Firefox下,只能使用 [ ]获取集合类对象。
解决方法:统一使用 [] 获取集合类对象。
10. 自定义属性问题
问题说明:IE下,可使用获取常规属性的方法来获取自定义属性,也可使用getAttribute() 获取自定义属性;Firefox下,只能使用getAttribute() 获取自定义属性。
解决方法:统一经过getAttribute() 获取自定义属性。
11. input.type属性问题
问题说明:IE下input.type属性为只读;可是Firefox下input.type属性为读写。
解决办法:不修改input.type属性。若是必需要修改,能够先隐藏原来的input,而后在一样的位置再插入一个新的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标签被浏览器彻底读入以后才存在。
[注] 这个问题还没有实际验证,待验证后再来修改。
[注] 经验证,IE六、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 = 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.appendChild(cell);[注] 因为不多使用JS直接操做表格,这个问题没有碰见过。建议使用JS框架集来操做table,如JQuery。
16. 对象宽高赋值问题
问题说明:FireFox中相似obj.style.height = imgObj.height的语句无效。
2、CSS
cursor:hand VS cursor:pointer
firefox不支持hand,但ie支持pointer
解决方法: 统一使用pointer
17. innerText在IE中能正常工做,但在FireFox中却不行.
需用textContent。
解决方法:
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById('element').innerText = "my text";
} else{
document.getElementById('element').textContent = "my text";
}
18. CSS透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
opacity 透明,子元素会继承透明属性。解决方式:一、使用 background:rgba(0,0,0,.6) //IE8及如下无效果。 二、使用定位,背景色与子元素处于同级关系。
19. css中的width和padding
在IE7和FF中width宽度不包括padding,在Ie6中包括padding.
20. 元素水平居中问题
FF: margin:0 auto;
IE: 父级{ text-align:center; }
21. Div的垂直居中问题
vertical-align:middle; 将行距增长到和整个DIV同样高:line-height:200px; 而后插入文字,就垂直居中了。缺点是要控制内容不要换行。
22. margin加倍的问题
设置为float的div在ie下设置的margin-left会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline;
例如:
<div id=”imfloat”>
相应的css为
#imfloat{
float:left;
margin:5px;
display:inline;}
23. 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;}
24. 页面的最小宽度
如上一个问题,IE不识别min,要实现最小宽度,可用下面的方法:
#container{ min-width: 600px; width:expression(document.body.clientWidth< 600? "600px": "auto" );}
第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上经过Javascript的判断来实现最小宽度。
25. DIV浮动IE文本产生3象素的bug
左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.
#box{ float:left; width:800px;}
#left{ float:left; width:50%;}
#right{ width:50%;}
*html #left{ margin-right:-3px; //这句是关键}
<div id="box">
<div id="left"></div>
<div id="right"></div>
</div>
26. IE捉迷藏的问题
当div应用复杂的时候每一个栏中又有一些连接,DIV等这个时候容易发生捉迷藏的问题。
有些内容显示不出来,当鼠标选择这个区域时发现内容确实在页面。
解决办法:对#layout使用line-height属性或者给#layout使用固定高和宽。页面结构尽可能简单。
27. 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后面作一个统一的背景,譬如: <div id=”page”><div id=”left”></div><div id=”center”></div><div id=”right”></div></div>好比咱们要将page的背景设置成蓝色,以达到全部三栏的背景颜色是蓝色的目的,可是咱们会发现随着left center right的向下拉长,而page竟然保存高度不变,问题来了,缘由在于page不是float属性,而咱们的page因为要居中,不能设置成float,因此咱们应该这样解决:<div id=”page”><div id=”bg” style=”float:left;width:100%”><div id=”left”></div><div id=”center”></div><div id=”right”></div></div></div>再嵌入一个float left而宽度是100%的DIV解决之。或者另外一种方法:用选择器(:after)在page以后插入一个空标签,并清除浮动.page:after { content: ""; display: table; clear: both; }④万能float 闭合(很是重要!) 关于 clear float 的原理可参见 [How To Clear Floats Without Structural Markup],将如下代码加入Global CSS 中,给须要闭合的div加上class="clearfix" 便可,屡试不爽。.clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; } .clearfix { display:inline-block; } .clearfix {display:block;} 或者这样设置:.hackbox{ display:table; //将对象做为块元素级的表格显示}28. 高度不适应高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或padding时。例:#box { } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } <div id="box"><p>p对象中的内容</p></div>解决技巧:在P对象上下各加2个空的div对象CSS代码{height:0px;overflow:hidden;}或者为DIV加上border属性。29. IE6下图片下有空隙产生解决这个BUG的技巧有不少,能够是改变html的排版,或者设置img为display:block或者设置vertical-align属性为vertical-align:top/bottom/middle/text-bottom 均可以解决.30. 对齐文本与文本输入框加上vertical-align:middle; <style type="text/css"><!--input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --></style>经验证,在IE下任一版本都不适用,而ff、opera、safari、chrome均OK!31. LI中内容超过长度后以省略号显示此技巧适用与IE、Opera、safari、chrom浏览器,FF暂不支持。<style type="text/css"><!--li { width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden; }--></style>32. 为何web标准中IE没法设置滚动条颜色了解决办法是将body换成html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><style type="text/css"><!-- html { scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; } --></style>33. 为何没法定义1px左右高度的容器IE6下这个问题是由于默认的行高形成的,解决的技巧也有不少:例如:overflow:hidden zoom:0.08 line-height:1px16.怎么样才能让层显示在FLASH之上呢解决的办法是给FLASH设置透明<param name="wmode" value="transparent" />34. 连接(a标签)的边框与背景a连接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照menubar, 给 a 和menubar设置高度是为了不底边显示错位, 若不设 height, 能够在menubar中插入一个空格。35. 超连接访问事后hover样式就不出现的问题被点击访问过的超连接样式不在具备hover和active了,不少人应该都遇到过这个问题,解决技巧是改变CSS属性的排列顺序: L-V-H-A Code: <style type="text/css"><!--a:link {} a:visited {} a:hover {} a:active {} --></style>36. FORM标签这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0,所以,若是想显示一致,因此最好在css中指定margin和 padding,针对上面两个问题,个人css中通常首先都使用这样的样式ul,form{margin:0;padding:0;}。37. 属性选择器(这个不能算是兼容,是隐藏css的一个bug)p[id]{}div[id]{} 这个对于IE6.0和IE6.0如下的版本都隐藏,FF和OPera做用.属性选择器和子选择器仍是有区别的,子选择器的范围从形式来讲缩小了,属性选择器的范围比较大,如p[id]中,全部p标签中有id的都是一样式的.38. 为何FF下文本没法撑开容器的高度标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开须要怎样设置呢?办法就是去掉height设置min-height:200px; 这里为了照顾不认识min-height的IE6 能够这样定义:{ height:auto!important; height:200px; min-height:200px; } 39 IE和FireFox 对空格的尺寸解释不一样,FireFox为4px,IE为8px; FireFox对div与div之间的空格是忽略的,可是IE是处理的。所以在两个相邻div之间不要有空格跟回车,不然可能形成不一样浏览间之间格式不正确,好比著名的3px误差(多个img标签连着,而后定义float: left;结果在firefox里面正常,而IE里面显示的每一个img都相隔了3px。我把标签之间的空格都删除都没有做用。解决方法是在img外面套li,而且对li定义margin: 0; 避免方式:在必要的时候不要无视 list 标签)并且缘由难以查明。40. 条件注释<link rel="stylesheet" type="text/css" href="css.css" /><!--[if IE 7]><link rel="stylesheet" type="text/css" href="ie7.css" /><![endif]--><!--[if lte IE 6]><link rel="stylesheet" type="text/css" href="ie.css" /><![endif]-->lte -- 小于等于lt -- 小于gte -- 大于等于gt -- 大于! -- 不等于41.强制渲染<meta http-equiv=X-UA-Compatible content=IE=EmulateIE7> //这句话的意思是强制使用IE7模式来解析网页代码!<meta http-equiv=“X-UA-Compatible” content=“IE=8″><meta http-equiv=“X-UA-Compatible” content=“chrome=1″ /> //Google Chrome Frame也可让IE用上Chrome的引擎<meta http-equiv=“X-UA-Compatible” content=“IE=EmulateIE7″><!– IE7 mode –> 或者 <meta http-equiv=“X-UA-Compatible” content=“IE=7″><!– IE7 mode –> //强制IE8使用IE7模式来解析<meta http-equiv=“X-UA-Compatible” content=“IE=6″><!– IE6 mode –> <meta http-equiv=“X-UA-Compatible” content=“IE=5″><!– IE5 mode –> //强制IE8使用IE6或IE5模式来解析<meta http-equiv=“X-UA-Compatible” content=“IE=5; IE=8″ /> //一个特定版本的IE支持所要求的兼容性模式多于一种42.js兼容文件使IE5,IE6兼容到IE7模式(推荐)<!–[if lt IE 7]><script src=”http://ie7-js.googlecode.com/svn/version/2.0(beta)/IE7.js” type=”text/javascript”></script><![endif]–>使IE5,IE6,IE7兼容到IE8模式<!–[if lt IE 8]><script src=”http://ie7-js.googlecode.com/svn/version/2.0(beta)/IE8.js” type=”text/javascript”></script><![endif]–>使IE5,IE6,IE7,IE8兼容到IE9模式<!–[if lt IE 9]><script src=”http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js”></script><![endif]–>43 浏览器识别符p{ _color:red; } IE6 专用*html p{ color:#red; } IE6 专用p{ +color:red; } IE6,7 专用p{ *color:red; } IE6,7 专用*html p{ color:red; } IE6,7 专用p{*+color: red;} IE7 专用Body> p{ color: red; } 屏蔽 IE6p{ color:red\9; } IE8 Firefox: -moz-Safari: -webkit-Opera: -o-IE: -ms-