1.<!DOCTYPE HTML>
必須位于html文檔第一行,位于<html>標簽之前
<!DOCTYPE HTML>作用:
聲明文檔的解析類型(document.compatMode),指示瀏覽器的layout引擎用那種方式來解析頁面,只是用來選擇mode,告訴瀏覽器dom用哪種詞法解析。
document.compatMode:
BackCompat:怪異模式,瀏覽器使用自己的怪異模式解析渲染頁面。
CSS1Compat:標準模式,瀏覽器使用W3C的標準解析渲染頁面。
html4.01和html5聲明的不同:
html4.01聲明需要引用DTD,分為strict,transitional,frameset三種。
html5不是基于SMGL和XML的,所以可以用簡短的聲明(!DOCTYPE HTML)
不聲明會怎么樣
document.compatMode會被瀏覽器識別并使用,如果不聲明的話,瀏覽器就會使用自己的怪異模式去解析渲染頁面。
- (1)元素在不同的文檔類型中的使用情況不同。例如:<article> <aside><audio><canvas><datalist><header><footer>等在html5模式中可以使用,但是在html4的文檔聲明中不可使用。
具體的可參考http://www.w3school.com.cn/tags/html_ref_dtd.asp - (2) BackCompat模式下margin: 0 auto 問題。例如:ie在BackCompact模式下,margin: 0 auto不起作用,元素還是居左,不能居中。
- (3) BackCompat模式下table的font屬性繼承問題,white-space:pre會失效,設(shè)置圖片的padding會失效。例如:在body中設(shè)置了body{font-size:30px;};在ie中,font-size是不會對table起作用的。
- (4)BackCompat模式下行內(nèi)元素可以設(shè)置寬高,行為類似display:inline-block;ie,firefox,chrome表現(xiàn)一致。
- (5)BackCompat模式下可以設(shè)置百分比高度。在standard模式下,元素的高度默認是由包含的內(nèi)容來決定的,如果父元素沒有設(shè)置高度,給子元素設(shè)置百分比高度是沒有作用的。但是在BackCompat模式下,父元素沒有高度,或者元素沒有內(nèi)容的時候,都是可以設(shè)置百分比高度的。ie,firefox,chrome表現(xiàn)一致。
- (6) 元素的寬高不同。在BackCompat模式下,width則是元素的實際寬度 ,內(nèi)容寬度 = width - ( padding-left + padding-right + border-left-width + border-right-width);在嚴格模式中 :width是內(nèi)容寬度 ,元素真正的寬度 = border-left-width + padding-left + width + padding-right + border-right-width。
2.html5新特性:
HTML5一共包含了10個大類別,它們是:
- 離線(offline)
Application cache, localStorage, indexedDB,在線/離線事件 - 存儲(storage)
Application cache, localStorage,sessionStorage,indexedDB等 - 連接(connectivity)
Web Stockets, Sever-sent事件 - 文件訪問(file access)
File API, File System, FileWriter, ProgressEvents - 語義(semantics)
各種新的元素,包括Media, structural, 國際化, Link relation, 屬性, form類型, microdata 等 - 音頻和視頻(audio/video)
HTML5 Video, Web Audio, WebRTC, Video track等 - 3D和圖形(3D/graphics)
Canvas2D, 3D CSS變換, WebGl, SVG等 - 展示(persentation)
css3 2D/3D變換,轉(zhuǎn)換,WebFonts等。 - 性能(performance)
Web Wroker, HTTP caching等 - 其他(Nuts and bolts)
觸控和鼠標, Shadow DOM, CSS masking等
3.列舉html5新的標簽
<header><footer><nav><aside><section><article><audio><video><embed><figure><figcaption><time><summary><canvas><meter><output><progress><track><rt><rp><ruby>
新的input類型:
email, url, number, range, datepicker(date,month,week,time,date-time,datetime-local,search,color)
廢棄的標簽:
applet, basefont, big, center, u, noframe, frame, frameset, tt, strike, font, dir
4.離線緩存
application cache:通過創(chuàng)建cache manifest文件,創(chuàng)建web應用離線版本
好處:
- 離線瀏覽:用戶可在離線時加載他們
- 速度:已緩存資源的加載速度會很快
- 減少服務器負載:瀏覽器只從服務器下載更新過或者更改過的文件
manifest文件告訴瀏覽器要緩存的內(nèi)容,文件分為三個部分:
- cache manifest:首次下載后進行緩存的文件列表
- network:需要與服務器建立連接,且不會被緩存的文件列表
- fallback:當頁面無法訪問時的回退頁面列表(比如:404);
更新緩存:
一旦應用被緩存,它就會保持緩存直到發(fā)生下列情況:
- 用戶清空瀏覽器緩存
- manifest文件被修改
- 由程序來更新應用緩存
使用:
配置html的manifest屬性
manifest文件需要配置正確的MIME-type,即text/cache-manifest。必須在web服務器上進行配置
<!doctype html>
<html manifest="test.appcache">
</html>
瀏覽器是怎么對HTML5的離線儲存資源進行管理和加載的呢?
(1) 在線的情況下,瀏覽器發(fā)現(xiàn)html頭部有manifest屬性,它會請求manifest文件,如果是第一次訪問app,那么瀏覽器就會根據(jù) manifest文件的內(nèi)容下載相應的資源并且進行離線存儲。如果已經(jīng)訪問過app并且資源已經(jīng)離線存儲了,那么瀏覽器就會使用離線的資源加載頁面,然后 瀏覽器會對比新的manifest文件與舊的manifest文件,如果文件沒有發(fā)生改變,就不做任何操作,如果文件改變了,那么就會重新下載文件中的資 源并進行離線存儲。
(2)離線的情況下,瀏覽器就直接使用離線存儲的資源。
5.cookie,localStorage,sessionStorage之間的區(qū)別
ps: 對于一些大型的,結(jié)構(gòu)化的數(shù)據(jù),可以用indexedDB存儲。
同:都保存在客戶端。
異:
- 數(shù)據(jù)的生命期不同:cookie一般由服務器生成,可以設(shè)置失效時間,如果是在瀏覽器生成的,默認是關(guān)閉瀏覽器之后失效;localStorage永久有效,除非清除;sessionStorage瀏覽器關(guān)閉之后失效。
- 存儲大小不同:cookie一般是4kb大小,localStorage和sessionStorage會比cookie大很多,一般為5MB。
- 是否與服務器端通信:cookie會攜帶在http請求頭部,在瀏覽器和服務器之間傳遞,在cookie中存放大量的數(shù)據(jù)會影響性能,常用的場景為判斷用戶是否登錄;localStorage和sessionStorage不會與服務器通信
- 作用域不同:localStorage和cookie在所有同源窗口中共享(協(xié)議,端口,域名相同)。sessionStorage不能在不同的頁面或者標簽中共享。需要注意的是,頁面及標簽頁僅僅指頂級窗口,如果一個標簽頁包含多個iframe標簽且他們屬于同源頁面,那么他們之間是可以共享sessionStorage的。(也就是說如果關(guān)閉標簽頁后,通過sessionStorage存儲的數(shù)據(jù)就都被刪除了。sessionStorage的作用域不僅被限制在文檔源,還被限定在窗口中,也就是同一標簽頁中。注意,這里說的窗口是指頂級窗口,若果同一標簽頁中包含多個<iframe>元素,這兩者之間也是可以共享sessionStorage的。)
6.lable和input的關(guān)系
<label>標簽來定義表單控制間的關(guān)系,當用戶選擇該標簽時,瀏覽器會自動將焦點轉(zhuǎn)到和標簽相關(guān)的表單控件上
- label的for屬性和input的id綁定
<form>
<label for="male">male</label>
<input type="radio" id="male" name="sex" />
<br>
<label for="female">female</label>
<input type="radio" id="female" name="sex" />
</form>
- <label>包裹<input>標簽,點擊<label>,<label>響應兩次,即<label>本身出發(fā)和<input>觸發(fā)后冒泡到<label>。
<body>
<label for="input">
<input id="input" type="text" />
</label>
<script>
var label = document.getElementByTagName("label")[0];
var input = document.getElementById("input");
label.addEventListener("click",function(){
console.log("label");
},false);
input.addEventListener("click",function(){
console.log("input");
},false)
</script>
</body>
//output: label input label
7.標簽語義化的理解
- 語義化:根據(jù)內(nèi)容的結(jié)構(gòu)化,選擇合適的標簽便于開發(fā)者閱讀和寫出優(yōu)雅的代碼的同時讓瀏覽器的爬蟲和機器很好的解析。用正確的標簽做正確的事情。
- 好處:
- 在沒有css的情況下,能夠呈現(xiàn)出清晰的內(nèi)容結(jié)構(gòu)和代碼結(jié)構(gòu)。
- 好的用戶體驗:例如title,alt用于解釋名詞或解釋圖片信息、label標簽的活用。
- 有利于SEO:和搜索引擎建立良好的溝通,有助于爬蟲抓取更多的有效信息。爬蟲依賴標簽確定上下文和各個標簽的權(quán)重。
- 方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器、移動設(shè)備)以意義的方式來渲染網(wǎng)頁;
- 便于團隊的開發(fā)與維護:語義化更具可讀性,如果都遵循這個標準,可以減少差異化。
- 應該注意的事項:
- 盡可能少的使用無語義的標簽div和span;
- 在語義不明顯時,既可以使用div或者p時,盡量用p, 因為p在默認情況下有上下間距,對兼容特殊終端有利;
- 不要使用純樣式標簽,如:b、font、u等,改用css設(shè)置。
需要強調(diào)的文本,可以包含在strong或者em標簽中(瀏覽器預設(shè)樣式,能用CSS指定就不用他們),strong默認樣式是加粗(不要用b),em是斜體(不用i); - 使用表格時,標題要用caption,表頭用thead,主體部分用tbody包圍,尾部用tfoot包圍。表頭和一般單元格要區(qū)分開,表頭用th,單元格用td;
- 表單域要用fieldset標簽包起來,并用legend標簽說明表單的用途;
- 每個input標簽對應的說明文本都需要使用label標簽,并且通過為input設(shè)置id屬性,在lable標簽中設(shè)置for=someld來讓說明文本和相對應的input關(guān)聯(lián)起來。
8.meta標簽的作用
- 概念: 定義頁面的元信息,比如針對搜索引擎和更新頻度的描述和關(guān)鍵字。
屬性用法具體可參考:https://www.deanhan.cn/html-meta.html
-
屬性:
- content:必選,定義與http-equiv或者name相關(guān)的元信息。
- http-equiv: 可選,把content屬性關(guān)聯(lián)到http頭部。
值:content-type, expires, refresh, set-cookie, charset, pragma, windows-target, page-enter,page-exit。 - name: 可選,把content屬性關(guān)聯(lián)到一個名稱。
值:author, description,keywords,generator,revised,others
-
作用:meta標簽里的數(shù)據(jù)是供機器解讀的,其主要作用有:
- 搜索引擎優(yōu)化(SEO)
- 定義頁面使用語言
- 自動刷新并指向新的頁面
- 實現(xiàn)網(wǎng)頁轉(zhuǎn)換時的動態(tài)效果
- 控制頁面緩存
- 網(wǎng)頁定級評價
- 控制網(wǎng)頁顯示的窗口等等
9.HTML5 標準提供的新的 API
- Media API
- Text Track API
- Application Cache API
- User Interaction
- Data Transfer API
- Command API
- Constraint Validation API
- History API
10.如何對網(wǎng)站的文件和資源進行優(yōu)化
- 文件合并(目的是減少http請求)
- 文件壓縮 (目的是直接減少文件下載的體積)
- 使用cdn托管資源
- 使用緩存
- gzip壓縮你的js和css文件
- meta標簽優(yōu)化(title,description,keywords),heading標簽的優(yōu)化,alt優(yōu)化
- 反向鏈接,網(wǎng)站外鏈接優(yōu)化。
11. 為什么利用多個域名來提供網(wǎng)站資源會更有效?
- 突破瀏覽器的并發(fā)限制(瀏覽器同一域名最大的并發(fā)請求數(shù)量為6個,ie6為2個)
- 節(jié)約cookie帶寬
- CDN緩存更方便
- 防止不必要的安全問題(尤其是cookie的隔離尤為重要)
- 節(jié)約主機域名連接數(shù),優(yōu)化頁面響應速度