HTML5想必你們都很熟悉了。然而,你能準確地說出HTML5帶來了哪些新特性嗎?本文總結了HTML5帶來的幾項你必須知道的新特性。javascript
目前許多網頁還在使用XHTML 1.0 而且要在第一行像這樣聲明文檔類型:css
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
在HTML5中,上面那種聲明方式將失效。下面是HTML5中的聲明方式:html
<!DOCTYPE html>
(No More Types for Scripts and Links)
在HTML4或XHTML中,你須要用下面的幾行代碼來給你的網頁添加CSS和JavaScript文件。java
<link rel="stylesheet" href="style/stylesheet.css" type="text/css" /> <script type="text/javascript" src="js/script.js"></script>
而在HTML5中,你再也不須要指定類型屬性。所以,代碼能夠簡化以下:瀏覽器
<link rel="stylesheet" href="style/stylesheet.css" /> <script src="js/script.js"></script>
在HTML4或XHTML中,你須要用下面的代碼來聲明"Header"和"Footer"。緩存
<div id="header"></div> <div id="footer"></div>
在HTML5中,有兩個能夠替代上述聲明的元素,這可使代碼更簡潔。app
<header></header> <footer></footer>
在HTML5中,有許多新引入的元素,hgroup就是其中之一。假設個人網站名下面緊跟着一個子標題,我能夠用<h1>和<h2>標籤來分別定義。然而,這種定義沒有說明這二者之間的關係。並且,h2標籤的使用會帶來更多問題,好比該頁面上還有其餘標題的時候。
在HTML5中,咱們能夠用hgroup元素來將它們分組,這樣就不會影響文件的大綱。dom
<header> <hgroup> <h1> Recall Fan Page </h1> <h2> Only for people who want the memory of a lifetime. </h2> </hgroup> </header>
你能夠把它當作高亮標籤。被這個標籤修飾的字符串應當和用戶當前的行動相關。好比說,當我在某博客中搜索「Open your Mind」時,我能夠利用一些JavaScript將出現的詞組用<mark>修飾一下。ide
<h3> Search Results </h3> <p> They were interrupted, just after Quato said, <mark>"Open your Mind"</mark> </p>
在HTML4或XHTML中,下面的這些代碼被用來修飾圖片的註釋。函數
<img src="image/image" alt="About image" /> <p>Image of Mars </p>
然而,上述代碼沒有將文字和圖片內在聯繫起來。所以,HTML5引入了<figure>元素。當和<figcaption>結合起來後,咱們能夠語義化地將註釋和相應的圖片聯繫起來。
<figure> <img src="path/to/image" alt="About image" /> <figcaption> <p>This is an image of something interesting.</p> </figcaption> </figure>
在HTML4或XHTML中,small元素已經存在。然而,卻沒有如何正確使用這一元素的完整說明。
在HTML5中,small被用來定義小字。試想下你網站底部的版權狀態,根據對此元素新的HTML5定義,small能夠正確地詮釋這些信息。
在HTML4或XHTML中,你須要用JavaScript來給文本框添加佔位符。好比,你能夠提早設置好一些信息,當用戶開始輸入時,文本框中的文字就消失。
而在HTML5中,新的「placeholder」就簡化了這個問題。
HTML5中的新屬性「required」指定了某一輸入是否必需。有兩種方法聲明這一屬性。
<input type="text" name="someInput" required> <input type="text" name="someInput" required="required">
當文本框被指定必需時,若是空白的話表格就不能提交。下面是一個如何使用的例子。
<form method="post" action=""> <label for="someInput"> Your Name: </label> <input type="text" id="someInput" name="someInput" placeholder="Douglas Quaid" required> <button type="submit">Go</button> </form>
在上面那個例子中,若是輸入內容空且表格被提交,輸入框將被高亮顯示。
一樣,HTML5的解決方案消除了對JavaScript的須要。若是一個特定的輸入應該是「選擇」或聚焦,默認狀況下,咱們如今能夠利用自動聚焦屬性。
<input type="text" name="someInput" placeholder="Douglas Quaid" required autofocus>
目前咱們須要依靠第三方插件來渲染音頻。然而在HTML5中,<audio>元素被引進來了。
<audio autoplay="autoplay" controls="controls"> <source src="file.ogg" /> <source src="file.mp3" /> <a href="file.mp3">Download this file.</a> </audio>
當使用<audio>元素時請記得包含兩種音頻格式。FireFox想要.ogg格式的文件,而Webkit瀏覽器則須要.mp3格式的。和往常同樣,IE是不支持的,且Opera 10及如下版本只支持.wav格式。
HTML5中不只有<audio>元素,並且還有<video>。然而,和<audio>相似,HTML5中並無指定視頻解碼器,它留給了瀏覽器來決定。雖然Safari和Internet Explorer9能夠支持H.264格式的視頻,Firefox和Opera是堅持開源Theora 和Vorbis格式。所以,指定HTML5的視頻時,你必須提供這兩種格式。
<video controls preload> <source src="cohagenPhoneCall.ogv" type="video/ogg; codecs='vorbis, theora'" /> <source src="cohagenPhoneCall.mp4" type="video/mp4; 'codecs='avc1.42E01E, mp4a.40.2'" /> <p> Your browser is old. <.a href="cohagenPhoneCall.mp4">.Download this video instead.</a> </p> </video>
當用戶訪問頁面時這一屬性使得視頻得以預載。爲了實現這個功能,能夠在<video>元素中加上preload="preload"或者只是preload。
<video preload >
若是你使用過上面的每個提到的技術點,你可能已經注意到,使用上面的代碼,視頻僅僅顯示的是張圖片,沒有控制條。爲了渲染出播放控制條,咱們必須在video元素內指定controls屬性。
<video preload controls>
在HTML4或XHTML中,你須要用一些正規表達式來驗證特定的文本。而HTML5中新的pattern屬性讓咱們可以在標籤處直接插入一個正規表達式。
<form action="" method="post"> <label for="username">.Create a Username: </label> <input type="text" name="username" id="username" placeholder="4 <> 10" pattern="[A-Za-z]{4,10}" autofocus required> <button type="submit">.Go </button> </form>
HTML5引用的range類型能夠建立滑塊,它接受min, max, step和value屬性
可使用css的:before和:after來顯示min和max的值
<input type=」range」 name=」range」 min=」0″ max=」10″ step=」1″ value=」"> input[type=range]:before { content: attr(min); padding-right: 5px; } input[type=range]:after { content: attr(max); padding-left: 5px;}
HTML5爲了幫助建立Web App,引入了一些新的接口:
媒體標籤video和audio的播放流程控制、同步多個媒體標籤、字幕等接口
表單限制驗證接口(如setCustomValidity)
引入應用緩存機制,容許Web App離線的API
容許Web App註冊爲對應協議或媒體類型的處理應用的APP的API。(即registerProtocolHandler和registerContentHandler)
引入contenteditable屬性,容許編輯任意元素的接口
暴露會話歷史、容許使用腳本無刷新更新頁面URL(History接口)
base64轉換API(atob()及btoa())
處理搜索服務提供方的接口(AddSearchProvider()及IsSearchProviderInstalled())
External接口
打印文檔的接口(print())
(譯註:下列接口是很早就有,屬於BOM中的共識部分,直到HTML5才加入標準)
暴露文檔URL、容許使用腳本切換、刷新頁面的接口(Location接口)
基於時間的回調接口(setTimeout()及setInterval())
提供給用戶的提示接口(alert(),confirm(),prompt())
Window接口
Navigator接口
以下DOM 2的接口已被改動:
document.title的返回值將會摺疊多個空格符
document.domain容許賦值,所以能夠改變文檔的script origin
document.open()能夠清空文檔(若是調用時僅有兩個或如下參數),或像是window.open()同樣表現(若是調用時有三個或四個參數)。在前種調用方式下,拋出一個XML異常
document.close()、document.write()、document.writeln()拋出一個XML異常。後二者容許可變參數,他們能夠在文檔解析階段往文檔流中加入文本,並隱式調用document.open()。在一些情形下,他們均可能會被忽略
document.getElementsByName()將返回知足name符合參數的全部HTML元素
HTMLFormElement的elements接口將返回HTMLFormControlsCollection,包括button, fieldset, input,keygen, object, output, select及textarea
HTMLSelectElement的add()接口容許第二個參數爲數字
HTMLSelectElement的remove()接口在參數越界的時候,將刪除集合中第一個元素
在全部的HTML元素中均可以調用click()、focus()及blur()接口了
a及areastringify爲它們的href屬性
(譯註:意味着HTMLAnchorElement和HTMLAreaElement對應的toString方法返回它們的href屬性)
DOM Level 2中有個HTMLDocument接口,繼承自Document接口,並提供了文檔內部的元素(僅侷限於HTML範疇內)訪問接口。
HTML5將這些成員移動到了Document接口中,並在特定方向上拓展了它。因爲各種文檔(譯註:XML、HTML五、SVG等等文檔)都使用了Document接口,而HTML5範疇內的元素在全部類別的文檔中均可用,所以這些接口在SVG等文檔中均可以很好的運做。
此外,Document接口還有一些新成員:
location、lastModified及readyState:用於幫助管理文檔的元數據(metadata)
dir、head、embeds、plugins、scripts:用於獲取DOM樹的不一樣部分
activeElement及hasFocus接口,用於判斷一個元素是否得到了焦點
文檔編輯接口:designMode、execCommand()、queryCommandEnabled()、queryCommandIndeterm()、queryCommandState()、queryCommandSupported()、queryCommandValue()
全部的IDL事件處理屬性。此外,onreadystatechange是惟一一個在Document上纔有效的接口
在腳本中修改了HTMLDocument原型的那部分仍是能夠正常運轉的,因爲window.HTMLDocument也將返回Document接口。
HTMLElement接口也在HTML5中獲得了擴展:
用於獲得data-*的屬性的接口dataset
click()、focus()、blur()接口容許腳本模擬用戶點擊與切換焦點
accessKeyLabel給予UA賦予該元素的快捷鍵,開發能夠經過accesskey屬性來影響UA的該行爲
isContentEditable返回元素是否能夠編輯
所有的IDL事件處理屬性
獲得元素屬性的接口如translate、hidden、tabIndex、accessKey、contentEditable、spellcheck、style
(譯註:DOM Level 2僅建議採用Element接口上的setAttribute和getAttribute來獲取或設置HTML Attribute,HTML5的這些定義擴展了HTML Attribute的範圍,讓它們能夠像DOM Property同樣set和get——UA早已普遍支持)
有些以前在HTMLElement上定義接口被移動到了Element接口中:id、className、classList、getElementsByClassName()
(譯註:擴展了DOM Level 2上的Element接口定義,能夠直接set/get id等屬性值了——UA早已普遍支持)
DOM Level 2中的其它接口也獲得了擴展。
接口 | 新增接口 |
HTMLOptionsCollection | legacy caller、setter creator、add()、remove()、selectedIndex |
HTMLFormElement | 經過name或index索引的getter、checkValidity() |
HTMLSelectElement | getter、setter creator、item()、namedItem()、labels、selectedOptions及各類validate接口函數 |
HTMLOptionElement | 構造器new Option() |
HTMLInputElement | files、height、indeterminate、list、valueAsDate、valueAsNumber、width、stepUp()、stepDown()、labels、文本選取區域API及各類validate接口函數 |
HTMLTextAreaElement | textLength、labels、文本選取區域API及各類validate接口函數 |
HTMLButtonElement | labels及各類validate接口函數 |
HTMLLabelElement | control |
HTMLFieldSetElement | type、elements及各類validate接口函數 |
HTMLAnchorElement | relList、text |
HTMLLinkElement | relList |
HTMLAreaElement | relList |
HTMLImageElement | 構造器new Image()、naturalWidth、naturalHeight、complete |
HTMLObjectElement | contentWindow、legacy caller及各類validate接口函數 |
HTMLMapElement | images |
HTMLTableElement | createTBody() |
HTMLIFrameElement | contentWindow |
此外:
HTMLLinkElement和HTMLStyleElement實現了CSSOM中的LinkStyle接口
HTMLAnchorElement、HTMLLinkElement和HTMLAreaElement實現了URLUtils接口
在HTML5中已被廢棄的屬性,其對應IDL屬性接口也將被廢棄。如bgColor已被廢棄,那麼HTMLBodyElement之上的IDL屬性接口bgcolor也被廢棄
在HTML5中已被廢棄的元素,其對應接口也被廢棄,包括HTMLAppletElement, HTMLFrameSetElement,HTMLFrameElement, HTMLDirectoryElement及HTMLFontElement、HTMLBaseFontElement
因爲HTML解析器將isindex替代爲其餘元素了,HTMLIsIndexElement接口被廢棄
一些成員屬性從HTMLDocument接口移動到了Document接口,所以在原來的HTMLDocument下被廢棄:anchors和applets。