=======================================================

比如 两个前后的元素一个左浮动一个右浮动 在ie6就自动换行了,

比如 select在ie6是最顶层的元素,就是z-index永远是最高的,一般ie6下要套个frame

比如..

css兼容大部分上可以用hack方式解决。

js方面就更多了,

比如事件监听,非ie用addEventListener,新一点的ie用attachEvent,旧一点的(ie5)用element[onEvent]..

比如事件这个对象,非ie是用window.event调用,ie要把event作为参数调用进去

比如..

========================================================

========================================================

一些常见的js的兼容性问题

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属性为读写。 

解决方法:可以创建两个输入框,比如平时咱们有密码框,想通过把type为password的值改为text,IE下是不允许的。

8、 window.event问题 

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

解决方法: var e = e || window.event;

9、event.x与event.y问题 

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

解决方法:使用var x = e.x ? e.x : e.pageX; 来代替IE下的event.x或者Firefox下的e.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、body问题 

说明:Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在。

12、firefox与IE的父元素(parentElement)的区别 

说明:IE支持parentElement和parentNode获取父节点,而FF只能使用后者。 

解决方法:统一使用parentNode;

13、innerText问题 

说明:innerText在IE中能正常工作,但是innerText在FireFox中却不行. 需用textContent。 

解决方法:elem.innerText = elem.textContent = “值”

14、样式单位问题 

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

15、样式关键字冲突问题 

说明:CSS属性与​​JavaScript​​中的保留关键字命名相同,IE中style+属性,非IE中css+属性。

16、class属性冲突问题 

说明:class属性冲突,class是javascript中的保留关键字。

17、年份获取问题 

说明:使用getFullYear替换getYear。

18、for属性冲突问题 

说明:lable标签的属性for冲突,在IE浏览器中getAttribute(“htmlFor”),在非IE浏览器中getAttribute(“for”)。 

19、removeChild和removeNode的问题 

说明:appendNode在IE和Firefox下都能正常使用,但是removeNode只能在IE下用,FF支持removeChild。

20、事件监听函数的问题 

说明:标准浏览器的写法addEventListener()和IE的写法attachEvent()。 

解决方法:判断addEventListener是否存在,如果存在则用否则用IE8以下的版本(含IE8)的绑定方法attachEvent,removeEventListener()和detachEvent()也是一样的用法。

21、阻止事件冒泡 

说明: stopPropagation()和cancelBubble,前者是方法,是标准的写法,后者是属性,赋值true表示阻止,是IE的写法。 

解决方法:判断stopPropagation是否存在,如果存在则用标准写法否则则用IE的写法,不可反过来判断。 

22、阻止默认事件 

说明: preventDefault()和returnValue()前者标准写法,后者IE写法。 

解决方法:一般情况建议直接使用return false阻止,但和取消默认事件的含义是不同的。

===============================================================================

===============================================================================

​​前端常见兼容性问题笔记​​




计算一定要精确

ie6子元素会撑开父级设置好的宽高

会出现兼容性问题 所以要计算好padding值

不要让内容的宽高超出父级设置的宽高


在ie6、7下元素浮动,

如果宽度需要内容撑开,就给里面的块元素都加浮动。


ie67下元素要通过浮动并列在一行就要都给元素加浮动  不然会出现兼容性问题

标签嵌套规范   内联不能嵌套块状

ie6最小高度问题 overflow解决

1px dotted 在ie6下不支持  解决  切背景平铺

margin 传递   浮动或者有宽高 或者


在ie6下解决margin传递要触发haslayout

在ie6下父级有边框的时候子元素margin值消失 

解决 触发haslayout 尽量触发

ie6只支持 a标签的四个伪类[伪元素]

inline-block  ie6不支持块标签


浮动:

1.双倍边距bug        块 浮动 横向margin         display:inline 

2.li本身没浮动内容浮动 ie6 li 内容浮动            给li加浮动     li加vertical-alian

其实就是浮动块状元素前面不能有内联文本的出现



ie6 下,下margin消失

当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候最有一行的子元素的下margin值就会失效、


ie6下文字溢出bug

原因 1.浮动元素前面有注释 或者内联元素

内联元素越多,溢出越多

子元素的宽度和父级的宽度相差小于3px的时候

解决办法用div包起来 或者把父级元素宽度调大


当浮动元素和绝对定位是并列关系的时候 绝对定位元素  会消失掉

解决办法给绝对定位元素套一层  包一个div 取消并列关系


相对定位:

在ie六下  元素有相对定位的话 父级的overflow 就包不住子级

解决办法 :给父级也加相对定位

绝对定位


在ie6下定位 元素的父级宽高是奇数的时候元素right 和bottom值会有1px的偏差 没办法解决尽量避免

固定定位 ie6不兼容。


表单元素

ie7 6下输入类型表单控件

上下有1px的间隙问题

解决:给input加浮动

boder:none失效

解决:input重新设置下背景 白色也设置下

输入文字把背景图挤出去

解决:把背景加给父级  清除自身背景 background:none;

-------------------------------------------------------------------

png问题 js文件解决


条件注释语句:

css  hack

important


margin负值  在ie6下超出父级 就被截掉

然后相对定位就可以解决

圣杯  据对定位

、等高布局






计算一定要精确

ie6子元素会撑开父级设置好的宽高

会出现兼容性问题 所以要计算好padding值

不要让内容的宽高超出父级设置的宽高


在ie6、7下元素浮动,

如果宽度需要内容撑开,就给里面的块元素都加浮动。


ie67下元素要通过浮动并列在一行就要都给元素加浮动  不然会出现兼容性问题

标签嵌套规范   内联不能嵌套块状

ie6最小高度问题 overflow解决

1px dotted 在ie6下不支持  解决  切背景平铺

margin 传递   浮动或者有宽高 或者


在ie6下解决margin传递要触发haslayout

在ie6下父级有边框的时候子元素margin值消失 

解决 触发haslayout 尽量触发

ie6只支持 a标签的四个伪类[伪元素]

inline-block  ie6不支持块标签


浮动:

1.双倍边距bug        块 浮动 横向margin         display:inline 

2.li本身没浮动内容浮动 ie6 li 内容浮动            给li加浮动     li加vertical-alian

其实就是浮动块状元素前面不能有内联文本的出现



ie6 下,下margin消失

当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候最有一行的子元素的下margin值就会失效、


ie6下文字溢出bug

原因 1.浮动元素前面有注释 或者内联元素

内联元素越多,溢出越多

子元素的宽度和父级的宽度相差小于3px的时候

解决办法用div包起来 或者把父级元素宽度调大


当浮动元素和绝对定位是并列关系的时候 绝对定位元素  会消失掉

解决办法给绝对定位元素套一层  包一个div 取消并列关系


相对定位:

在ie六下  元素有相对定位的话 父级的overflow 就包不住子级

解决办法 :给父级也加相对定位

绝对定位


在ie6下定位 元素的父级宽高是奇数的时候元素right 和bottom值会有1px的偏差 没办法解决尽量避免

固定定位 ie6不兼容。


表单元素

ie7 6下输入类型表单控件

上下有1px的间隙问题

解决:给input加浮动

boder:none失效

解决:input重新设置下背景 白色也设置下

输入文字把背景图挤出去

解决:把背景加给父级  清除自身背景 background:none;

-------------------------------------------------------------------

png问题 js文件解决


条件注释语句:

css  hack

important


margin负值  在ie6下超出父级 就被截掉

然后相对定位就可以解决

圣杯  据对定位

、等高布局