HTML5是HTML最新的修訂版本,2014年10月由萬維網聯盟(W3C)完成標準制定。是下一代 HTML 標準。javascript
HTML5定義了一系列新元素,如新語義標籤、智能表單、多媒體標籤等,能夠幫助開發者建立富互聯網應用,還提供了一些新的Javascript API,如地理定位、重力感應、硬件訪問等,能夠在瀏覽器內實現類原生應用,甚至結合Canvas咱們可開發網頁版遊戲。
HTML5的設計目的是爲了在移動設備上支持多媒體,它制定了Web應用開發的一系列標準,成爲第一個將Web作爲應用開發平臺的HTML語言。php
HTML5的優點有不少,好比:更聰明的存儲,更具備語義化的標籤,對視頻和音頻的支持等等。。。最重要的是,HTML5是將來的趨勢。css
HTML5的改進:html
新元素
新屬性
徹底支持 CSS3
Video 和 Audio
2D/3D 製圖
本地存儲
本地 SQL 數據
Web 應用
等等前端
web前端HTML5學習qq羣:733581373html5
若是想看到更加系統的文章和學習方法經驗能夠關注的微信號:‘web前端技術圈’或者‘webxh6’關注後回覆‘2018’能夠領取一套完整的學習視頻java
HTML5新增了一些標籤,也移除了一些標籤。web
目前兼容性比較好的經常使用的新標籤有:正則表達式
<header> 表示頁眉,通常用在文檔頭部
<nav> 表示導航,通常用於導航區域
<section> 表示區塊,定義了某個區域
<article> 表示文章,通常用於表示文章(評論,博客...) <aside> 表示側邊欄,通常和article一塊兒用,表示文章的側邊欄 <figure> 表示獨立的流內容(圖像、圖表、照片、代碼等等) .....
<!DOCTYPE html>瀏覽器
<html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> header { width: 1000px; height: 50px; background: red; margin: 0 auto; color: white; text-align: center; } nav { width: 1000px; height: 50px; background: blue; color: white; text-align: center; margin: 0 auto; } section { margin: 0 auto; width: 1000px; height: 500px; color: white; text-align: center; margin: 0 auto; } aside { float: left; width: 300px; height: 500px; background: green; color: white; text-align: center; margin: 0 auto; } article { float: right; height: 500px; width: 700px; color: white; text-align: center; background: pink; margin: 0 auto; } footer { width: 1000px; height: 50px; background: gray; color: white; text-align: center; margin: 0 auto; } </style> </head> <body> <!--頭部--> <header>頭部</header> <nav>導航</nav> <!--主題--> <section> <!--側邊欄--> <aside>側邊欄</aside> <!--文章--> <article>文章</article> </section> <!--底部--> <footer>底部</footer> </body> </html>
瀏覽器兼容問題
目前新版本的瀏覽器對H5的支持都比較好,可是有些舊的瀏覽器並不識別H5的新元素。全部的瀏覽器對於沒法識別的元素都會做爲內聯元素來處理。
爲了讓舊版本的瀏覽器識別這些新元素,咱們能夠將這些元素CSS 的 display 屬性值爲 block:
header, section, footer, aside, nav, main, article, figure { display: block; }
自定義標籤
咱們能夠自定義一個標籤,並在html中使用它
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> document.createElement("myNode");//建立一個元素 </script> <style> myNode{ display: block; width: 100px; height: 100px; background: red; } </style> </head> <body> <!--使用自定義元素--> <myNode></myNode> </body> </html>
IE9如下的兼容性解決辦法
在IE9版本如下,並不能正常解析這些新標籤,可是卻能夠識別經過document.createElement(‘tagName’)建立的自定義標籤,因而咱們的解決方案就是將HTML5的新標籤所有經過 document.createElement(‘tagName’)來建立一遍,這樣IE低版本也能正常解析HTML5新標籤了,在實際開發中咱們更多采用的是經過檢測IE瀏覽器的版原本加載三方的一個JS庫來解決兼容問題。
1.先下載js下面的文件
html5shiv.js
2.將html5shiv.js引入便可
<!--[if lt IE 9]> <script src="../js/html5shiv.min.js"></script> <![endif]-->
注意:並非全部的瀏覽器都須要引入這個文件,因此咱們在IE9如下的瀏覽器引入便可
<!--[if lt IE 9]> <!--[endif]>
上面代碼是條件註釋,只有IE瀏覽器識別,當IE瀏覽器版本小於9時,纔會引入js文件。
伴隨着互聯網富應用以及移動開發的興起,傳統的Web表單已經愈來愈不能知足開發的需求,因此HTML5在Web表單方向也作了很大的改進,如拾色器、日期/時間組件等,使表單處理更加高效。
input輸入類型
email 輸入email格式
tel 手機號碼
url 只能輸入url格式
number 只能輸入數字 search 搜索框 range 範圍 滑動條 color 拾色器 time 時間 date 日期 不是絕對的 datetime 時間日期 month 月份 week 星期
新的表單元素
datalist
數據列表,通常配合form和input使用,使其具備自動完成的功能。
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action=""> 城市: <input type="text" list="cityData"> <datalist id="cityData"> <option>aaaa</option> <option>abaasd</option> <option>adasdww</option> <option>bsdas</option> <option>csdas</option> <option>fsdas</option> <option>dsdas</option> </datalist> </form> </body> </html>
output
用來輸出計算結果或用戶動做的結果。
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form onsubmit="return false" oninput="o.value = parseInt(a.value) + parseInt(b.value)"> <input name="a" type="number" step="any"> + <input name="b" type="number" step="any"> = <output name="o"></output> </form> </body> </html>
meter
表示度量器(不經常使用)
<meter min="0" max="100" low="20" high="80" value="81" ></meter>
progress
表示進度條
<progress min="0" max="100" value="10"></progress>
表單屬性
autocomplete
是否自動完成,on:開啓 off取消,可用於form和input
<form action="" autocomplete="on"> First name:<input type="text" name="fname"><br> Last name: <input type="text" name="lname"><br> E-mail: <input type="email" name="email" autocomplete="off"><br> <input type="submit"> </form>
能夠看到,當咱們輸入過信息後,再次輸入時,會自動匹配以前輸入夠的內容。而郵箱因爲設置了autocomplete=」off」,因此不會自動完成,
novalidate
取消驗證,用於form元素上。
html5表單自己會自動驗證一些input,例如屬性爲email的input
<form action=""> E-mail: <input type="email" name="user_email"> <input type="submit"> </form>
若是再form中添加這個屬性,那麼點擊提交按鈕時將不會驗證。
<form action="" novalidate> E-mail: <input type="email" name="user_email"> <input type="submit"> </form>
點擊提交表單不會驗證,直接提交
required
required 屬性適用於如下類型的 input標籤:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。
<form action=""> Username: <input type="text" name="usrname" required> <input type="submit"> </form>
添加該屬性後該input不能爲空。點擊提交按鈕時會驗證。
注意:若是form元素設置了novalidate屬性,就算input設置了required 屬性,也不會進行驗證。
<form action="" novalidate> Username: <input type="text" name="usrname" required> <input type="submit"> </form>
placeholder
佔位符,通常用於提示用戶輸入信息
email:<input type="email" placeholder="請輸入郵箱">
autofocus
獲取焦點,用於input中。添加該屬性進去頁面時會自動獲取焦點。若是多個input都設置了這個屬性的話,最前面的input會獲取焦點。
<form action="" > userName: <input type="text" > pwd:<input type="password" placeholder="請輸入密碼" autofocus> email:<input type="email" placeholder="請輸入郵箱" autofocus> <input type="submit"> </form>
multiple
multiple 文件上傳多選或郵箱多個,屬性適用於如下類型的 input標籤:email 和 file
<input type="file" name="img" multiple>
pattern
正則表達式 驗證表單
pattern 屬性適用於如下類型的 input 標籤: text, search, url, tel, email, 和 password.
<form action="" > userName: <input type="text" pattern="[A-Za-z]{3}" title=""> <input type="submit"> </form>
formaction
描述表單提交的URL地址
formaction 屬性用於 type=」submit」 和 type=」image」.
<input type="submit" formaction="demo-admin.php" value="提交">
表單事件
oninput
用戶輸入時觸發
$(function () { $("#emailIpt")[0].oninput=function () { console.log(this.value); }; });
oninvalid
驗證不經過時觸發
$(function () { $("#emailIpt")[0].oninvalid=function () { this.setCustomValidity("請輸入正確的郵箱地址");//自定義提示信息 }; });
在以前的版本咱們若是想在網頁上播放多媒體,必須依賴第三方插件,如今HTML5給咱們提供了多媒體標籤使咱們能夠音頻和視頻。
audio
音頻標籤
<audio id="myAudio" src="music/TheTruthThatYouLeave.mp3"> </audio>
可是不一樣瀏覽器對音頻文件的支持程度不一樣。
兼容寫法
<!-- autoplay: 自動播放 controls:控制條 loop:循環 --> <!--<audio src="music/yinyue.mp3" autoplay controls> </audio>--> <!--推薦的兼容寫法:--> <audio controls loop> <source src="music/yinyue.mp3"/> <source src="music/yinyue.ogg"/> <source src="music/yinyue.wav"/> 抱歉,你的瀏覽器不支持音頻標籤! </audio>
video
視頻標籤
視頻標籤一樣存在瀏覽器兼容問題
<!--<video src="video/movie.mp4" controls autoplay ></video>--> <!-- 行內塊 display:inline-block --> <video controls autoplay> <source src="video/movie.mp4"/> <source src="video/movie.ogg"/> <source src="video/movie.webm"/> 抱歉,瀏覽器要換了! </video>
相關屬性
屬性有不少,經常使用的也就那幾個
相關方法
相關事件
新增獲取DOM的方式
querySelector
返回文檔中匹配指定 CSS 選擇器的一個元素。
document.querySelector("img");//返回第一個img
querySelectorAll
返回全部的元素
document.querySelectorAll("img");//返回img集合
一、Node.classList.add('class') 添加class 二、Node.classList.remove('class') 移除class 三、Node.classList.toggle('class') 切換class,有則移除,無則添加 四、Node.classList.contains('class') 檢測是否存在class
在HTML5中咱們能夠自定義屬性,其格式以下data-*=」」
例如:
data-info=」我是自定義屬性」,經過Node.dataset[‘info’] 咱們即可以獲取到自定義的屬性值。
Node.dataset是以類對象形式存在的
當咱們以下格式設置時,則須要以駝峯格式才能正確獲取
data-my-name=」itcast」,獲取Node.dataset[‘myName’]
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .box{ width: 100px; height: 100px; background: pink; } </style> <script>window.onload=function () { var div=document.querySelector("div"); console.log(div.dataset["info"]);//獲取自定義屬性 } </script> </head> <body> <!--添加滴自定義屬性--> <div class="box" data-info="自定義屬性"></div> </body> </html>
在HTML5的規範中,咱們能夠經過爲元素增長draggable=」true」來設置此元素是否能夠進行拖拽操做,其中圖片、連接默認是開啓的。
拖拽元素
頁面中設置了draggable=」true」屬性的元素
目標元素
頁面中任何一個元素均可以成爲目標元素,
例如:將盒子a中的元素拖拽到盒子b中,那麼,盒子a中的元素就是拖拽元素,盒子b就是目標元素
事件監聽
拖拽元素
ondrag 應用於拖拽元素,整個拖拽過程都會調用 ondragstart 應用於拖拽元素,當拖拽開始時調用 ondragleave 應用於拖拽元素,當鼠標離開拖拽元素時調用 ondragend 應用於拖拽元素,當拖拽結束時調用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tab 標籤</title> <script> window.onload=function(){ var imgNode=document.querySelector("img"); imgNode.ondragstart=function(){ console.log("拖拽開始"); } imgNode.ondragleave=function(){ console.log("離開拖拽元素") } imgNode.ondrag=function () { console.log("正在拖拽"); } imgNode.ondragend=function(){ console.log("拖拽結束") } } </script> </head> <body> <img src="../img/yixin.png" /> </body> </html>
目標元素
ondragenter 應用於目標元素,當拖拽元素進入時調用 ondragover 應用於目標元素,當停留在目標元素上時調用 ondrop 應用於目標元素,當在目標元素上鬆開鼠標時調用 ondragleave 應用於目標元素,當鼠標離開目標元素時調用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tab 標籤</title> <style> .box{ width: 50px; height: 50px; background: red; } .box1{ width: 150px; height: 150px; border: 1px solid red; margin-left: 200px; position: relative; display: block; left: 200px; } </style> <script> window.onload=function(){ var divNode=document.querySelector(".box1"); divNode.ondragover=function (e) { /*阻止拖拽元素的默認行爲*/ e.preventDefault(); console.log("停留在目標元素上了"); } divNode.ondragenter=function () { console.log("拖拽元素進入"); } divNode.ondrop=function () { console.log("在目標元素上鬆開鼠標"); } divNode.ondragleave=function () { console.log("離開目標元素了"); } } </script> </head> <body> <div draggable="true" class="box" ></div> <div class="box1"></div> </body> </html>
注意:ondragoverondragover 默認地沒法將數據/元素放置到其餘元素中。若是須要設置容許放置,咱們必須阻止對元素的默認處理方式。
event.preventDefault()
HTML5規範容許用戶自定義網頁上任一元素全屏顯示。
requestFullscreen() 開啓全屏顯示
cancleFullscreen() 關閉全屏顯示
不一樣瀏覽器須要添加前綴:
請求全屏
webkitRequestFullScreen、mozRequestFullScreen
取消全屏
webkitCancleFullScreen、mozCancleFullScreen
兼容寫法:
//進入全屏 function requestFullScreen() { var de = document.documentElement; if (de.requestFullscreen) { de.requestFullscreen(); } else if (de.mozRequestFullScreen) { de.mozRequestFullScreen(); } else if (de.webkitRequestFullScreen) { de.webkitRequestFullScreen(); } } //退出全屏 function exitFullscreen() { var de = document; if (de.exitFullscreen) { de.exitFullscreen(); } else if (de.mozCancelFullScreen) { de.mozCancelFullScreen(); } else if (de.webkitCancelFullScreen) { de.webkitCancelFullScreen(); } }
隨着互聯網的快速發展,基於網頁的應用愈來愈廣泛,同時也變的愈來愈複雜,爲了知足各類各樣的需求,會常常性在本地存儲大量的數據,傳統方式咱們以document.cookie來進行存儲的,可是因爲其存儲大小隻有4k左右,而且解析也至關的複雜,給開發帶來諸多不便,HTML5規範則提出解決方案。
window.sessionStorage
window.localStorage
一、設置、讀取方便
二、容量較大,sessionStorage約5M、localStorage約20M
三、只能存儲字符串,能夠將對象JSON.stringify() 編碼後存儲
window.sessionStorage
一、生命週期爲關閉瀏覽器窗口
二、在同一個窗口下數據能夠共享
window.localStorage
一、永久生效,除非手動刪除
二、能夠多窗口共享
方法詳解
setItem(key, value) 設置存儲內容
getItem(key) 讀取存儲內容
removeItem(key) 刪除鍵值爲key的存儲內容
clear() 清空全部存儲內容
localStorage.setItem("name","yzq");//存數據 localStorage.getItem("name")//取數據 localStorage.removeItem("name");//移除數據 localStorage.clear();//清除全部數據 sessionStorage.setItem("pwd","aaa"); sessionStorage.getItem("pwd") sessionStorage.removeItem("pwd"); sessionStorage.clear();
<script> if(navigator.onLine) { alert("有網") } else { alert("沒網"); }; window.addEventListener('online', function() { alert('網絡鏈接已創建!'); }); window.addEventListener('offline', function() { alert('網絡鏈接已斷開!'); }) </script>
HTML5 引入了應用程序緩存,這意味着 web 應用可進行緩存,並可在沒有因特網鏈接時進行訪問。
應用程序緩存爲應用帶來三個優點:
離線瀏覽 - 用戶可在應用離線時使用它們
速度 - 已緩存資源加載得更快
減小服務器負載 - 瀏覽器將只從服務器下載更新過或更改過的資源。
經過建立 cache manifest 文件,能夠輕鬆地建立 web 應用的離線版本
步驟:
1.首先建立一個manifest 文件,manifest 文件的建議的文件擴展名是:」.appcache」。
2.在須要緩存的頁面的根標籤添加manifest 屬性。
2.編寫manifest 文件,告知瀏覽器哪些須要緩存,哪些不須要…
例如咱們建立了一個名爲demo.appcache的文件,而後在須要應用緩存在頁面的根元素(html)添加屬性manifest="demo.appcache"
注意,manifest 文件須要配置正確的 MIME-type,即 「text/cache-manifest」。必須在 web 服務器上進行配置。
Manifest 文件
manifest 文件是簡單的文本文件,它告知瀏覽器被緩存的內容(以及不緩存的內容)。
manifest 文件可分爲三個部分:
CACHE MANIFEST - 在此標題下列出的文件將在首次下載後進行緩存
NETWORK - 在此標題下列出的文件須要與服務器的鏈接,且不會被緩存
FALLBACK - 在此標題下列出的文件規定當頁面沒法訪問時的回退頁面(好比 404 頁面)
CACHE MANIFEST
第一行,CACHE MANIFEST,是必需的:
CACHE MANIFEST
/theme.css /logo.gif /main.js
上面的 manifest 文件列出了三個資源:一個 CSS 文件,一個 GIF 圖像,以及一個 JavaScript 文件。當 manifest 文件加載後,瀏覽器會從網站的根目錄下載這三個文件。而後,不管用戶什麼時候與因特網斷開鏈接,這些資源依然是可用的。
NETWORK
下面的 NETWORK 小節規定文件 「login.asp」 永遠不會被緩存,且離線時是不可用的:
NETWORK: login.asp
可使用星號來指示全部其餘資源/文件都須要因特網鏈接:
NETWORK: *
FALLBACK
當頁面沒法訪問時的回退頁面(好比 404 頁面)
FALLBACK: 404.html
示例:
建立demo.appcache文件
編寫manifest文件
CACHE MANIFEST
#上面一句必須 #v1.0.0 #須要緩存的文件 CACHE: a.js b.css #不須要緩存的文件 NETWORK: * #沒法訪問頁面 FALLBACK: 404.html
在html標籤中添加manifest屬性
<!DOCTYPE html> <html manifest="demo.appcache"> <head> <meta charset="UTF-8"> <title>Title</title> </body> </html>
若是你以爲本文對你有幫助,麻煩動動手指頂一下,算是對本文的一個承認。也能夠關注我web前端的博客專欄,我會不按期的更新,若是文中有什麼錯誤的地方,還望指正,謝謝!
最後總結的一些乾貨,我本身是一名從事了5年前端開發的全棧工程師,今年年初我花了一個月整理了一份最適合2018年學習的前端乾貨,包括基礎+資料+視頻,都是免費的(若是你不是學習,就不要進來啦,人數有限)
前端學習qq羣:733581373
若是想看到更加系統的文章和學習方法經驗能夠關注的微信號:‘web前端技術圈’或者‘webxh6’關注後回覆‘2018’能夠領取一套完整的學習視頻