解決header,footer等HTML5標簽在IE(IE6/IE7/IE8)無效的方法
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
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>TEST</title>
- <style type="text/css">
- header{
- color: red;
- }
- footer{
- color: green;
- }
- </style>
- </head>
- <body>
- <header>header</header>
- <footer>footer</footer>
- </body>
- </html>
我最愛的chrome下:
萬德福~~~
IE8下的效果:
但是,前端兄貴們還是想出了對付他們的辦法。
前端大神們發現在渲染前使用document.createElement創建它們,可以使那些冥頑不靈的瀏覽器識別它們。
當瀏覽器版本 < IE 9 時,追加script代碼段:
[html] view plain copy
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>TEST</title>
- <style type="text/css">
- header {
- color: red;
- }
- footer {
- color: blue;
- }
- </style>
- <!--[if lt ie 9]>
- <script type="text/javascript">
- var i = 0, html5tags = ["header", "footer", "nav", "aside", "article", "section"];
- for (i in html5tags) {
- document.createElement(html5tags[i]);
- }
- </script>
- <![endif]-->
- </head>
- <body>
- <header>header</header>
- <footer>footer</footer>
- </body>
- </html>
看看IE8下的效果:
至於在老式瀏覽器下,這些新語義標簽被渲染成行內元素的情況,按需要為它們添加樣式{display: block;}即可。
好了現在老式瀏覽器已經可以識別這些新標簽了,剩下的就靠我們隨意發揮了。
這樣可以引導用戶開啟腳本,或者直接跳轉到HTML4標簽設計的界面。
解決header,footer等HTML5標簽在IE(IE6/IE7/IE8)無效的方法