Web前端中常见的浏览器兼容问题有哪些

Web前端中常见的浏览器兼容问题有哪些,第1张

使用Trident内核的浏览器:IE、Maxthon、TT; 使用Gecko内核的浏览器:Netcape6及以上版本、FireFox; 使用Presto内核的浏览器:Opera7及以上版本; 使用Webkit内核的浏览器:Safari、Chrome。 

而我现在所说的兼容性问题,主要是说IE与几个主流浏览器如firefox,google等。而对IE浏览器来说,IE7又是个跨度,因为之前的版本更新甚慢,bug甚多。从IE8开始,IE浏览器渐渐遵循标准,到IE9后由于大家都一致认为标准很重要,可以说在兼容性上比较好了,但是在中国来说,由于xp的占有率问题,使用IE7以下的用户仍然很多,所以我们不得不考虑低版本浏览器的兼容。

对浏览器兼容问题,一般分,HTML,Javascript兼容,CSS兼容。 其中html相关问题比较容易处理,无非是高版本浏览器用了低版本浏览器无法识别的元素,导致其不能解析,所以平时注意一点就是。特别是HTML5增加了许多新标签,低版本浏览器有点影响时代进步啊

问题一:不同浏览器的标签默认的外补丁和内补丁不同

问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。

碰到频率:100%

解决方案:css里 *{margin:0padding:0}

备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的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%

解决方案:在display:block后面加入display:inlinedisplay:table

备注:行内属性标签,为了设置宽高,我们需要设置display:block(除了input标签比较特殊)。在用float布局并有横向的margin后,在ie6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。

问题五:图片默认有间距

问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加上问题一中提到的通配符也不起作用。

碰到几率:20%

解决方案:使用float属性为img布局

备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道

问题六:标签最低高度设置min-height不兼容

问题症状:因为min-height本身就是一个不兼容的css属性,所以设置min-height时不能很好的被各个浏览器兼容

碰到几率:5%

解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为:{min-height:200pxheight:auto !importantheight:200pxoverflow:visible}

备注:在B/S系统前端开时,有很多情况下我们有这种需求。当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。

问题七:透明度的兼容css设置

方法是:每写一小段代码(布局中的一行或者一块)我们都要在不同的浏览器中看是否兼容,当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的,只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话,就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。1

技巧一:css hack

使用hacker 我可以把浏览器分为3类:ie6 ;ie7和遨游;其他(ie8 chrome ff safari opera等)

ie6认识的hacker 是下划线_ 和星号 *

ie7 遨游认识的hacker是星号 * (包括上面问题6中的 !important也算是hack的一种。不过实用性较小。)

比如这样一个css设置 height:300px*height:200px_height:100pxie6浏览器在读到 height:300px的时候会认为高时300px;继续往下读,他也认识*heihgt, 所以当ie6读到*height:200px的时候会覆盖掉前一条的相冲突设置,认为高度是200px。继续往下读,ie6还认识_height,所以他又会覆盖掉200px高的设置,把高度设置为100px;

ie7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了,因为它们不认识_height。所以它们会把高度解析为200px;

剩下的浏览器只认识第一个height:300px所以他们会把高度解析为300px。1234

因为优先级相同且相冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。

/* CSS属性级Hack */ color:red/* 所有浏览器可识别*/_color:red/* 仅IE6 识别 */*color:red/* IE6、IE7 识别 */+color:red/* IE6、IE7 识别 */*+color:red/* IE6、IE7 识别 */[color:red/* IE6、IE7 识别 */ color:red\9/* IE6、IE7、IE8、IE9 识别 */color:red\0/* IE8、IE9 识别*/color:red\9\0/* 仅IE9识别 */color:red \0/* 仅IE9识别 */color:red!important/* IE6 不识别!important 有危险*//* CSS选择符级Hack */ *html #demo { color:red} /* 仅IE6 识别 */*+html #demo { color:red} /* 仅IE7 识别 */body:nth-of-type(1) #demo { color:red} /* IE9+、FF3.5+、Chrome、Safari、Opera 可以识别

*/ head:first-child+body #demo { color:red} /* IE7+、FF、Chrome、Safari、Opera 可以识别 */:root #demo { color:red\9} : /* 仅IE9识别 */123456789101112131415161718192021222324252627282930313233

越少的浮动,就会越少的代码,会有更灵活的页面,会有扩展性更强的页面。这不多说,归结为到一定水平了,浮动会用的较少。另外,您也会避免使用浮动+margin的用法。所以,越后来越不易遇到这种bug。

技巧二:padding,marign,height,width

注意是技巧,不是方法: 写好标准头 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> http://www.w3.org/1999/xhtml”> 尽量用padding,慎用margin,height尽量补上100%,父级height有定值子级height不用100%,子级全为浮动时底部补个空clear:both的div宽尽量用margin,慎用padding,width算准实际要的减去padding

技巧三:显示类(display:block,inline)

display:block,inline两个元素

display:block//可以为内嵌元素模拟为块元素display:inline//实现同一行排列的的效果display:table//for FF,模拟table的效果1234567

display:block块元素,元素的特点是: 总是在新行上开始;高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度

display:inline就是将元素显示为行内元素,元素的特点是:和其他元素都在一行上;高,行高及顶和底边距不可改变;宽度就是它的文字或图片的宽度,不可改变。span,a,label,input,img,strong和em是 inline 元素的例子

技巧四:怎样使一个div层居中于浏览器中?

1)

