ie下面兼容性問題的一些總結(轉)


1.浮動兼容性

1.1IE6下的雙邊距BUG

在IE6下,塊元素有浮動和橫向margin的時候,最邊上元素的橫向margin值會被放大成兩倍

解決辦法: display:inline;

1.2IE6,7下li的間隙

在IE6,7下li本身沒浮動,但是li內容有浮動的時候,li下邊就會產生4px的間隙

解決辦法: 1.給li加浮動(但是width就變為由自適應內容,所以還要加寬度)

2.給li加vertical-align:top/middle/bottom;

ps:當li間隙問題,和最小高度問題都在時,只能用給li加浮動方法。

1.3ie67清除浮動需要觸發haslayout才可以

.clear:after{content:'';display:block;clear:both;}

.clear{zoom:1;}

after偽類: 元素內部末尾添加內容;

:after{content"添加的內容";} IE6,7下不兼容

zoom 縮放 

a、觸發 IE下 haslayout,使元素根據自身內容計算寬高。

b、FF 不支持;

1.4ie6,7下左邊元素浮動,右邊元素通過margin並到一行,會出現3像素bug。

解決方法:通過浮動並在一行

1.5當浮動元素和絕對定位元素是並列關系的時候,在IE6下絕對定位元素會消失

解決辦法:

給定位元素外面包個div

1.6在IE6下的文字溢出BUG

子元素的寬度和父級的寬度相差小於3px的時候,兩個浮動元素中間有注釋或者內嵌元素的時候,ie6下文字會溢出

解決辦法:用div把注釋或者內嵌元素用div包起來

<style>
 
 .wrap{ width:300px;}
 
 .left{float:left;}
 
 .right{width:300px;float:right;}
 
 </style>
 
 <div class="wrap">
 
   <div class="left"></div>
 
     <div><!-- IE6下的文字溢出BUG --><span></span></div>
 
     <div class="right">范德薩范德薩范德薩</div>
 
 </div>





2.定位問題

2.1ie6下面父級一定會包含住子級,當子級高度比父級高時,子級會把父級高度撐開

解決方法:給父級加overflow:hidden;

問題:當子級有position:relative;時,父級的overflow是包不住子級的relative的。(解決方法:給父級也加一個position;)

2.2position:absolute;寬高奇數問題

在 IE6 下定位元素的父級寬高都為奇數那么在 IE6 下定位元素的 right 和 bottom 都有1像素的偏差。

2.3固定定位ie6下不兼容

3.表單問題

3.1在IE6,7下輸入類型的表單控件上下各有1px的間隙

解決辦法:給input加浮動

3.2在IE6,7下輸入類型的表單控件加border:none;

解決辦法: 重置input的背景或者border:0;

3.3當inline-block與text-indent在IE6、7下相遇后

text-indent為負時,元素向左偏移,text-indent為正時,元素向右偏移。在這種情況下,元素的偏移量由text-indent和margin值決定,如:margin-left:-10px; text-indent:10px相當於margin-left:0; text-indent:0元素沒有偏移。

input、select、button、textarea的默認display皆為inline-block。

解決方法一:ie67,用display:block;

解決方法二:用padding代替text-indent;

3.4ie6下面input背景圖片滾動

解決方法:在外面套一層div,背景圖片寫在div里面,input背景透明或無。

3.5ie6下面label(radio、checkbox)不加for屬性沒有效果

<label><input type="checkbox" id="man">man</label>

3.6ie6下面textarea默認有滾動條

解決方法:textarea{overflow:auto;}

4.圖片下方間隙問題

a、display:block; (改變標簽本身特性)

b、vertical-align (完美方案)

5.ie6下最小高度問題

Ie6下最小高度小於20px會解析為20px

解決方法:

height:1px;overflow:hidden;

6.ie6body高度的問題

<div class="wrap">
2      <ul>
3          <li>fdasfd</li>
4          <li>fdsfds</li>
5          <li>fdfds</li>
6      </ul>
7 </div>



