.Net源码论坛 [ 繁体中文 ]

发新话题 回复该主题

总结css兼容问题 [复制链接]

楼主
目前主流浏览器的兼容性做的都比较好了,本文主要针对IE6,7的不兼容问题进行解决。

1.有浮动存在时,计算一定要精确,不要让内容的宽高超出我们所设置的宽高,IE6下,内容会撑开设置好的高度。

  解决方法:给对应的父级加overflow:hidden;但是会有部分被隐藏掉,最好是精确计算宽高再设定

eg:(ie会撑开)

  • <style>
  • .box{ width:400px;}
  • .left{ width:200px;height:300px;background:red;float:left;}
  • .right{ width:200px;float:right;}
  • .div{width:180px;height:180px;background:blue;padding:15px;}
  • /*
  •     计算一定要精确 不要让内容的宽高超出我们设置的宽高
  •     在IE6下,内容会撑开设置好的宽高
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div class="left"></div>
  •     <div class="right">
  •         <div class="div"></div>
  •     </div>
  • </div>
  • </body>

复制代码
2. 在IE6下有元素浮动时,如果宽度需要由内容撑开,就给里边的块元素都加浮动,正常浏览器不用加浮动。

eg:

  • <style>
  • .box{ width:400px;}
  • .left{background:red;float:left;}
  • .right{float:right; background:blue;}
  • h3{margin:0;height:30px; float:left;}
  • /*
  •     在IE6元素浮动,如果宽度需要内容撑开,就给里边的块元素都加浮动
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div class="left">
  •         <h3>左侧</h3>
  •     </div>
  •     <div class="right">
  •         <h3>右侧</h3>
  •     </div>
  • </div>
  • </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:

  • <style>
  • body{margin:0;}
  • .box{background:blue;border:1px solid #000; zoom:1;}
  • .div{width:200px;height:200px;background:red;margin:100px;}
  • /*
  •     在IE6下解决margin传递要触发haslayout

  •     在IE6下父级有边框的时候,子元素的margin值消失

  •     解决办法:触发父级的haslayout
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div class="div"></div>
  • </div>
  • </body>

复制代码
6. 在IE6下,块元素有浮动和和横向的margin值 ,横向的margin值会被放大成两倍。

  解决办法:添加display:inline;

  • <style>
  • .box{ float:left;border:10px solid #000;}
  • .box div{width:100px;height:100px;background:Red;margin-right:20px;border:5px solid #ccc; float:left;}
  • /*
  •     margin-right 一行右侧第一个元素有双边距

  •     margin-left 一行左侧第一个元素有双边距
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div>1</div>
  •     <div>2</div>
  •     <div>3</div>
  •     <div>4</div>
  • </div>
  • </body>

复制代码
7. 在IE6,7下,li自身没浮动,但是li的内容有浮动,li下边就会产生一个间隙

  解决办法:1.给li加浮动
              2.给li加vertical-align;

注意:当IE6下最小高度问题,和 li的间隙问题共存的时候, 给li加浮动才能解决。

eg:

  • <style>
  • ul{margin:0;padding:0;width:302px;}
  • li{ list-style:none;height:30px;border:1px solid #000; vertical-align:top;}
  • a{width:100px;float:left;height:30px;background:Red;}
  • span{width:100px;float:right;height:30px;background:blue;}
  • /*
  •     在IE6,7下,li本身没浮动,但是li的内容有浮动,li下边就会产生一个间隙
  •     解决办法:
  •         1.给li加浮动
  •         2.给li加vertical-align
  • */
  • </style>
  • </head>
  • <body>
  • <ul>
  •     <li>
  •         <a href="#"></a>
  •         <span></span>
  •     </li>
  •     <li>
  •         <a href="#"></a>
  •         <span></span>
  •     </li>
  •     <li>
  •         <a href="#"></a>
  •         <span></span>
  •     </li>
  • </ul>
  • </body>

复制代码
8.当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候,最后一行子元素的下margin在IE6下就会失效
解决方法:额,还没发现

