原文地址: 小昱博客 - 浏览器兼容性杂谈 转载请注明出处
html5shiv.js让IE6-8浏览器支持HTML5新标签
参考文章
使用方法
<!--[if IE]>
<script src="html5shiv.js"></script>
<![endif]-->
Respond.js让IE6-8浏览器支持媒体查询
参考文章
Respond.js让IE6-8支持CSS3 Media Query
使用方法
1.在css中正常用 min/max-width media queries
@media screen and (min-width: 480px){
...styles for 480px and up go here
}
2.引入respond.min.js,但要在css的后面(越早引入越好,在ie下面看到页面闪屏的概率就越低,因为最初css会先渲染出来,如果respond.js加载得很后面,这时重新根据media query解析出来的css会再改变一次页面的布局等,所以看起来有闪屏的现象)
<!--[if IE]>
<script src="respond.js"></script>
<![endif]-->
实现思路
1.把head中所有<link rel=“sheetstyle” href=“xx”/>的css路径取出来放入数组
2.然后遍历数组一个个发ajax请求
3.ajax回调后仅分析response中的media query的min-width和max-width语法,分析出viewport变化区间对应相应的css块
4.页面初始化时和window.resize时,根据当前viewport使用相应的css块。
总结
优点:压缩后仅1k,不跨域时性能ok,只需引入respond.js通用易用
缺点:仅支持media query的min-width和max-width(用于响应式够用);支持跨域,虽然配置有点麻烦,实现跨域代价高而且有闪屏体验欠佳。
IE6~IE8中使用css3的选择器
参考文档
使用方法
Selectivizr的使用非常的简单,但是并不能直接使用,在使用前需要先加载下列框架中的任何一个:JQuery、dojo、prototype、Yahoo YUI、DOMAssistant、mootools、NVMatcher。需要注意的是Selectivizr对各个框架的支持程度不一,具体可查看官方网站。 然后在页面里引用Selectivizr即可。
<script type="text/javascript" src="[JS library]"></script>
<!--[if lt IE 9]>
<script type="text/javascript" src="selectivizr-min.js"></script>
< ![endif]-->
注意事项
- Selectivizr会自动检测最好的JS框架,如果你当前页面中正在使用如JQuery框架,但是它对Selectivizr的支持并不太好,你只需要在页面中再调用另一个(如Mootools)即可。
- CSS样式必须使用<link>标签引入,还可以使用@import,但不能在页面里使用<style>来定义。
- Selectivizr必须运行在标准模式,所以你要确保你有一个DTD在你的页面顶部。
- 如果客户浏览器不支持JS,你只需要使用<noscript></noscript>就可以给它们单独写hack。
- 不支持站外样式调用。
让多核浏览器使用 webkit 内核渲染
参考文档
概述
目前国内不少浏览器都自称双核,一般是 IE(Trident)+Webkit。因为 webkit 急速的体验和对 HTML5 的支持,有些情况下(我们)开发者可能希望用户优先甚至只使用 webkit 内核渲染,比如通过 Meta 标签来指定。然而目前还没有任何一个公认的标准来实现。大多数用户根本分不清浏览器双核之间的区别(大概认为跟双核安卓手机的“双核”差不多吧)。把决定权交给开发者,以此给用户带来更好的浏览体验,不失为一件好事。
<meta name="renderer" content="webkit | ie-comp | ie-stand">
若页面需默认用极速核,增加标签:
<meta name="renderer" content="webkit">
使用当前电脑当中最高的ie版本进行渲染
参考文章
使用方法
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
使用说明
IE8支持几种文件兼容性模式,它们具有不同的特性并影响内容显示的方式。
•Emulate IE8 mode
•Emulate IE7 mode
•IE5 mode
•IE7 mode
•IE8 mode
•Edge mode
低版本ie兼容问题的解决方案
参考文章
1、CSS hack
2、IE6双边距
当元素浮动后,再设置同方向margin,会产生双边距
解决:增加
*display:inline;
3、IE6最小高度问题
IE6下最小高度19px,想小于此高度,增加
*overflow:hidden;
4、li里元素都浮动 li 在IE6 7 下方会产生4px间隙问题
针对li添加
*vertical-align: top;
5、浮动元素之间注释,导致多复制一个文字问题
两个浮动元素中间有注释或者内联元素并且和父级宽度相差不超过3px时,
1)两个浮动元素中间避免出现内联元素或者注释
2)与父级宽度相差3px或以上
6、IE6 7 父级元素的overflow:hidden 是包不住子级的relative
针对ie6、7给父级元素添加相对定位
overflow: hidden;
*position: relative;
7、IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1px的偏差
避免父级宽高出现奇数
8、IE6下绝对定位元素和浮动元素并列绝对定位元素消失
浮动元素和绝对定位元素是同级的话定位元素就会消失
解决:不处于同级
9、IE6 下input的空隙
给input元素添加float
10、display:inline-block
IE6下使用
*display:inline;
*zoom:1;
11、margin兼容性问题
1)margin-top传递
触发BFC、haslayout,父元素增加
overflow: hidden;
zoom:1;
2)上下margin叠压
尽量使用同一方向的margin,比如都设置top或者bottom
12、p 包含块元素嵌套规则
不要嵌套
13、IE6下子元素超出父级宽高,会把父级的宽高撑开
不要让子元素的宽高超过父级
14、第一块元素浮动,第二块元素加margin值等于第一块元素,在IE6下会有间隙问题;
1)不建议这么写
2)用浮动解决
15、元素浮动之后,能设置宽度的话就给元素加宽度.如果需要宽度是内容撑开,就给它里边的块元素加上浮动
浮动元素中存在块元素,给块元素增加float
16、IE6不支持png24 图片
1)JS插件(问题:不能处理body之上png24)
下载地址:http://www.dillerdesign.com/experiment/DD_belatedPNG/#download
<meta charset="utf-8">
<title></title>
<style>
body{
background-color: red;
}
div{
width: 300px;
height: 300px;
background: url("img/png.png") no-repeat;
}
</style>
<div></div>
![](img/png.png)
2)原生滤镜
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/DD_belatedPNG_0.0.8a.js"></script>
<script>
DD_belatedPNG.fix("body");
</script>
<style>
body{
width: 500px;
height: 500px;
background:red url("img/png.png") no-repeat;
_background-image:none;
_filter : progid:DXImageTransform.Microsoft.AlphaImageLoader(src="img/png.png", sizingMethod="crop");
}
</style>
</head>
<body>
</body>
</html>
17.img下面出现一条缝
img{
display: block;
}