1.0 HTML5
HTML5—MDN
HTML5——W3C
該規(guī)范定義了萬維網(wǎng)核心語言(超文本標(biāo)記語言(HTML))的第五次重要修訂,于2014年10月29日標(biāo)準(zhǔn)規(guī)范制定完成。
- 語義:是一個新版本的HTML語言,新增了新的元素,屬性和行為。當(dāng)然,也淘汰了一些舊屬性。
- 通信:信息傳遞增強(qiáng),讓你和服務(wù)器之間通過創(chuàng)新的新技術(shù)方法進(jìn)行通信。
- 多媒體:
<video>和<audio>的加入,支持新的多媒體內(nèi)容創(chuàng)作。 - 離線&存儲:離線資源緩存,編輯,離線事件支持等。
- 2D/3D繪圖:
<canvas>引入。 - 性能:Web Works,XMLHttpRequest Level2,支持拖放API,
requestAnimationFrame更好的動畫性能...... - 多用途互聯(lián)網(wǎng)郵件擴(kuò)展(MIME)和協(xié)議處理程序注冊
等等
1.1 語義
關(guān)于DOCTYPE與字符集編碼
早期網(wǎng)頁設(shè)計(jì)中,并不是所有網(wǎng)頁代碼都遵循標(biāo)準(zhǔn)進(jìn)行編寫,所有現(xiàn)代瀏覽器中都擁有不同的呈現(xiàn)模式,這樣一來,瀏覽器不僅能正常解析標(biāo)準(zhǔn)的文檔,也能解析老式的、不符合標(biāo)準(zhǔn)的網(wǎng)頁。呈現(xiàn)模式分為標(biāo)準(zhǔn)模式、怪異模式、近似模式。
瀏覽器根據(jù)doctype來選擇使用不同的模式、HTML版本、文檔類型定義(DTD)規(guī)則來解析。所以在以前的HTML中會看到諸如這樣的聲明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
DTD中包含了一系列標(biāo)記、屬性,用于標(biāo)記Web文檔中能出現(xiàn)哪些元素和元素之間的包含關(guān)系,在遵循標(biāo)準(zhǔn)的所有Web文檔中,DOCTYPE這條指令是必不可少的,決定瀏覽器最終如何解析Web文檔,影響最終呈現(xiàn)效果。
在HTML中,文檔類型聲明是必要的。所有的文檔的頭部,你都將會看到"
<!DOCTYPE html>" 的身影。這個聲明的目的是防止瀏覽器在渲染文檔時,切換到我們稱為“怪異模式(兼容模式)”的渲染模式。“<!DOCTYPE html>" 確保瀏覽器按照最佳的相關(guān)規(guī)范進(jìn)行渲染,而不是使用一個不符合規(guī)范的渲染模式?!狹DN
HTML5的DOCTYPE
HTML5的doctype非常簡單,明你的HTML內(nèi)容使用HTML5,只需要簡單的使用:
<!DOCTYPE html>
這樣做會讓目前還不支持的HTML5的瀏覽器采用標(biāo)準(zhǔn)模式解析,這意味著他們會解析那些HTML5中兼容的舊的HTML的標(biāo)簽的部分,而忽略他們不支持HTML5的新特性。
這個doctype比以前更短,更簡單,使的它更容易被記住并且減少必須下載的字節(jié)數(shù)。
用HTML5的doctype聲明文件包含HTML5標(biāo)記
文檔編碼
在一個頁面上做的第一件事通常是聲明使用的字符集。在以前版本的HTML,它是一個非常復(fù)雜的<meta>元素,現(xiàn)在它變得非常簡單:
<meta charset="UTF-8">
標(biāo)簽閉合
在HTML5中一些標(biāo)簽不再是需要閉合標(biāo)簽的。
li dt dd p rt option tbody tfoot tr td th
自閉合標(biāo)簽最后的/也不推薦再加
<img> <input> <br> <hr>
HTML標(biāo)簽,閉合還是不閉合?
正確閉合HTML標(biāo)簽,停止使用不標(biāo)準(zhǔn)的標(biāo)簽和屬性
具有boolean值的屬性
對于具有boolean值的屬性,例如disable和readonly等只寫屬性不寫屬性值時值為true
<input type="checkbox" checked >
<input type="checkbox" checked="checked" >
<input type="checkbox" checked="" >
省略屬性值引號
屬性值可以用單引號或者雙引號,在屬性值不包括<、>、=、'、"時可以忽略引號
<input type=text >
新增元素
<section>
表示文檔中一個區(qū)域(或節(jié)點(diǎn)),比如,內(nèi)容中的一個專題組,一般會**包含一個標(biāo)題(Heading),通過包含一個標(biāo)題作為子節(jié)點(diǎn)來辨識每一個<section>
不要把 <section> 元素作為一個普通的容器來使用,這是本應(yīng)該是<div>的用法(特別是當(dāng)片段(the sectioning )僅僅是為了美化樣式的時候)。 一般來說,一個 <section> 應(yīng)該出現(xiàn)在文檔大綱中。
之前
<div>
<h2>Heading</h2>
<img src="bird.jpg" alt="bird">
</div>
之后
<div>
<h2>Heading</h2>
<img src="bird.jpg" alt="bird">
</div>
<article>
<article>元素表示文檔、頁面、應(yīng)用或網(wǎng)站中的獨(dú)立結(jié)構(gòu),其意在成為可獨(dú)立分配的或可復(fù)用的結(jié)構(gòu),如在發(fā)布中,它可能是論壇帖子、雜志或新聞文章、博客、用戶提交的評論、交互式組件,或者其他獨(dú)立的內(nèi)容項(xiàng)目。
例子:
<article class="film_review">
<header>
<h2>Jurassic Park</h2>
</header>
<section class="main_review">
<p>Dinos were great!</p>
</section>
<section class="user_reviews">
<article class="user_review">
<p>Way too scary for me.</p>
<footer>
<p>
Posted on <time datetime="2015-05-16 19:00">May 16</time> by Lisa.
</p>
</footer>
</article>
<article class="user_review">
<p>I agree, dinos are my favorite.</p>
<footer>
<p>
Posted on <time datetime="2015-05-17 19:00">May 17</time> by Tom.
</p>
</footer>
</article>
</section>
<footer>
<p>
Posted on <time datetime="2015-05-15 19:00">May 15</time> by Staff.
</p>
</footer>
</article>
<nav>
HTML導(dǎo)航欄 (<nav>) 描繪一個含有多個超鏈接的區(qū)域,這個區(qū)域包含轉(zhuǎn)到其他頁面,或者頁面內(nèi)部其他部分的鏈接列表.
- 并不是所有鏈接都必須使用
<nav>元素,只用來一些熱門的鏈接放入導(dǎo)航欄,例如<footer>元素就常用來在頁面底部包含一個不常用到,沒必須要加入nav的鏈接列表。 - 一個網(wǎng)頁也可能包含多個
<nav>元素,例如是一個網(wǎng)站內(nèi)的導(dǎo)航列表,另一個是頁面內(nèi)的導(dǎo)航列表。
例子:
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<header>
HTML <header> 元素用于展示介紹性內(nèi)容,通常包含一組介紹性的或是輔助導(dǎo)航的實(shí)用元素。它可能包含一些標(biāo)題元素,但也可能包含其他元素,比如 Logo、搜索框、作者名稱,等等。
<header> 元素不是分段內(nèi)容,因此不會往 大綱 中引入新的段落。也就是說,<header> 元素通常用于包含周圍部分的標(biāo)題(h1 至 h6 元素),但這不是必需的。
<header class="page-header">
<h1>Cute Puppies Express!</h1>
</header>
<main>
<p>I love Beagles <strong>so</strong> much! Like really, a lot. They're adorable and their ears are so, so snuggly soft!</p>
</main>
<footer>
HTML <footer> 元素表示最近一個章節(jié)內(nèi)容或者根節(jié)點(diǎn)(sectioning root )元素的頁腳。一個頁腳通常包含該章節(jié)作者、版權(quán)數(shù)據(jù)或者與文檔相關(guān)的鏈接等信息。
例子略。
注意
<footer>元素必須不能是<address>,<header>或者另一個<footer>元素的后代元素。
一般的,一個頁面只有一個footer。
<aside>
<aside>元素表示一個和其余頁面內(nèi)容幾乎無關(guān)的部分,被認(rèn)為是獨(dú)立于該內(nèi)容的一部分并且可以被單獨(dú)的拆分出來而不會使整體受影響。其通常表現(xiàn)為側(cè)邊欄或者嵌入內(nèi)容。他們通常包含在工具條,例如來自詞匯表的定義。也可能有其他類型的信息,例如相關(guān)的廣告、筆者的傳記、web 應(yīng)用程序、個人資料信息,或在博客上的相關(guān)鏈接。
<article>
<p>
迪斯尼電影 <em>海的女兒</em> 于1989年首次搬上銀屏
</p>
<aside>
這個電影在首次發(fā)行期間就賺得了8千7百萬美元.
</aside>
<p>
該電影更多信息...
</p>
</article>
<audio>
HTML <audio>元素用于在文檔中表示音頻內(nèi)容。 <audio> 元素可以包含多個音頻資源, 這些音頻資源可以使用 src 屬性或者<source> 元素來進(jìn)行描述; 瀏覽器將會選擇最合適的一個來使用。對于不支持<audio>元素的瀏覽器,<audio>元素也可以作為瀏覽器不識別的內(nèi)容加入到文檔中。
元素屬性
autoplay
布爾屬性,true表示自動播放,不會停下等待數(shù)據(jù)載入結(jié)束
autobuffer
布爾屬性,true將會自動開始加載,即使沒有設(shè)置自動播放。直到媒體緩存滿了或者全部音頻文件加載完畢。
controls
如果設(shè)置了該屬性,瀏覽器將提供一個包含聲音,播放速度,播放暫停的控制面板,讓用戶可以控制音頻的播放。
loop
是否循環(huán)播放
src
嵌入的音頻的URL。 該URL應(yīng)遵從 HTTP access controls. 這是一個可選屬性;你可以在audio元素中使用 <source> 元素來替代該屬性指定嵌入的音頻。
d
volume
音頻播放的音量。值從0.0 (無聲) 到 1.0 (最大聲),時間偏移量目前是指定為float類型的值,表示偏移的秒數(shù)。
其他新增元素
HTML5 標(biāo)簽列表
input新增類型
type="email"
自帶Email格式的正則檢測
type="url"
用于編輯URL的字段
也同樣自帶URL的正則檢測
type="number"
用于輸入浮點(diǎn)數(shù)的控件。

type="range"
用于輸入不精確值控件。如果未指定相應(yīng)的屬性,控件使用如下缺省值
- min : 0
- max : 100
- value : min+(max-min)/2,或當(dāng)小于min時使用min
- step : 1
<input id="input" type="range" min="100" max="1000" value="50" step="10">

Date
type="date"
用于輸入日期的控件(年,月,日,不包括時間)。

webkit稍微提供了一些輕微修改樣式的方法:
::-webkit-datetime-edit – 控制編輯區(qū)域的
::-webkit-datetime-edit-fields-wrapper – 控制年月日這個區(qū)域的
::-webkit-datetime-edit-text – 這是控制年月日之間的斜線或短橫線的
::-webkit-datetime-edit-month-field – 控制月份
::-webkit-datetime-edit-day-field – 控制具體日子
::-webkit-datetime-edit-year-field – 控制年文字, 如2017四個字母占據(jù)的那片地方
::-webkit-inner-spin-button – 這是控制上下小箭頭的
::-webkit-calendar-picker-indicator – 這是控制下拉小箭頭的
::-webkit-clear-button –這是控制清除按鈕的
input[type="date"]默認(rèn)樣式修改
html5中如何去掉input type date默認(rèn)樣式
HTML5中input[type='date']自定義樣式&日歷校驗(yàn)功能
type="mouth"
用于輸入年月的控件,不帶時區(qū)。

type="week"
用于輸入一個由星期-年組成的日期,日期不包括時區(qū)。\

type="time"
用于輸入不含時區(qū)的時間控件。

type="datetime-local"
用于輸入日期時間控件,不包含時區(qū)。

關(guān)于Input Datetime對象的參考:
<input type="datetime-local">
HTML DOM Input Datetime 對象
移除(廢棄)元素
一些能被CSS替代的元素將被移除,因?yàn)椴环蠘邮浇Y(jié)構(gòu)分離原則。
<basefont>
<basefont>用來設(shè)置文檔的默認(rèn)字體大小。使用<font>可以相對于默認(rèn)字體大小進(jìn)行變化。<big>
<big>會使字體加大一號(例如從小號(small)到中號(medium),從大號(large)到加大(x-large)),最大不超過瀏覽器的最大字體。<center>
<center>是個 塊級元素,可以包含段落,以及其它塊級和內(nèi)聯(lián)元素。這個元素的整個內(nèi)容在它的上級元素中水平居中(通常是<body>)。<font>
font屬性是設(shè)置font-style,font-variant,font-weight,font-size,line-height和font-family屬性的簡寫,或使用特定的關(guān)鍵字設(shè)置元素的字體為某個系統(tǒng)字體。<s>
HTML<s>元素 **使用刪除線來渲染文本。使用<s>元素來表示不再相關(guān),或者不再準(zhǔn)確的事情。但是當(dāng)表示文檔編輯時,不提倡使用<s>;為此,提倡使用<del>和<ins>元素。<u>
<u>元素使文本在其內(nèi)容的基線下的一行呈現(xiàn)下劃線。在HTML5中, 此元素表示具有未標(biāo)注的文本跨度,顯示渲染,非文本注釋,例如將文本標(biāo)記為中文文本中的專有名稱(一個正確的中文標(biāo)記), 或 將文本標(biāo)記為拼寫錯誤。<tt>
電報(bào)文本元素 (<tt>) 產(chǎn)生一個內(nèi)聯(lián)元素,使用瀏覽器內(nèi)置的 monotype 字體展示。這個元素用于給文本排版,使其等寬展示,就像電報(bào)那樣。使用<code>元素來展示等寬文本可能更加普遍。<strike>
<strike>元素(或者 HTML 刪除線元素)在文本上放置刪除線。
不再使用的frame框架
- frame
- frameset
- noframes
新增屬性
contentEditable
contenteditable 是一個枚舉屬性(enumerated attribute),表示元素是否可被用戶編輯。 如果可以,瀏覽器會修改元素的部件(widget)以允許編輯。designMode
document.designMode 控制整個文檔是否可編輯。有效值為 “on”和 “off”hidden
hidden 是一個布爾屬性,表示一個元素尚未或者不再相關(guān)。例如,它可以被用來隱藏一個頁面元素直到登錄完畢。如果一個元素設(shè)置了這個屬性,它就不會被顯示。spellcheck
spellcheck 全局屬性是枚舉屬性,定義是否可以檢查元素的拼寫錯誤。它可以具有以下值:-
tabindex
tabindex 全局屬性 是個整數(shù),表示元素(如果可聚焦)是否能夠接受輸入焦點(diǎn)。 如果它應(yīng)該參與鍵盤序列導(dǎo)航,那么就是它的位置。它可以設(shè)為多種值:- tabindex=負(fù)值 (通常是tabindex=“-1”),表示元素是可聚焦的,但是不能通過鍵盤導(dǎo)航來訪問到該元素,用JS做頁面小組件內(nèi)部鍵盤導(dǎo)航的時候非常有用。
-
tabindex="0",表示元素是可聚焦的,并且可以通過鍵盤導(dǎo)航來聚焦到該元素,它的相對順序是當(dāng)前處于的DOM結(jié)構(gòu)來決定的。 - tabindex=正值,表示元素是可聚焦的,并且可以通過鍵盤導(dǎo)航來訪問到該元素;它的相對順序按照tabindex 的數(shù)值遞增而滯后獲焦。如果多個元素?fù)碛邢嗤?tabindex,它們的相對順序按照他們在當(dāng)前DOM中的先后順序決定。
表單屬性
-
autofocus
這個布爾屬性允許您指定的表單控件在頁面加載時具有焦點(diǎn)(自動獲得焦點(diǎn)),除非用戶將其覆蓋,例如通過鍵入不同的控件。文檔中只有一個表單元素可以具有autofocus屬性,它是一個布爾值。 如果type屬性設(shè)置為隱藏則不能應(yīng)用(即您不能自動獲得焦點(diǎn)的屬性設(shè)置為隱藏的控件)。 -
placeholder
提示用戶輸入框的作用。用于提示的占位符文本不能包含回車或換行。 -
required
表示任意擁有[required](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#attr-required)屬性的<input>或<textarea>元素使用它. 它允許表單在提交之前容易的展示必填字段并且渲染其外觀. -
novalidate
novalidate 屬性規(guī)定當(dāng)提交表單時不對其進(jìn)行驗(yàn)證。
如果使用該屬性,則表單不會驗(yàn)證表單的輸入。
鏈接相關(guān)
link新增sizes屬性,sizes表示資源大小的以逗號隔開的一個或多個字符串
-
base新增target屬性,該屬性指定在何處顯示鏈接的資源。 取值為標(biāo)簽(tab),窗口(window),或框架(iframe)等瀏覽上下文的名稱或其他關(guān)鍵詞。以下關(guān)鍵字具有特殊的意義:
- _self: 當(dāng)前頁面加載,即當(dāng)前的響應(yīng)到同一HTML 4 frame(或HTML5瀏覽上下文)。此值是默認(rèn)的,如果沒有指定屬性的話。
- _blank: 新窗口打開,即到一個新的未命名的HTML4窗口或HTML5瀏覽器上下文
- _parent: 加載響應(yīng)到當(dāng)前框架的HTML4父框架或當(dāng)前的HTML5瀏覽上下文的父瀏覽上下文。如果沒有parent框架或者瀏覽上下文,此選項(xiàng)的行為方式相同_self。
- _top: IHTML4中:加載的響應(yīng)成完整的,原來的窗口,取消所有其它frame。 HTML5中:加載響應(yīng)進(jìn)入頂層瀏覽上下文(即,瀏覽上下文,它是當(dāng)前的一個的祖先,并且沒有parent)。如果沒有parent框架或者瀏覽上下文,此選項(xiàng)的行為方式相同_self
area新增hreflang和rel。
hreflang:此屬性指明了被鏈接資源的語言. 其意義僅供參考??扇〉闹祬⒁?BCP47。僅當(dāng)設(shè)置了 href 屬性時才應(yīng)設(shè)置該屬性。
rel:此屬性指明被鏈接文檔對于當(dāng)前文檔的關(guān)系。這個屬性一定得是一個由空格分開的鏈接類型值的列表。 這個屬性最通常的用法是指向一個連接到外部樣式表的鏈接:將rel的值設(shè)置為stylesheet
其他
ol新增reversed
這個布爾屬性規(guī)定了列表的條目采用倒序,即最不重要的條目放在列表第一個位置。meta新增charset
此特性聲明當(dāng)前文檔所使用的字符編碼,但該聲明可以被任何一個元素的 lang 特性的值覆蓋。此特性的值必須是一個符合由IANA所定義的字符編碼首選MIME 名稱(preferred MIME name )之一。盡管標(biāo)準(zhǔn)不要求必須使用某些特定的字符編碼,但它還是給出了一些建議:
鼓勵使用 UTF-8;-
menu新增 type和label
label:顯示給用戶的菜單名稱。在嵌套菜單中使用,以提供可通過其訪問子菜單的標(biāo)簽。必須僅在父元素<menu>處于上下文菜單狀態(tài)時指定。
type:此屬性指示要聲明的菜單類型,可以是兩個值之一。-
context:上下文菜單狀態(tài),表示通過另一個元素激活的一組命令。這可能是通過a的[menu](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/button#attr-menu)屬性<button>或具有contextmenu屬性的元素。將<menu>元素直接嵌套在另一個中時,如果父元素已處于此狀態(tài),則這是缺省值的缺省值。 -
list:列表菜單狀態(tài),表示用于用戶交互的一系列命令。這是缺省值的默認(rèn)值,除非父元素<menu>在上下文菜單狀態(tài)中是a 。
-
script新增async
該布爾屬性指示瀏覽器是否在允許的情況下異步執(zhí)行該腳本。該屬性對于內(nèi)聯(lián)腳本無作用 (即沒有src屬性的腳本)。iframe新增sandbox, seamless, srcdoc
sandbox: 如果指定了空字符串,該屬性對呈現(xiàn)在iframe框架中的內(nèi)容啟用一些額外的限制條件。屬性值可以是用空格分隔的一系列指定的字符串
srcdoc: 該屬性值可以是HTML代碼,這些代碼會被渲染到iframe中,如果同時指定了src屬性,srcdoc會覆蓋src所指向的頁面。該屬性最好能與sandbox和seamless屬性一起使用。
seamless: 該布爾屬性指示瀏覽器將iframe渲染成容器頁面文檔的一部分。例如,通過打被包含的文檔的鏈接,在iframe頁面的樣式被渲染之前,父頁面的CSS樣式就可以應(yīng)用在iframe中(除非被其他設(shè)置阻止)。
低版本IE支持HTML5標(biāo)簽
- 使用JavaScript 語句 document.createElement("header") 即可讓低版本 IE 瀏覽器支持新的元素
<script>
var header = document.createElement("header");
</script>
<style>
header{
display: block;
background-color: red;
}
</style>
</head>
<body>
<header>hello world!</header>
</body>
腳本與樣式表順序可顛倒放置。
到這里,低版本IE瀏覽器就可以支持html5元素了。
- 更簡單的方法是使用HTML5 shiv來解決。
<!--[if lt IE 9]>
<script src="http://cdn.static.runoob.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
<![endif]-->
以上代碼意思是在 IE 瀏覽器的版本小于 IE9 時將讀取 html5.js 文件,并解析它。