首頁 web前端 css教學 css瀏覽器不相容原因的分析

css瀏覽器不相容原因的分析

Jun 28, 2018 am 11:45 AM

這篇文章主要介紹了關於css瀏覽器不相容原因的分析,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

瀏覽器的不相容,大家肯定都是深惡痛絕的,往往我們只是去做修補,卻忘了更重要的事情,那就是追溯根源,避免類似的不相容再次出現。

在下不才,歸納幾點html編碼要素,望點各位:
1.文字本身的大小不相容。同樣是font-size:14px的宋體文字,在不同瀏覽器下佔的空間是不一樣的,ie下實際佔高16px,下留白3px,ff下實際佔高17px,上留白1px,下留白3px,opera下就更不一樣了。解決方案:為文字設定 line-height 。確保所有文字都有預設的 line-height 值。這點很重要,在高度上我們不能容忍1px 的差異。 

2.ff下容器高度限定,也就是容器定義了height之後,容器邊框的外形就確定了,不會被內容撐大,而ie下是會被內容撐大,高度限定失效。所以不要輕易給容器定義height。 

3.也討論內容撐破容器問題,橫向上的。若float 容器未定義寬度,ff下內容會盡量撐開容器寬度,ie下則會優先考慮內容折行。故,內容可能撐破的浮動容器需要定義width。 

小實驗:有興趣大家可以看看這段實驗。在不同瀏覽器下分別測試以下各項程式碼。

a.<p style=”border:1px solid red;height:10px”></p> b.<p style=”border:1px solid red;width:10px”></p>
登入後複製
c.<p style=”border:1px solid red;float:left”></p> d.<p style=”border:1px solid red;overflow:hidden”></p>
登入後複製

上面的程式碼在不同瀏覽器中是不一樣的,實驗起源於對小height 值p 的運用,

,小height 值要配合overflow:hidden一起使用。實驗好玩而已,想說明的是,瀏覽器對容器的邊界解釋是大不相同的,容器內容的影響結果各不相同。 

4.浮動的清除,ff下不清除浮動是不行的。 

修正大家一個迷思,遇到不相容就說ff爛是不對的,其實更多時候是ie的奇怪表現讓我們無所適從。以下列出ie6的種種劣質。 

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

6.mirrormargin bug,當外層元素內有float元素時,外層元素如訂margin-top:14px,會自動產生margin-bottom:14px。 padding也會出現類似問題,都是ie6下的特產,這類bug 出現的情況較為複雜,遠不止於此出現條件,還沒系統整理。解:外層元素設定border 或 設定float。 

引申:ff 和ie 下對容器的margin-bottom,padding-bottom的解釋有時不一致,似乎與之相關。 

7.吞吃現象,限於篇幅,我就不展開了。還是ie6,上下兩個p,上面的p設定背景,卻發現下面沒有設定背景的p 也有了背景,這就是吞吃現象。對應上面的背景吞吃現象,還有滾動下邊框缺失的現象。解決方案:使用zoom:1。這個zoom好像是專門為解決ie6 bug而生的。

8.註解也能產生bug~~~「多出來的一隻豬。」這是前人總結這個bug使用的文案,ie6的這個bug 下,大家會在頁面看到豬字出現兩遍,重複的內容量因註釋的多寡而改變。解:以「 picRotate start 」方法寫註解。

9.

  • 裡加float

    ,這是一個典型的,棘手的兼容問題,希望引起大家正視,給li 不同的屬性會有不同的解釋效果,ff下的解釋稍可理解,ie6下的解釋會讓你摸不著頭腦,由於問題的複雜性,將另起一文專門討論該問題。在《ul使用心得》一文裡有相關成果,卻沒給出問題解決的過程。 

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

    11.img下的留白,大家看這段程式碼有啥問題:

    <p> 
    <img src=”” src=”” /> 
    </p>
    登入後複製

    把p的border打開,你發現圖片底部不是緊貼容器底部的,是img後面的空白字元造成,要消除必須這樣寫

    <p> 
    <img src=”” src=”” /></p>
    登入後複製

    後面兩個標籤要緊挨著。 ie7下這個bug 依然存在。解決方案:為img設定 display:block。 

    12.失去line-height。

    文字

    ,很遺憾,在ie6下單行文字 line-height 效果消失了。 。 。 ,原因是這個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状态。p:hover{} 这样的样式ie6是不认的,在ie7、ff下才有效果。

    15.block化的a链接,其内套absolute层,absolute层内放置img,ie下,鼠标点击img不会有链接效果,ff、op下正常。

    想不出来了,以后想到再加吧。上面的诸多问题如果你掌握了其中奥妙,90%的不兼容问题不需要另起css hack的。

    16.无法彻底清除的float。如果让ul下的li具有了float属性,如何clear浮动的li呢?

    或者
    • class=”c”>

    或者
    • class=”c”>

    或者

    class=”c”>

    或者上述的组合?这个问题,我无法给出解答。下面有个例子与此相关

    <!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> 
    <p class=c></p> 
    <p class=bd style=margin-top:19px>sfsdfsfdf</p>
    登入後複製

    请在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和op下失去margin效果,ie下某些margin值也会失效

    dd


    ff

     

    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元素如没定义宽度,内部如有p定义了height或zoom:1,这个p就会占满一整行,即使你给了宽度。float元素如果作为布局用或复杂的容器,都要给个宽度的。 

    19.ie6下的bug,绝对定位的p下包含相对定位的p,如果给内层相对定位的p高度height具体值,内层相对层将具有100%的width值,外层绝对层将被撑大。解决方案给内层相对层float属性。 

    20.ie6下的bug,内有的情况下,position:relative层下的float层内文字无法选中。这个bug迫使我修公用样式库。 

    21.终于来了个ff的缺点。width:100%这个东西在ie里用很方便,会向上逐层搜索width值,忽视浮动层的影响,ff下搜索至浮动层结束,如此,只能给中间的所有浮动层加width:100%才行,累啊。opera这点倒学乖了跟了ie。 

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    CSS透明opacity和IE各版本透明度滤镜filter的用法

    关于webpack项目混用css module的方法

    以上是css瀏覽器不相容原因的分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

  • 本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱門文章

    <🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    北端:融合系統,解釋
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    Java教學
    1665
    14
    CakePHP 教程
    1424
    52
    Laravel 教程
    1322
    25
    PHP教程
    1270
    29
    C# 教程
    1249
    24
    vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

    在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

    了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

    WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

    HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

    HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

    bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

    創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

    bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

    在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

    bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

    要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

    bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

    要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

    bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

    如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

    See all articles