天天看點

HTML5 respond.js 解決IE6~8的響應式布局問題

  響應式布局,理想狀态是,對PC/移動各種終端進行響應。媒體查詢的支援程度是IE9+以及其他現代的浏覽器,但是IE8在市場當中仍然占據了比較大量的市場佔有率,使我們不得不進行IE低端浏覽器的考慮。

  那麼如何在IE6~8浏覽器中相容響應式布局呢?這裡我們需要借助這樣一個檔案:respond.js。檔案下載下傳位址:https://github.com/scottjehl/Respond。

  友情提示各位朋友,關于respond.js的使用,有一些需要注意的地方,一旦不注意,在IE6-8中就無法顯示出來。

要想實作響應式布局,首先需要書寫基本的響應式布局的樣式。

接下來,需要了解respond.js的實作思路:

第一步,将head中所有外部引入的CSS檔案路徑取出來存儲到一個數組當中;

第二步,周遊數組,并一個個發送AJAX請求;

第三步,AJAX回調後,分析response中的media query的min-width和max-width文法(注意,僅僅支援min-width和max-width),分析出viewport變化區間對應相應的css塊;

第四步,頁面初始化時和window.resize時,根據目前viewport使用相應的css塊。

那麼此時,就可以根據基本的實作思路,得到一些書寫代碼時要注意的地方:

1、需要啟動本地伺服器(localhost),不能使用普通本地的url位址(file://開頭);

2、需要外部引入CSS檔案,将CSS樣式書寫在style中是無效的;

3、由于respond插件是查找CSS檔案,再進行處理,是以respond檔案一定要放置在CSS檔案的後面

4、另外,雖然把respond放置在head裡還是在body後面都能夠實作,但是建議放置在head中(具體原因在下面的文檔提示中有提到)

5、最好不要為CSS設定utf-8的編碼,使用預設(原因詳見下面的文檔提示部分)

在官方文檔當中的一些提示:

1、越早的引入respond.js檔案,也就越可能避免IE下出現的閃屏。

2、不支援嵌套的媒體查詢

3、utf-8的字元編碼對respond.js檔案的運作有影響

官方API原文:if CSS files are encoded in UTF-8 with Byte-Order-Mark, they will not work with Respond.js in IE7 or IE8.

基本含義就是:utf-8格式的CSS檔案字元編碼會對插件造成影響。

但是在我使用IE6-8進行測試的時候,都能夠正常顯示(無論是在css檔案中增加charset設定還是在link标簽中增加charset設定)。是以,并不是太清楚這個位置bug的含義。

4、跨域可能會出現閃屏(還沒有測試,具體情況不詳)

html檔案部分

注意:respond.min.js或者respond.src.js都可以使用,在上面給出的下載下傳位址中下載下傳即可。CSS部分就是最上面的那段代碼。

顯示效果(IE6,IE7-8的顯示效果也是沒有問題的,在此就不貼圖處理了):

HTML5 respond.js 解決IE6~8的響應式布局問題
HTML5 respond.js 解決IE6~8的響應式布局問題

有待研究

官方文檔中尚未解讀清晰的内容(主要是不太清晰如何應用)

<!-- Respond.js proxy on external server -->

<link href="http://externalcdn.com/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />

<!-- Respond.js redirect location on local server -->

<link href="/path/to/respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />

<!-- Respond.js proxy script on local server -->

<script src="/path/to/respond.proxy.js"></script>

其他的支援響應式布局的插件-css3-mediaqueries-js

css3-mediaqueries-js官方文檔和demo都沒有,相對于respond.js css3-mediaqueries-js支援幾乎所有的media query的文法。會出現閃屏。并不是很推薦使用,雖然能夠支援全部的mediaqueries,但min-width和max-width其實就可以滿足我們對響應式布局的需要。

<code>考慮到IE9是支援CSS3的,是以直接在HTML頁面的head标簽中添加腳本引用即可:</code>

<code>&lt;!--[</code><code>if</code> <code>lt IE 9]&gt;</code><code></code><code>&lt;script src = </code><code>"http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"</code><code>&gt;&lt;/script&gt;</code><code>&lt;![endif]--&gt;</code>  

來自于http://blog.163.com/hongshaoguoguo@126/blog/static/18046981201410745621487/

繼續閱讀