src和href都是用來(lái)引用外部的資源,它們的區(qū)別如下:
語(yǔ)義化是指根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語(yǔ)義化),選擇合適的標(biāo)簽(代碼語(yǔ)義化)。通俗來(lái)講就是用正確的標(biāo)簽做正確的事情。
語(yǔ)義化的優(yōu)點(diǎn)如下:
常見(jiàn)的語(yǔ)義化標(biāo)簽:
- <header></header> 頭部
- <nav></nav> 導(dǎo)航欄
- <section></section> 區(qū)塊(有語(yǔ)義化的div)
- <main></main> 主要區(qū)域
- <article></article> 主要內(nèi)容
- <aside></aside> 側(cè)邊欄
- <footer></footer> 底部
DOCTYPE是HTML5中一種標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的文檔類(lèi)型聲明,它的目的是告訴瀏覽器(解析器)應(yīng)該以什么樣(html或xhtml)的文檔類(lèi)型定義來(lái)解析文檔,不同的渲染模式會(huì)影響瀏覽器對(duì) CSS 代碼甚? JavaScript 腳本的解析。它必須聲明在HTML?檔的第??。
瀏覽器渲染頁(yè)面的兩種模式(可通過(guò)document.compatMode獲取,比如,語(yǔ)雀官網(wǎng)的文檔類(lèi)型是CSS1Compat):
如果沒(méi)有defer或async屬性,瀏覽器會(huì)立即加載并執(zhí)行相應(yīng)的腳本。它不會(huì)等待后續(xù)加載的文檔元素,讀取到就會(huì)開(kāi)始加載和執(zhí)行,這樣就阻塞了后續(xù)文檔的加載。
下圖可以直觀的看出三者之間的區(qū)別:
其中藍(lán)色代表js腳本網(wǎng)絡(luò)加載時(shí)間,紅色代表js腳本執(zhí)行時(shí)間,綠色代表html解析。
defer 和 async屬性都是去異步加載外部的JS腳本文件,它們都不會(huì)阻塞頁(yè)面的解析,其區(qū)別如下:
meta
標(biāo)簽由 name
和 content
屬性定義,用來(lái)描述網(wǎng)頁(yè)文檔的屬性,比如網(wǎng)頁(yè)的作者,網(wǎng)頁(yè)描述,關(guān)鍵詞等,除了HTTP標(biāo)準(zhǔn)固定了一些 name
作為大家使用的共識(shí),開(kāi)發(fā)者還可以自定義name。
常用的meta標(biāo)簽:
(1)?charset
?,用來(lái)描述HTML文檔的編碼類(lèi)型:
<meta charset="UTF-8" >
(2) keywords
,頁(yè)面關(guān)鍵詞:
<meta name="keywords" content="關(guān)鍵詞" />
(3)description
,頁(yè)面描述:
<meta name="description" content="頁(yè)面描述內(nèi)容" />
(4)refresh
,頁(yè)面重定向和刷新:
<meta http-equiv="refresh" content="0;url=" />
(5)viewport
,適配移動(dòng)端,可以控制視口的大小和比例:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
其中,content
參數(shù)有以下幾種:
width viewport
? :寬度(數(shù)值/device-width)height viewport
? :高度(數(shù)值/device-height)initial-scale
? :初始縮放比例maximum-scale
? :最大縮放比例minimum-scale
? :最小縮放比例user-scalable
? :是否允許用戶縮放(yes/no)(6)搜索引擎索引方式:
<meta name="robots" content="index,follow" />
其中,content
參數(shù)有以下幾種:
all
?:文件將被檢索,且頁(yè)面上的鏈接可以被查詢;none
?:文件將不被檢索,且頁(yè)面上的鏈接不可以被查詢;index
?:文件將被檢索;follow
?:頁(yè)面上的鏈接可以被查詢;noindex
?:文件將不被檢索;nofollow
?:頁(yè)面上的鏈接不可以被查詢。(1) audio:音頻
<audio src='' controls autoplay loop='true'></audio>
屬性:
(2)video視頻
<video src='' poster='imgs/aa.jpg' controls></video>
屬性:
(3)source標(biāo)簽
因?yàn)闉g覽器對(duì)視頻格式支持程度不一樣,為了能夠兼容不同的瀏覽器,可以通過(guò)source來(lái)指定視頻源。
<video>
<source src='aa.flv' type='video/flv'></source>
<source src='aa.mp4' type='video/mp4'></source>
</video>
表單類(lèi)型:
表單屬性:
表單事件:
設(shè)置規(guī)則:min < low < high < max
它們選擇的對(duì)象可以是標(biāo)簽,可以是類(lèi)(需要加點(diǎn)),可以是ID(需要加#)
HTML5 提供了兩種在客戶端存儲(chǔ)數(shù)據(jù)的新方法:
<img draggable="true" />
<canvas id="myCanvas" width="200" height="100"></canvas>
總結(jié):
(1)新增語(yǔ)義化標(biāo)簽:nav、header、footer、aside、section、article
(2)音頻、視頻標(biāo)簽:audio、video
(3)數(shù)據(jù)存儲(chǔ):localStorage、sessionStorage
(4)canvas(畫(huà)布)、Geolocation(地理定位)、websocket(通信協(xié)議)
(5)input標(biāo)簽新增屬性:placeholder、autocomplete、autofocus、required
(6)history API:go、forward、back、pushstate
移除的元素有:
響應(yīng)式頁(yè)面中經(jīng)常用到根據(jù)屏幕密度設(shè)置不同的圖片。這時(shí)就用到了 img 標(biāo)簽的srcset屬性。srcset屬性用于設(shè)置不同屏幕密度下,img 會(huì)自動(dòng)加載不同的圖片。用法如下:
<img src="image-128.png" srcset="image-256.png 2x" />
使用上面的代碼,就能實(shí)現(xiàn)在屏幕密度為1x的情況下加載image-128.png, 屏幕密度為2x時(shí)加載image-256.png。
按照上面的實(shí)現(xiàn),不同的屏幕密度都要設(shè)置圖片地址,目前的屏幕密度有1x,2x,3x,4x四種,如果每一個(gè)圖片都設(shè)置4張圖片,加載就會(huì)很慢。所以就有了新的srcset標(biāo)準(zhǔn)。代碼如下:
<img src="image-128.png"
srcset="image-128.png 128w, image-256.png 256w, image-512.png 512w"
sizes="(max-width: 360px) 340px, 128px" />
其中srcset指定圖片的地址和對(duì)應(yīng)的圖片質(zhì)量。sizes用來(lái)設(shè)置圖片的尺寸零界點(diǎn)。對(duì)于 srcset 中的 w 單位,可以理解成圖片質(zhì)量。如果可視區(qū)域小于這個(gè)質(zhì)量的值,就可以使用。瀏覽器會(huì)自動(dòng)選擇一個(gè)最小的可用圖片。
sizes語(yǔ)法如下:
sizes="[media query] [length], [media query] [length] ... "
sizes就是指默認(rèn)顯示128px, 如果視區(qū)寬度大于360px, 則顯示340px。
a b span img input select strong
?;div ul ol li dl dt dd h1 h2 h3 h4 h5 h6 p
?;空元素,即沒(méi)有內(nèi)容的HTML元素??赵厥窃陂_(kāi)始標(biāo)簽中關(guān)閉的,也就是空元素沒(méi)有閉合標(biāo)簽:
<br>
?、?<hr>
?、?<img>
?、?<input>
?、?<link>
?、?<meta>
?;<area>
?、?<base>
?、?<col>
?、?<colgroup>
?、?<command>
?、?<embed>
?、?<keygen>
?、?<param>
?、?<source>
?、?<track>
?、?<wbr>
?。在 HTML 頁(yè)面中,如果在執(zhí)行腳本時(shí),頁(yè)面的狀態(tài)是不可響應(yīng)的,直到腳本執(zhí)行完成后,頁(yè)面才變成可響應(yīng)。web worker 是運(yùn)行在后臺(tái)的 js,獨(dú)立于其他腳本,不會(huì)影響頁(yè)面的性能。 并且通過(guò) postMessage 將結(jié)果回傳到主線程。這樣在進(jìn)行復(fù)雜操作的時(shí)候,就不會(huì)阻塞主線程了。
如何創(chuàng)建 web worker:
離線存儲(chǔ)指的是:在用戶沒(méi)有與因特網(wǎng)連接時(shí),可以正常訪問(wèn)站點(diǎn)或應(yīng)用,在用戶與因特網(wǎng)連接時(shí),更新用戶機(jī)器上的緩存文件。
原理:HTML5的離線存儲(chǔ)是基于一個(gè)新建的 .appcache
文件的緩存機(jī)制(不是存儲(chǔ)技術(shù)),通過(guò)這個(gè)文件上的解析清單離線存儲(chǔ)資源,這些資源就會(huì)像cookie一樣被存儲(chǔ)了下來(lái)。之后當(dāng)網(wǎng)絡(luò)在處于離線狀態(tài)下時(shí),瀏覽器會(huì)通過(guò)被離線存儲(chǔ)的數(shù)據(jù)進(jìn)行頁(yè)面展示
使用方法:
(1)創(chuàng)建一個(gè)和 html 同名的 manifest 文件,然后在頁(yè)面頭部加入 manifest 屬性:
<html lang="en" manifest="index.manifest">
(2)在 ?cache.manifest
? 文件中編寫(xiě)需要離線存儲(chǔ)的資源:
CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html
(3)在離線狀態(tài)時(shí),操作 window.applicationCache
進(jìn)行離線緩存的操作。
如何更新緩存:
(1)更新 manifest 文件
(2)通過(guò) javascript 操作
(3)清除瀏覽器緩存
注意事項(xiàng):
(1)瀏覽器對(duì)緩存數(shù)據(jù)的容量限制可能不太一樣(某些瀏覽器設(shè)置的限制是每個(gè)站點(diǎn) 5MB)。
(2)如果 manifest 文件,或者內(nèi)部列舉的某一個(gè)文件不能正常下載,整個(gè)更新過(guò)程都將失敗,瀏覽器繼續(xù)全部使用老的緩存。
(3)引用 manifest 的 html 必須與 manifest 文件同源,在同一個(gè)域下。
(4)FALLBACK 中的資源必須和 manifest 文件同源。
(5)當(dāng)一個(gè)資源被緩存后,該瀏覽器直接請(qǐng)求這個(gè)絕對(duì)路徑也會(huì)訪問(wèn)緩存中的資源。
(6)站點(diǎn)中的其他頁(yè)面即使沒(méi)有設(shè)置 manifest 屬性,請(qǐng)求的資源如果在緩存中也從緩存中訪問(wèn)。
(7)當(dāng) manifest 文件發(fā)生改變時(shí),資源請(qǐng)求本身也會(huì)觸發(fā)更新。
iframe 元素會(huì)創(chuàng)建包含另外一個(gè)文檔的內(nèi)聯(lián)框架(即行內(nèi)框架)。
優(yōu)點(diǎn):
缺點(diǎn):
label標(biāo)簽來(lái)定義表單控件的關(guān)系:當(dāng)用戶選擇label標(biāo)簽時(shí),瀏覽器會(huì)自動(dòng)將焦點(diǎn)轉(zhuǎn)到和label標(biāo)簽相關(guān)的表單控件上。
<label for="mobile">Number:</label>
<input type="text" id="mobile"/>
<label>Date:<input type="text"/></label>
(1)SVG:
SVG可縮放矢量圖形(Scalable Vector Graphics)是基于可擴(kuò)展標(biāo)記語(yǔ)言XML描述的2D圖形的語(yǔ)言,SVG基于XML就意味著SVG DOM中的每個(gè)元素都是可用的,可以為某個(gè)元素附加Javascript事件處理器。在 SVG 中,每個(gè)被繪制的圖形均被視為對(duì)象。如果 SVG 對(duì)象的屬性發(fā)生變化,那么瀏覽器能夠自動(dòng)重現(xiàn)圖形。
其特點(diǎn)如下:
(2)Canvas:
Canvas是畫(huà)布,通過(guò)Javascript來(lái)繪制2D圖形,是逐像素進(jìn)行渲染的。其位置發(fā)生改變,就會(huì)重新進(jìn)行繪制。
其特點(diǎn)如下:
注:矢量圖,也稱(chēng)為面向?qū)ο蟮膱D像或繪圖圖像,在數(shù)學(xué)上定義為一系列由線連接的點(diǎn)。矢量文件中的圖形元素稱(chēng)為對(duì)象。每個(gè)對(duì)象都是一個(gè)自成一體的實(shí)體,它具有顏色、形狀、輪廓、大小和屏幕位置等屬性。
標(biāo)簽用于定義文檔的頭部,它是所有頭部元素的容器。 中的元素可以引用腳本、指示瀏覽器在哪里找到樣式表、提供元信息等。
文檔的頭部描述了文檔的各種屬性和信息,包括文檔的標(biāo)題、在 Web 中的位置以及和其他文檔的關(guān)系等。絕大多數(shù)文檔頭部包含的數(shù)據(jù)都不會(huì)真正作為內(nèi)容顯示給讀者。
下面這些標(biāo)簽可用在 head 部分:<base>
, <link>
, <meta>
, <script>
, <style>
, <title>
。
其中 <title>
定義文檔的標(biāo)題,它是 head 部分中唯一必需的元素。
文檔聲明的作用:文檔聲明是為了告訴瀏覽器,當(dāng)前 HTML
文檔使用什么版本的 HTML
來(lái)寫(xiě)的,這樣瀏覽器才能按照聲明的版本來(lái)正確的解析。
<!Doctype html>的作用:<!doctype html>
的作用就是讓瀏覽器進(jìn)入標(biāo)準(zhǔn)模式,使用最新的 HTML5
標(biāo)準(zhǔn)來(lái)解析渲染頁(yè)面;如果不寫(xiě),瀏覽器就會(huì)進(jìn)入混雜模式,我們需要避免此類(lèi)情況發(fā)生。
嚴(yán)格模式與混雜模式的區(qū)分:
W3C
? 標(biāo)準(zhǔn)解析代碼;
區(qū)分:網(wǎng)頁(yè)中的 DTD
,直接影響到使用的是嚴(yán)格模式還是瀏覽模式,可以說(shuō) DTD
的使用與這兩種方式的區(qū)別息息相關(guān)。
DOCTYPE
?,那么它一般以嚴(yán)格模式呈現(xiàn)(嚴(yán)格 DTD ——嚴(yán)格模式);
DTD
?和 ?URI
?的 ?DOCTYPE
?,也以嚴(yán)格模式呈現(xiàn),但有過(guò)渡 ?DTD
?而沒(méi)有 ?URI
?(統(tǒng)一資源標(biāo)識(shí)符,就是聲明最后的地址)會(huì)導(dǎo)致頁(yè)面以混雜模式呈現(xiàn)(有 URI 的過(guò)渡 DTD ——嚴(yán)格模式;沒(méi)有 URI 的過(guò)渡 DTD ——混雜模式);
DOCTYPE
?不存在或形式不正確會(huì)導(dǎo)致文檔以混雜模式呈現(xiàn)(DTD不存在或者格式不正確——混雜模式);
HTML5
?沒(méi)有 ?DTD
?,因此也就沒(méi)有嚴(yán)格模式與混雜模式的區(qū)別,?HTML5
?相對(duì)寬松,實(shí)現(xiàn)時(shí),已經(jīng)盡可能大的實(shí)現(xiàn)了向后兼容(HTML5 沒(méi)有嚴(yán)格和混雜之分)。總之,嚴(yán)格模式讓各個(gè)瀏覽器統(tǒng)一執(zhí)行一套規(guī)范兼容模式保證了舊網(wǎng)站的正常運(yùn)行。
產(chǎn)生亂碼的原因:
gbk
? 的編碼,而內(nèi)容中的中文字是 ?utf-8
? 編碼的,這樣瀏覽器打開(kāi)即會(huì)出現(xiàn) ?html
? 亂碼,反之也會(huì)出現(xiàn)亂碼;
html
? 網(wǎng)頁(yè)編碼是 ?gbk
?,而程序從數(shù)據(jù)庫(kù)中調(diào)出呈現(xiàn)是 ?utf-8
? 編碼的內(nèi)容也會(huì)造成編碼亂碼;
解決辦法:
gbk
?,而數(shù)據(jù)庫(kù)儲(chǔ)存數(shù)據(jù)編碼格式是 ?UTF-8
?,此時(shí)需要程序查詢數(shù)據(jù)庫(kù)數(shù)據(jù)顯示數(shù)據(jù)前進(jìn)程序轉(zhuǎn)碼;
(1)漸進(jìn)增強(qiáng)(progressive enhancement):主要是針對(duì)低版本的瀏覽器進(jìn)行頁(yè)面重構(gòu),保證基本的功能情況下,再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等方面的改進(jìn)和追加功能,以達(dá)到更好的用戶體驗(yàn)。
(2)優(yōu)雅降級(jí) graceful degradation: 一開(kāi)始就構(gòu)建完整的功能,然后再針對(duì)低版本的瀏覽器進(jìn)行兼容。
兩者區(qū)別:
“優(yōu)雅降級(jí)”觀點(diǎn)認(rèn)為應(yīng)該針對(duì)那些最高級(jí)、最完善的瀏覽器來(lái)設(shè)計(jì)網(wǎng)站。而將那些被認(rèn)為“過(guò)時(shí)”或有功能缺失的瀏覽器下的測(cè)試工作安排在開(kāi)發(fā)周期的最后階段,并把測(cè)試對(duì)象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個(gè)版本。 在這種設(shè)計(jì)范例下,舊版的瀏覽器被認(rèn)為僅能提供“簡(jiǎn)陋卻無(wú)妨 (poor, but passable)” 的瀏覽體驗(yàn)??梢宰鲆恍┬〉恼{(diào)整來(lái)適應(yīng)某個(gè)特定的瀏覽器。但由于它們并非我們所關(guān)注的焦點(diǎn),因此除了修復(fù)較大的錯(cuò)誤之外,其它的差異將被直接忽略。
“漸進(jìn)增強(qiáng)”觀點(diǎn)則認(rèn)為應(yīng)關(guān)注于內(nèi)容本身。內(nèi)容是建立網(wǎng)站的誘因,有的網(wǎng)站展示它,有的則收集它,有的尋求,有的操作,還有的網(wǎng)站甚至?xí)陨系姆N種,但相同點(diǎn)是它們?nèi)忌婕暗絻?nèi)容。這使得“漸進(jìn)增強(qiáng)”成為一種更為合理的設(shè)計(jì)范例。這也是它立即被 Yahoo 所采納并用以構(gòu)建其“分級(jí)式瀏覽器支持 (Graded Browser Support)”策略的原因所在。
更多建議: