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%;