1. 程式人生 > >常見瀏覽器相容問題、盒模型2種模式以及css hack知識講解

常見瀏覽器相容問題、盒模型2種模式以及css hack知識講解

什麼是瀏覽器相容問題?所謂的瀏覽器相容性問題,是指因為不同的瀏覽器對同一段程式碼有不同的解析,造成頁面顯示效果不統一的情況。在大多數情況下,我們的需求是,無論使用者用什麼瀏覽器來檢視我們的網站或者登陸我們的系統,都應該是統一的顯示效果。所以瀏覽器的相容性問題是前端開發人員經常會碰到和必須要解決的問題。

總結一下我編寫程式碼的時候遇到的瀏覽器相容問題,跟大家學習。

一、解決無法在IE6下面設定1px高的容器(div)的問題。

  大家看看這一段程式碼:

  <div style="height:1px;width:100px;border:1px solid #000;"></div>

  當然,這段程式碼在非IE6下是能夠設定1px高度的div的(如左圖),但是在IE6中的效果如右圖:

  非IE6下: IE6下:

  解決方案:在div裡面新增一個空格符(&nbsp;)以建立內容;再設定line-height:1px;即可。

  <div style="height:1px;width:100px;border:1px solid #000;line-height:1px;">&nbsp;</div>

二、透明度opacity不相容的問題,opacity是屬於css2.1的內容,在IE6中並不支援(另外position:fixed;也是css2.1的內容,並不支援IE6)。

  建立一個寬高100px的div,設定透明度為0.5,背景色黑色如下:

  <style>  

    div{

    height: 100px;

    width: 100px;

    opacity:.5;

    background: #000;

    }

  </style>

  <div></div>

  效果圖分別如下:左邊為非IE6,右邊是IE6

  非IE6:  IE6:

  會看到在IE6中並不支援該屬性,解決方案:

  <style>  

    div{

    height: 100px;

    width: 100px;

    opacity:.5;

    filter:alpha(opacity=50);   //解決IE6問題

    background: #000;

    }

  </style>

  <div></div>

三、IE6下的橫向雙倍margin bug。設定為float的div在ie下設定的margin會加倍。這是一個ie6都存在的bug。

  首先要觸發這樣的bug,就要達到以下條件:

  1.元素必須浮動(float);

  2.元素必須具有橫向margin,margin-left、margin-right

  3.元素必須塊元素

  4.瀏覽器必須是IE6。

  以上條件缺一不可,所以只要不是IE6,就不存在這個問題。解決思路很簡單,破壞其中一個條件即可。

  例如:

複製程式碼
<head>
    <meta charset="UTF-8">
    <title>測試瀏覽器相容問題</title>
    <style>
        body{
            background: #fff;
        }
        .wrap{
            width: 300px;
            height: 150px;
            margin:50px auto;
            border: 2px solid #333;
            overflow: hidden;
        }
        .wrap div{
            height: 100px;
            width: 100px;
            background: #333;
            float: left; 
            margin-left: 20px;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <div></div>
        <div></div>
    </div>
</body>
複製程式碼

  效果圖分別如下:左邊為非IE6,右邊是IE6

  

  可以看到IE6下左邊是margin-left值是40px,解決方案:設定display:inline;將其轉換成行屬性。

四、IE6下如果給圖片套上a標籤會預設有border。

  img{

    width: 100px;

    height: 100px;

    }

  <a href="###"><img src="pic.jpg" alt=""></a>

  效果圖分別如下:左邊為非IE6,右邊是IE6

    

  這個問題相對比較容易解決,只要設定圖片的border:none;就可以了。需要注意的是不是設定a標籤的border值,而是設定圖片的。

五、IE6下不支援png格式圖片的透明效果。

  解決方案:使用使用外掛:DD_belatedPNG.js 外掛(如需要該外掛,可以自行百度:))

  說明一下使用方法:貼上以下程式碼即可

複製程式碼
<!--[if IE 6]>
    <script src="js/DD_belatedPNG_0.0.8a.js"></script>
    <script>
    DD_belatedPNG.fix('*');
    </script>    
<![endif]-->
複製程式碼

六、提一下擁有佈局haslayout。說道瀏覽器的相容問題就不得不提haslayout。

  在IE6、7中,有時候並沒有觸發擁有佈局。haslayout是什麼?用我的理解就是如果元素(標籤)擁有了佈局,那麼它就會獲得它本身預設的樣式,一切佈局就會按照這個預設標準佈局,也就是這個佈局是正常的。然而,如果元素沒有了預設的佈局,佈局是不是會亂呢?(因為我們給的樣式是在元素擁有佈局[預設樣式]之上的)。所以這種情況下,我們就必須觸發這個擁有佈局,觸發haslayout。

  觸發haslayout有很多種方法:

  1、最常用也最為安全的方法:給沒有haslayout的元素設定zoom:1;(其實是不是1不重要,只要除 none 外任意值)。之所以說它最安全,因為其他瀏覽器根本不認識它。

  2、設定height:任何值除了auto。

  3、設定浮動。

  4、設定width:任何值除了auto。

 七、介紹一下盒模型的2種模式。

  對於盒模型,大家應該也很熟悉,這裡只是介紹一下2個模式:標準模式和怪異模式

  標準模式:通常在非IE低瀏覽器中。計算方法:佔的空間的寬度=內容的寬度+左右內邊距的寬度+左右邊框的寬度+左右外邊 距的寬度(margin + padding+ border+ content)

  

  怪異模式:怪異模式是指在IE6及更早的IE版本下盒模型的計算方 法:所佔空間總寬度=內容+外邊距( content+margin)

            

  他們之間的相同點和不同點其實也很容易看得出來:

  相同點:都是由margin ,border,padding,content組成

  不同點::計算寬/高度方法的不同,標準模式下盒子的總寬度是由margin,padding,border,content的相加得來;怪異模式下:總寬度是由content減去padding、border得來的。

八、瀏覽器的相容還有其他的問題,時間有限就沒有一一解釋,下面提一提:

  ①:在各個瀏覽器下img有空隙(原因是:回車)

  ②:Ie6下,不識別最大寬、高度和最小寬高度,意即min-width/height和 Max-width/height在ie6中沒效果,

  ③:3畫素問題:ie6下,當浮動元素與流動元素並列顯示時,他們之間會存在三畫素問題。(解決方法用hack)

  ④:當定義行內元素為包含框時,且包含框包含的絕對定位元素以百分比為單位進行定位時,會出現混亂(zoom:1)

  ⑤:當多個浮動元素中間夾雜著HTML註釋語句時,如果浮動元素寬度為100%,則在下一行多顯示一個上一行最後一個字元。

  ⑥:兩個塊元素,豎向的margin值不增加,會重疊,其間距為最大margin值。

  ⑦:優先順序:被!important 註明的css屬性具有最高優先順序(.abc{color:red !important;})。但在ie6中!important具有一個bug:在同一組css屬性中,!important不起作用。

  ⑧:火狐不識別background-position-y 或background-position-x;

  ⑨:ie6 不支援 fixed(前面有提到)

  ⑩:解決 ie6 最大、最小寬高 hack方法(這個說明一下)

複製程式碼
/* 最小寬度 */
.min_width{
    min-width:300px;
    _width:expression(parseInt(this.clientWidth) < 300 ? "300px" : this.clientWidth);
}

/* 最大寬度 */
.max_width{
   max-width:600px;
   _width:expression(parseInt(this.clientWidth) > 600 ? "600px" : this.clientWidth);
}

/* 最小高度 */
.min_height{
   min-height:200px;
   _height:expression(parseInt(this.clientHeight) < 200 ? "200px" : this.clientHeight);
}

/* 最大高度 */
.max_height{
   max-height:400px;
   _height:expression(parseInt(this.clientHeight) > 400 ? "400px" : this.clientHeight);
}
複製程式碼

   ①①:z-index不起作用的 bug

九、css hack:前端開發人員根據不同的瀏覽器以及不同的版本而分別編寫的特定的CSS樣式,通俗理解就是專門為不同瀏覽器設定自己的樣式。

  各版本IE的hark,程式碼表示:

  .bb{

    height:32px;

    background-color:#f1ee18;       /*所有識別*/

    .background-color:#00deff\9;   /*IE6、7、8識別*/

    +background-color:#f1ee18;    /*IE6、7識別*/

    _background-color:#f1ee18;    /*IE6識別*/

    }

  < div class ="bb"></ div >

  像剛剛png圖片不支援插入的程式碼一樣,這種hack用在專門瀏覽器下,用法如下:下面還有很多類。

    <!--[if IE 6]>
        <script src="js/DD_belatedPNG_0.0.8a.js"></script>
        <script>
        DD_belatedPNG.fix('*');
        </script>    
    <![endif]-->

符號

含義

示例

非運算子

<!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]-->

<!--[if !(IE 6)]>除IE6外可以識別<![endif]-->

lt

Less than小於

<!--[ if lt IE 8]>IE8以下版本<![endif]-->

gt

greater than大於

<!--[ if gt IE 8]>IE8以上版本<![endif]-->

lte

less than或equal小於等於

<!--[ if lte IE 8]>IE8及IE8以下版本<![endif]-->

gte

greater than或equal大於等於

<!--[ if gte IE 8]>IE8及IE8以上版本<![endif]-->

|

或運算子

<!--[ if IE 8 |IE 7]>IE7或IE8版本<![endif]-->

&

與運算子

<!--[ if gt IE 6&!IE 8]>除IE8外IE6以上版本<![endif]-->

複製程式碼
/*類內部hack:*/
    .header {_width:100px;}            /* IE6專用*/
    .header {*+width:100px;}        /* IE7專用*/
    .header {*width:100px;}            /* IE6、IE7共用*/
    .header {width:100px\0;}        /* IE8、IE9共用*/
    .header {width:100px\9;}        /* IE6、IE7、IE8、IE9共用*/
    .header {width:330px\9\0;}    /* IE9專用*/

/*選擇器Hack:*/
    *html .header{}        /*IE6*/ 
    *+html .header{}    /*IE7*/

相關推薦

常見瀏覽器相容問題模型2模式以及css hack知識講解

什麼是瀏覽器相容問題?所謂的瀏覽器相容性問題,是指因為不同的瀏覽器對同一段程式碼有不同的解析,造成頁面顯示效果不統一的情況。在大多數情況下,我們的需求是,無論使用者用什麼瀏覽器來檢視我們的網站或者登陸我們的系統,都應該是統一的顯示效果。所以瀏覽器的相容性問題是前端開發人員

12Javascript方法解決常見瀏覽器相容問題

我們提倡儘可能使用CSS,而且我們常常能做到這一點。現代瀏覽器有很好的CSS支援-這無疑足夠好讓你使用CSS來控制佈局和版面設計。但是有時候,某些網頁元素在不同的瀏覽器會出現不同。在本文中,我們會揭開你在開發web應用是可能會遇到的12個最常見的CSS問題的javascript解決方案。 1. 自動匹

css基礎及其例項:常用選擇器顏色五中寫法字型樣式自定義字型模型及其樣式設定

<html lang="en"><head>    <meta charset="UTF-8">    <title>css樣式</title>    <style> 

3模型新增樣式

在CSS3中盒模型新增了box-shadow樣式,該樣式可以為盒模型設定陰影,詳解見 box-shadow 示例,下面為盒模型設定陰影 <!DOCTYPE html> <html>

css---標準流模型浮動

一、盒模型 1.1 盒子的區域 一個盒子的主要屬性5個:width、height、padding、border、margin padding:內邊距 border:邊框 margin:外邊框 1.2 認識width、height 一個盒子的真實佔有的寬度:左bo

瀏覽器相容CSS3 選擇器

