公文素材库 首页

有关JS兼容性的工作总结

时间:2019-05-28 22:13:50 网站:公文素材库

有关JS兼容性的工作总结

关于JS兼容性的总结

在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Firefox的出世不知道又要给我们添多少乱子。浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本。

JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的userAgent属性来判断的。在许多情况下,值判断出浏览器类型之后,还需要判断浏览器版本才能处理兼容性问题,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道。

在不同的浏览器中对js的支持程度,语法要求都不大一样!在网上查寻资料,我目前暂时认识比较好的判断代码如下:

functiongetOs(){

varOsObject="";

if(navigator.userAgent.indexOf("MSIE")>0){return"MSIE";}

if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){return"Firefox";}

if(isSafari=navigator.userAgent.indexOf("Safari")>0){return"Safari";}

if(isCamino=navigator.userAgent.indexOf("Camino")>0){return"Camino";}

if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){return"Gecko";}}

alert("您的浏览器类型为:"+getOs());

因此在扩展的代码中首先要对浏览器进行了判断,判断它是否为Firefox,我添加的代码语句为:

FF=(navigator.userAgent.indexOf("Firefox")>0)?true:false;然后对初始状态进行设置,在W3C标准下,兼容FF的写法,在initIt()方法中扩展了:else{tempColl=document.getElementsByTagName("DIV");for(i=0;ielse{whichEl.style.display="none";whichIm.src="images/hdclose.gif";}

event.cancelBubble=true;}

其中,对event事件这里以方法的形式来调用://得到EVENT对象functiongetEvent(){if(document.all)

returnwindow.event;func=getEvent.caller;while(func!=null){

vararg0=func.arguments[0];if(arg0){

if((arg0.constructor==Event||arg0.constructor==MouseEvent)||(typeof(arg0)=="object"&&arg0.preventDefault&&arg0.stopPropagation)){returnarg0;}}

func=func.caller;}

returnnull;}

扩展阅读:CSSJS兼容性小结

1、发现IE下input标签的id属性默认和name属性相同,而Firefox必须明确写出id属性的名称否则不能使用id属性。

如:在IE下如下代码可以执行而在Firefox下却不可以:

alert(document.getElementById("username").value);

必须改为如下代码才可以:

以下为转载:

1.document.formName.item("itemName")问题

说明:IE下,可以使用document.formName.item("itemName")或document.formName.elements["elementName"];

Firefox下,只能使用document.formName.elements["elementName"].解决方法:统一使用document.formName.elements["elementName"].2.集合类对象问题

说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象.

解决方法:统一使用[]获取集合类对象.3.自定义属性问题

说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.

解决方法:统一通过getAttribute()获取自定义属性.4.eval("idName")问题

说明:IE下,,可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象.

解决方法:统一用getElementById("idName")来取得id为idName的HTML对象.5.变量名与某HTML对象ID相同的问题

说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。

解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.6.const问题

说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量.

解决方法:统一使用var关键字来定义常量.7.input.type属性问题

说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.8.window.event问题

说明:window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用.Firefox必须从源处加入event作参数传递。Ie忽略该参数,用window.event来读取该event。解决方法:IE&Firefox:

Submitted(event)"/>…

functionSubmitted(evt){

evt=evt?evt:(window.event?window.event:null);}

window.open("b.html","","modal=yes,width=500,height=500,resizable=no,scrollbars=no");

9.event.x与event.y问题

说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.

