前端浏览器兼容性问题和解决办法

各标签margin padding的问题(不同浏览器的标签默认的外补丁( margin )和内补丁(padding)不同)

解决方案: css 里增加通配符 * { margin: 0; padding: 0; }

块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大

解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性

表单元素行高不一致

解决方案:
1.给表单元素添加float:left(左浮动);
2.或者是vertical-align:middle;(垂直对齐方式:居中)

第九类:鼠标指针bug

描述:cursor:hand;只有ie浏览器识别,其他浏览器不识别

解决方案:cursor:pointer;IE6以上浏览器及其他内核浏览器都识别;

上下margin的重叠问题

描述:给上边元素设置了margin-bottom,给下边元素设置了margin-top,浏览器只会识别较大值;

解决方案:margin-top和margin-bottom中选择一个,只设置其中一个值;

透明度属性

解决方案:针对IE浏览器:filter:alpha(opacity=value);(取值范围1--100)

兼容其他浏览器:opacity:value;(取值范围0--1)

const问题

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

event.srcElement问题

问题说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性。
解决方法:使用srcObj =event.srcElement ?event.srcElement : event.target;

事件绑定

IE:dom.attachEvent();

其他浏览器:dom.addEventListener();

标准浏览器采用事件捕获的方式对应IE的事件冒泡机制(即标准由最外元素至最内元素或者IE由最内元素到最外元素)最后标准方亦觉得IE这方面的比较合理,所以便将事件冒泡纳入了标准,这也是addEventListener第三个参数的由来,而且事件冒泡作为了默认值。
封装兼容性的 addEvent(elem, type, handle);方法
function addEvent(elem,type,handle){
  	if(elem.addEventListener){
       elem.addEventListener(type,handle,false);
  	}else if(elem.attachEvent){
       elem.attachEvent('on' + type, function(){
       	handle.call(elem);
       })  
  	}else{
  		elem['on' + type] = handle;
  	}
  }

操作tr的html

在ie9以下,不能操作tr的innerHTML

ajax略有不同

if (window.XMLHttpRequest) {
                    xhr = new XMLHttpRequest();
                } else {
                    xhr = new ActiveXObject('Microsoft.XMLHTTP');
                }

innerText在IE中能正常工作,但在FireFox中却不行.

需用textContent。
解决方法:
if(navigator.appName.indexOf("Explorer")  >   -1){
       document.getElementById('element').innerText   =  "my   text";
}   else{
        document.getElementById('element').textContent  =   "my   text";
}

css中的width和padding

在IE7和FireFox中width宽度不包括padding,在Ie6中包括padding.

FireFox和IE BOX模型解释不一致导致相差2px

box.style{width:100;border1px;} 
ie理解为box.width =100 
ff理解为box.width =100 + 1*2 = 102  //加上边框2px

元素水平居中问题

FireFox: margin:0auto;

IE: 父级{ text-align:center; }

对齐文本与文本输入框

加上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!

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>

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

解决办法是将body换成html

<!DOCTYPEhtml 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>

行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug

在display:block;后面加入display:inline;display:table;

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

使用float属性为img布局

被点击过后的超链接不再具有hover和active属性

解决办法:按lvha的顺序书写css样式,
 ":link": a标签还未被访问的状态;
 ":visited": a标签已被访问过的状态;
 ":hover": 鼠标悬停在a标签上的状态;
 ":active": a标签被鼠标按着时的状态;

IE6下无法设置1px的行高,原因是由其默认行高引起的

解决办法:为期设置overflow:hidden;或者line-height:1px;

在使用绝对定位或者相对定位后,IE中设置z-index失效,原因是因为其元素依赖于父元素的z-index,但是父元素默认为0, 子高父低,所以不会改变显示的顺序

event.x与event.y问题

说明:IE下,event对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性. 
解决方法: var x = event.x ? event.x : e.pageX
var y = event.y ? event.y: e.pageY

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

