兼容性解决,浏览器ie6,7

作者:Jasmine - 2018年04月18日

讲解内容:

兼容性问题
   1、IE6下怪异盒模型
   2、IE6下最小高度问题
   3、IE6下不支持1px的点线
   4、IE6下内容会把父级的高度撑开
   5、IE6下只支持给a标签添加伪类
   6、IE67下不支持给块标签加display:inline-block
   7、IE8以及IE8以前的浏览器都不支持opacity
   8、IE6不支持固定定位
   9、IE6下前面元素浮动,后面元素不浮动后他们之间会有间隙
   10、IE6下双边距问题
   11、IE67下父级有边框,子级有margin的话会不起作用
   12、IE6下,每行元素的宽度与父级的宽度相差超过2px,最后一行的margin-bottom会失效(IE7不管相差多少,直接失效)
   13、IE6下元素中除了文字之外,还有inline-block类型元素,元素的行高会失效
   14、IE6下文字溢出的问题
   15、IE67li间隙问题
   16、IE67下子级有相对定位,并且比父级要大。那父级overflow:hidden;后是包不住它的
   17、IE6下同一层级的浮动元素会盖住绝对定位元素
   18、IE6下定位父级的宽高是奇数的话,元素的right值或者bottom值会有1px的偏差
   19、IE6下通过margin负值,使元素移出父级的位置,那出去的部分会被截掉
   20、IE67下输入类型的表单控件,上下两边各有1px的间隙
   21、IE8以及IE8之前不识别H5标签
   22、IE6不支持png透明图片

1、IE6下怪异盒模型

<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 100px;
				height: 100px;
				border: 10px solid #000;
				padding: 10px;
				background: red;
			}
		</style>
	</head>
	<body>
		<!--
			标准盒模型
				总宽度=width+padding+border
			怪异盒模型
				总宽度=width
				
			切记一定要写文档头
		-->
		<div>123</div>
	</body>
</html>

*2、IE6下最小高度问题

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				height: 1px;
				background: red;
				/*font-size: 0;*/
			}
		</style>
	</head>
	<body>
		<!--
			IE6下块元素高度小于19px,会被当做19px来处理
			解决办法
				1、overflow:hidden			推荐
				2、font-size: 0;	
		-->
		<div></div>
	</body>
</html>

3、IE6下不支持1px的点线

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 500px;
				height: 100px;
				border: 1px dotted #f00;
			}
		</style>
	</head>
	<body>
		<!--
			IE6不支持一像素的点划线,用背景图代替
		-->
		<div></div>
	</body>
</html>

4、IE6下内容会把父级的高度撑开

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 200px;
				height: 200px;
				border: 1px solid #000;
				overflow: hidden;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下内容会把父级的高度撑开
			解决办法
				overflow: hidden;
		-->
		<div>
			这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊这里是内容啊
		</div>
	</body>
</html>

5、IE6下只支持给a标签添加伪类

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			a:hover{
				color: #f00;
			}
			div{
				width: 100px;
				height: 100px;
				background: red;
			}
			div:hover{
				background: green;
			}
		</style>
	</head>
	<body>
		<!--
			IE6不支持除了a标签以外标签的伪类
		-->
		<a href="#">kaivon</a>
		<div></div>
	</body>
</html>

*6、IE67下不支持给块标签加display:inline-block

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			span,div{
				width: 100px;
				height: 100px;
				background: red;
				display: inline-block;
                float: left;
			}
		</style>
	</head>
	<body>
		<!--
			IE67不支持块元素display:inline-block;
			解决方法:
			给元素加浮动
		-->
		<div>kaivon1</div>
		<div>kaivon2</div>
		<span>kaivon1</span>
		<span>kaivon2</span>
	</body>
</html>

*7、IE8以及IE8以前的浏览器都不支持opacity

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 100px;
				height: 100px;
				background: red;
				opacity: 0.5;
				filter:alpha(opacity=50);
			}
		</style>
	</head>
	<body>
		<!--
			IE8以及IE8以前的浏览器都不支持opacity
			解决办法
				用filter
		-->
		<div>kaivon</div>
	</body>
</html>

8、IE6不支持固定定位

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			body{
				height: 3000px;
			}
			div{
				width: 100px;
				height: 100px;
				background: red;
				/*position: fixed;
				right: 0;
				bottom: 0;*/
				
				position: absolute;
				right: 0;
				top: 0;
			}
		</style>
		<script>
			window.onload=function(){
				var div1=document.getElementById("div1");
				
				window.onscroll=function(){
					var top=document.documentElement.scrollTop||document.body.scrollTop;
					var bottomPos=document.documentElement.clientHeight-div1.offsetHeight;
					
					div1.style.top=top+bottomPos+'px';
				}
			};
		</script>
	</head>
	<body>
		<!--
			IE6不支持固定定位,可以用js来解决
		-->
		<div id="div1">kaivon</div>
	</body>
</html>

9、IE6下前面元素浮动,后面元素不浮动后他们之间会有间隙

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 100px;
				height: 100px;
				background: red;
				float: left;
			}
			span{
				background: red;
				float: left;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下前面元素浮动,后面元素不浮动后他们之间会有间隙
			解决办法
				给后面元素也添加浮动
		-->
		<div>kaivon1</div>
		<span>kaivon2</span>
	</body>
</html>

*10、IE6下双边距问题

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			body{
				margin: 0;
			}
			span,div{
				width: 100px;
				height: 200px;
				background: red;
				/*margin-left: 50px;
				float: left;*/
				margin-right: 50px;
				float: right;
				display: inline;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下块元素有浮动,并且有横向margin(左右),那最终的距离是原来的两倍
			解决方法
				给元素添加display:inline;
		-->
		<div></div>
		<!--<span></span>-->
	</body>
</html>

*11、IE67下父级有边框,子级有margin的话会不起作用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.parent{
				border: 1px solid #f00;
				zoom: 1;
			}
			.parent div{
				width: 100px;
				height: 100px;
				margin: 100px;
				background: green;
			}
		</style>
	</head>
	<body>
		<!--
			在IE67下,父级有边框,子级有margin,那子级的margin会不起作用
			解决办法
				触发父级的layout,加zoom:1
		-->
		<div class="parent">
			<div></div>
		</div>
	</body>
</html>

*12、IE6下,每行元素的宽度与父级的宽度相差超过2px,最后一行的margin-bottom会失效(IE7不管相差多少,直接失效)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.box{
				width: 500px;
				width: 480px;
				width: 483px;
				margin: 50px auto;
				border: 10px solid #000;
				overflow: hidden;
				padding-bottom: 10px;  
			}
			.box div{
				width: 100px;
				height: 100px;
				background: greenyellow;
				float: left;
				margin: 10px;
				margin: 10px 10px 0 10px;
				display: inline;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下,每行元素的宽度与父级的宽度相差超过2px,最后一行的margin-bottom会失效
			IE7下,不管宽度相差多少,直接失效
			解决方法
				用padding解决
		-->
		<div class="box">
			<div class="div">1</div>
		    <div class="div">2</div>
		    <div class="div">3</div>
		    <div class="div">4</div>
		    <div class="div">1</div>
		    <div class="div">2</div>
		    <div class="div">3</div>
		    <div class="div">4</div>
		    <div class="div">1</div>
		    <div class="div">2</div>
		    <div class="div">3</div>
		    <div class="div">4</div>
		</div>
	</body>
</html>

13、IE6下元素中除了文字之外,还有inline-block类型元素,元素的行高会失效

<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8">
      <title></title>
      <style>
         div{
            height: 300px;
            line-height: 300px;
            border: 1px solid #f00;
         }
         /*span{
            height: 100px;
            background: red;
            display: inline-block;
            line-height: 100px;
         }*/
         .span1{
            line-height: 100px;
            display: inline-block;
            background: red;
         }
         .span2{
            line-height: 200px;
            display: inline-block;
            background: green;
         }
      </style>
   </head>
   <body>
      <!--
         在IE6下,元素中除了文字之外,还有inline-block类型元素,那元素的行高会失效
         解决办法: 分别包起来,分别设置行高
      -->
      <!--<div>
         <span>inlin-block</span>
         这是一段文字
      </div>-->
      <div>
         <span class="span1">inlin-block</span>
         <span class="span2">这是一段文字</span>
      </div>
   </body>
</html>

14、IE6下文字溢出的问题

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.wrap{
				width: 400px;
				_width: 403px;
			}
			.left{
				float: left;
			}
			.right{
				float: right;
				width: 400px;
			}
		</style>
	</head>
	<body>
		<!--
			在IE6下,两个浮动元素中间有注释或者空行内标签,父级的宽度和子元素宽度相差小于3px,元素内的文字会被复制出来
			解决办法
				1、把注释或者行内元素用div包起来(测试过貌似不行)
				3、把父级的宽度加3px
		-->
		<div class="wrap">
			<div class="left"></div>
			<!--这里是一段注释-->
			<div class="right">这里要多出来一个文字</div>
		</div>
	</body>
</html>

*15、IE67li间隙问题

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        ul {
            margin: 0;
            padding: 0;
            list-style: none;
            width: 200px;
        }
        li {
            width: 200px;
            height: 30px;
            border: 1px solid #f00;
            /*vertical-align: middle;*/
            float: left;
        }
        li span {
            float: left;
        }
        li a {
            float: right;
        }
    </style>
</head>
<body>
<!--
    IE67下,li里有左右浮动的元素,会造成每个li下边有间隙的问题
    解决办法
        1、给li加vertical-align: middle;
        2、给li浮动
-->
<ul>
    <li><span>标题</span><a href="#">更多</a></li>
    <li><span>标题</span><a href="#">更多</a></li>
    <li><span>标题</span><a href="#">更多</a></li>
    <li><span>标题</span><a href="#">更多</a></li>
</ul>
</body>
</html>

*16、IE67下子级有相对定位,并且比父级要大。那父级overflow:hidden;后是包不住它的

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			#box{
				width: 200px;
				height: 200px;
				border: 5px solid #f00;
				overflow: hidden;
				position: relative;
			}
			#box div{
				width: 300px;
				height: 300px;
				background: green;
				position: relative;
			}
		</style>
	</head>
	<body>
		<!--
			IE67下子级有相对定位,并且比父级要大。那父级overflow:hidden;后是包不住它的
			解决办法
				给父级也加相对定位
		-->
		<div id="box">
			<div></div>
		</div>
	</body>
</html>

*17、IE6下同一层级的浮动元素会盖住绝对定位元素

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.box{
				width: 200px;
				height: 200px;
				border: 5px solid #f00;
				position: relative;
			}
			.box div{
				width: 150px;
				height: 150px;
				background: green;
				float: left;
				display: inline;
				margin-left: 50px;
			}
			span{
				width: 100px;
				height: 100px;
				background: yellow;
				position: absolute;
				right: 0;
				top: 0;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下同一层级的浮动元素会盖住绝对定位元素
			解决办法
				给定位元素外面嵌套一个层,比如span外面嵌套一层p
		-->
		<div class="box">
			<div></div>
			<!--<span>kaivon</span>-->
			<p><span>kaivon</span></p>
		</div>
	</body>
</html>

18、IE6下定位父级的宽高是奇数的话,元素的right值或者bottom值会有1px的偏差

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.box{
				width: 200px;
				height: 200px;
				border: 10px solid #f00;
				position: relative;
			}
			.box div{
				width: 50px;
				height: 50px;
				background: green;
				position: absolute;
				right: -10px;
				bottom: -10px;
				/*left: -10px;
				top: -10px;*/
			}
		</style>
	</head>
	<body>
		<!--
			在IE6下,定位父级的宽高是奇数的话,元素的right值或者bottom值会有1px的偏差(测试过没啥区别)
		-->
		<div class="box">
			<div></div>
		</div>
	</body>
</html>

19、IE6下通过margin负值,使元素移出父级的位置,那出去的部分会被截掉

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			.box{
				width: 200px;
				height: 200px;
				border: 1px solid #f00;

			}
			.box div{
				width: 100px;
				height: 100px;
				background: green;
				margin: -10px 0 0 -10px;
                _position: relative;
			}
		</style>
	</head>
	<body>
		<!--
			IE6下通过margin负值,使元素移出父级的位置,那出去的部分会被截掉
			解决方法
				1.给元素添加相对定位,(有效)
				2.或者给父级overflow:hidden;(无效)
		-->
		<div class="box">
			<div></div>
		</div>
	</body>
</html>

20、IE67下输入类型的表单控件,上下两边各有1px的间隙

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				border: 1px solid #f00;
				overflow: hidden;
				zoom: 1;
			}
			div input{
				float: left;  /*加浮动*/
			}
		</style>
	</head>
	<body>
		<!--
			IE67下输入类型的表单控件,上下两边各有1px的间隙
			解决办法
				给控件加浮动
		-->
		<div>
			<input type="text" />
		</div>
	</body>
</html>

21、IE8以及IE8之前不识别H5标签

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			document.createElement('header');
			document.createElement('nav');
		</script>
		<script src="js/html5shiv.min.js"></script>
		<style>
			header{
				width: 100px;
				height: 100px;
				background: red;
				/*display: block;*/
			}
			nav{
				width: 200px;
				height: 200px;
				background: green;
			}
		</style>
	</head>
	<body>
		<!--
			IE8以及IE8之前不识别H5标签
			解决办法
				1.创建标签createElement,加入html5shiv.min.js
		-->
		<header>头部</header>
		<nav>导航</nav>
	</body>
</html>

22、IE6不支持png透明图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="js/DD_belatedPNG_0.0.8a.js"></script>
		<script>
			DD_belatedPNG.fix('img,div');
		</script>
		<style>
			body{
				background: #ccc;
			}
			div{
				width: 300px;
				height: 300px;
				background:url(img/1.png);
			}
		</style>
	</head>
	<body>
		<!--
			IE6不支持png-24透明图片:
			解决办法:
			加入DD_belatedPNG_0.0.8a.js,并给添加png图片的标签添加启用: DD_belatedPNG.fix('img,div')
		-->
		<img src="img/1.png"/>
		<div></div>
	</body>
</html>

方法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');
			/*
			 * 这个插件不支持body的背景
			 */
		</script>
		<style>
		/*
		 * 用滤镜的话就必需给body高度
		 */
			body{
				height: 500px;
				background: #ccc url(img/1.png) no-repeat;
				_background-image:none;
				filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="img/1.png", sizingMethod="crop");
			}
			
		</style>
	</head>
	<body>
	</body>
