解決瀏覽器不支持HTML5和CSS3


Modernizr插件可用於解決:《響應式web設計》提及!

其他:

第一種方法:IE9以下版本的IE將創建HTML5標簽, 非IE瀏覽器會忽略這段代碼,因此不會發生http請求,也就不影響網頁執行效率。

<!--[if lt IE9]>
<script>
(function() {
if (!
/*@cc_on!@*/
0) return;
var e = "abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(', ');
var i= e.length;
while (i--){
document.createElement(e[i])
}
})()
</script>
<![endif]-->

第二種方法:在你的網頁中引入Google的html5shiv包(推薦)

<!--[if lt IE9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

但是不管使用以上哪種方法,都要初始化新標簽的CSS.因為HTML5在默認情況下表現為內聯元素,對這些元素進行布局我們需要利用CSS手工把它們轉為塊狀元素方便布局

/*html5*/
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

但是如果ie6/7/8 禁用腳本的用戶,那么就變成了無樣式的"白板"網頁,我們該怎么解決呢?

我們可以參照facebook的做法,即引導用戶進入帶有noscript標識的 “/?_fb_noscript=1”頁面,用 html4 標簽替換 html5 標簽,這要比為了保持兼容性而寫大量 hack 的做法更輕便一些。

<!--[if lte IE 8]>
<noscript>
<style>.html5-wrappers{display:none!important;}</style>
<div class="ie-noscript-warning">您的瀏覽器禁用了腳本,請<a href="">查看這里</a>來啟用腳本!或者<a href="/?noscript=1">繼續訪問</a>.
</div>
</noscript>
<![endif]-->

引導用戶開啟腳本,或者直接跳轉到HTML4標簽設計的界面。

 

其他:

1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)

這個玩意估計是試圖讓IE支持CSS3屬性的鼻祖,還算蠻強大,就是性能開銷較大,要解析很多文件腳本,給DOM添加大量的元素以及ClassName。

2. Aaron Gustafson的 eCSStender

此方法支持@font-face, CSS3 選擇器, 以及 CSS3 Backgrounds 和 Borders。

3. Drew Diller的 DD_roundies

這是一個基於IE VML實現一些CSS3效果的。

4. Remiz Rahnas的border-radius.htc

此方法使用htc文件,配合VML實現,缺點在於不能自動適應目標元素的位置和大小,所以不能適用於動態腳本環境。

5. Nick Fetchak的 ie-css3.htc

關於此方法,我在前面的"讓IE6/IE7/IE8瀏覽器支持CSS3屬性"這篇文章中已經做過介紹。我是建議您看看這篇文章,倒不是ie-css3.htc這個玩意多么好,而是文中對htc文件以及VML預言做了些介紹,對於您了解IE下實現類似CSS3效果原理有所了解。

6. Keith Clark的ie-css3.js

這是個與IE7.js類似的項目,其選擇器可借助其他JavaScript庫,所以其本身較小。

7. zoltandulac的cssSandpaper

這是一個使用IE濾鏡實現一些CSS3屬性的方法。

8. css3pie的css3 PIE.htc

支持:border-radius圓角 、 box-shadow 盒陰影 、 gradient漸變 、 multiple background images多背景 。

下面對第8第方法的做一下簡單介紹:

官方網站:http://css3pie.com/

使用方法:

第一步:下載css3 PIE.htc 文件

第二步:將PIE.htc文件上傳到你的網站目錄中,上傳到目錄哪里都可以,只要你記住這個目錄。

第三步:創建html文件,寫一段css3代碼,並引入PIE.htc,如下面這段:

  1. #id { 
  2. border: 1px solid #999; 
  3. -webkit-border-radius: 10px; 
  4. -moz-border-radius: 10px; 
  5. border-radius: 10px; 
  6. behavior: url(path/to/PIE.htc); 

注意:.htc 文件路徑是相對於html文件的路徑,而不是相對於css文件。

已知的一些問題:

此方法並不是萬能的,也有一些局限性和需要注意的地方。

1. z-index相關問題

IE下這些CSS3效果實現是借助於VML,由VML繪制圓角或是投影效果的容器元素,然后這個容器元素作為目標元素的后兄弟節點插入,如果目標元素 position:absolute 或是 position:relative,則這個css3-container元素將會設置與之一樣的z-index值,在DOM tree中,同級的元素總是后面的覆蓋前面的,所以這樣就實現了覆蓋,又避免了可能有其他元素正好插入其中。

所以,問題來了,如果目前元素的position屬性為static,也就是默認屬性,則z-index屬性是沒有用的,無覆蓋可言,所以此時IE瀏覽器 下CSS3的渲染是不會成功的。要解決也很簡單,設置目標元素position:relative或是設置祖先元素position:relative並 賦予一個z-index值(不可為-1)。

2. 相當路徑的問題

IE瀏覽器的behavior 屬性是相對於HTML文檔而言的,與CSS其他的屬性不一樣,不是相對於CSS文檔而言的。這使得使用pie.htc文件不怎么方便。如果絕對路徑於根目 錄,則CSS文件不方便移動;如果相對路徑與HTML文檔,則pie.htc文件在不同HTML頁面見的重用性大大降低。同時,諸如border- image后面的URL屬性路徑也不好處理。

3. 縮寫的問題

使用PIE實現IE下的CSS3渲染(其他方法也是一樣),只能使用縮寫的形式,例如圓角效果,我們可以設置border-top-left-radius表示左上圓角,但是PIE確實不支持這種寫法的,只能是老老實實的縮寫。

4. 提供正確的Content-Type

要想讓IE瀏覽器支持htc文件,需要一個有着"text/x-component" 字樣的content-type 頭部,否則,會忽視behavior。絕大數web服務器提供了正確的content-type,但是還有一部分則有問題。

如果您發現在您的機子上PIE方法無效,也就是htc文件這里指pie.htc文件無效,檢查您的服務器配置,可能其需要更新到最新的content-type。例如對於Apache,您可以在.htaccess文件中做如下處理:

  1. AddType text/x-component .htc 

但是,由於某種原因,您無法修改服務器配置(例如公用主機,或是空間服務商提供的服務器),您可以用一個PHP文件來間接調用htc文件。我只要給你看下這個PHP文件的代碼您就知道什么意思了,如下:

  1. <?php 
  2. header( 'Content-type: text/x-component' ); 
  3. include( 'pie.htc' ); 
  4. ?>

通過PHP文件來增加一個含有"text/x-component"字樣的Content-type頭,同時調用pie.htc文件。

關於上面所示的php文件,您可以狠狠地點擊這里:pie.php(右鍵 – [目標|鏈接另存為]),或者您可以直接新建一個php文件,把上面的兩行代碼復制進去。或者在本文提供的原始打包資源的wrappers文件夾里面也有此php文件,不過名稱是大寫的。

如果您使用上述php文件,您需要將pie.php和pie.htc放在同一個文件夾目錄下,同時CSS中的behavior寫法應該是:

  behavior: url(pie.php);


免責聲明!

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



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