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