解决方法:统一通过getAttribute() 获取自定义属性。

input边框问题

解决方案是用:border:0或border:0 none;或border:none:border-color:transparent;,推荐用第三种方案。

按钮默认大小不一

解决方案:

1)用a标签来模拟按钮,添加样式;

2)如果按钮是一张背景图片,那么直接给按钮添加背景图;

百分比的bug

解决方案:父元素宽度为100%,子元素宽度各为50%,在IE6下各个元素宽度之和超过100%

解决方案:给右边浮动的子元素添加clear:right;

css3 box-shadow 对于不同的浏览器,兼容问题的解决办法:

.box_shadow{ 
background-color: #eee; 
filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=135, Strength=5);/*for ie6,7,8*/ 
-moz-box-shadow:2px 2px 5px #969696;/*firefox*/ 
-webkit-box-shadow:2px 2px 5px #969696;/*webkit*/ 
box-shadow:2px 2px 5px #969696;/*opera或ie9*/ 
}

各个浏览器之间显示字体不一致的解决办法

统一设置全局字体:
body{font-family: '微软雅黑';}

去掉IE浏览器中输入框右边的小图标(叉号和眼睛)

::-ms-clear, ::-ms-reveal{display: none;}

去掉谷歌浏览器下输入框自带边框

.class{outline:none} 

禁止表单的自动填充功能

autocomplete='off'

取消chrome下textarea可拖动放大

textarea{resize:none}

IE6-7 line-height 失效的问题

问题:在ie 中 img 与文字放一起时,line-height 不起作用
解决:都设置成 float

td 自动换行的问题

问题:table 宽度固定,td 自动换行

解决:设置 Table 为 table-layout: fixed,td 为 word-wrap: break-word

键盘事件 keyCode 兼容性写法

var inp = document.getElementById('inp')
var result = document.getElementById('result')

function getKeyCode(e) {
  e = e ? e : (window.event ? window.event : "")
  return e.keyCode ? e.keyCode : e.which
}

inp.onkeypress = function(e) {
  result.innerHTML = getKeyCode(e)
}

使用IE专用的条件注释

<!--其他浏览器 --> 
<link rel="stylesheet" type="text/css" href="css.css" /> 
 <!--[if IE 7]> 
 <!-- 适合于IE7 --> 
 <link rel="stylesheet" type="text/css" href="ie7.css" /> 
 <![endif]--> 
 <!--[if lte IE 6]> 
 <!-- 适合于IE6及以下 --> 
 <link rel="stylesheet" type="text/css" href="ie.css" /> 
 <![endif]--> 

以下两种方法几乎能解决现今所有兼容.

1, !important (不是很推荐,用下面的一种感觉最安全) 

随着IE7对!important的支持, !important 方法现在只针对IE6的兼容.(注意写法.记得该声明位置需要提前.)

代码: 
<style> 
#wrapper { 
width: 100px!important; /* IE7+FF */ 
width: 80px; /* IE6 */ 
} 
</style> 

图片3px空白

问题描述:靠近浮动元素的元素要么有3px的间距,要么位置偏下

解决方案:给img标签添加vertical-align等相关属性或display: block

用a标签插入的图片在IE浏览器中会出现边框

解决方式:border:none;

IE6中会把低于16px的字体默认为16px:

解决方式:font-size:0;overflow:hidden;

获取浏览器可视窗口的宽度与高度:

var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;

获取事件源元素:

// 备注:event是事件函数的参数。
const event = event || window.event;
const target = event.srcElement || event.target;
// 请注意:下方的处理都默认event已经按照上面的写法兼容过衍生的
// 阻止事件冒泡和浏览器默认行为
event.preventDefault 
	? event.preventDefault()
	: event.returnValue = false; 
// 只阻止事件冒泡
event.stopPropagation 
	? event.stopPropagation(); 
	: event.cancelBubble = true;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值