1.doctype的作用是什么?
聲明文檔的解析類(lèi)型(document.compatMode),目的是要告訴標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言解析器,它應(yīng)該使用什么樣的文檔類(lèi)型定義(DTD)來(lái)解析文檔避免瀏覽器的怪異模式。沒(méi)有DOCTYPE的聲明,那么compatMode默認(rèn)就是BackCompat(怪異模式),
2標(biāo)準(zhǔn)模式,接近標(biāo)準(zhǔn)模式,怪異模式的區(qū)別?
在標(biāo)準(zhǔn)模式頁(yè)面按照HTML,CSS的定義渲染,而在怪異模式就是瀏覽器為了兼容很早之前針對(duì)舊版本瀏覽器設(shè)計(jì),并未嚴(yán)格遵循W3C標(biāo)準(zhǔn)而產(chǎn)生的一種頁(yè)面渲染模式。
(1 )盒模型:
(2)圖片元素的垂直對(duì)齊方式:
對(duì)于inline元素和table-cell元素,標(biāo)準(zhǔn)模式下vertical-align屬性默認(rèn)取值為baseline,在怪異模式下,table單元格中的圖片的vertical-align屬性默認(rèn)取值為bottom,因此在圖片底部會(huì)有及像素的空間。
(3)<table>元素中的字體:
CSS中,對(duì)于font的屬性都是可以繼承的,怪異模式下,對(duì)于table元素,字體的某些元素將不會(huì)從body等其他封裝元素中繼承得到,特別是font-size屬性。
(4)內(nèi)聯(lián)元素的尺寸:
標(biāo)準(zhǔn)模式下,non-replaced inline元素?zé)o法自定義大小,怪異模式下,定義這些元素的width,height屬性可以影響這些元素顯示的尺寸。
(5)元素的百分比高度:
a:CSS中對(duì)于元素的百分比高度規(guī)定如下:百分比為元素包含塊的高度,不可為負(fù)值,如果包含塊的高度沒(méi)有顯示給出,該值等同于auto,所以百分比的高度必須在父元素有高度聲明的情況下使用。
b:當(dāng)一個(gè)元素使用百分比高度時(shí),標(biāo)準(zhǔn)模式下,高度取決于內(nèi)容變化,怪異模式下,百分比高度被正確應(yīng)用。
(6)元素溢出的處理:
標(biāo)準(zhǔn)模式下,overflow取默認(rèn)值visible,在怪異模式下,該溢出會(huì)被當(dāng)做擴(kuò)展box來(lái)對(duì)待,即元素的大小由其內(nèi)容決定,溢出不會(huì)裁減,元素框自動(dòng)調(diào)整,包含溢出內(nèi)容。
3.HTML和XHTML的區(qū)別?
XHTML 是更嚴(yán)格更純凈的 HTML 代碼,指可擴(kuò)展超文本標(biāo)簽語(yǔ)言,是一個(gè) W3C 標(biāo)準(zhǔn)
HTML 是用來(lái)描述網(wǎng)頁(yè)的一種語(yǔ)言,指的是超文本標(biāo)記語(yǔ)言 ,是一套標(biāo)記標(biāo)簽
XHTML 元素必須被正確地嵌套。
XHTML 元素必須被關(guān)閉
標(biāo)簽名必須用小寫(xiě)字母。
XHTML 文檔必須擁有根元素
4.服務(wù)器返回application/xhtml+xml格式的頁(yè)面有什么問(wèn)題?
是XHTML系列文檔的類(lèi)型,要求比較嚴(yán)格,必須有head、body標(biāo)簽且每個(gè)元素必須是關(guān)閉的。
一些老的瀏覽器不支持
5.cookie,sessionStorage以及l(fā)ocalStorage有什么不同?
答: sessionStorage、localStorage、cookie都是在瀏覽器端存儲(chǔ)的數(shù)據(jù) 有了本地?cái)?shù)據(jù),
就可以避免數(shù)據(jù)在瀏覽器和服務(wù)器間不必要地來(lái)回傳遞。
sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可用于web請(qǐng)求之間保存數(shù)據(jù)。
① session保存在服務(wù)器,客戶(hù)端不知道其中的信息,數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫(kù)、文件中;cookie保存在客戶(hù)端,服務(wù)器能夠知道其中的信息;
② session中保存的是對(duì)象,cookie中保存的是字符串;
③ session不能區(qū)分路徑,同一個(gè)用戶(hù)在訪問(wèn)一個(gè)網(wǎng)站期間,所有的session在任何一個(gè)地方都可以訪問(wèn)到。而cookie中如果設(shè)置了路徑參數(shù),那么同一個(gè)網(wǎng)站中不同路徑下的cookie互相是訪問(wèn)不到的;
④ session 的運(yùn)行依賴(lài) session id,而 session id 是存在 cookie 中的,也就是說(shuō),如果瀏覽器禁用了 cookie ,同時(shí) session 也會(huì)失效;
⑤ 單個(gè)cookie在客戶(hù)端的限制是3K;
① cookie在瀏覽器和服務(wù)器間來(lái)回傳遞,而sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存;
② cookie不是很安全。
③ cookie儲(chǔ)存的數(shù)據(jù)小;4k-5M
④ 數(shù)據(jù)有效期不同,localStorage始終有效;
⑤ 作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個(gè)頁(yè)面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的;
⑥ sessionStorage和localStorage接口更多。
6.<script>,<script async>以及<script defer>的不同?
瀏覽器會(huì)立即加載并執(zhí)行相應(yīng)的腳本。也就是說(shuō)在渲染script標(biāo)簽之后的文檔之前,不等待后續(xù)加載的文檔元素,讀到就開(kāi)始加載和執(zhí)行,此舉會(huì)阻塞后續(xù)文檔的加載;
有了async(并行異步)屬性,表示后續(xù)文檔的加載和渲染與js腳本的加載和執(zhí)行是并行進(jìn)行的,即異步執(zhí)行;------加載完就執(zhí)行
有了defer屬性,加載后續(xù)文檔的過(guò)程和js腳本的加載(此時(shí)僅加載不執(zhí)行)是并行進(jìn)行的(異步),js腳本的執(zhí)行需要等到文檔所有元素解析完成之后,DOMContentLoaded事件觸發(fā)執(zhí)行之前;雖然異步但是按順序,按加載順序執(zhí)行腳本
7.使用data-*屬性的好處是什么?
用于存儲(chǔ)頁(yè)面或應(yīng)用程序的私有自定義數(shù)據(jù),存儲(chǔ)的(自定義)數(shù)據(jù)能夠被頁(yè)面的 JavaScript 中利用,
屬性名不應(yīng)該包含任何大寫(xiě)字母,并且在前綴data- 之后必須有至少一個(gè)字符
屬性值可以是任意字符串
data-屬性是 HTML5 中的新屬性.
<element data-*="somevalue">
dataset屬性存取data-自定義屬性的值data 去掉,后變大寫(xiě)。只有在Chrome 8+ Firefox(Gecko) 6.0+ Internet Explorer 11+ Opera 11.10+ Safari 6+瀏覽器中實(shí)現(xiàn)
使用attribute方法可以存取 data-*自定義屬性的值
8.為什么說(shuō)把CSS <link>標(biāo)簽放在<head></head>標(biāo)簽里,把<script>正好放在</body>的前面是個(gè)好的主意?你知道哪些例外情況嗎?
css和JavaScript不一定寫(xiě)在head里比較好,我習(xí)慣于單獨(dú)設(shè)立css和js文件,把代碼寫(xiě)在里面,這樣方便查找和管理
而css和js的引用位置是放在頭部還是尾部取決于一個(gè)加載順序
當(dāng)加載頭部以后會(huì)同步加載頭部中引用的文件,而css樣式表在這里加載會(huì)規(guī)定網(wǎng)頁(yè)的總體樣式
js如果需要先加載后運(yùn)行則寫(xiě)在頭里,需要其他內(nèi)容加載完之后在運(yùn)行則可以寫(xiě)在尾部。(其他內(nèi)容加載完再運(yùn)行)
9.使用過(guò)哪些HTML模板語(yǔ)言?
Vue中文本{{}},使用 v-html 指令用于輸出 html 代碼,綁定v-bind 指令,{{JavaScript 表達(dá)式}},指令是帶有 v- 前綴的特殊屬性,v-model,|過(guò)濾器,
html模板是別人做出來(lái)的網(wǎng)頁(yè)模板 html是一種編程語(yǔ)音
10.什么是漸進(jìn)式渲染?說(shuō)一說(shuō)你所了解的技術(shù)?
對(duì)渲染進(jìn)行分割 從具體的使用的場(chǎng)景, 不同的 Level 實(shí)際上對(duì)應(yīng)不同的頁(yè)面內(nèi)容,論壇是一個(gè)比較清晰的例子, 想象一個(gè)論壇:
網(wǎng)頁(yè)的靜態(tài)部分, HTML 固定的內(nèi)容, 比如導(dǎo)航欄和底部
頁(yè)面首屏的內(nèi)容, 比如一個(gè)論壇的話題
頁(yè)面首屏看不到的內(nèi)容, 比如話題下面多少回復(fù)
切換路由才會(huì)顯示的頁(yè)面, 比如導(dǎo)航的另一個(gè)頁(yè)面
對(duì)于這樣的情況, 顯然有若干種可行的渲染分割的方案
全在客戶(hù)端渲染
1, 2, 3 在服務(wù)端渲染, 4 等到用戶(hù)點(diǎn)擊從瀏覽器抓
1, 2 在服務(wù)器渲染, 評(píng)論由客戶(hù)端加載
只有 1 在服務(wù)端渲染,動(dòng)態(tài)的數(shù)據(jù)全部由客戶(hù)端抓取.
而這些方案對(duì)于服務(wù)端來(lái)說(shuō), 性能的開(kāi)銷(xiāo)各不相同, 形成一個(gè)梯度,
而最后一種情況,服務(wù)端預(yù)編譯頁(yè)面就好了, 幾乎沒(méi)有渲染負(fù)擔(dān).根據(jù)實(shí)際的場(chǎng)景, 可以有更多 Level 可以設(shè)計(jì).. 只是沒(méi)這么簡(jiǎn)單罷了