目前主流浏览器的兼容性做的都比较好了,本文主要针对IE6,7的不兼容问题进行解决。
1. 有浮动存在时,计算一定要精确,不要让内容的宽高超出我们所设置的宽高,IE6下,内容会撑开设置好的高度。
解决方法 :给对应的父级加overflow:hidden;但是会有部分被隐藏掉,最好是精确计算宽高再设定
eg:(ie会撑开)
1 style > 2 .box { width : 400px ; } 3 .left { width : 200px ; height : 300px ; background : red ; float : left ; } 4 .right { width : 200px ; float : right ; } 5 .div { width : 180px ; height : 180px ; background : blue ; padding : 15px ; } 6 /* 7 计算一定要精确 不要让内容的宽高超出我们设置的宽高 8 在IE6下,内容会撑开设置好的宽高 9 */ 10 style > 11 head > 12 body > 13 div class ="box" > 14 div class ="left" > div > 15 div class ="right" > 16 div class ="div" > div > 17 div > 18 div > 19 body >
2. 在IE6下有元素浮动时,如果宽度需要由内容撑开,就给里边的块元素都加浮动,正常浏览器不用加浮动。
eg:
1 style > 2 .box { width : 400px ; } 3 .left { background : red ; float : left ; } 4 .right { float : right ; background : blue ; } 5 h3 { margin : 0 ; height : 30px ; float : left ; } 6 /* 7 在IE6元素浮动,如果宽度需要内容撑开,就给里边的块元素都加浮动 8 */ 9 style > 10 head > 11 body > 12 div class ="box" > 13 div class ="left" > 14 h3 >左侧 h3 > 15 div > 16 div class ="right" > 17 h3 >右侧 h3 > 18 div > 19 div > 20 body >
3. 在IE6下元素的高度的小于19px的时候,会被当做19px来处理
解决办法: 添加overflow:hidden;
4. 在IE6下border:1px dotted #000;中,dotted不支持,会以虚线的方式的出现。
解决方法: 切背景平铺
5. 在所有浏览器中子元素的margin-top,margin-bottom值会传递给父级;
解决办法:
a:给父级都添加浮动(或者给子级添加浮动也能解决margin-top问题,但是margin左右值会出现 双倍 的值,也就是双边据bug问题,下面会讲);
b:给父级添加position:relative;(或position:absolute;但是会脱离文档流)
c:添加display:inline-block; 正常浏览器,可行,但是IE,7下,块元素不支持display:inline-block;
d: 给附件添加border属性,例如border:1px solid red; 正常浏览器可行,在IE6下必须再给父级添加zoom:1;
eg:
1 style > 2 body { margin : 0 ; } 3 .box { background : blue ; border : 1px solid #000 ; zoom : 1 ; } 4 .div { width : 200px ; height : 200px ; background : red ; margin : 100px ; } 5 /* 6 在IE6下解决margin传递要触发haslayout 7 8 在IE6下父级有边框的时候,子元素的margin值消失 9 10 解决办法:触发父级的haslayout 11 */ 12 style > 13 head > 14 body > 15 div class ="box" > 16 div class ="div" > div > 17 div > 18 body >
6. 在IE6下,块元素有浮动和和横向的margin值 ,横向的margin值会被放大成两倍。
解决办法: 添加display:inline;
1 style > 2 .box { float : left ; border : 10px solid #000 ; } 3 .box div { width : 100px ; height : 100px ; background : Red ; margin-right : 20px ; border : 5px solid #ccc ; float : left ; } 4 /* 5 margin-right 一行右侧第一个元素有双边距 6 7 margin-left 一行左侧第一个元素有双边距 8 */ 9 style > 10 head > 11 body > 12 div class ="box" > 13 div >1 div > 14 div >2 div > 15 div >3 div > 16 div >4 div > 17 div > 18 body >
7. 在IE6,7下,li自身没浮动,但是li的内容有浮动,li下边就会产生一个间隙
解决办法: 1.给li加浮动
2.给li加vertical-align:top;
注意:当IE6下最小高度问题,和 li的间隙问题共存的时候, 给li加浮动才能解决。
eg:
1 style > 2 ul { margin : 0 ; padding : 0 ; width : 302px ; } 3 li { list-style : none ; height : 30px ; border : 1px solid #000 ; vertical-align : top ; } 4 a { width : 100px ; float : left ; height : 30px ; background : Red ; } 5 span { width : 100px ; float : right ; height : 30px ; background : blue ; } 6 /* 7 在IE6,7下,li本身没浮动,但是li的内容有浮动,li下边就会产生一个间隙 8 解决办法: 9 1.给li加浮动 10 2.给li加vertical-align 11 */ 12 style > 13 head > 14 body > 15 ul > 16 li > 17 a href ="#" > a > 18 span > span > 19 li > 20 li > 21 a href ="#" > a > 22 span > span > 23 li > 24 li > 25 a href ="#" > a > 26 span > span > 27 li > 28 ul > 29 body >
8. 当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候,最后一行子元素的下margin在IE6下就会失效
解决方法: 额,还没发现
eg:
1 style > 2 .box { border : 10px solid #000 ; width : 600px ; /* width:603px; */ overflow : hidden ; } 3 .box div { width : 100px ; height : 100px ; background : Red ; margin : 20px ; border : 5px solid #ccc ; float : left ; display : inline ; } 4 /* 5 当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候,最后一行子元素的下margin在IE6下就会失效 6 */ 7 style > 8 head > 9 body > 10 div class ="box" > 11 div >1 div > 12 div >2 div > 13 div >3 div > 14 div >4 div > 15 div >1 div > 16 div >2 div > 17 div >3 div > 18 div >4 div > 19 div >1 div > 20 div >2 div > 21 div >3 div > 224
查看更多关于css兼容性问题及一些常见问题汇总-jerrylsxu的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did115788