div css 瀏覽器安全色問題的一點解決辦法

來源:互聯網
上載者:User

瀏覽器之間的css互相不相容,相信網頁製作人員都會深惡痛絕。

收集了一些常見的相容問題解決方案 與大家一起分享

1. 文字大小不相容。
同樣14px的宋體字,ie下實際占高16px,下留白3px,firefox下實際占高17px,上留白1px,下留白3px。
文字大小不相容解決方案:給所有文字設定通用line-height

2. div高度不相容:
firefox下div容器定義height後,div不會因為內容超出height而撐大,而i6e下是會被內容撐大,高度限定失效。所以不要輕易給容器定義height。

div高度不相容解決方案:
如果設定高度,需要同時把內容物高度限定,也就是溢出隱藏處理:overflow:hidden;或者當需要隨著內容自適應高度,但又想div有一個最小的高度時候,像飛龍這樣做
min-height: 1400px;/* for ie7 firefox opera*/
max-height:none;/* for ie7 firefox opera*/
_height: 1400px;/* only for ie6*/

或是:

min-height:1400px;

height:auto!important;

height:1400px;

<span id="more-421"></span>

3. div寬度不相容:
如果div容器設定float浮動但沒設定寬度,那麼也會出現ie6和firefox的不相容。firefox下內容會撐開容器滲入它前面的div,ie6下該div內容折行而不是我們想象的與同級div在同一行。

div寬度不相容解決方案:浮動div容器一般需定義width。

4. div浮動不相容:飛龍發現當前面div有左浮動和右浮動,下面div就會受他們影響也有浮動。ie也許不用加清除,但firefox下不清除浮動是不行的。
div浮動不相容解決方案:給下面的div設定清除 clear:both;

5. 最被痛恨的double-margin不相容。ie6下給浮動容器定義margin-left 或者margin-right 實際效果是數值的2倍。
解決方案,給浮動容器定義display:inline

6. mirror margin不相容。當外層元素內有float元素時,外層元素如定義margin-top:14px,將自動產生margin- bottom:14px.padding也會出現類似問題,都是ie6下的特產,該類bug 出現的情況較為複雜,遠不只這一種出現條件,還沒系統整理。引申:ff 和ie 下對容器的margin-bottompadding-bottom的解釋有時不一致,似乎與之相關。
解決方案:外層元素設定border 或設定float。

7. 吞吃現象。還是ie6,上下兩個div,上面div設定背景,卻發現下面沒有設定背景的div 也有了背景,這就是吞吃現象。對應上面的背景吞吃現象,還有滾動下邊框缺失的現象。飛龍沒明白這啥意思。
解決方案:使用zoom:1.這個zoom好象是專門為解決ie6 bug而生的。

8. 注釋也能產生bug。多出來的一隻豬,這是前人總結這個bug使用的比喻。ie6下這個bug,大家會在頁面看到豬字出現兩遍,重複內容量因注釋的多少而變。解決方案:用”<!-[if !IE]> picRotate start <![endif]->”方法寫注釋。

9. <li/>裡加 float <div/> 。這是一個典型的,棘手的相容問題,希望引起大家重視。,給li不同的屬性會有不同的解釋效果,ff下的解釋稍可理解,ie6下的解釋會讓你摸不著頭腦。在《ul使用心得》一文裡有相關成果,卻沒給出問題解決過程。

10. 使用了”float:left;display:inline”的ul的奇怪表現。可以看出這句css是針對ie6下的double margin bug 而加上的display:inline,這也是我的css體系裡的重要一環,在《ul使用心得》一文中有相關闡述。而這句css用在ul上會讓你痛苦不堪。

11. img下的留白,大家看這段代碼有啥問題:
<div>
<img src=”" mce_src=”" />
</div>

把div的border開啟,你發現圖片底部不是緊貼著容器底部的,是img後面的空白字元造成,要消除必須這樣寫
<div>
<img src=”" mce_src=”" /></div>
後面兩個標籤要緊挨著.ie7下這個bug 依然存在。解決方案:給img設定 display:block

12. 失去line-height。<div style=”line-height:20px”><img />文字</div>,很遺憾,在ie6下單行文字 line-height 效果消失了,原因是<img />這個inline-block元素和inline元素寫在一起了。解決方案:讓img 和文字都 float起來。

引申:大家知道img 的align 有 text-top,middle,absmiddle啊什麼的,你可以嘗試去調整img 和文字讓他們在ie和ff下能一致,你會發現怎麼調都不會讓你滿意。索性讓img 和文字都 float起來,用margin 調整。

13. 連結的hover狀態.a:hover img{width:300px} 我們想讓滑鼠hover時,連結裡包含圖片寬度變化,可惜在ie6下無效,ie7、ff下有效。

14. 非連結的hover狀態.div:hover{} 這樣的樣式ie6是不認的,在ie7、ff下才有效果。

15. block化的a連結,其內套absolute層,absolute層內放置img,ie下,滑鼠點擊img不會有連結效果,firefox、opera下正常。

上面的諸多問題如果你掌握了其中奧妙,90%的不相容問題不需要另起css hack的。

16. 無法徹底清除的float。如果讓ul下的li具有了float屬性,如何clear浮動的li呢?<ul><li class=”c”></li></ul> 或者 <ul><li><div class=”c”></div></li></ul> 或者 <ul><li></li><div>class=”c”></div></ul> 或者 <ul><li></li></ul><div>class=”c”></div> 或者上述的組合?這個問題,我無法給出解答。

下面有個例子與此相關
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

<style type=text/css>
.c{clear:both;overflow:hidden;+overflow:visible}
.bd{border:1px solid red}

ul.ex{list-style:none;}
ul.ex li{float:left;border:1px solid green;}
</style>
<ul class="ex">
<li>sfsdfsfdf</li>
<li>sfsdfsfdf</li>
</ul>
<div class="c"></div>
<div class="bd" style=margin-top:19px>sfsdfsfdf</div>

請在ie下 測試,僅僅將 margin-top:19px 改為margin-top:20px 你發現什麼了?要素:doctype必須有,ie6、ie7下margin-top:19px還好好的,margin-top:20px 就出問題了,無法解釋…大家還可以將 clear 層換不同的位置測試。

解決方案:給ul 屬性zoom:1 (給li 加zoom:1 沒用)

引申:clear層應該單獨使用。也許你為了節省代碼把clear屬性直接放到下面的一個內容層,這樣有問題,不僅僅是ff和opera下失去margin效果,ie下某些margin值也會失效

<div style=”background:red;float:left;”>dd</div>
<div style=”clear:both;margin-top:18px;background:green”>ff</div>

17. ie下overflow:hidden對其下的絕對層position:absolute或者相對層position:relative無效。
解決方案:給overflow:hidden加position:relative或者position:absolute。另,ie6支援overflow-x或者overflow-y的特性,ie7、ff不支援。

18. ie6下嚴重的bug,float元素如沒定義寬度,內部如有div定義了height或zoom:1,這個div就會佔滿一整行,即使你給了寬度.float元素如果作為布局用或複雜的容器,都要給個寬度的。

19. ie6下的bug,絕對位置的div下包含相對定位的div,如果給內層相對定位的div高度height具體值,內層相對層將具有100%的width值,外層絕對層將被撐大。解決方案給內層相對層float屬性。

20. ie6下的bug,<head></head>內有<base target=”_blank”/>的情況下,position:relative層下的float層內文字無法選中。這個bug迫使我修公用樣式庫。

21. 終於來了個firefox缺點 width:100%這個東西在ie裡用很方便,會向上逐層搜尋width值,忽視浮動層的影響,ff下搜尋至浮動層結束,如此只能給中間的所有浮動層加width:100%才行,累啊.opera這點倒學乖了跟了ie。

22. Padding vs. Margin
對於瀏覽器來說,Margin是相容性最差的一個屬性。因此只要條件允許,儘可能的使用Padding屬性。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.