admin 管理员组文章数量: 1086019
2024年3月9日发(作者:web标准主要包括那三个方面)
1 / 16
浏览器兼容新问题
W3C对标准的推进,Firefox,Chrome,Safari,Opera的出现,结束了IE雄霸天下的日子。
然而,这对开发者来说,是好事,也是坏事。
说它是好事,是因为浏览器厂商为了取得更多的市场份额,会促使各浏览器更符合W3C标准,而得到更好的兼容性,并且,不同浏览器的扩展功能(例如 -moz,-webkit开头的样式),对W3C标准也是个推进;说它是坏事,因为,多个浏览器同时存在,这些浏览器在处理一个相同的页面时,表现有时会有差异。这种差异可能很小,甚至不会被注意到;也可能很大,甚至造成在某个浏览器下无法正常浏览。我们把引起这些差异的问题统称为“浏览器兼容性问题”。而正是这些“浏览器兼容性问题”,无形中给我们的开发增加了不少难度。
从浏览器内核的角度 来看,浏览器兼容性问题可分为以下三类:
1. 渲染相关:和样式相关的问题,即体现在布局效果上的问题。
2. 脚本相关:和脚本相关的问题,包括JavaScript和DOM、BOM方面的问题。对于某些浏览器的功能方面的特性,也属于这一类。
3. 其他类别:除以上两类问题外的功能性问题,一般是浏览器自身提供的功能,在内核层之上的。
例如下面的页面,是一个渲染相关的问题:
在各个浏览器中都表现的不同,这就属于兼容性问题。
造成浏览器兼容性问题的根本原因就是浏览器各浏览器使用了不同的内核,并且它们处理同一件事情的时候思路不同。
现今常见的浏览器及其排版引擎(又称渲染引擎)及脚本引擎,如下:
2 / 16
而造成浏览器兼容性问题的常见原因则是设计师写出了不规范的代码,不规范的代码会使不兼容现象更加突出。
例如:
不规则的嵌套:
HTML code
DIV 中直接嵌套 LI 元素是不合标准的,LI 应该处于 UL 内。此类问题常见的还有 P 中嵌套 DIV, TABLE等元素。
不规范的DOM接口和属性设置:
JScript code
.a_=35;
上面代码中top的值,其实应该是一个字符串值,需有单位。例如:35px。
总之,人为的原因也占很大一部分。而人为造成兼容性问题的原因,除了粗心之外,大都源于浏览器bug的存在,和开发者对标准的不了解。
比如,如果要做一个功能,功能是想让鼠标悬停在 IMG 元素上方时,可以出现提示信息,经常针对 IE
做开发的人,可能会使用 IMG 元素的 “alt” 属性,但其他浏览器中就是不给 ‘alt’ 属性面子。因为
W3C 标准中规定要去做这件事的属性是 ”title“,大多浏览器符合标准,IE 不符合,这是 IE 浏览器内核的问题;开发者不知道 ”title“ 才是正解,不遵循标准去写代码,是开发者的问题。所以,一个问题分两半,浏览器和开发者都有责任。
既然都有责任,就都有义务去解决兼容性问题。那么,从浏览器的角度来讲,它的厂商应该修复浏览器的bug和不合标准的地方,当某一天 IE 的 ”alt“ 不能用于提示了,还有人用这个错误的属性去显示提示么? 从开发者角度来讲,多了解标准,了解浏览器兼容性问题,就可以在开发的过程中,有效的避开兼容性问题,让你的页面在所有浏览器中畅通无阻。
废话少说,下面就讲讲如何有效的避免一些兼容性问题。
➢
JAVASCRIPT ..................................................................................................................................................... 4
3 / 16
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
➢
HTML对象获取问题 .......................................................................................................................... 5
const问题 ........................................................................................................................................... 5
event.x与event.y问题 ...................................................................................................................... 5
问题 ................................................................................................................. 5
frame问题 .......................................................................................................................................... 5
模态和非模态窗口问题 ..................................................................................................................... 6
firefox与IE的父元素(parentElement)的区别 .................................................................................. 6
(”itemName”) 问题 ................................................................................ 6
集合类对象问题................................................................................................................................. 6
自定义属性问题................................................................................................................................. 7
属性问题 ........................................................................................................................... 7
ment问题 ....................................................................................................................... 7
body载入问题 ................................................................................................................................... 7
事件委托方法 .................................................................................................................................... 8
Table操作问题 ................................................................................................................................... 8
对象宽高赋值问题............................................................................................................................. 8
CSS ............................................................................................................................................................... 8
1.
2.
3.
4.
5.
6.
cursor:hand VS cursor:pointer ...................................................................................................... 8
innerText在IE中能正常工作,但在FireFox中却不行. ................................................................. 8
CSS透明 .............................................................................................................................................. 9
css中的width和padding ................................................................................................................. 9
FF和IE BOX模型解释不一致导致相差 9
IE5 和IE6的BOX解释不一致 .......................................................................................................... 9
4 / 16
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ul和ol列表缩进问题...................................................................................................................... 10
元素水平居中问题........................................................................................................................... 10
Div的垂直居中问题 ........................................................................................................................ 10
margin加倍的问题 .......................................................................................................................... 10
IE与宽度和高度的问题 ................................................................................................................... 11
页面的最小宽度............................................................................................................................... 11
DIV浮动IE文本产生3象素的bug ................................................................................................ 11
IE捉迷藏的问题............................................................................................................................... 12
float的div闭合;清除浮动;自适应高度 ......................................................................................... 12
高度不适应 ...................................................................................................................................... 13
IE6下图片下有空隙产生 ................................................................................................................. 14
对齐文本与文本输入框 ................................................................................................................... 14
LI中内容超过长度后以省略号显示 ............................................................................................... 14
为什么web标准中IE无法设置滚动条颜色了 ............................................................................. 15
为什么无法定义1px左右高度的容器 ........................................................................................... 15
链接(a标签)的边框与背景 ............................................................................................................. 15
超链接访问过后hover样式就不出现的问题 ............................................................................... 16
FORM标签 ....................................................................................................................................... 16
属性选择器(这个不能算是兼容,是隐藏css的一个bug) .............................................................. 16
为什么FF下文本无法撑开容器的高度 ......................................................................................... 16
➢ JAVASCRIPT
5 / 16
1. HTML对象获取问题
FireFox:mentById("idName");
ie:或者mentById("idName").
解决办法:统一使用mentById("idName");
2. const问题
说明:Firefox下,可以使用const关键字或var关键字来定义常量;
IE下,只能使用var关键字来定义常量.
解决方法: 统一使用var关键字来定义常量.
3. event.x与event.y问题
说明:IE下,event对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
解决方法:使用mX(mX = event.x ? event.x : ;)来代替IE下的event.x或者Firefox下的.
4. 问题
说明:IE或者Firefox2.0.x下,可以使用on或;
Firefox1.5.x下,只能使用on.
解决方法:使用on来代替.
5. frame问题
以下面的frame为例:
(1)访问frame对象:
IE:使用d或者ame来访问这个frame对象. frameId和frameName可以同名。
6 / 16
Firefox:只能使用ame来访问这个frame对象.
另外,在IE和Firefox中都可以使用mentById("frameId")来访问这个frame对象.
(2)切换frame内容:
在 IE和Firefox中都可以使用mentById("testFrame").src = ""或on = ""来切换frame的内容.
如果需要将frame中的参数传回父窗口(注意不是opener,而是parent frame),可以在frame中使用parent来访问父窗口。例如:="Aqing";
6. 模态和非模态窗口问题
说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.
解决方法:直接使用(pageURL,name,parameters)方式打开新窗口。
如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用来访问父窗口.
例如:var parWin = ; mentById("Aqing").value = "Aqing";
7. firefox与IE的父元素(parentElement)的区别
IE:Element
firefox:Node
解决方法: 因为firefox与IE都支持DOM,因此使用Node是不错选择.
8. (”itemName”) 问题
问题说明:IE下,可以使用 (”itemName”) 或 ts
["elementName"];Firefox 下,只能使用ts["elementName"]。
解决方法:统一使用ts["elementName"]。
9. 集合类对象问题
7 / 16
问题说明:IE下,可以使用 () 或 [] 获取集合类对象;Firefox下,只能使用 [ ]获取集合类对象。
解决方法:统一使用 [] 获取集合类对象。
10. 自定义属性问题
问题说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用 getAttribute() 获取自定义属性;Firefox下,只能使用 getAttribute() 获取自定义属性。
解决方法:统一通过 getAttribute() 获取自定义属性。
11. 属性问题
问题说明:IE下 属性为只读;但是Firefox下 属性为读写。
解决办法:不修改 属性。如果必须要修改,可以先隐藏原来的input,然后在同样的位置再插入一个新的input元素。
12. ment问题
问题说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性。
解决方法:使用srcObj = ment ? ment : ;
如果考虑第8条问题,就改用myEvent代替event即可。
13. body载入问题
问题说明:Firefox的body对象在body标签没有被浏览器完全读入之前就存在;而IE的body对象则必须在body标签被浏览器完全读入之后才存在。
[注] 这个问题尚未实际验证,待验证后再来修改。
[注] 经验证,IE6、Opera9以及FireFox2中不存在上述问题,单纯的JS脚本可以访问在脚本之前已经载入的所有对象和元素,即使这个元素还没有载入完成。
8 / 16
14. 事件委托方法
问题说明:IE下,使用 = inject; 其中function inject()在这之前已被实现;在Firefox下,使用 = inject();
解决方法:统一使用 =new Function(’inject()’); 或者 =
function(){/* 这里是代码 */}
[注意] Function和function的区别。
15. Table操作问题
问题说明:ie、firefox以及其它浏览器对于 table 标签的操作都各不相同,在ie中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChild方法也不管用。
解决方法://向table追加一个空行:
var row = Row(-1);var cell = Element("td");TML = "";ame =
"XXXX";Child(cell);[注] 由于俺很少使用JS直接操作表格,这个问题没有遇见过。建议使用JS框架集来操作table,如JQuery。
16. 对象宽高赋值问题
问题说明:FireFox中类似 = 的语句无效。
➢ CSS
1. cursor:hand VS cursor:pointer
firefox不支持hand,但ie支持pointer
解决方法: 统一使用pointer
2. innerText在IE中能正常工作,但在FireFox中却不行.
9 / 16
需用textContent。
解决方法:
if(f("Explorer") > -1){
mentById('element').innerText = "my text";
} else{
mentById('element').textContent = "my text";
}
3. CSS透明
IE:filter:progid:(style=0,opacity=60)。
FF:opacity:0.6。
4. css中的width和padding
在IE7和FF中width宽度不包括padding,在Ie6中包括padding.
5. FF和IE BOX模型解释不一致导致相差2px
{width:100;border 1px;}
ie理解为 = 100
ff理解为 = 100 + 1*2 = 102 //加上边框2px
解决方法:div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反, IE不能识别!important这个属性,但别的浏览器可以识别。所以在IE下其实解释成这样:div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
6. IE5 和IE6的BOX解释不一致
IE5下div{width:300px;margin:0 10px 0 10px;}
div 的宽度会被解释为300px-10px(右填充)-10px(左填充),最终div的宽度为280px,而在IE6和其他浏览器上
10 / 16
宽度则是以 300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
7. ul和ol列表缩进问题
消除ul、ol等列表的缩进时,样式应写成:list-style:none;margin:0px;padding:0px;
经验证,在IE中,设置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:center; }
9. Div的垂直居中问题
vertical-align:middle; 将行距增加到和整个DIV一样高:line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行。
10. margin加倍的问题
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline;
例如:
相应的css为
#imfloat{
11 / 16
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/}
11. 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;}
12. 页面的最小宽度
如上一个问题,IE不识别min,要实现最小宽度,可用下面的方法:
#container{ min-width: 600px; width:expression(Width < 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; width:50%;}
#right{ width:50%;}
*html #left{ margin-right:-3px; //这句是关键}
12 / 16
14. IE捉迷藏的问题
当div应用复杂的时候每个栏中又有一些链接,DIV等这个时候容易发生捉迷藏的问题。
有些内容显示不出来,当鼠标选择这个区域是发现内容确实在页面。
解决办法:对#layout使用line-height属性 或者给#layout使用固定高和宽。页面结构尽量简单。
15. 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后面做一个统一的背景,譬如:
13 / 16
比如我们要将page的背景设置成蓝色,以达到所有三栏的背景颜色是蓝色的目的,但是我们会发现随着left center right的向下拉长,而page居然保存高度不变,问题来了,原因在于page不是float属性,而我们的page由于要居中,不能设置成float,所以我们应该这样解决:
再嵌入一个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; //将对象作为块元素级的表格显示}
16. 高度不适应
14 / 16
高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用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-align:top/bottom/middle/text-bottom 都可以解决.
18. 对齐文本与文本输入框
加上 vertical-align:middle;
经验证,在IE下任一版本都不适用,而ff、opera、safari、chrome均OK!
19. LI中内容超过长度后以省略号显示
15 / 16
此技巧适用与IE、Opera、safari、chrom浏览器,FF暂不支持。
20. 为什么web标准中IE无法设置滚动条颜色了
解决办法是将body换成html
"/TR/xhtml1/DTD/">
24. FORM标签
这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0,因此,如果想显示一致,所以最好在css中指定margin和 padding,针对上面两个问题,我的css中一般首先都使用这样的样式ul,form{margin:0;padding:0;}。
25. 属性选择器(这个不能算是兼容,是隐藏css的一个bug)
p[id]{}div[id]{}
这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.
26. 为什么FF下文本无法撑开容器的高度
标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min-height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义:
{
height:auto!important;
height:200px;
min-height:200px;
}
版权声明:本文标题:浏览器兼容性问题及解决方案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1709956979a551147.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
更多相关文章
一个js的脚本,可以直接放到浏览器执行操作
const data = '{"group":{"allOf":[]},"start":0,"limit":30,"orders"
vs code设置默认浏览器
安装open in browser插件 使用默认浏览器打开 Open in Default Browsers:使用默认浏览器打开 快捷键:altB 修改默认浏览器 依次打开࿱
浏览器输入url后经历的过程
一般会经历以下几个过程: 1、首先,在浏览器地址栏中输入url 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页
联想拯救者翻墙后浏览器无法联网,QQ却可以正常使用的解决方法
1.打开“控制面板” 2.点击“网络和Internet” 3.在Internet选项中点击“管理浏览器加载项” 4.点击“连接”——局域网设置 5.将“局域网设置”里的方格里的 √ 全部取消即可 6.再次打开浏览器,
Vue 实现跳转浏览器新的标签页
1: 一般单页面应用, vue 都是通过vue-router 来做跳转(this.$router.push, this.$router.replace࿰
matlab 帮助文档在内置浏览器显示
matlab帮助文档设置,帮了我的大忙,感谢博主! https:blog.csdnchichuhearticledetails78977465
通过js就可以判断当前页面是在什么浏览器打开的
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title><title> <h
Ubuntn设置程序开机启动 指定浏览器
setp1:设置jar开机启动(非服务启动方式) 1、新建启动脚本 auto-start.sh (并基于权限命令: sudo c
react 组件监听浏览器窗口变化
react 组件监听浏览器窗口变化 react 组件实现监听浏览器窗口变化,需要在window对象中添加监听事件,事件中参数1是监听的事件,参数2为事件调用的方法。
safari浏览器打不开localhost(http)本地环境,将资源指向了https
项目场景: 使用umi(2.0)启动项目进行本地开发 问题描述 例如:使用safari浏览器访问本地地址后报错如下(谷歌浏览器正常) 解决流程: 看报错资源指向的地址不
【双核浏览器ChromeCore播放视频出错,重影、有声音但黑屏、缺角······】
目录 一、【问题】 二、【解决方法】 1、找客服【首选】 2、去官网下载新版本 安装 (或者找客服要安装包) 一、【问题】 这两天用双核浏览器打开哔哩哔哩播放视频时,却
Edge浏览器访问知乎 提示浏览器版本过低
运行:gpedit.msc 计算机配置-管理模块-windows组件-Internet Explorer-自定义用户代理字符串 改为未配置。
html浏览器图片不显示图片,教你网页图片显示不出来怎么办
网页是构成网站的基本元素,是一个包含HTML标签的纯文本文件,而文字与图片是构成一个网页的最基本的元素。今天,小编就给大家介绍一下网页图片显示不出来的解决方法
精准控制:在统信UOS_麒麟KYLINOS上安装指定版本号的浏览器
原文链接:精准控制:在统信UOS麒麟KYLINOS上安装指定版本号的浏览器 大家好!在使用基于Debian的Linux发行版,如统信UOS和麒麟KYL
100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结
文章目录 一、Selenium框架环境搭建1. 下载模块2. 安装浏览器驱动WebDriver二、基础操作1. 打开浏览器2. 无界面模式3. 元素定位4. 元素操作5. 前进后退6. 执行js7.页面等待隐式等待(常用)显式等待(了解)三
【PIMF】OpenHarmony浏览器上新,在开发板上优雅地浏览网页
本篇① ② ①在Dayu200开发板运行的OpenHarmony3.1release上标准系统浏览网页②安装OpenHarmony3.1release应用(浏览器)保姆级教学
IDM下载器插件 让浏览器不在限速
IDM下载器 可提速(2到n倍)的使用方法,让浏览器不在限速 前言 IDM 最佳的 Windows 下载工具 官方网址: http:www.internetdownloadmanager.尽管现在要用到「下载工具」的时间相比
uget + aria2接管浏览器下载(附源中缺少uget-chrome-wrapper的解决办法).md
# 1. 安装 sudo apt install uget && sudo apt install aria2 2. uget设置 1) 启用aria2 插件 编辑->设置->插件
浏览器弹不出上网登录页面
1、浏览器高级设置,将[禁止弹出页面]这一功能关掉。 2、浏览器的代理关掉,把[禁止cookie]关掉。 3、关闭防火墙。 今天是插上网线怎么都连不上网,我看笔记本端口的
windows10下的浏览器userAgent
windows10 下各浏览器userAgent 版本号自行理解 8 -。- 浏览器userAgentChromeMozilla5.0 (Windows NT 10.0; WOW64) AppleWebKit537.36 (KHTML
推荐文章
Passing HTML string to JavaScript function - Stack Overflow
优盘弹出文件或目录损坏且无法读取实测解决教程
html - how to validation the input (type="file") by javascript for upload images only? - Stack Overflow
javascript - Google maps marker not showing up - Stack Overflow
javascript - Uncheck checkbox with jquery? - Stack Overflow
热门文章
最新文章
-
windows配置开机自启动软件或脚本
25天前
发表评论