瀏覽器相容 (1)方法一 條件註釋法 IE大小寫無關係 1.只在IE中生效 <!--[if IE]> 這段文字只在IE瀏覽器顯示. <![endif]--> 2.只在IE6中生效 <!--[if

學習總結:CSS(一)塊級與行級元素特性模型模型BUG與BFC浮動模型

.displayTal { width: 100%; font-size: 13px } .displayTal1 { width: 30%; height: 30px; font-size: 13px; color: #009933 } .displayTal2 { width: 40%; height:

常見瀏覽器相容問題整理(ie9及以上)

1.隨便寫幾個標籤,不加樣式控制的情況下,各自的margin 和padding差異較大。 解決方案:CSS裡    *{margin:0;padding:0;} 2.幾個img標籤放在一起的時候,有些瀏覽器會有預設的間距,加了問題一中提到的萬用字元也不起作用。 解決方案:使

關於ie6常見瀏覽器相容問題

ie6的退役無疑對前端工程師們來說是巨大的福音,不必再為ie6的相容問題燒腦費時搬磚了,雖如此,還是整理一下ie6瀏覽器下的常見相容性問題 圖片間隙 描述:在div中插入圖片時,圖片會將div下方

微信跳轉瀏覽器提示_微信跳轉外部瀏覽器跳轉提示的2實現方式

上半年公司有一個新的APP專案上線,我們在專案首頁做個二維碼,然後使用者用手機掃一掃就能下載了。但是很多使

[svc]ftp協議數據連接的2模式

協議 隨機 分享圖片 script info scrip ftp服務 角度 報文 玩明白了以太網2的二層數據格式, ip格式 tcp/udp個時候, 需要玩一玩一些有用的基於這些已上的協議數據了. 如 dhcp ftp等.比較有趣. ftp協議 分控制連接21端口 和數據連

【相機】(1)——Intent調相機的2方式以及那些你知道的和不知道的坑

要不要都行的開篇 隨著現代資訊量的瘋狂增長、資訊的快速交流,單純的文字資訊已經難以滿足日常、工作的溝通,一張圖片往往能達到一圖勝過千萬言的效果,前段時間不是盛行“有圖有真相的”說法;還有一些場景則需要通過上傳照片來驗證身份的合法性,比如手機銀行要求上傳身份證正

Linux中vim的三模式以及基本命令

body 指定 col -s global 使用 全局 oba .com 在Linux中vim的三種模式分別為:命令模式、末行模式、編輯模式。以下是三者的關系圖: 三種模式的彼此切換: 命令模式是vim中的默認模式。 命令模式切換至末行模式: 使用英文冒號(:)。 末行模

Linux網卡配置的四模式以及防火墻設置的四方式(CentOS 7.4)未完成

cmp netmask 如果 18C per 配置文件 匹配 .com cti 一、網卡配置的四種模式 1、直接修改配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO代表地址的分配方式,有dhc

【Ruby on Rails實戰】3.2 配置資料庫以及資料庫操作知識

1、建立一個database mysql我們已經在1.3節安裝過了。連線遠端,在專案目錄下連線mysql,建立一個database資料庫。如果你在1.3節啟動專案時碰到了mysql錯誤並且解決了,那可以跳過1、2步,因為你已經配置好了。 vagrant@vagrant-ubunt

jsp自動重新整理的幾方法以及 meta屬性簡略講解

轉載https://blog.csdn.net/hellogmm/article/details/8544815下面是我摘抄的一些在標題新增程式碼response.setHeader("Refresh", "5;XXX.jsp");定時5秒後跳轉到指定頁面response.s

CSS3.0模型display:flex;的使用[相容微信瀏覽器]

話不多說,上程式碼,關鍵在對應的低版本安卓的微信瀏覽器,需要-webkit-box對應的-webkit-box-orient -webkit-box-pack等的設定。 .flex{     /* 設定彈性佈局 */     display:-webkit-box

瀏覽器的標準相容模式和怪異呈現模式以及模型

由於歷史的原因,各個瀏覽器在對頁面的渲染上存在差異,甚至同一瀏覽器在不同版本中,對頁面的渲染也不同。在W3C標準出臺以前,瀏覽器在對頁面的渲染上沒有統一規範,產生了差異(Quirks mode或者稱為Compatibility Mode);由於W3C標準的推出,瀏覽器渲染頁面有了統一的標準(CSScomp

模型中paddingbordermargin的區別

style 語法 add 不能 示例 部分 width alt 字體 在CSS中,規定了一種基本設計模型——盒模型(也叫框模型),如圖所示: 其中包含了四部分內容:element/元素(即圖中文字)、padding/內邊框(圖中兩個紅色邊框之間白色部分)、border/邊

從零開始學習前端開發 — 3CSS模型

左右 color 方法 盒子模型 圖片 enter das 設置方法 left ★ 盒子模型 (標準的盒模型) css盒模型的概念及組成 css盒模型是css的基石,每個html標簽都可以看作是一個盒模型。 css盒模型是由內容(content),補白或填充(paddi