1. 程式人生 > >解決header,footer等HTML5標簽在IE(IE6/IE7/IE8)無效的方法

解決header,footer等HTML5標簽在IE(IE6/IE7/IE8)無效的方法

web one name 發揮 lba osc fig ocl warn

HTML5的語義化標簽以及屬性,可以讓開發者非常方便地實現清晰的web頁面布局,加上CSS3的效果渲染,快速建立豐富靈活的web頁面顯得非常簡單。

HTML5的新標簽元素有:

  • <header>定義頁面或區段的頭部;
  • <footer>定義頁面或區段的尾部;
  • <nav>定義頁面或區段的導航區域;
  • <section>頁面的邏輯區域或內容組合;
  • <article>定義正文或一篇完整的內容;
  • <aside>定義補充或相關內容;

技術分享圖片

使用他們能讓代碼語義化更直觀,而且更方便SEO優化。但是此HTML5新標簽在IE6/IE7/IE8上並不能識別,需要進行JavaScript處理。以下就介紹幾種方式。

方式一:Coding JavaScript

按 Ctrl+C 復制代碼 按 Ctrl+C 復制代碼

如果是IE9以下的IE瀏覽器將創建HTML5標簽, 這樣非IE瀏覽器就會忽視這段代碼,也就不會有無謂的http請求了。

第二種方法:使用Google的html5shiv包(推薦)

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

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

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

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

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

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

近幾年HTML5風潮大起,HTML5新增的一些語義化標簽,更是讓前端兄貴們歡欣鼓舞技術分享圖片

HTML5新增的標簽<header>,<footer>,<nav>,<hgroup>,<article>,<section>,<aside>,<audio>,<vedio>,<canvas>...and so on.就不在此一一列舉了。

但是像IE6,IE7,IE8這些又老又舊渲染效果又醜,讓前端兄貴們恨得牙根癢癢的臭瀏覽器,由於一些亂七八糟的理由又不能對它們放棄治療。當然它們不會認識這些新的語義標簽。

送它們一個呵呵技術分享圖片

不就著口水幹說,讓我們來看看不同新瀏覽器與老式瀏覽器下對和html5語義標簽的渲染效果。

[html] view plain copy
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEST</title>
  6. <style type="text/css">
  7. header{
  8. color: red;
  9. }
  10. footer{
  11. color: green;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <header>header</header>
  17. <footer>footer</footer>
  18. </body>
  19. </html>


我最愛的chrome下:

技術分享圖片

技術分享圖片萬德福~~~

IE8下的效果:

技術分享圖片

技術分享圖片

但是,前端兄貴們還是想出了對付他們的辦法。

前端大神們發現在渲染前使用document.createElement創建它們,可以使那些冥頑不靈的瀏覽器識別它們。

當瀏覽器版本 < IE 9 時,追加script代碼段:

[html] view plain copy
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>TEST</title>
  6. <style type="text/css">
  7. header {
  8. color: red;
  9. }
  10. footer {
  11. color: blue;
  12. }
  13. </style>
  14. <!--[if lt ie 9]>
  15. <script type="text/javascript">
  16. var i = 0, html5tags = ["header", "footer", "nav", "aside", "article", "section"];
  17. for (i in html5tags) {
  18. document.createElement(html5tags[i]);
  19. }
  20. </script>
  21. <![endif]-->
  22. </head>
  23. <body>
  24. <header>header</header>
  25. <footer>footer</footer>
  26. </body>
  27. </html>

看看IE8下的效果:

技術分享圖片

技術分享圖片
技術分享圖片

技術分享圖片

至於在老式瀏覽器下,這些新語義標簽被渲染成行內元素的情況,按需要為它們添加樣式{display: block;}即可。

好了現在老式瀏覽器已經可以識別這些新標簽了,剩下的就靠我們隨意發揮了。技術分享圖片

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

解決header,footer等HTML5標簽在IE(IE6/IE7/IE8)無效的方法