1991年HTML1.0標準出現
1997年HTML4.0發佈,4.0標準下的瀏覽器侷限性
Flash (安全與穩定堪憂、耗電、觸摸、不開放)
Silverlight
JavaApplet
2008年HTML5出現, W3C2014年10月29日,萬維網聯盟宣佈,通過接近8年的艱苦努力,該標準規範終於制定完成。php
HTML5加強了瀏覽器的原生功能,符合HTML5規範的瀏覽器功能將更增強大,減小了Web應用對插件的依賴,讓用戶體驗更好,讓開發更加方便,另外W3C從推出HTML4.0到5.0之間共經歷了17年,HTML的變化很小,這並不符合一個好產品的演進規則。html
如下的 HTML 4.01 元素在HTML5中已經被刪除:
<acronym>
<applet>
<basefont>
<big>
<center>
<dir>
<font>
<frame>
<frameset>
<noframes>
<strike>html5
<article>標籤訂義外部的內容。好比來自一個外部的新聞提供者的一篇新的文章,或者來自 blog 的文本,或者是來自論壇的文本。
HTML5:<article></article>
HTML4:<div></div>java
<aside>標籤訂義 article 之外的內容。aside 的內容應該與 article 的內容相關。
HTML5:<aside>Aside 的內容是獨立的內容,但應與文檔內容相關。</aside>
HTML4:<div>Aside 的內容是獨立的內容,但應與文檔內容相關。</div>jquery
<audio> 標籤訂義聲音,好比音樂或其餘音頻流。
HTML5:<audio src="someaudio.wav">您的瀏覽器不支持 audio 標籤。</audio>
HTML4:<object type="application/ogg" data="someaudio.wav"><param name="src" value="someaudio.wav"></object>git
<canvas> 標籤訂義圖形,好比圖表和其餘圖像。這個 HTML 元素是爲了客戶端矢量圖形而設計的。它本身沒有行爲,但卻把一個繪圖 API 展示給客戶端 JavaScript 以使腳本可以把想繪製的東西都繪製到一塊畫布上。
HTML5:<canvas id="myCanvas" width="200" height="200"></canvas>
HTML4:<object data="inc/hdr.svg" type="image/svg+xml" width="200" height="200"></object>github
<command> 標籤訂義命令按鈕,好比單選按鈕、複選框或按鈕。
HTML5: <command onclick=cut()" label="cut">
HTML4: noneweb
<datalist> 標籤訂義可選數據的列表。與 input 元素配合使用,就能夠製做出輸入值的下拉列表。
HTML5: <datalist></datalist>
HTML4: see combobox.chrome
<details> 標籤訂義元素的細節,用戶可進行查看,或經過點擊進行隱藏。與 <legend> 一塊兒使用,來製做 detail 的標題。該標題對用戶是可見的,當在其上點擊時可打開或關閉 detail。
HTML5: <details></details>
HTML4: <dl style="display:hidden"></dl>
<embed> 標籤訂義嵌入的內容,好比插件。
HTML5: <embed src="horse.wav" />
HTML4: <object data="flash.swf" type="application/x-shockwave-flash"></object>
<figcaption> 標籤訂義 figure 元素的標題。」figcaption」 元素應該被置於 「figure」 元素的第一個或最後一個子元素的位置。
HTML5: <figure><figcaption>PRC</figcaption></figure>
HTML4: none
<figure> 標籤用於對元素進行組合。使用 <figcaption> 元素爲元素組添加標題。
HTML5: <figure><figcaption>PRC</figcaption><p>The People's Republic of China was born in 1949...</p></figure>
HTML4: <dl><h1>PRC</h1><p>The People's Republic of China was born in 1949...</p></dl>
<footer> 標籤訂義 section 或 document 的頁腳。典型地,它會包含創做者的姓名、文檔的創做日期以及/或者聯繫信息。
HTML5: <footer></footer>
HTML4: <div></div>
<header> 標籤訂義 section 或 document 的頁眉。
HTML5: <header></header>
HTML4: <div></div>
<hgroup> 標籤用於對網頁或區段(section)的標題進行組合。
HTML5: <hgroup></hgroup>
HTML4: <div></div>
<keygen> 標籤訂義生成密鑰。
HTML5: <keygen>
HTML4: none
<mark>主要用來在視覺上向用戶呈現那些須要突出的文字。<mark>標籤的一個比較典型的應用就是在搜索結果中向用戶高亮顯示搜索關鍵詞。
HTML5: <mark></mark>
HTML4: <span></span>
<meter> 標籤訂義度量衡。僅用於已知最大和最小值的度量。必須定義度量的範圍,既能夠在元素的文本中,也能夠在 min/max 屬性中定義。
HTML5: <meter></meter>
HTML4: none
<nav> 標籤訂義導航連接的部分。
HTML5: <nav></nav>
HTML4:<ul></ul>
<output> 標籤訂義不一樣類型的輸出,好比腳本的輸出。
HTML5: <output></output>
HTML4: <span></span>
<progress> 標籤運行中的進程。可使用 <progress> 標籤來顯示 JavaScript 中耗費時間的函數的進程。
HTML5: <progress></progress>
HTML4: none
<rp> 標籤在 ruby 註釋中使用,以定義不支持 ruby 元素的瀏覽器所顯示的內容。
HTML5: <ruby>漢 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt></ruby>
HTML4: none
<rt> 標籤訂義字符(中文註音或字符)的解釋或發音。
HTML5: <ruby>漢 <rt> ㄏㄢˋ </rt></ruby>
HTML4: none
<ruby> 標籤訂義 ruby 註釋(中文註音或字符)。
HTML5: <ruby>漢 <rt><rp>(</rp>ㄏㄢˋ<rp>)</rp></rt></ruby>
HTML4: none
<section> 標籤訂義文檔中的節(section、區段)。好比章節、頁眉、頁腳或文檔中的其餘部分。
HTML5: <section></section>
HTML4: <div></div>
<source> 標籤爲媒介元素(好比 <video> 和 <audio>)定義媒介資源。
HTML5: <source>
HTML4: <param>
<summary> 標籤包含 details 元素的標題,」details」 元素用於描述有關文檔或文檔片斷的詳細信息。」summary」 元素應該是 「details」 元素的第一個子元素。
HTML5: <details><summary>HTML 5</summary>This document teaches you everything you have to learn about HTML 5.</details>
HTML4: none
<time> 標籤訂義日期或時間,或者二者。
HTML5: <time></time>
HTML4: <span></span>
<video> 標籤訂義視頻,好比電影片斷或其餘視頻流。
HTML5: <video src="movie.ogg" controls="controls">您的瀏覽器不支持 video 標籤。</video>
HTML4:<object type="video/ogg" data="movie.ogv"><param name="src" value="movie.ogv"></object>
表示特定範圍內的數值,可用於工資、數量、百分比等 max表示最大值,min表示最小值,value表明當前值。
<meter max="100" min="0" value="60" style="width: 300px;"></meter>
能夠試試用js控制讓它從0變化到100。
time。表示時間值,屬性datetime強調時間
大會時間:<time>2015-10-6</time>
<time>2015-10-6</time> 咱們在天天早上 <time>8:30</time> 開始上課。 我在<time datetime="2017-02-14">情人節</time>有個約會。
運行效果:
由於該標籤是一個語義標籤,在瀏覽器上查看時沒有特別的效果,基本與沒有設置標籤的效果相同。
用來表示進度條
<h3>progress</h3> <progress value="75" max="100"></progress>
max:最大值,完成時的值
value:當前值
firefox運行結果:
chrome運行結果:
該標籤訂義可選數據的列表。與 input 元素配合使用,就能夠製做出輸入值的下拉列表。
當與input組合時既能夠完成選擇有能夠輸入。
<input type="text" list="countries" /> <datalist id="countries"> <option value="中國"></option> <option value="美國"></option> <option value="日本"></option> </datalist>
在沒有使用HTML5時若是要在頁面中播放音頻與視頻,則可使用的方法有:
a)、embed
<embed src='http://player.youku.com/player.php/sid/XODIxNTY0NTQw/v.swf' allowFullScreen='true' quality='high' width='480' height='400' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash'></embed>
<embed src="img/iceage4.mp4"></embed>
b)、使用flash播放器
如一些三方插件,flowplayer602
html5多媒體組件指的是video(視頻)組件和audio(音頻)組件。HTML5多媒體組件能夠在不借助諸如Flash Player等第三方插件的狀況下,直接在你的網頁上嵌入多媒體組件。瀏覽器提供原生支持視頻的新能力使得網頁開發人員更易於在不依賴於外置插件有效性的狀況下,在他們的網站上添加視頻組件。因爲蘋果公司現階段在iPhone和iPad上使用的Flash技術的侷限性,HTML5多媒體組件的能力就顯得尤其重要了。
用於在播放視頻,電影
標籤基本格式以下:
<video width="800" height="600" controls="controls" poster="content/1.jpg"> <source src="content/iceage4.mp4" type="video/mp4"></source> <source src="content/iceage4.webm" type="video/webm"></source> <object width="" height="" type="application/x-shockwave-flash" data="myvideo.swf"> <param name="movie" value="myvideo.swf" /> <param name="flashvars" value="autostart=true&file=myvideo.swf" /> </object> 當前瀏覽器不支持 video直接播放,點擊這裏下載視頻: <a href="content/iceage4.webm">下載視頻</a> </video>
運行效果:
source是視頻源,能夠有多種,當一種失敗時將選擇下一種,主要有以下3種:
Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件
MPEG4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件
WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件
格式支持狀況:
標籤屬性:
source子標籤屬性:
video API方法
video API屬性
video API事件
注意:
<video src="img/iceage4.mp4" controls="controls" poster="img/1.jpg"> 您的瀏覽器太老了,請升級,視頻下載<a href="#">地址</a> </video>
多數的HTML5標籤的innerHTML內容是瀏覽器不支持該標籤時顯示的內容。
事件綁定與監聽的區別:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>事件綁定與監聽的區別</title> </head> <body> <button id="btnA">按鈕A</button> <button id="btnB">按鈕B</button> <script type="text/javascript"> var btnA = document.getElementById("btnA"); var btnB = document.getElementById("btnB"); btnA.onclick = function() { alert("你點了一下"); } btnA.onclick = function() { alert("你又點了一下"); } btnB.addEventListener("click",function(event){ alert("你點了一下"); },false); btnB.addEventListener("click",function(event){ alert("你又點了一下"); },false); </script> </body> </html>
運行結果:
使用on事件名的形式綁定事件後綁定會覆蓋前面綁定的事件,也就是最後一個綁定的事件會生效;
使用addEventListener綁定事件則不會覆蓋,可同時在一個元素上綁定多個相同的事件。
video API的屬性與事件示例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Video 標籤</title> </head> <body> <video id="videoIce" width="800" height="600" controls="controls" poster="content/1.jpg"> <source src="content/iceage4.mp4" type="video/mp4"></source> <source src="content/iceage4.webm" type="video/webm"></source> <object width="" height="" type="application/x-shockwave-flash" data="myvideo.swf"> <param name="movie" value="myvideo.swf" /> <param name="flashvars" value="autostart=true&file=myvideo.swf" /> </object> 當前瀏覽器不支持 video直接播放,點擊這裏下載視頻: <a href="content/iceage4.webm">下載視頻</a> </video> <h2> <button onclick="play()">播放</button> <button onclick="pause()">暫停</button> <span id="msg"></span> </h2> <script type="text/javascript"> var videoIce=document.getElementById("videoIce"); function play() { videoIce.play(); } function pause() { videoIce.pause(); } videoIce.ontimeupdate = function() { document.getElementById("msg").innerHTML=videoIce.currentTime; } </script> </body> </html>
運行結果:
練習:
練習代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Video 標籤</title> </head> <body> <video id="videoIce" width="800" height="600" controls="controls" poster="img/11.png"> <source src="video/jingxiu.mp4" type="video/mp4"></source> <source src="video/jingxiu.webm" type="video/webm"></source> <object width="" height="" type="application/x-shockwave-flash" data="jingxiu.mp4"> <param name="movie" value="myvideo.swf" /> <param name="flashvars" value="autostart=true&file=myvideo.swf" /> </object> 當前瀏覽器不支持 video直接播放,點擊這裏下載視頻: <a href="video/jingxiu.mp4">下載視頻</a> </video> <p> <progress id="pros" max="100"></progress> <span id="showProgress"></span> </p> <h2> sfasf </h2> <h2> <button onclick="play()">播放<button> <button onclick="pause()">暫停<button> <button onclick="play()">繼續<button> <button onclick="muted()">靜音<button> <button onclick="fast(2)">快進<button> <button onclick="fast(-2)">快退<button> <button onclick="vol(0.1)">音量+<button> <button onclick="vol(-0.1)">音量-<button> <button onclick="allsee()">全屏<button> </h2> <script type="text/javascript"> var videoIce = document.getElementById("videoIce"); var showProgress = document.getElementById("showProgress"); var pros = document.getElementById("pros"); //進度條與視頻進度同步 videoIce.ontimeupdate = function() { var percut = (videoIce.currentTime / videoIce.duration * 100).toFixed(1); pros.value = percut; showProgress.innerHTML = percut+"%"; } //播放 function play() { videoIce.play(); } //暫停 function pause() { videoIce.pause(); } //快進和快退 ,不支持chocne function fast(value) { var video=document.getElementById("videoIce"); video.currentTime +=value; alert(videoIce.currentTime); } //靜音 function muted() { videoIce.volume = 0; } //音量加減 function vol(value){ videoIce.volume+=value; } //全屏觀看 function allsee(){ videoIce.webkitRequestFullScreen(); } </script> </body>
audio能夠實現播放聲音,音樂功能。
<audio src=http://baidu/demo/test.mp3 controls >
您的瀏覽器不支持audio元素
</autio>
<audio src="content/fcml.mp3" controls="controls" autoplay="autoplay"></audio>
audio標籤的屬性,不少屬性都是與video相同的:
autoplay:true|false,若是是 true,則音頻在就緒後立刻播放。
controls:true|false 若是是true,則向用戶顯示控件,好比播放按鈕。
end:numeric value 定義播放器在音頻流中的何處中止播放。默認地,聲音會播放到結尾。
loopend:numeric value 定義在音頻流中循環播放中止的位置,默認是 end 屬性的值。
loopstart: numeric value 定義在音頻流中循環播放的開始位置。默認是 start 屬性的值。
playcount: numeric value 定義音頻片段播放多少次。默認是 1。
src: url 所播放音頻的 url。
start : numeric value 定義播放器在音頻流中開始播放的位置。默認地,聲音在開頭進行播放。
source子標籤
使用source元素做爲多媒體元素的子標籤
例:
<audio>
<source src='test.mp3’ type='audio/mpeg'/>
<source src='test.ogg’ type='audio/ogg'/>
<source src='test.spx’ type='audio/ogg'/>
</audio>
使用source元素,瀏覽器在列表順序查找,直到找到一個它能播放的文件格式,找到後,就播放該文件並忽略隨後的其它元素。
audio的API與video基本同樣,下面是一個自定義調整音量的示例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>audio標籤</title> </head> <body> <h2>audio標籤</h2> <audio src="content/fcml.mp3" controls="controls" autoplay="autoplay" id="mp3"> <marquee><h2>換個瀏覽器吧,太老了</h2></marquee> </audio> <input type="range" min="0" max="100" onchange="setVolume(this)" /> <script type="text/javascript"> function setVolume(obj){ document.getElementById("mp3").volume=obj.value*0.01; } </script> </body> </html>
運行結果:
音量只在0-1之間。
做用是指定右鍵菜單。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="div1" style="height:900px; background: lightgreen;" contextmenu="menuShare"> </div> <menu id="menuShare" type="context"> <menuitem label="分享到QQ空間" onclick="alert('QQ');"></menuitem> <menuitem label="分享到朋友圈" onclick="alert('朋友圈');"></menuitem> <menuitem label="分享到微博" onclick="alert('微博');"></menuitem> </menu> </body> </html>
contextmenu 在Html5中,每一個元素新增了一個屬性:contextmenu, contextmenu 是上下文菜單,即鼠標右擊元素會出現一個菜單。
menu 要實現鼠標右擊元素會出現一個菜單,還必須瞭解HTML5裏新增的另外一個元素:menu 顧名思義menu是定義菜單的, menu 元素屬性: type :菜單類型屬。 有三個值 1)context:上下文; 2)toolbar:工具欄;3)list:列表
<menuitem>
<menu> </menu>內部能夠嵌入一個一個菜單項,即<menuitem></menuitem>。
menuitem 屬性:
label:菜單項顯示的名稱
icon:在菜單項左側顯示的圖標
onclick:點擊菜單項觸發的事件
規定是否可編輯元素的內容
屬性值:
true -----能夠編輯元素的內容
false -----沒法編輯元素的內容
inherit -----繼承父元素的contenteditable屬性
當爲空字符串時,效果和true一致。
當一個元素的contenteditable狀態爲true(contenteditable屬性爲空字符串,或爲true,或爲inherit且其父元素狀態爲true)時,意味着該元素是可編輯的。不然,該元素不可編輯。
Document.body.contentEditable=true;修改已發佈網站
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>contentEditable屬性</title> </head> <body> <h2>contentEditable屬性</h2> <div contenteditable="true"> Hello contentEditable </div> </body> </html>
hidden屬性用於隱藏該元素。一旦使用了此屬性,則該元素就不會在瀏覽器中被顯示
2個布爾值
true 規定元素是可見。
false 規定元素是不可見。
<div hidden="hidden"> Hello Hidden </div>
爲了兼容一些不支持該屬性的瀏覽器(IE8),能夠在CSS中加以下樣式:
*[hidden]{
display: none;
}
var div1=document.querySelector("body #div1");
div1.innerHTML+=" +++";
規定元素是否可拖拽
3個枚舉值
true 規定元素是可拖動的。
false 規定元素是不可拖動的。
auto 使用瀏覽器的默認特性。
示例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="Scripts/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script> <title></title> <style> #div1, #div3 { height: 200px; width: 200px; border: 1px solid #00f; margin-bottom: 10px; } #div2 { height: 100px; width: 100px; background: yellow; } </style> <script> var div1, div2, div3, msg; window.onload = function() { div1 = document.getElementById("div1"); div2 = document.getElementById("div2"); div3 = document.getElementById("div3"); msg = document.getElementById("msg"); div2.ondragstart=function(){ msg.innerHTML+="div2開始拖動了<br/>"; } div2.ondrag=function(){ msg.innerHTML+="拖動中<br/>"; } div2.ondragend=function(){ msg.innerHTML+="拖動結束<br/>"; } div1.ondragover = function(e) { e.preventDefault(); } div1.ondrop = function(e) { div1.appendChild(div2); } div3.ondragover = function(e) { e.preventDefault(); } div3.ondrop = function(e) { div3.appendChild(div2); } $("#div1").data("name","電池"); alert($("#div1").data("name")); div1.setAttribute("data-order-price",998.7); alert(div1.getAttribute("data-order-price")); } </script> </head> <body> <div id="div1" data-order-price="98.5" data-name="充電寶"></div> <div id="div3"></div> <div id="div2" draggable="true"></div> <h3 id="msg"></h3> </body> </html>
運行結果:
data-*屬性能讓用戶自定義屬性的方式來存儲數據
<span data-order-amount=100></span>
取值:
getAttribute('data-order-amount')
dataset.orderAmount
jQuery中的data()方法一樣能夠訪問
使用jQuery與javascript添加與獲取data屬性示例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>data-*</title> <script src="js/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script> </head> <body> <h2>data-*</h2> <div id="div1" data-student-name="Tom" data-stu='{"a":1,"b":2}'></div> <button onclick="addData()">添加數據</button> <button onclick="getData()">獲取數據</button> <script type="text/javascript"> var div1=document.getElementById("div1"); function addData() { //給div1添加屬性data-student-name,值爲rose div1.setAttribute("data-student-name","Rose"); $("#div1").data("stu-mark","99分"); } function getData() { //原生JavaScript //alert(div1.getAttribute("data-student-name")); //jQuery alert($("#div1").data("student-name")); alert($("#div1").data("stu").a); alert($("#div1").data("stu-mark")); } var x="{a:1}"; alert(eval("("+x+")").a); </script> </body> </html>
運行效果: