1. 程式人生 > >CSS:IE6/Ie7 display:inline-block 不起作用

CSS:IE6/Ie7 display:inline-block 不起作用

在 IE6、IE7中不識別display:inline-block屬性,但使用inline-block屬性在IE下會觸發layout,從而使內聯元素 擁有了display:inline-block屬性的表症。從上面的分析也不難理解為什麼IE6、IE7下對塊元素設定display:inline- block屬性無法實現inline-block的效果。這時塊元素僅僅是被inline-block觸發了layout,而它本就是行佈局,所以觸發 後,塊元素依然是行佈局。IE8識別display:inline-block;

IE下塊元素如何實現 display:inline-block 的效果?
有兩種方法:
1、先使用 display:inline-block 屬性觸發塊元素,然後再定義 display:inline,讓塊元素呈遞為內聯物件(兩個display 要先後放在兩個 CSS 宣告中才有效果,這是 IE 的一個經典 bug ,如果先定義了 display:inline-block,然後再將 display 設回 inline 或 block,layout 不會消失)。程式碼如下(…為省略的其他屬性內容):
div {display:inline-block;...}
div {display:inline;}
2、直接讓塊元素設定為內聯物件呈遞(設定屬性 display:inline),然後觸發塊元素的 layout(如:zoom:1 等)。程式碼如下:
div {display:inline; zoom:1;...}

如果是內聯元素使用了inline-block,那所有的瀏覽器顯示都是正常的。(ie6、ie7中對內聯元素使用display:inline-block,IE是不識別的,但使用display:inline-block在IE下會觸發layout,從而使內聯元素擁有了display:inline-block屬性的表徵。)
但是如果是塊級元素使用了inline-block,那在ie6和ie7中是有問題的。(ie6/ie7中塊元素僅僅是被display:inline-block觸發了layout,而它本身就是行佈局,所以觸發後,塊元素依然還是行佈局,而不會像火狐等其他瀏覽器塊元素呈遞為內聯物件。)
那麼,ie6/ie7下塊元素如何實現display:inline-block的效果?解決方法如下:
讓標準瀏覽器識別display:inline-block;讓ie6/7識別 display:inline;來覆蓋上面的display:inline-block;然後通過zoom:1;來觸發haslayout讓inline 元素在ie中表現得和inline-block元素一樣。
.list1 li{display:inline-block; width:150px; *zoom:1;*display:inline;

}
加上*zoom:1(觸發ie6和ie7下的haslayout);*display:inline(只有ie6和ie7識別);
注:一定要加在display:inline-block;後面。