好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

css兼容性问题及一些常见问题汇总-jerrylsxu

目前主流浏览器的兼容性做的都比较好了,本文主要针对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 >
 22        

4

查看更多关于css兼容性问题及一些常见问题汇总-jerrylsxu的详细内容...

  阅读:36次