解决方法:使用mX(mX=event.x?event.x:event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.10.event.srcElement问题

说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.

解决方法:使用obj(obj=event.srcElement?event.srcElement:event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.请同时注意event的兼容性问题。11.window.location.href问题

说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.解决方法:使用window.location来代替window.location.href.12.模态和非模态窗口问题

说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.

解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口.例如:varparWin=window.opener;parWin.document.getElementById("Aqing").value="Aqing";13.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内容:在IE和Firefox中都可以使用window.document.getElementById("testFrame").src="xxx.html"或window.frameName.location="xxx.html"来切换frame的内容.

如果需要将frame中的参数传回父窗口(注意不是opener,而是parentframe),可以在frme中使用parent来访问父窗口。例如:parent.document.form1.filename.value="Aqing";14.body问题

Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在.15.事件委托方法

IE:document.body.onload=inject;//Functioninject()在这之前已被实现Firefox:document.body.onload=inject();

16.firefox与IE的父元素(parentElement)的区别IE:obj.parentElementfirefox:obj.parentNode

解决方法:因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.

17.cursor:handVScursor:pointer

firefox不支持hand,但ie支持pointer解决方法:统一使用pointer

18.innerText在IE中能正常工作,但是innerText在FireFox中却不行.需用textContent。解决方法:

if(navigator.appName.indexOf("Explorer")>-1){

document.getElementById('element').innerText="mytext";}else{

document.getElementById('element').textContent="mytext";}

19.FireFox中设置HTML标签的style时,所有位置性和字体尺寸的值必须后跟px。这个ie也是支持的。

20.ie,firefox以及其它浏览器对于table标签的操作都各不相同,在ie中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChild方法也不管用。解决方法:

//向table追加一个空行:

varrow=otable.insertRow(-1);

varcell=document.createElement("td");cell.innerHTML="";cell.className="XXXX";row.appendChild(cell);21.padding问题

padding5px4px3px1pxFireFox无法解释简写,

必须改成padding-top:5px;padding-right:4px;padding-bottom:3px;padding-left:1px;22.消除ul、ol等列表的缩进时

样式应写成:list-style:none;margin:0px;padding:0px;其中margin属性对IE有效,padding属性对FireFox有效23.CSS透明IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。FF:opacity:0.6。24.CSS圆角

IE:不支持圆角。FF:-moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border-

radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-bottomright:4px;。25.CSS双线凹凸边框

IE:border:2pxoutset;。

FF:-moz-border-top-colors:#d4d0c8white;-moz-border-left-colors:#d4d0c8white;-moz-border-right-colors:#404040#808080;-moz-border-bottom-colors:#404040#808080;26.对select的options集合操作

枚举元素除了[]外,selectName.options.item()也是可以的,另外selectName.options.length,selectName.options.add/remove都可以在两种浏览器上使用。注意在add后赋值元素,否则会失败(本人试验如此)。27.XMLHTTP的区别//mf

if(window.XMLHttpRequest)//mf{

xmlhttp=newXMLHttpRequest()xmlhttp.

xmlhttp.open("GET",url,true)xmlhttp.send(null)}//ie

elseif(window.ActiveXObject)//codeforIE{

xmlhttp=newActiveXObject("Microsoft.XMLHTTP")if(xmlhttp){

xmlhttp.

xmlhttp.open("GET",url,true)xmlhttp.send()}}}

28.innerHTML的区别Firefox不支持innerHTML,解决办法可以如下rng=document.createRange();

el=document.getElementById(elementid);rng.setStartBefore(el);

htmlFrag=rng.createContextualFragment(content);

while(el.hasChildNodes())//清除原有内容,加入新内容el.removeChild(el.lastChild);el.appendChild(htmlFrag);29.img的src刷新问题

在IE下可以用可以刷新图片,但在FireFox下不行。主要是缓存问题,在地址后面加个随机数就解决了。编辑onclick事件代码如下:"this.src=this.src+'?'+Math.random()"30.obj.style.pixelLeft地问题

if(navigator.appName.indexOf("Explorer")>-1){//IEobj.style.pixelLeft=newX+8;obj.style.pixelTop=newY-5;}else{

obj.style.left=parseInt(newX)-155+"px";//Firefox对"px"要求严格obj.style.top=parseInt(newY)-135+"px";}

详细出处参考:

CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点。

php程序员站

常见兼容问题:

1.DOCTYPE影响CSS处理

2.FF:div设置margin-left,margin-right为auto时已经居中,IE不行

3.FF:body设置text-align时,div需要设置margin:auto(主要是margin-left,margin-right)方可居中

phperz.com

4.FF:设置padding后,div会增加height和width,但IE不会,故需要用!important多设一个height和width

5.FF:支持!important,IE则忽略,可用!important为FF特别设置样式phperz.com

6.div的垂直居中问题:vertical-align:middle;将行距增加到和整个DIV一样高line-height:200px;然后插入文字,就垂直居中了。缺点是要控制内容不要换行

7.cursor:pointer可以同时在IEFF中显示游标手指状,hand仅IE可以

8.FF:链接加边框和背景色,需设置display:block,同时设置float:left保证不换行。参照menubar,给a和menubar设置高度是为了避免底边显示错位,若不设height,可以在menubar中插入一个空格。

9.在mozillafirefox和IE中的BOX模型解释不一致导致相差2px解决方法:

div{margin:30px!important;margin:28px;}

注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:div{maring:30px;margin:28px}

重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;

10.IE5和IE6的BOX解释不一致IE5下

div{width:300px;margin:010px010px;}

div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改

div{width:300px!important;width/**/:340px;margin:010px010px}

关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)

