兼容问题汇总


l元素浮动之后,能设置宽度的话就给元素加宽度.如果需要宽度是内容撑开,就给它里边的块元素加上浮动;
解决方案:给需要宽度由内容撑开的元素加上浮动
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .box{width :400px ;border: 1px solid black;overflow: hidden;}
           .left{float :left; background: red;}
          .right{float :right; background: blue;}
           h2{margin :0; height:30 px;float : left ;}
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "left">
             < h2>左边</h2>
          </ div>
          < div class= "right" >
             < h2>右边</h2>
          </ div>
      </ div>
   </ body>
</ html>

l第一块元素浮动,第二块元素加margin值等于第一块元素,在IE6下会有间隙问题;
解决方案:不建议这么写,用浮动解决
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .box{width :500px ;}
          .left{width :200px ;height: 200px; float:left ;background: red}
          .right{width :200px ;height: 200px; background: blue; margin-left: 200px; }
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "left"></div >
          < div class= "right" ></div>
      </ div>
   </ body>
</ html>

lIE6下子元素超出父级宽高,会把父级的宽高撑开
解决方案:子元素高度不要超过父级高度
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .box{
              200px;
              height: 200px;
              border: 1px solid red;
           }
           .item{
              100px;
              height: 460px;
              background-color: blue;
           }
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "item"></div >
      </ div>
   </ body>
</ html>

lp标签包含块元素嵌套规则。
解决方案:p标签不要嵌套块元素
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
   </ head>
   < body>
      < p>
          < div>div</div >
      </ p>
   </ body>
</ html>

lmargin兼容性问题
1、父子级包含的时候子级的margin-top会传递给父级
2、同级元素上下外边距会叠压;

解决方案:
                    问题1、触发haslayout、BFC。
                    问题2、尽量使用同一方向的margin,比如都设置top或者bottom;或者用padding代替.

<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .box{
              background-color: green;
           }
           .head{
              height: 30px;
              background-color: red;
              margin: 50px;
           }
           .content{
              height: 30px;
              background-color: blue;
              margin: 50px;
           }
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "head">head</div >
          < div class ="content">content</div >
      </ div>
   </ body>
</ html>

ldisplay:inline-block
解决方案:针对ie6、7使用hack添加display:inline和zoom:1
<! DOCTYPE html>
< html lang= "en">
< head>
   < meta charset= "UTF-8" >
   < title>inline-block</title>
   < style type= "text/css" >
       div{
           100px;
           height: 100px;
           display:inline-block ;
           border:1 px solid red;
           font-size: 12px;
          *display: inline;
           *zoom: 1;
       }
       span{
           100px;
           height: 100px;
           display:inline-block ;
           border:1 px solid red;
           font-size: 24px;
          *display: inline;
           *zoom: 1;
          *margin-right: -4px ;
       }
       section{
           font-size:0 ;
       }
    </style>
</ head>
< body>
   < p>块元素转内联块</p>
   < hr>
   < section>
      < div>块1</div>
      < div>块2</div>
      < div>块3</div>
   </ section>
   
   < p>内联元素转内联块</ p>
   < hr>
   < section>
      < span href= "">内联1</span>
      < span href= "">内联2</span>
      < span href= "">内联3</span>
   </ section>
   
</ body>
</ html>

lIE6 最小高度问题
解决方案:针对ie6、7使用hack添加overflow:hidden
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .box{
              height: 1px;
              background-color: red;
              overflow: hidden;
           }
      </ style>
   </ head>
   < body>
      < div class= "box"></div >
   </ body>
</ html>

lIE6 双边距
解决方案:针对ie6、7使用hack添加display:inline
<! doctype html>
< html lang= "en">
< head>
   < meta charset= "UTF-8" />
   < title></title >
   < style>
       body{margin :0}
       .box{
           200px;
           height: 200px;
           margin: 100px;
           background-color: red;
           float: left;
           *display: inline;
       }
   </ style>
</ head>
< body>
   < div class= "box"></div >
</ body>
</ html>

lli里元素都浮动 li 在IE6 7  下方会产生4px间隙问题
解决方案:针对ie6、7使用hack添加vertical-align
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           .list{
              margin: 0;
              padding: 0;
              list-style: none;
              300px;
           }
           .list li {
              height: 30px;
              border: 1px solid red;
              line-height: 30px;
              *vertical-align: top;
           }
           .list li a{
              float: left;
           }
           .list li span{
              float: right;
           }
      </ style>
   </ head>
   < body>
      < ul class= "list">
          < li>
             < a href= "">左侧</a>
             < span>右侧</span>
          </ li>
          < li>
             < a href= "">左侧</a>
             < span>右侧</span>
          </ li>
      </ ul>
   </ body>
</ html>

l浮动元素之间注释,导致多复制一个文字问题
解决方案:两个浮动元素中间有注释或者内嵌元素并且和父级宽度相差不超过3像素,文字就被复制。所以避免注释和内联元素的出现。
<! doctype html>
< html>
< head>
< meta charset= "utf-8" >
< title>无标题文档</title>
< style>
.wrap { 400px; }
.left {float: left;}
.right {float: right;width :400px ;}
</ style>
</ head>
< body>
< div class= "wrap">
   < div class= "left"></div >
    < span></span ><span></ span><!-- IE下文字溢出BUG -->
    < div class= "right" >&darr;这是多出来的一只猪</ div>
</ div>
</ body>
</ html>

lIE6 7 父级元素的overflow:hidden 是包不住子级的relative
解决方案:针对ie6、7使用hack给父级定位元素添加position:relative
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           *{
              margin: 0;
              padding: 0;
           }
           .box{
              200px;
              height: 200px;
              background-color: red;
              border:4 px solid black;
              overflow: hidden;
              * position: relative;
           }
           .item{
              300px;
              height: 300px;
              background-color: blue;
              position: relative;
           }
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "item"></div >
      </ div>
   </ body>
</ html>

lIE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1px的偏差
解决方案:避免父级宽高出现奇数
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           *{margin :0; padding:0 ;}
           .box{
              308px;
              height: 408px;
              background-color: red;
              position:absolute ;
           }
           .item{
              100px;
              height: 100px;
              background-color: green;
              position: absolute;
              right: 0;
              bottom: 0;
           }
      </ style>
   </ head>
   < body>
      < div class= "box">
          < div class= "item"></div >
      </ div>
   </ body>
</ html>

lIE6下绝对定位元素和浮动元素并列绝对定位元素消失
解决方案:浮动元素和绝对定位元素是同级的话,定位元素会消失。所以只要不是同级就可以避免这个问题。
<! doctype html>
< html>
< head>
< meta charset= "utf-8" >
< title>无标题文档</title>
< style>
.box { 200px; height:200 px; border :1px solid #000; position :relative; }
.box div{ 150 px;height :150px ; background :Red;margin-left :50px ; float :left; display:inline ;}
.box span{ width :50px ;height: 50px; background:yellow; position :absolute; top:-10 px;right :-20px ;}
</ style>
</ head>
< body>
< div class= "box">
   < div></div >
   < p><span ></span></ p>
</ div>
</ body>
</ html>

lIE6 下input的空隙 和 border问题
解决方案:给input浮动清除空隙;
<! doctype html>
< html>
< head>
< meta charset= "utf-8" >
< title>无标题文档</title>
< style>
.box { 200px; border:1 px solid #000 ; background: Red;}
.box input {border: none;margin :0; padding:0 ; 200px; height:30 px; background :#fff; float:left }
</ style>
</ head>
< body>
< div class= "box">
   < input type= "text" />
</ div>
</ body>
</ html>

lIE6下输入类型表单控件背景问题
解决方案:设置background-attachment:fixed
<! DOCTYPE html>
< html>
   < head>
      < meta charset= "utf-8" >
      < title></title >
      < style>
           input{
              200px;
              height: 30px;
              background: url(mail.jpg) no-repeat ;
              background-attachment : fixed ;
           }
       </style>
   </ head>
   < body>
      < input type= "text" />
   </ body>
</ html>

原文地址:https://www.cnblogs.com/jiechen/p/5335283.html