inline-block 兼容性


inline-block 兼容性

通常網頁模板都需要動態添加或刪除內容,在做網頁導航的時候,需要nav中的ul能夠居中並實現自適應拓展,如果ul是固定的長度很好實現居中,只需要設置margin:0 auto;就行。但是這里ul的長度是不確定的,設置了margin-left就沒法自適應居中了。在FF和IE7以上的瀏覽器中,設置.nav{text-align:center;},.nav ul{display:inline-block;padding:0;margin:0;}就ok了,但是在IE6中不行。

1)  在IE6、IE7中不識別display:inline-block屬性,但使用inline-block屬性在IE下會觸發layout,從而使內聯元素擁有了display:inline-block屬性的表症。

2)  在IE5.5中開始支持 inline-block 。你可以使用 inline-block 使對象獲得布局而無需指定確切的高( height )和寬( width )。

3) In IE 6 and 7 inline-block works only on elements that have a natural display: inline.
意思是說,IE6/7的inline-block屬性只對原生默認的內聯元素(span, a, em......)有效,對於塊級元素(div,p,ul......)無效。 
IE doesn't apply the value inline-block for the CSS display property on HTML elements that default to block level.

4) 那么現在有兩個結論: 1、IE6/7不識別inline-block,只是觸發了layout,表現跟真實一樣。
2、IE6/7不完全支持inline-block,只對內聯元素有效。

5) 找到了官方的說法,應該算是最正宗的了吧。。 
The following table shows Cascading Style Sheets (CSS) properties and corresponding values that, if set, cause an element to have layout. 
以下屬性一旦設置,將觸發元素的layout: 
CSS propertyValue 
display        inline-block 
height        any value 
float        left or right 
positionabsolute 
width        any value 
-ms-writing-modetb-rl 
zoom        any value

6)  延伸一個問題: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;...}

最后問題可以這樣解決:

.nav{...

text-align:center;

}
.nav ul{display:inline-block !important;*display:inline;zoom:1;margin:0;padding:0;}

display:inline-block !important;能在FF,IE7以上的瀏覽器中實現,因為他們支持;

*display:inline能使IE6保持行內元素,zoom:1能觸發IE6的layout,就能實現display:inline-block的效果。

 


免責聲明!

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



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