11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义

ul{margin:0;padding:0;}就能解决大部分问题

注意事项:

1、float的div一定要闭合。

php程序员站

例如:(其中floatA、floatB的属性已经设置为float:left;)

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

这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在

之间加上

这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。并且将clear这种样式定义为为如下即可:.clear{

clear:both;}

此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。例如某一个wrapper如下定义:.colwrapper{

overflow:hidden;

phperz.com

zoom:1;

margin:5pxauto;}phperz.com

2、margin加倍的问题。

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。

解决方案是在这个div里面加上display:inline;例如:

相应的css为

#IamFloat{float:left;

margin:5px;/*IE下理解为10px*/

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

3、关于容器的包涵关系

很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。

4、关于高度的问题

如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)

5、最狠的手段-!important;如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下.tabd1{

background:url(/res/images/up/tab1.gif)no-repeat0px0px!important;/*StyleforFF*/

background:url(/res/images/up/tab1.gif)no-repeat1px0px;/*StyleforIE*/}

值得注意的是,一定要将xxxx!important这句放置在另一句之上,上面已经提过

CSSHack的原理是什么

由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。

比如IE6能识别下划线"_"和星号"*",IE7能识别星号"*",当不能识别下划线"_",而firefox两个都不能认识。等等

书写顺序,一般是将识别能力强的浏览器的CSS写在后面。下面如何写里面说得更详细些。

如何写CSSHack

比如要分辨IE6和firefox两种浏览器,可以这样写:div{

background:green;/*forfirefox*/*background:red;/*forIE6*/}

我在IE6中看到是红色的,在firefox中看到是绿色的。解释一下:

上面的css在firefox中,它是认识不了后面的那个带星号的东东是什么的,于是将它过滤掉,不予理睬,解析得到的结果是:div{background:green},于是理所当然这个div的背景是绿色的。

在IE6中呢,它两个background都能识别出来,它解析得到的结果是:div{background:green;background:red;},于是根据优先级别,处在后面的red的优先级高,于是当然这个div的背景颜色就是红色的了。CSShack:区分IE6,IE7,firefox区别不同浏览器,CSShack写法:区别IE6与FF:

background:orange;*background:blue;区别IE6与IE7:

background:green!important;background:blue;区别IE7与FF:

background:orange;*background:green;区别FF,IE7,IE6:background:orange;*background:green;_background:blue;

background:orange;*background:green!important;*background:blue;注:IE都能识别*;标准浏览器(如FF)不能识别*;IE6能识别*,但不能识别!important,IE7能识别*,也能识别!important;FF不能识别*,但能识别!important;IE6IE7FF*√√×!important×√√

浏览器优先级别:FF写;

或者,将div放入li中进行处理,这样就不会有空格的问题。(2)Margin加倍

IE:在使用float的情况下,IE的margin加倍。FF:正常显示。

建议:针对IE,添加display:inline;相应的css为#float{

float:left;

margin:5px;/*IE下理解为10px*/

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

4.鼠标位置处理

IE:获取事件鼠标位置时,IE用的是event.x和event.y,并且值在不加单位的情况下可以直接使用,IE提供默认单位;div.style.left=event.xdiv.style.top=event.y

此时,div显示的位置为鼠标的位置。

FF:获取事件鼠标位置时,Firefox用的是MouseEvent.pageX和MouseEvent.pageY,并且在不加单位的情况下直接赋值后,无效;必须添加单位。div.style.left=MouseEvent.pageXdiv.style.top=MouseEvent.pageY此时,div显示的位置为0,0.

建议:都添加单位,无论针对IE或者Firefox都有效。IE:div.style.left=event.x+"px"div.style.top=event.y+"px"

FF:div.style.left=MouseEvent.pageX+"px"div.style.top=MouseEvent.pageY+"px"

针对IE与Firefox这些不同,解决方案可以有多种,但是当问题直接解析模型的不同的时候,我们只能分别针对浏览器的不同而单独写针对于浏览器的方法。这也是写精致CSS所必须懂得的。

以上纯属个人愚见,希望对新学CSS的同学有所帮助。责编:奇侠|RSS收藏此页到365Key

暂无评论匿名评论相关文章

CSS兼容IE和Firefox的技巧大全日期:201*年11月15日作者:

CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技巧并整理了一下。对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE影响CSS处理,作为W3C的标准,一定要加DOCTYPE声明。

CSS技巧

1.div的垂直居中问题

vertical-align:middle;将行距增加到和整个DIV一样高line-height:200px;然后插入文字,就垂直居中了。缺点是要控制内容不要换行

2.margin加倍的问题

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline;例如:

<#divid=”imfloat”>相应的css为#imfloat{float:left;

margin:5px;/*IE下理解为10px*/

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

3.浮动ie产生的双倍距离

#box{float:left;width:100px;margin:000100px;//这种情况之下IE会产生200px的距离display:inline;//使浮动忽略}

这里细说一下block与inline两个元素:block元素的特点是,总是在新行上开始,高度,宽度,行高,边距都可以控制(块元素);Inline元素的特点是,和其他元素在同一行上,不可控制(内嵌元素);

#box{display:block;//可以为内嵌元素模拟为块元素display:inline;//实现同一行排列的效果diplay:table;

4IE与宽度和高度的问题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;}

5.页面的最小宽度

min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个<div>放到<body>标签下,然后为div指定一个类,然后CSS这样设计:#container{min-width:600px;width:expression(document.body.clientWidth<600?"600px":"auto");}第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通过Javascript的判断来实现最小宽度。

6.DIV浮动IE文本产生3象素的bug

左边对象浮动,右边采用外补丁的左边距来定位,右边对象内的文本会离左边有3px的间距.

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

*html#left{margin-right:-3px;//这句是关键}<divid="box">

<divid="left"></div><divid="right"></div></div>

7.IE捉迷藏的问题

当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。

有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。解决办法:对#layout使用line-height属性或者给#layout使用固定高和宽。页面结构尽量简单。

8.float的div闭合;清除浮动;自适应高度;

①例如:<#divid=”floatA”><#divid=”floatB”><#divid=”NOTfloatC”>这里的NOTfloatC并不希望继续平移,而是希望往下排。(其中floatA、floatB的属性已经设置为float:left;)

这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在<#divclass=”floatB”><#divclass=”NOTfloatC”>之间加上<#divclass=”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:5pxauto;}

③对于排版,我们用得最多的css描述可能就是float:left.有的时候我们需要在n栏的floatdiv后面做一个统一的背景,譬如:<divid=”page”>

<divid=”left”></div><divid=”center”></div><divid=”right”></div></div>

比如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但是我们会发现随着leftcenterright的向下拉长,而page居然保存高度不变,问题来了,原因在于page不是float属性,而我们的page由于要居中,不能设置成float,所以我们应该这样解决<divid=”page”>

<divid=”bg”style=”float:left;width:100%”><divid=”left”></div><divid=”center”></div><divid=”right”></div></div></div>

再嵌入一个floatleft而宽度是100%的DIV解决之

④万能float闭合(非常重要!)

关于clearfloat的原理可参见[HowToClearFloatsWithoutStructuralMarkup],将以下代码加入GlobalCSS中,给需要闭合的div加上class="clearfix"即可,屡试不爽./*ClearFix*/

.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}

.clearfix{display:inline-block;}/*HidefromIEMac*/.clearfix{display:block;}/*EndhidefromIEMac*//*endofclearfix*/