<style type="text/css"><!-- div {position:absolutetop:50%left:50%margin:-100px 0 0 -100pxwidth:200pxheight:200pxborder:1px solid red} --></style>12345678910111213141516171819

2)div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto

技巧五:float的div闭合清除浮动自适应高度

① 例如:<div id="floatA"><div id="floatB"><div id="NOTfloatC">

这里的NOTfloatC并不希望继续平移,而是希望往下排。(其中floatA、floatB的属性已经设置为float:left)

这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在<divclass="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:hiddenzoom:1margin:5px auto}1

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

<div id=”page”>

<div id=”left”></div>

<div id=”center”></div>

<div id=”right”></div>

</div>1234567

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

<div id=”page”>

<div id=”bg” style=”float:leftwidth:100%”>

<div id=”left”></div>

<div id=”center”></div>

<div id=”right”></div>

</div>

</div>1234567891011

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

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

关于 clear float 的原理可参见 [How To ClearFloats Without Structural Markup],将以下代码加入Global CSS 中,给需要闭合的div加上class=”clearfix”即可,屡试不爽。

/* Clear Fix */ .clearfix:after { content:"."display:blockheight:0clear:bothvisibility:hidden} .clearfix { display:inline-block} /* Hide from IE Mac */ .clearfix {display:block} /* End hide from IE Mac */ /* end of clearfix */1234567

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

技巧六:div嵌套时 y轴上 padding和 marign的问题

FF里 y 轴上 子div 到 父div 的距离为 父padding + 子marign

IE里 y 轴上 子div 到 父div 的距离为 父padding 和 子marign 里大的一个

FF里 y 轴上 父padding=0 且 border=0 时,子div 到 父div 的距离为0,子marign 作用到 父div 外面

前端面试题汇总,基本上会有四大类问题,具体如下:

一、HTML

1、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

2、HTML5 为什么只需要写 <!DOCTYPE HTML>?

3、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

4、页面导入样式时,使用link和@import有什么区别?

5、介绍一下你对浏览器内核的理解?

6、常见的浏览器内核有哪些?

7、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

8、简述一下你对HTML语义化的理解?

9、HTML5的离线储存怎么使用,工作原理能不能解释一下?

10、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

11、请描述一下 cookies,sessionStorage 和 localStorage 的区别?

12、iframe有那些缺点?

13、Label的作用是什么?是怎么用的?(加 for 或 包裹)

14、HTML5的form如何关闭自动完成功能?

15、如何实现浏览器内多个标签页之间的通信? (阿里)

16、webSocket如何兼容低浏览器?(阿里)

17、页面可见性(Page Visibility)API 可以有哪些用途?

18、如何在页面上实现一个圆形的可点击区域?

19、实现不使用 border 画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。

20、网页验证码是干嘛的,是为了解决什么安全问题?

21、tite与h1的区别、b与strong的区别、i与em的区别?

二、css

1、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

2、CSS选择符有哪些?哪些属性可以继承?

3、CSS优先级算法如何计算?

4、CSS3新增伪类有那些?

5、如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?

6、display有哪些值?说明他们的作用。

7、position的值relative和absolute定位原点是?

8、CSS3有哪些新特性?

9、请解释一下CSS3的Flexbox(d性盒布局模型),以及适用场景?

10、用纯CSS创建一个三角形的原理是什么?

11、一个满屏 品 字布局 如何设计?

三、常见兼容性问题?

1、li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

2、经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

3、为什么要初始化CSS样式。

4、absolute的containing block计算方式跟正常流有什么不同?

5、CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?

6、position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

7、对BFC规范(块级格式化上下文:block formatting context)的理解?

8、CSS权重优先级是如何计算的?

9、请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式

10、移动端的布局用过媒体查询吗?

11、使用 CSS 预处理器吗?喜欢那个?

12、CSS优化、提高性能的方法有哪些?

13、浏览器是怎样解析CSS选择器的?

14、在网页中的应该使用奇数还是偶数的字体?为什么呢?

15、margin和padding分别适合什么场景使用?

16、抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]

17、元素竖向的百分比设定是相对于容器的高度吗?

18、全屏滚动的原理是什么?用到了CSS的那些属性?

19、什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

20、视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)

21、::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用。

22、如何修改chrome记住密码后自动填充表单的黄色背景 ?

23、你对line-height是如何理解的?

24、设置元素浮动后,该元素的display值是多少?(自动变成display:block)

25、怎么让Chrome支持小于12px 的文字?

26、让页面里的字体变清晰,变细用CSS怎么做?(-webkit-font-smoothing: antialiased)