</html>

附加:

--条件注释

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			div{
				width: 100px;
				height: 100px;
				background: red;
			}
		</style>
		<!--[if IE 6]>
			<style>
				div{
					width: 100px;
					height: 100px;
					background: blue;
				}
			</style>
		<![endif]-->
	</head>
	<body>
		<!--
			条件注释语句,IE9及IE9之前的IE支持
		-->





		<!--[if IE]>
		这是IE
		<![endif]-->
		
		
		<!--[if IE 9]>
		9
		<![endif]-->
		
		
		<!--[if IE 8]>
		8
		<![endif]-->
		
		
		<!--[if IE 7]>
		7
		<![endif]-->
		
		
		<!--[if IE 6]>
		6
		<![endif]-->
		
		
		
		
		
		
		
		<!--[if gt IE 7]>
		gt  高于 某个版本
		<![endif]-->
		
		
		<!--[if gte IE 7]>
		gte  高于等于 某个版本
		<![endif]-->
		
		
		<!--[if lt IE 7]>
		it 低于 某个版本
		<![endif]-->
		
		
		<!--[if lte IE 7]>
		ite 低于等于 某个版本
		<![endif]-->
		
		
		<!--[if Ite IE 8]>
		<![endif]-->
		
		<div></div>
	</body>
</html>

ie6测试兼容的浏览器可以直接打开测试,挺方便的...

本文作者: Jasmine

本文链接: https://www.jianbaizhan.com/article/598

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!