DOCTYPE
的做用以及常見的DOCTYPE
類型<!DOCTYPE>
聲明位於文檔中的最前面的位置,處於 <html> 標籤以前,用來告知瀏覽器頁面目前的文件是用哪一種版本的HTML
(或XML
)撰寫。css
HTML 5<!DOCTYPE html>
html
HTML 4.01
三種文檔類型:Strict
、Transitional
、Frameset
。前端
XHTML 1.0
三種XML
文檔類型:Strict
、Transitional
、Frameset
。web
標準模式:嚴格遵循W3C標準來呈現網頁的渲染模式。ajax
怪異模式:兼容舊版本瀏覽器,不會嚴格遵循W3C標準的網頁的一種渲染模式chrome
每一個HTML
文檔的首行都是一個文檔聲明,這種文檔聲明是用來表示後面的那些個頁面標籤遵循哪個原則的,這是HTML5的文檔類型聲明:瀏覽器
<!DOCTYPE html>
這個是XHTML 1.0嚴格模式的文檔類型聲明:服務器
<!DOCTYPE html PUBLIC "-//W3C//DTD *XHTML 1.0* Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
保留文檔類型聲明主要是歷史緣由,沒有文檔聲明的話大多數瀏覽器都將會轉換到爲怪異模式(quirk mode),這種模式下瀏覽器會以老版本的瀏覽器使用的規則來渲染頁面,而且不一樣瀏覽器的怪異模式仍是不同的,咱們在平時碼代碼時應該儘可能迴避這種錯誤。cookie
在添加了文檔類型聲明以後,瀏覽器使用的就是標準模式(standard mode),這種狀況下瀏覽器會用W3C的標準來渲染網頁。網絡
附上兩篇
Mozilla Quirks Mode Behavior
怪異模式(Quirks Mode)對 HTML 頁面的影響
HTML
和XHTML
有什麼區別?XHTML
中的標籤都必須被正確地嵌套,HTML
中的某些標籤能夠彼此不正確的嵌套。
XHTML
中的全部標籤必需要關閉。
XHTML
中規範定義:標籤名和屬性對大小寫敏感,全部XHTML
標籤名必須用小寫字母。
XHTML
文檔必須擁有根元素。
XHTML
中標籤的屬性值要使用雙引號"
。
'application/xhtml+xml'
會有什麼問題嗎?使用xhtml
,頁面結構中必須包含head
標籤,而且每一個標籤結構都要關閉,包括空標籤。全部標籤都要小寫。使用了'application/xhtml+xml'
以後,部分老瀏覽器不會支持。
data-
屬性的好處是什麼?經過data-
能夠自定義屬性,能夠經過HTMLElement.dataset
獲取這些屬性的值,data-
中-
後接自定義屬性的名字,例如data-url
。實際開發中能夠利用這一點在生成DOM
結構時把數據儲存在自定義屬性中,經過一系列交互操做,能夠再得到這些數據,而不用再去ajax
去後臺取得數據。
cookies
、sessionStorage
和localStorage
的區別。sessionStorage
和localStorage
是web storage
的兩種儲存方式,其中sessionStorage
是會話級別儲存,在瀏覽器或頁面關閉時數據就會銷燬,而localStorage
是持久化的本地儲存,不刻意去刪除數據,數據是不會銷燬的。以上這兩種方式只是客戶端的儲存,不會涉及到服務器儲存。與之相比,每次發送HTTP請求時會將cookie
添加到Cookie
頭字段,發送給服務器。
在儲存量方面也有差別,單個cookie
保存的數據不能超過4K,而localStorage
和sessionStorage
通常有5-10M。
除此以外,每一個域名下cookie
的個數會有限制,依據瀏覽器不一樣會有不一樣,而localStorage
數量是無限制的。
<script>
、<script async>
和<script defer>
的區別<script>
加載js文件會阻塞頁面的渲染和交互,而<script async>
和<script defer>
都是異步加載js文件,期間不會才生阻塞,區別在於<script async>
是加載完以後自動執行,<script defer>
須要等到頁面加載以後再執行。
css
的<link>
放置在<head></head>
之間,而將js
的<script>
放置在</body>
以前?有哪些例外嗎?瀏覽器在處理HTML
頁面渲染和JavaScript
腳本執行的時候是單一進程的,因此在當瀏覽器在渲染HTML
遇到了<script>
標籤會先去執行標籤內的代碼(若是是使用src
屬性加載的外鏈文件,則先下載再執行),在這個過程當中,頁面渲染和交互都會被阻塞。因此將<script>
放在</body>
以前,當頁面渲染完成再去執行<script>
。
通常但願DOM
還沒加載必須須要先加載的js
會放置在<head>
中,有些加了defer
、async
的<script>
也會放在<head>
中。
漸進加強: 先保證低版本瀏覽器的基本功能,再去兼容高版本瀏覽器效果和交互。
優雅降級: 先保證高版本瀏覽器的效果和交互等,再去兼容低版本的瀏覽器。
白屏與無樣式內容閃爍(FOUC)是由於不一樣瀏覽器加載與顯示頁面的機制不一樣而形成的。
當把css
樣式放在底部或者使用@import
方式引入樣式時
一些瀏覽器例如chrome,他的加載和渲染機制是等css
所有加載解析完後再渲染展現頁面,而這個等待的時間就爲白屏。
另外一些瀏覽器例如Firefox,他會在css
未加載前先展示頁面,等css
加載後再重繪一次,這就形成了FOUC (無樣式內容閃爍)。
因此爲了不這些問題,最好使用LINK標籤將樣式表放在文檔的HEAD中。
相關問題以及資料從網絡查閱,本文用於本身紮實前端基礎,若有錯誤歡迎指出。