eg:

  • <style>
  • .box{border:10px solid #000;width:600px; /* width:603px; */ overflow:hidden;}
  • .box div{width:100px;height:100px;background:Red;margin:20px;border:5px solid #ccc; float:left; display:inline;}
  • /*
  •     当一行子元素占有的宽度之和和父级的宽度相差超过3px,或者有不满行状态的时候,最后一行子元素的下margin在IE6下就会失效
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div>1</div>
  •     <div>2</div>
  •     <div>3</div>
  •     <div>4</div>
  •     <div>1</div>
  •     <div>2</div>
  •     <div>3</div>
  •     <div>4</div>
  •     <div>1</div>
  •     <div>2</div>
  •     <div>3</div>
  •     <!-- <div>4</div> -->
  • </div>

复制代码
9. 在IE6下的文字溢出BUG。即:子元素的宽度和父级的宽度相差小于3px的时候,或者两个浮动元素中间有注释或者内嵌元素的时候,IE6下文字溢出

  解决办法:用div把注释或者内嵌元素用div包起来。

eg:

  • <style>
  • .box{ width:400px;}
  • .left{float:left;}
  • .right{width:400px;float:right;}
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div class="left"></div>
  •     <!-- IE6下的文字溢出BUG --><span></span>
  •     <div class="right">&darr;哈哈哈哈哈哈哈哈哈哈</div>
  • </div>
  • <!--
  •     在IE6下的文字溢出BUG

  •     子元素的宽度和父级的宽度相差小于3px的时候,两个浮动元素中间有注释或者内嵌元素

  •     解决办法:用div把注释或者内嵌元素用div包起来
  • -->
  • </body>

复制代码
10. 当浮动元素和绝对定位元素是并列关系的时候,在IE6下绝对定位元素会消失。
    解决办法: 给定位元素外面包个div。

eg:

  • <style>
  • .box{ width:200px;height:200px;border:1px solid #000; position:relative;}
  • span{width:50px;height:50px;background:yellow; position:absolute;right:-20px;top:0;}
  • ul{width:150px;height:150px;background:Red;margin:0 0 0 50px;padding:0; float:left; display:inline;}
  • /*
  •     当浮动元素和绝对定位元素是并列关系的时候,在IE6下绝对定位元素会消失
  •     解决办法:
  •         给定位元素外面包个div
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <ul></ul>
  •     <span></span>
  • </div>

复制代码
11. 在IE6,7下,子元素有相对定位的话,父级的overflow包不住子元素。

   解决办法: 给父级也加相对定位 position:relative;。

eg:

  • <style>
  • .box{ width:200px;height:200px;border:1px solid #000; overflow:hidden; /*  position:relative; */ }
  • .div{ width:150px;height:300px;background:yellow; position:relative;}
  • /*
  •     在IE6,7下,子元素有相对定位的话,父级的overflow包不住子元素

  •     解决办法: 给父级也加相对定位position:relative;
  • */
  • </style>
  • </head>
  • <body>
  • <div class="box">
  •     <div class="div"></div>
  • </div>
  • </body>

复制代码
12. 在IE6下绝对定位元素的父级宽高是奇数的时候,元素的right值和bottom值会有1px的偏差.

  解决办法: 尽量用偶数,还没发现别的方法。




13. 在IE6下,position:fixed; 是没有效果的。

  解决方法:用js来控制吧。。。



14. 在IE6,7下输入类型的表单控件上下各有1px的间隙。

  解决办法:给input加浮动,或者是绝对定位。

15. 在IE6,7下输入类型的表单控件加border:none;会发现border还在,

   解决办法: 重置input的背景,如input{backgroundfff;}; 或者使用border:0;或border:0 none;



16. 在IE6,7下输入类型的表单控件输入文字的时候,其背景图片会跟着一块移动 。

解决办法: 把背景加给父级。



目前知道的css兼容性问题只有这些,当然不包括css3,如有新发现或以上存在问题,请给予指点。
分享 转发
TOP
沙发

拿分来了哦
TOP
板凳

回复 2楼hulloboy123的帖子

楼主,不给力啊
TOP
地板

回复 2楼hulloboy123的帖子

不厚道
TOP
五楼

赚积分,小手一抖,积分到手
TOP
六楼

这个方法不错的
TOP
七楼

回复 5楼wsvip的帖子

.....
TOP
八楼

回复 6楼chghm的帖子

不明觉厉
TOP
九楼

不错,谢谢啊
TOP
十楼

回复 9楼lzg80的帖子

不客气
TOP
发新话题 回复该主题