W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
在我們使用各種瀏覽器時(shí),時(shí)常發(fā)現(xiàn)即使不按照標(biāo)準(zhǔn)去嵌套也不會有大的錯誤問題,這就給我們帶來了一個(gè)思考:嵌套錯誤到底會不會有問題?
<div><h2>內(nèi)容</div></h2>
測試結(jié)果:
<p><div>內(nèi)容</div></p>
測試結(jié)果:
<ul><li>內(nèi)容</li><div>內(nèi)容</div></ul>
測試結(jié)果:
<h2><div>內(nèi)容</div></h2>
測試結(jié)果:
<a href=""><a href="">內(nèi)容</a></a>
測試結(jié)果:
通過上述栗子,我們總結(jié)如下:
其實(shí),這里說解析錯誤并不是很合理,應(yīng)該是說瀏覽器解析出來的結(jié)果和我們期望的結(jié)果不一致,但任何的嵌套錯誤都不會導(dǎo)致頁面呈現(xiàn)有很大的出錯。
我們知道JS代碼如果寫的有語法錯誤,瀏覽器的JS解釋器就會拒絕執(zhí)行并且報(bào)錯,而瀏覽器在遇到不符合語法規(guī)定的HTML代碼時(shí)則會千方百計(jì)將其呈現(xiàn)出來。
通過上面的示例我們發(fā)現(xiàn)在<p>元素里嵌套<div>元素或者<a>元素里<a>元素會導(dǎo)致所有的瀏覽器都解析錯誤,這其實(shí)是W3C規(guī)范的嚴(yán)格嵌套約束,嚴(yán)格嵌套約束要求必須去遵守,不然就會導(dǎo)致所有瀏覽器的解析錯誤。
嚴(yán)格嵌套約束規(guī)則:
語義嵌套約束:
每個(gè)元素基本都有自己的嵌套規(guī)則(即父元素可以是什么,子元素可以是什么),除了嚴(yán)格嵌套約束之外的一些規(guī)則就是語義嵌套約束,對于語義嵌套約束,如果不遵守,頁面可能正常,但也可能解析錯誤,這和下面要講的容錯機(jī)制有關(guān)。
并不是每位同學(xué)在寫完頁面后去做合法性檢查,因此瀏覽器廠商不得不讓它們的瀏覽器以盡可能寬松的方式去處理網(wǎng)頁,每個(gè)瀏覽器內(nèi)核中都有相當(dāng)一部分代碼專門用來處理那些含糊不清的html標(biāo)記及嵌套,并且會去猜測前端們到底想如何呈現(xiàn)網(wǎng)頁,這是瀏覽器的容錯機(jī)制。
這其實(shí)在告訴我們,我們寫出來的HTML代碼不符合W3C規(guī)范可能最終呈現(xiàn)出來沒有異樣,但那其實(shí)是瀏覽器的一種容錯機(jī)制,我們沒有理由讓自己以一個(gè)隨性的態(tài)度去coding,對待自己的代碼應(yīng)該一絲不茍,即使HTML5的胸襟很寬廣。
原本我們認(rèn)為從HTML4到XHTML是一個(gè)時(shí)代,現(xiàn)在又從XHTML跨到了HTML5,新時(shí)代新標(biāo)準(zhǔn)的誕生,我們應(yīng)該敞開胸懷去擁抱,而不是排斥。
你關(guān)注或不關(guān)注,標(biāo)準(zhǔn)就在那里,只增不減。我們應(yīng)該感謝W3C這樣一個(gè)組織,讓各個(gè)瀏覽器廠商拋開彼此的敵意共同制定新的標(biāo)準(zhǔn)。不然,也許你會像90年代那樣,JS引用一個(gè)元素都需要為某個(gè)瀏覽器寫一套自己的代碼。
WEB標(biāo)準(zhǔn)只會使我們吃飯變得更香,睡眠變得更好,新的技術(shù)或標(biāo)準(zhǔn)會推動我們?nèi)ジ挥袩崆榈腸oding,而不是每天在重復(fù)勞動。
補(bǔ)充一些標(biāo)準(zhǔn)的常用鏈接:
W3C國際站:http://www.w3.org/
W3C中國:http://www.chinaw3c.org/
W3C HTML5:http://www.w3.org/TR/html5/
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: