前段時間由於工做中看到同事使用了一個type
爲date
的<input>元素,直接就造成了一個日期選擇的表單控件,當時以爲很神奇,覺得是什麼插件,就問了同事是怎麼作出來的,同事告訴我這是HTML5的新控件類型。因而這件事讓我決定先好好學習下HTML5新標準相對於HTML4時代有什麼不一樣,其實剛開始學習前端的時候,在知乎社區就瞭解到了,這是前端界將來頗有發展潛力的新標準,正是HTML5讓WEBAPP變得更有實現的機會以及讓flash慢慢走衰……因爲自身水平的不足,我選擇的是看一本關於H5的書,由於書會介紹更多的前因後果和發展歷史,對於我這種新人來講更具備啓發性。我看的是Matthew MacDonald的《HTML5祕籍》。css
這張圖是我目前學習和了解到的H5的一部分基礎知識點,裏面沒有學習到太多H5的兩個很重要的部分,一個是離線應用,一個是canvas繪圖,canvas繪圖上是淺嘗輒止,稍作了一些瞭解。這兩個部分沒有花時間,第一由於本身耐心不足,第二是由於工做中一段時間內可能都還用不到,沒有實際的需求,怕這兩個對我目前來講算複雜的部分學了之後擱置久了也會忘了,因此打算之後有需求的時候或者有必定積累之後再深刻學習。html
接下來我就按照這張思惟導圖說說看完這本書之後記錄和總結。前端
H5新增了許多新特性,可是瀏覽器並非所有支持這些新特性,而且不一樣的瀏覽器以及不一樣的版本支持特性的程度都不相同,因此使用H5新特性前,須要作支持特性檢測,推薦使用Modernizr插件,這樣能夠在考慮到兼容性的狀況下使用H5的新特性。此外,還有各類各樣的膩子腳本(polyfill),這些膩子腳本能夠提供考慮了兼容性的某個(某些)新特性的解決方案。
css3
<nav>
是導航條的語義元素,通常將網站的導航條放在這個容器內。
<header>
表示網頁的頭部,好比logo,導航,用戶信息之類的均可以放在裏面。git
<footer>
表示網頁的尾部,通常放一些版權申明和聯繫方式。github
<figure>
和<figcaption>
元素是用於插圖的新語義標籤,<figcaption>和<img>放在<figure>內部,<figcaption>表示圖標題。web
<detail>
和<summary>
:效果有點像摺疊面板,<detail>做爲摺疊內容的容器,<summary>做爲摺疊後的標題,放在<detail>元素的內部,<detail>內部還要放摺疊後展開可見的內容,具體效果如圖:chrome
相似於上面的那些容器級語義元素,就不在此一一贅述了。
json
<input>元素算是我在學習過程當中最頻繁遇到的表單控件元素之一了,在H5中,input元素有了一些新特性:canvas
屬性上:
title:屬性加在表單控件上,用於給提示信息。
autofocus:屬性只能加在一個表單控件上,用於表單控件的自動得到焦點。
pattern:屬性加在表單控件上,用於正則驗證。
novalidate:還有一個關閉表單驗證功能的辦法,這個屬性直接加在<form>上,用於控制關閉表單驗證功能。
type:屬性是我看來的重點,這本書裏面介紹了許多個我以前沒有用過屬性,而且就像文章開頭說的,正是<input>的"date"這個type,才引發了我對H5的關注和學習的想法。在書中提到的type的值有:email, url, search, tel, number, range, date, time。相信根據字面意思大部分屬性值就很好理解了,其中range屬性會讓<input>變成一個滑動條,能夠手動滑動,當設置這種type屬性時,還須要給<input>設置min, max, step, value這些值才能正常工做。
<datalist>, <option>:這兩個新元素用來顯示輸入建議,須要將目標<input>元素的list屬性值設置爲對應的<datalist>的id。兼容方面的解決辦法:H5祕籍 P110
<datalist id="choices"> <span class="label">Pick up an option:</span> <select id="favoriteChoice"> <option label="alpha" value="alpha"> <option label="beta" value="beta"> <option label="gama" value="gama"> </select> <br> <span class="label">Or type it in:</span> </datalist> <input list="choices name="list"> //能夠識別datalist的就只會讀取裏面的option內容
<fieldset>,<legend>:這兩個元素用來展現表單的範圍和給表單標題。後者放在前者中。
<progress>:這個元素用於表現進度,擁有一個max
屬性和一個value
屬性。默認max
爲1。
<meter>:這個元素和<progress>
相似,不過偏向於表示數值,有min
, max
, low
, high
, value
這五個屬性。
其中值得一提的是oncontextMenu
事件,它在上下文菜單被觸發時產生。其它事件都很好從字面上理解。
其中:inrange
僞類須要控件有min和max屬性才能夠進行判斷。
control屬性:告訴瀏覽器要包含播放控件。
preload屬性:控制音頻的預加載。
autoplay屬性:控制音頻的自動播放。
loop屬性:控制音頻的循環播放。
audio的所有屬性:control
, preload
, autoplay
, loop
.
width:控制視頻播放控件的寬度。
height:控制視頻播放控件的高度。
poster:用於替換視頻的圖片,在如下三種狀況會使用到:1.視頻第一幀未加載完畢;2.把preload屬性設爲none;3.沒有找到指定的視頻文件。
source
主要用於配合audio、video使用能夠解決瀏覽器只支持有限的媒體格式的問題,使用的時候用source
一個個地添加媒體文件。
src:媒體源文件。
type:提供源文件的MIME信息。
屬性:currentTime
提供當前音頻播放到的時間。
方法:play()
控制開始/繼續播放。pause()
控制播放暫停。
屬性:currentTime
提供當前視頻播放到的時間。playbackRate
控制播放速率,默認爲1正常播放,負值時爲倒着播放。duration
提供當前播放視頻的總時長。
方法:play()
控制開始/繼續播放。pause()
控制播放暫停。
VideoJS和jPlayer.
canvas元素對應着一個對象,這個元素有.getContext()方法,這個方法能夠生成一個能夠畫圖的Context對象,具體流程:
var canvasElement=document.getElementById("id"); var context=canvasElment.getContext("2d"); //目前還只有二維上下文,沒有三維上下文
具體的使用方法暫時尚未學習,須要的時候再進行深刻學習。
context.drawImage():在畫布上的特定位置畫指定的圖片。
複雜圖繪製的要點:記錄繪製的全部內容和過程,才能在未來靈活地修改它們。
@font-face方式註冊字體
@font-face{ font-family: 'selfDefineName'; src: url('url-address'); src: local('local-font'), url: ('xxxx') format('yyy'); }
使用<link>
添加谷歌在線字體
多欄文本能夠在一個塊內把文本分紅多個豎欄顯示。經過把屬性加在須要分欄的塊級元素上來實現。主要有這些屬性:
媒體查詢是H5中的一個我認爲的重點,主要用於響應式佈局和瀏覽器兼容性的調整。能夠針對不一樣的設備和瀏覽器採用不一樣的樣式。
@media(){}:這是一種直接寫在樣式表中的方法,經過括號內的控制量來肯定對應的樣式,括號內的控制量有max-width、max-device-width、orientation,還有設備類型(print等);
媒體查詢控制樣式表的引入:在link中添加media屬性,屬性值爲控制內容;
CSS hack和其它針對特定瀏覽器的方法:
背景圖片:background-image
,background-position
,background-repeat
。這些值能夠同時傳遞多個參數,每一個值都傳遞多個參數就能夠同時控制傳入的多個背景圖。
陰影盒子:box-shadow
利用transition
這個CSS屬性,使用方法:[-prefix-]transition: propertyName1 usetime1[,propertyName2 usetime2];
transform
有這些方法:scale()
,scaleX()
,skew()
,rotate()
,使用方法:[-prefix-]transform: method1(para) method2(para);
localStorage:本地存儲,不清除的話能夠一直保留。
sessionStorage:會話存儲,關閉頁面的話會清除。
因爲本地存儲只能存放字符串類型的數據,因此對於JSON數據,要先進行字符串化:
JSON.stringify()
JSON.parse()
onStorage
,這個事件添加事件響應函數的時候,能夠用以下的事件對象的屬性來取得一些數據。event.key
, event.oldValue
, event.newValue
, event.URL
。
取得文件共有兩種方式:1.type爲file的input;2.隱藏input,須要時用JS調用input的click事件,觸發input的onchange事件。
事件:
FileReader.onload
, FileReader.onProgress
, FileReader.onError
, FileReader.onLoadEnd
.
方法:
FileReader.readAsText()
, FileReader.readAsBaniryString()
, FileReader.readAsDataURL()
, readAsArrayBuffer()
, FileReader.abort()
。使用這些方法時,文件存在e.target.result中。
onopen
, onmessage
, onerror
, onclose
。使用new Worker("JS文件")
創造一個worker對象。
worker.onmessage
這個事件在客戶端和服務端都存在。worker.postMessage()
這個方法在客戶端和服務端都存在。