1 .wrap{
 2     width:800px; 
 3     height:200px;
 4     margin:200px auto;
 5     border:1px solid red; 
 6     position:relative;
 7     overflow: hidden;
 8 }
 9 .wrap ul{
10     float: left; 
11     position: relative; 
12     left:50%;
13     top:50%; 
14     border:1px solid red; 
15     height:100px; 
16 }
17 .wrap li{
18     float: left; 
19     width:100px; 
20     height:100px; 
21     background:red; 
22     position: relative; 
23     left:-50%;
24     top:-50%; 
25     margin-left:10px; 
26     list-style: none; 
27     _display:inline; /*ie6雙邊距*/
28     *overflow: hidden;/*ie7下面不支持寬度*/
29 }



在上面這個水平垂直居中浮動元素的時候遇到一個問題,就是如果不給ul加高度,那么li下面的top:-50%失效,為什么?

原因:一個對象是否可以使用百分比顯示,取決於對象的父級對象

怎么才能支持百分比呢:

一般來說,要滿足兩個條件:

其一,父標簽有高度可尋,就是向上遍歷父標簽要找到一個定值高度,如果中途有個height為auto或是沒有設置height屬性,則高度百分比不起作用;

其二,標簽本身的屬性,如果內聯元素,則需要有浮動,絕對定位,固定定位之類屬性讓他支持寬高;

  上面li的向上偏移是相對於ul的,而ul沒有高度,所以li就向上偏移不了。

同理,我們要做一個遮罩層{position:absolute;top:0;left:0;height:100%;width:100%;background:#000;opacity:0.3;filter:alpha(opacity:30);},需要給該遮罩層設置寬高100%,在ie67下面,雖然遮罩層的offsetParent(定位父級)是html,但是瀏覽器默認狀態 下,是沒有給body一個高度屬性的,因此我們不給body設置height的話,遮罩層的高度也就不能用,所以當我們給遮罩層設置height:100%;時,不會產生任何效果,而當我們給body設置了100% 之后,遮罩層的height:100%便發生作用了。所以我們需要給ie6下面的body{height:100%;}

7. 1px dotted red;在ie6下不支持,表現的和1px dashed red一樣

  解決方法:切背景平鋪(就用dashed挺好看的)

8.在IE6下解決margin傳遞要觸發haslayout

  在IE6下父級有邊框的時候,子元素的margin值消失

  解決辦法:觸發父級的haslayout:zoom:1;

9.ie6下偽類只支持a標簽

  注意書寫順序:a:link a:visited a:hover a:active

10.ie6當一行子元素占有的寬度之和和父級的寬度相差超過3px,或者有不滿行狀態的時候,最后一行子元素的下margin在IE6下就會失效

11.透明度opacity,ie8 以下不兼容

  filter:alpha(opacity:);

12.ie6下png不支持

  解決方法:js、濾鏡(_background:none;_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="XX.png", sizingMethod="crop");)

13.ie67非法嵌套的標簽會被異常處理

  如:ul>li*4+p

  在標准瀏覽器下面p標簽和li為兄弟關系

  Ie67下:p標簽會被li吃掉,變為父子關系

14.ie67下面內容高度沒有屏幕高時,也會有滾動條

  解決方法:overflow:auto;

15.IE6/7:躲貓貓bug

產生條件1:一個浮動元素后面跟着一個非浮動元素,接着是一個清理元素,所有元素都包含在一個有背景色或背景圖片的父元素中。

解決辦法:

1.不要在父容器里面使用背景或圖片(要必須有背景的話,這個當然這個不是可行的)。

2.給容器指定一個行高。

3.將浮動元素和容器元素的position屬性設置為relative。

產生條件2:一個撐破了容器的浮動元素,如果在他之后有不浮動的內容,並且有一些定義了:hover的 鏈接,當鼠標移到那些鏈接上時,在IE6下就會觸發躲貓貓。

解決方法:
1.在(那個未浮動的)內容之后添加一個<span style=”clear: both;”> </span>
2.觸發包含了這些鏈接的容器的hasLayout,一個簡單的方法就是給其定義height:1%;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM