1. 程式人生 > >10分鐘HTML5入門基礎知識(二)

10分鐘HTML5入門基礎知識(二)

html5開發與舊式瀏覽器的相容

我們已經討論了HTML5許多很酷的新功能,包括新的語義元素、為畫圖而生的canvas標籤,以及音訊與視訊支援。

你可能會想:這些東西是很好,但當用戶的瀏覽器不相容HTML5時,可能就沒法使用它們了。更不用說一些所謂的“支援”HTML5的瀏覽器,實際上只支援它的一部分功能而已。並不是所有HTML5新功能都會被所有瀏覽器所支援,而且許多HTML5特性在不同瀏覽器上也許使用了不同的實現方式。

不過,有一種方法可以使用新的特性,同時不影響舊版瀏覽器對你的站點的訪問。你可以使用polyfill。

根據Paul Irish的說法,polyfill是模擬未來API的shim,它向舊版瀏覽器提供後備的功能。當舊版瀏覽器不支援站點中的某項HTML5功能時,polyfill會補充其中的空隙。學會使用這些polyfill,你就不必為了使用HTML5而拋棄那些使用舊版瀏覽器的使用者。


獲得polyfill支援的一種方法是使用JavaScript庫——Modernizr(當然可用的不止這一種)。它會帶來特性偵測能力,這樣你就能檢查瀏覽器究竟是否支援某種功能(比如canvas元素)。如果不支援,就提供一個備用的選擇。

讓我們研究一個示例。還記得嗎?在介紹語義元素與頁面佈局時,我們已經使用過這個例子了。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Title</title>
    <link href="css/html5reset.css" rel="stylesheet" />

    <link href="css/style.css" rel="stylesheet" />
</head>
<body>
    <header>
        <hgroup>
            <h1>Header in h1</h1>
            <h2>Subheader in h2</h2>
        </hgroup>
    </header>
    <nav>
        <ul>
            <li><a href="#">Menu Option 1</a></li>

            <li><a href="#">Menu Option 2</a></li>
            <li><a href="#">Menu Option 3</a></li>
        </ul>
    </nav>
    <section>
        <article>
            <header>
                <h1>Article #1</h1>
            </header>
            <section>
                This is the first article.  This is <mark>highlighted</mark>.
            </section>
        </article>
        <article>
            <header>
                <h1>Article #2</h1>
            </header>
            <section>
                This is the second article.  These articles could be blog posts, etc.  
            </section>
        </article>
    </section>
    <aside>
        <section>
            <h1>Links</h1>
            <ul>
                <li><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
                <li><a href="#">Link 3</a></li>
            </ul>
        </section>
        <figure>
            <img width="85" height="85" 
                src="http://www.windowsdevbootcamp.com/Images/JennMar.jpg" 
                alt="Jennifer Marsman" />
            <figcaption>Jennifer Marsman</figcaption>
        </figure>
    </aside>
    <footer>Footer - Copyright 2011</footer>
</body>
</html>
複製程式碼

這段程式碼包含了一系列不被舊版瀏覽器支援的新HTML5元素。記住,在IE9中,它的效果如下圖所示。



我們可以使用Internet Explorer開發工具觀察它在舊版IE中的模樣。在Internet Explorer介面下,按F12鍵開啟Internet Explorer開發工具。



注意,現在的Browser Mode(在頁面上方的灰色選單欄裡)被設定為IE9。單擊Browser Mode,在彈出的下拉列表中選擇“Internet Explorer 8”(IE8不支援HTML5)。



修改完成,轉到不相容HTML5的瀏覽器之後,Web頁面變得如下圖所示。



這個效果看起來非常差勁,但實際上問題沒那麼嚴重。頁面佈局變得亂糟糟的原因,是IE8沒能識別我所使用的那些HTML5新元素,於是就沒有把它們加到DOM,隨之而來的就是我們不能使用CSS去設計頁面。

儘管如此,增加一條對Modernizr的引用(不需要改動任何其他程式碼!),就會把這些元素強制放入DOM。從http://www.modernizr.com/download/下載完Modernizr後,在< head>區域新增一條引用即可,程式碼如下所示。

<head>
    <meta charset="utf-8" />
    <title>Title</title>
    <link href="css/html5reset.css" rel="stylesheet" />
    <link href="css/style.css" rel="stylesheet" />
    <script src="script/jquery-1.6.2.min.js" type="text/javascript"></script>
    <script src="script/modernizr-2.0.6.js" type="text/javascript"></script>
</head>
複製程式碼

這裡增加了兩條指令碼引用,一條指向jQuery,一條指向Modernizr。現在並不真的需要使用jQuery,但下一個指令碼中它就要大顯身手,所以這裡一併增加了對它們的引用。

這麼一個簡單的變化,使得頁面在IE8中變成了下圖所示的式樣。



它並不完美,但已經與我們在IE9中見到的原版本相當接近。Modernizr把這些IE8不能理解的HTML5新元素加入了DOM,正因為如此,我們才能用CSS去設計它們。

其實,Modernizr可以做的遠不止此。仔細觀察前述Web頁面的IE8和IE9版本,你會發現後者的兩個article和圖片的四角上有非常好看的圓角效果,而IE8中卻沒有。使用Modernizr,同樣可以修復這一效果。

<script type="text/javascript">
        if (!Modernizr.borderradius) {
            $.getScript("script/jquery.corner.js", function() {
                $("article").corner();
                $("figure").corner();
            });
        }
</script>
複製程式碼

在這個指令碼中,我們首先檢查Modernizr物件,看它是否支援“borderradius”(這是CSS3的一項特性)。如果不支援,再使用一段jQuery指令碼呼叫jquery.corner.js(前提是先從http://jquery.malsup.com/corner/下載它,然後在< head>中引用jQuery——正像我前面所做的那樣)。接下來,簡單地從指令碼中為article和figure呼叫corner方法,即可形成圓角效果。

除了上面所說,你還可以用一種稍微不同的方法解決這個問題。Modernizr有一個可選的(未包含)條件資源載入器(conditional resource loader),即Modernizr.load(),它基於Yepnope.js。它允許你只將使用者需要的polyfill指令碼載入頁面,而且這種非同步和並行的載入有時候會帶來效能上的提升。為了得到Modernizr.load,你必須在一個自定義的Modernizr版本中(必須在http://www.modernizr.com/download/上建立)包含它,開發版本中並沒有包含它。使用Modernizr.load,我們可以寫出下列指令碼:

<script type="text/javascript">
        Modernizr.load({
            test: Modernizr.borderradius,
            nope: 'script/jquery.corner.js',
            callback: function () {
                $('article').corner();
                $('figure').corner();
            }
        });
</script>
複製程式碼

總而言之,這段程式碼實現了與前面的指令碼相同的功能。Modernizr.load首先檢測布林屬性“Modernizr.borderradius”以確定它是否被支援。然後,nope定義了在test為false時將要載入的源。儘管IE8並不支援CSS3屬性“borderradius”,但它會載入jquery.corner.js指令碼。最後,callback指定了一個函式,指令碼載入完成後會執行該函式。因此,我們在這個函式裡為article和figure呼叫了corner方法(就像前面的程式碼那樣)。如果你想進一步研究Modernizr.load, http://www.modernizr.com/docs/#load上有一份簡明教程可供參考。




不管使用上面哪種指令碼,我們得到的IE8(不支援HTML5)版本Web頁面都如上圖所示。

因此,使用polyfill或者其他工具(例如Modernizr),就可以使用HTML5的新功能,同時在舊版本瀏覽器上提供良好的使用者體驗。這方面的更多資訊,請參考http://www.diveintohtml5.org/detect.html,這裡詳細地闡述了Modernizr偵測HTML5特性的細節。

小結

在這篇HTML5的導論中,我們談到了語義標籤、canvas、audio和video,以及如何在使用HTML5的同時保持對舊版瀏覽器的支援。需要注意的是,我們還有很多東西沒有講:微資料(microdata),儲存,CSS3,等等……接下來,我會給出一些繼續學習HTML5的資源。

IE Test Drive:就算你不使用IE,也不要忘了它其實是一個優秀的站點。這裡的demo多如牛毛:入門Demo, HTML5 Demo,圖形Demo,以及瀏覽器Demo。你可以在最喜歡的瀏覽器中盡情試用它們。本站點還有一些指向其他資源的連結。

Beauty of the Web:這是一個專門展示優秀web站點的地方。這些站點充分利用了HTML5的硬體加速特性,以及那些與IE9契合的pinning特性。

BuildMyPinnedSite:在使用pinning和Windows整合時,你需要的所有程式碼、想法和示例都可以在這裡找到。

HTML5 Labs:本站點提供Web標準化組織(如W3C)釋出的不穩定規格說明書,以及早期的Microsoft原型。在這裡,你可以對IndexedDB、 WebSockets、 FileAPI和Media Capture API等原型先睹為快。

視訊

Brandon Satrom 在TechEd 2011上的演講 “Application Development with HTML5” :這場長達一小時的經典演講,闡述了HTML5開發的精髓。

來自MIX 2011的HTML5演講:大量關於HTML5的會議。
工具

許多開發工具都已提供HTML5支援,試試下面這些:

    Visual Studio 2010 SP1 – SP1 增加了對HTML5、CSS3 IntelliSense和Validation基本功能的支援。更多相關資訊請參見http://blogs.msdn.com/b/webdevto ... tudio-2010-sp1.aspx。

    Web Standards升級版Microsoft Visual Studio 2010 SP1 – 這是一個Visual Studio 的擴充套件,它增加了對HTML5、CSS3 IntelliSense和Validation高階功能的支援,基於目前的W3C說明書。

    WebMatrix –預設以“開包即用”的方式支援HTML5(使用預設的HTML5文件型別和模板程式碼來新增一個新的HTML頁面)。

    ASP.NET MVC 3工具升級

    New Project 對話方塊包含了一個複選框,可以讓你使用帶專案模板的HTML5版本。

    藉助於Modernizr 1.7,這些模板所提供的相容性使得較低版本的瀏覽器也能夠支援HTML5和CSS3。

    Expression Web 4 SP1

    包含HTML5 IntelliSense,同時支援Code Editor和設計檢視。

    更豐富的CSS3 樣式編輯和IntelliSense。

    SuperPreview Page Interaction Mode(超前預覽頁面互動模式)和線上服務 (遠端瀏覽器,包括Chrome、 IE8、IE9、Safari 4&5,平臺包括Windows和Mac) 。

除了以上這些開發工具,不要忘記下面兩條:

    Windows Phone “Mango” 包含Internet Explorer 9,它支援HTML5站點。

    Internet Explorer 10 Paltform Preview(平臺預演)支援許多新的CSS3和HTML5特性,完整的特性清單位於http://msdn.microsoft.com/en-us/ie/gg192966.aspx。

HTML5就介紹到這裡,要開發優秀的網站,就看你了!

相關推薦

10分鐘HTML5入門基礎知識

html5開發與舊式瀏覽器的相容我們已經討論了HTML5許多很酷的新功能,包括新的語義元素、為畫圖而生的canvas標籤,以及音訊與視訊支援。你可能會想:這些東西是很好,但當用戶的瀏覽器不相容HTML5時,可能就沒法使用它們了。更不用說一些所謂的“支援”HTML5的瀏覽器,

10分鐘HTML5入門基礎知識

毫無疑問,對於開發人員而言, HTML5 已是一個熱點話題。如果你需要快速瞭解HTML5的功能的基本原理,閱讀本文是你最好的選擇。 本文來自The Code Project的付費搜尋位置,由Solution Center提供。這裡的文章致力於向大家提供我們認為對開發人員來說有用和有價值

C#入門基礎知識

C#的常量和變數 1. C#的常量 常量,顧名思義,就是“不會改變的量”,我們平時書寫的數字、字元和字串,他們都屬於“字面常量”,編寫程式碼時我們常常會使用自定義變數。 請閱讀下面程式碼: namespace Test { Class Program {

HTML5 基礎知識

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title></title> </head

JavaScript基礎知識

window ttr demo1 隨機數 put 意義 成員 poi pac 一、JavaScript事件詳解 1、事件流:描述的是在頁面中結束事件的順序 事件傳遞有兩種方式:冒泡與捕獲。   事件傳遞定義了元素事件觸發的順序。 如果你將 <p> 元素插

python基礎知識

.py .com 數值類型 spa gbk 4.5 wal 編碼 nic 1.pycharm使用 快速搜索欄,蠻重要的 2.字符串格式化 %s 字符串類型 %d數值類型 msg = "我是%s,年齡%d,愛好%s" % (‘alex‘, 18, ‘boy‘) print(

.NET基礎知識

處理 read 不能被繼承 c# 方法表 .net基礎 arr 如果 數據 1、new有幾種用法? 答:1、new Class(); 2、覆蓋方法,public new XXXX(); 3、new() 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數 2

多線程基礎知識

必須 否則 closed form 自己 back play sender 重點 線程池 因為每次創建線程、銷毀線程都比較消耗 cpu 資源,因此可以通過線程池進行優化。線程池是一組已經創建好的線程,隨用隨取,用完了不是銷毀線程,然後放到線程池中,供其他人用。 用線程池之

Python 之 基礎知識

break post elif true 滿足 賦值 隨機數 計數 spa 一、分支運算   在Python 2.x中判斷不等於還可以用<> if語句進階:elif if 條件1:   ...... elif 條件2:   ...... else:

Kafka基礎知識

net pic 知識 2個 先後 orm 進行 進制 機器 Kafka進階知識 消息概念 消息指的是通信的基本單位。由消息生產者(producer)發布關於某個話題(topic)的消息。簡單來說:消息以一種物理方式被發送給了作為代理(broker)的服務器(可能是另外一臺機

線性代數基礎知識——運算和性質【轉載】

這樣的 寫作 9.png 改變 通過 內容 你會 列空間 根據 3 運算和性質 在這一節中,我們將介紹幾種矩陣/向量的運算和性質。很希望這些內容可以幫助你回顧以前知識,這些筆記僅僅是作為上述問題的一個參考。 3.1 單位矩陣與對角矩陣 單位矩陣,記作I ∈ Rn×n,

Linux入門基礎知識1

win 字符設備 命令的使用 ESS pow 體驗 存放位置 編程 echo -e 描述計算機的組成及其功能計算機系統由硬件系統與軟件系統兩大部分組成。1.1 計算機硬件系統五大部分組成運算器、控制器、存儲器、輸入設備、輸出設備。1.2 計算機硬件系統五大部分功能解釋及作

第3章 RFID基礎知識

1.電子標籤分為:有源電子標籤、無源電子標籤和半無源電子標籤。 2.電子標籤的儲存區域通常分為:保留區、EPC區、TID區、使用者區。     保留區:用於儲存標籤的滅活密碼以及訪問密碼,在沒有鎖定時可以進行讀寫操作,鎖定後不能讀取也不能修改。   

儲存基礎知識回滾的原理

雖然使用者開啟快照,可在通過建立時間點來保護修改的資料,但要回到修改之前的狀態就必須用到回滾。打個比方,我在t1時刻給畫板上畫了一棵樹,t2時刻又畫了一隻猴子,t3時刻畫的時候發現畫錯了,我不想要猴子和現在所畫的東西,我想回到那棵樹的時刻,就會用到回滾。 快照的回滾也是如此,使用者建立多個時

機器學習基礎知識

深度神經網路: 深度學習實際指的是基於深度神經網路( deep neural networks, DNN)的 學習,也就是深度人工神經網路所進行的學習過程,或稱作 Deep Learning。   這個 Deep 指 的是神經網路的深度(層數多)。   T

PHP基礎知識

PHP表示式 一、常量:   1、自定義常量:define(name,value);   2、注意:     (1)常量名前不加$符號。     (2)常量名的作用域是全域性的。 二、變數:   1、PHP的變數是區分大小寫的。   2、賦值:     (1)傳值:     (2)傳地址:

Golang 入門基礎教程Linux 平臺下安裝Golang基礎環境

Linux平臺下安裝Golang的話可以直接下載官方原始碼包, 注意:如果系統內安裝過其他版本的Golang原始碼包,必須先將之前的清除掉 1、解壓原始碼包 解壓原始碼包到 /usr/local目錄下 > sudo tar -C /usr/local

PostgreSQL基礎知識

11、對錶中列的查詢。 SELECT 列名1,列名2,.... from  表名 ; 若要查詢所有 。  SELECT  * FROM 表名 ; 12、為列設定別名 。   SELECT 列名1 AS 別名1, 列名2 AS 別名2 from

Pandas基礎知識

Pandas的索引物件 index的物件是不可以修改的如執行index[1] = 'f',會報錯"Index does not support mutable operations"。index的不可修改性保證了多個數據結構之間的安全共享。 index物件是pandas資料模型的重要組成部分。pand

JPA基礎知識:使用JPA持久化物件的步驟

使用JPA持久化物件的步驟 1. 建立JPA工程 2. 導jar包 3. 建立persistence.xml 3.1 指定與xx資料庫的互動 3.2 指定JPA使用哪個持久化框架,以及配置框架的基本屬性 3.3 在檔案中配置持久化單元