27、font-style属性可以让它赋值为“oblique” oblique是什么意思?

28、position:fixed在android下无效怎么处理?

29、如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

30、display:inline-block 什么时候会显示间隙?(携程)

31、overflow: scroll时不能平滑滚动的问题怎么处理?

32、有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。

33、png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?

34、什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做)

35、style标签写在body后与body前有什么区别?

四、JavaScript

1、介绍JavaScript的基本数据类型。

2、说说写JavaScript的基本规范?

3、JavaScript原型,原型链 ? 有什么特点?

4、JavaScript有几种类型的值?(堆:原始数据类型和 栈:引用数据类型),你能画一下他们的内存图吗?

5、Javascript如何实现继承?

6、Javascript创建对象的几种方式?

7、Javascript作用链域?

8、谈谈This对象的理解。

9、eval是做什么的?

10、什么是window对象? 什么是document对象?

11、null,undefined的区别?

12、写一个通用的事件侦听器函数(机试题)。

13、[“1”, “2”, “3”].map(parseInt) 答案是多少?

14、关于事件,IE与火狐的事件机制有什么区别? 如何阻止冒泡?

15、什么是闭包(closure),为什么要用它?

16、javascript 代码中的”use strict”是什么意思 ? 使用它区别是什么?

17、如何判断一个对象是否属于某个类?

18、new *** 作符具体干了什么呢?

19、用原生JavaScript的实现过什么功能吗?

20、Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

21、对JSON的了解?

22、[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) }) 能解释一下这段代码的意思吗?

23、js延迟加载的方式有哪些?

24、Ajax 是什么? 如何创建一个Ajax?

25、同步和异步的区别?

26、如何解决跨域问题?

27、页面编码和被请求的资源编码如果不一致如何处理?

28、模块化开发怎么做?

29、AMD(Modules/Asynchronous-Definition)、CMD(Common Module

Definition)规范区别?

30、requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?)

31、让你自己设计实现一个requireJS,你会怎么做?

32、谈一谈你对ECMAScript6的了解?

33、ECMAScript6 怎么写class么,为什么会出现class这种东西?

34、异步加载的方式有哪些?

35、documen.write和 innerHTML的区别?

36、DOM *** 作——怎样添加、移除、移动、复制、创建和查找节点?

37、.call() 和 .apply() 的含义和区别?

38、数组和对象有哪些原生方法,列举一下?

39、JS 怎么实现一个类。怎么实例化这个类

40、JavaScript中的作用域与变量声明提升?

41、如何编写高性能的Javascript?

42、那些 *** 作会造成内存泄漏?

43、JQuery的源码看过吗?能不能简单概况一下它的实现原理?

44、jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?

45、jquery中如何将数组转化为json字符串,然后再转化回来?

46、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

47、jquery.extend 与 jquery.fn.extend的区别?

48、jQuery 的队列是如何实现的?队列可以用在哪些地方?

49、谈一下Jquery中的bind(),live(),delegate(),on()的区别?

50、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

51、是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?

52、jQuery 是通过哪个方法和 Sizzle 选择器结合的?(jQuery.fn.find()进入Sizzle)

53、针对 jQuery性能的优化方法?

54、Jquery与jQuery UI有啥区别?

55、JQuery的源码看过吗?能不能简单说一下它的实现原理?

56、jquery 中如何将数组转化为json字符串,然后再转化回来?

57、jQuery和Zepto的区别?各自的使用场景?

58、针对 jQuery 的优化方法?

59、Zepto的点透问题如何解决?

60、jQueryUI如何自定义组件?

61、需求:实现一个页面 *** 作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?

62、如何判断当前脚本运行在浏览器还是node环境中?(阿里)

63、移动端最小触控区域是多大?

64、jQuery 的 slideUp动画 ,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

65、把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?

66、移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有 300ms 延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击 *** 作。)

67、知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能讲出他们各自的优点和缺点么?

68、Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法?

69、解释JavaScript中的作用域与变量声明提升?

70、那些 *** 作会造成内存泄漏?

71、JQuery一个对象可以同时绑定多个事件,这是如何实现的?

72、Node.js的适用场景?

(如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

73、解释一下 Backbone 的 MVC 实现方式?

74、什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?

75、知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?

76、如何测试前端代码么? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

77、前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

78、简述一下 Handlebars 的基本用法?

79、简述一下 Handlerbars 的对模板的基本处理流程, 如何编译的?如何缓存的?

80、用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)

检测浏览器版本版本有哪些方式?

81、我们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说下会执行几次事件,然后会先执行冒泡还是捕获

如果是准备学前端,建议你可以看下这篇文章!

2022 年最新 Web 前端学习路线图,我梳理了完整的细节知识点,企业项目开发解决方案所需技术栈,更适合自学 Web 前端开发的同学,路线清晰明确,少走弯路。

零基础学编程,从宏观到微观全面了解

专业、语言选择、行业介绍、技术发展变革 (opens new window)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6174571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存