或者这样设置:.hackbox{display:table;//将对象作为块元素级的表格显示}

9.高度不适应

高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin或paddign时。例:

#box{background-color:#eee;}

#boxp{margin-top:20px;margin-bottom:20px;text-align:center;}<divid="box">

<p>p对象中的内容</p></div>

解决技巧:在P对象上下各加2个空的div对象CSS代码:.1{height:0px;overflow:hidden;}或者为DIV加上border属性。

10.IE6下为什么图片下有空隙产生

解决这个BUG的技巧也有很多,可以是改变html的排版,或者设置img为display:block或者设置vertical-align属性为vertical-align:topbottommiddletext-bottom都可以解决.

11.如何对齐文本与文本输入框

加上vertical-align:middle;<styletype="text/css"><!--input{

width:200px;height:30px;

border:1pxsolidred;vertical-align:middle;}-->

</style>

12.web标准中定义id与class有什么区别吗

一.web标准中是不容许重复ID的,比如divid="aa"不容许重复2次,而class定义的是类,理论上可以无限重复,这样需要多次引用的定义便可以使用他.

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

三.方便JS等客户端脚本,如果在页面中要对某个对象进行脚本操作,那么可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到它,这是相对浪费时间资源,远远不如一个ID来得简单.

13.LI中内容超过长度后以省略号显示的技巧

此技巧适用与IE与OP浏览器

<styletype="text/css"><!--li{

width:200px;

white-space:nowrap;

text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;}

-->

</style>

14.为什么web标准中IE无法设置滚动条颜色了

解决办法是将body换成html

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""-strict.dtd"><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><styletype="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>15.为什么无法定义1px左右高度的容器

IE6下这个问题是因为默认的行高造成的,解决的技巧也有很多,例如:overflow:hiddenzoom:0.08line-height:1px

16.怎么样才能让层显示在FLASH之上呢

解决的办法是给FLASH设置透明

<paramname="wmode"value="transparent"/>

17.怎样使一个层垂直居中于浏览器中

这里我们使用百分比绝对定位,与外补丁负值的技巧,负值的大小为其自身宽度高度除以二

<styletype="text/css"><!--div{

position:absolute;top:50%;lef:50%;

margin:-100px00-100px;width:200px;height:200px;

border:1pxsolidred;}-->

</style>FF与IE

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:

<styletype="text/css"><!--

a:link{}a:visited{}a:hover{}a:active{}-->

</style>

4.游标手指cursor

cursor:pointer可以同时在IEFF中显示游标手指状,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;}给定义死了,所以后面就不会为这个头疼了.

7.BOX模型解释不一致问题

在FF和IE中的BOX模型解释不一致导致相差2px解决技巧:div{margin:30px!important;margin:28px;}注意这两个margin的顺序一定不能写反,important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:div{maring:30px;margin:28px}重复定义的话按照最后一个来执行,所以不可以只写margin:xxpx!important;

#box{width:600px;//forie6.0-w\\idth:500px;//forff+ie6.0}

#box{width:600px!important//forffwidth:600px;//forff+ie6.0width/**/:500px;//forie6.0-}

8.属性选择器(这个不能算是兼容,是隐藏css的一个bug)

p[id]{}div[id]{}

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

9.最狠的手段-!important;

如果实在没有办法解决一些细节问题,可以用这个技巧.FF对于”!important”会自动优先解析,然而IE则会忽略.如下.tabd1{

background:url(/res/images/up/tab1.gif)no-repeat0px0px!important;/*StyleforFF*/

background:url(/res/images/up/tab1.gif)no-repeat1px0px;/*StyleforIE*/}

值得注意的是,一定要将xxxx!important这句放置在另一句之上,上面已经提过

10.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了。

11.为什么FF下文本无法撑开容器的高度

标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px;这里为了照顾不认识min-height的IE6可以这样定义:{

height:auto!important;height:200px;

min-height:200px;}

12.FireFox下如何使连续长字段自动换行

众所周知IE中直接使用word-wrap:break-word就可以了,FF中我们使用JS插入

的技巧来解决

<styletype="text/css"><!--div{

width:300px;

word-wrap:break-word;border:1pxsolidred;}-->

</style>

<divid="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

<scrīpttype="text/javascrīpt">/*<![CDATA[*/

functiontoBreakWord(el,intLen){varōbj=document.getElementById(el);varstrContent=obj.innerHTML;varstrTemp="";

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);/*]]>*/</scrīpt>

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

<?xmlversion="1.0"encoding="gb2312"?>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""-strict.dtd"><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>

<styletype="text/css">wenku_21({"font":{"be80383043323968011c927d0010015":"宋体","be80383043323968011c927d00201*5":"宋体"},"style":[{"t":"style","c":[1,2,3,4,5,6,7,8,0],"s":{"color":"#000000","font-size":"18"}},{"t":"style","c":[5,1],"s":{"font-family":"be80383043323968011c927d00201*5"}},{"t":"style","c":[3,4,6,7,8,2],"s":{"font-family":"be8038304332396801<![endif]-->

第三种,cssfilter的办法,以下为经典从国外网站翻译过来的。.

新建一个css样式如下:#item{

width:200px;height:200px;background:red;}

新建一个div,并使用前面定义的css的样式:<divid="item">sometexthere</div>

在body表现这里加入lang属性,中文为zh:<bodylang="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个人比较喜欢用第一种,简洁,兼容性比较好。

友情提示:本文中关于《有关JS兼容性的工作总结》给出的范例仅供您参考拓展思维使用,有关JS兼容性的工作总结:该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


有关JS兼容性的工作总结
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/626211.html
相关阅读
最近更新
推荐专题