而按照HTML5的另一個(gè)設(shè)計(jì)原理,它必須向前向后兼容,兼容未來(lái)的HTML版本——不管是HTML6、HTML7,還是其他什么——都要與當(dāng)前的HTML版本,HTML5,兼容。因此,把一個(gè)版本號(hào)放在doctype里面沒(méi)有多大的意義,即使對(duì)驗(yàn)器證也一樣。
剛才,我說(shuō)doctype不是為瀏覽器寫(xiě)的,這樣說(shuō)大多數(shù)情況下沒(méi)有問(wèn)題。在有一種情況下,你使用的doctype會(huì)影響到瀏覽器,相信在座諸位也都知道。但在這種情況下,Doctype并非真正用得其所,而只是為了達(dá)到某種特殊的目的才使用doctype。當(dāng)初微軟在引入CSS的時(shí)候,走在了標(biāo)準(zhǔn)的前頭,他們率先在瀏覽器中支持CSS,也推出了自己的盒模型——后來(lái)標(biāo)準(zhǔn)發(fā)布了,但標(biāo)準(zhǔn)中使用了不一樣的盒模型。他們?cè)趺崔k?他們想支持標(biāo)準(zhǔn),但也想向后兼容自己過(guò)去推出的編碼方式。他們?cè)趺粗谰W(wǎng)頁(yè)作者想使用標(biāo)準(zhǔn),還是想使用他們過(guò)去的方式?
于是,他們想出了一個(gè)非常巧妙的主意。那就是利用doctype,利用有效的doctype來(lái)觸發(fā)標(biāo)準(zhǔn)模式,而不是兼容模型(quiks mode)。這個(gè)主意非常巧妙。我們今天也都是這樣在做,在我們向文檔中加入doctype時(shí),就相當(dāng)于聲明了“我想使用標(biāo)準(zhǔn)模式”,但這并不是發(fā)明doctype的本意。這只是為了達(dá)到特殊的目的在利用doctype。
這是在Internet Explorer中觸發(fā)標(biāo)準(zhǔn)模式的最少字符數(shù)目。我認(rèn)為這也說(shuō)明了HTML5規(guī)范的本質(zhì):它不追求理論上的完美。HTML5所體現(xiàn)的不是“噢,給作者一個(gè)簡(jiǎn)短好記的doctype不好嗎?”,沒(méi)錯(cuò),簡(jiǎn)短好記是很好,但如果這個(gè)好記的doctype無(wú)法適應(yīng)現(xiàn)有的瀏覽器,還不如把它忘了更好。因此,這個(gè)平衡把握得非常好,不僅理論上看是個(gè)好主意——簡(jiǎn)短好記的doctype,而且實(shí)踐中同樣也是個(gè)好主意——仍然可以觸發(fā)標(biāo)準(zhǔn)模式。應(yīng)該說(shuō),Doctype是一個(gè)非常典型的例子。
簡(jiǎn)短好記。我能背下來(lái)。
同樣,這樣寫(xiě)也是有效的。它不僅適用于最新版本的瀏覽器,只要是今天還有人在用的瀏覽器都同樣有效。為什么?因?yàn)樵谖覀儼堰@些meta元素輸入瀏覽器時(shí),瀏覽器會(huì)這樣解釋它:“元數(shù)據(jù)(meta)點(diǎn)點(diǎn)點(diǎn)點(diǎn)點(diǎn),字符集(charset)utf-8。”這就是瀏覽器在解釋那行字符串時(shí)真正看到的內(nèi)容。它必須看到這些內(nèi)容,根據(jù)就是伯斯塔爾法則,對(duì)不對(duì)?
我多次提到魯棒性原則,但總有人不理解。我們換一種說(shuō)法,瀏覽器會(huì)想“好,我覺(jué)得作者是想要指定一個(gè)字符集……看,沒(méi)錯(cuò),utf-8!边@些都是規(guī)范里明文規(guī)定的。如今,不僅那個(gè)斜杠可以省了,而且總共只要寫(xiě)meta charset=”utf-8″就行了。
關(guān)于省略不必要的復(fù)雜性,或者說(shuō)避免不必要的復(fù)雜性的例子還有不少。但關(guān)鍵是既能避免不必要的復(fù)雜性,還不會(huì)妨礙在現(xiàn)有瀏覽器中使用。比如說(shuō),在HTML5中,如果我使用link元素鏈接到一個(gè)樣式表,我說(shuō)了rel=”stylesheet”,然后再說(shuō)type=”text/css”,那就是重復(fù)自己了。對(duì)瀏覽器而言,我就是在重復(fù)自己。瀏覽器用不著同時(shí)看到這兩個(gè)屬性。瀏覽器只要看到rel=”stylesheet”就夠了,因?yàn)樗梢圆鲁鰜?lái)你要鏈接的是一個(gè)CSS樣式表。所以就不用再指定type屬性了。你不是已經(jīng)說(shuō)了這是一個(gè)樣式表了嘛;不用再說(shuō)第二次了。當(dāng)然,愿意的話,你可以再說(shuō);如果你想包含type屬性,請(qǐng)便。
同樣地,如果你使用了script元素,你說(shuō)type=”text/javascript”,瀏覽器差不多就知道是怎么回事了。對(duì)Web開(kāi)發(fā)而言,你還使用其他的腳本語(yǔ)言嗎?如果你真想用其他腳本語(yǔ)言,沒(méi)人會(huì)阻攔你。但我要奉勸你一句,任何瀏覽器都不會(huì)支持你。
愿意的話,你可以添加一個(gè)type屬性。不過(guò),也可以什么都不寫(xiě),瀏覽器自然會(huì)假設(shè)你在使用JavaScript。避免-不必要的-復(fù)雜性。
b. Support existing content
支持已有的內(nèi)容
顯然,我們都會(huì)考慮讓W(xué)eb的未來(lái)發(fā)展得更好,但他們則必須考慮過(guò)去。別忘了W3C這個(gè)工作組中有很多人代表的是瀏覽器廠商,他們肯定是要考慮支持已有內(nèi)容的。
再來(lái)看幾段代碼: <img src="foo" alt="bar" /> <p class="foo">Hello World</p> <img src="foo" alt="bar"> <p class="foo">Hello World <IMG SRC="foo" ALT="bar"> <P CLASS="foo">Hello World</P> <img src=foo alt=bar> <p class=foo>Hello World</p>
這幾段代碼有問(wèn)題嗎? 沒(méi)有, 是的, 完全沒(méi)有問(wèn)題!
因?yàn)槲覀冇懻摰闹皇蔷幋a風(fēng)格或者寫(xiě)作風(fēng)格,跟哪種語(yǔ)法正確無(wú)關(guān).
在JavaScript,你可以在每條語(yǔ)句末尾加上分號(hào),但不是必需的,因?yàn)镴avaScript會(huì)自動(dòng)插入分號(hào).
當(dāng)然這并不阻礙我們用XHTML的語(yǔ)法規(guī)范來(lái)規(guī)約大家書(shū)寫(xiě)辨識(shí)度高的文檔, 當(dāng)然也可以借由lint工具來(lái)為我們驗(yàn)證整個(gè)文檔的正確性.
我個(gè)人認(rèn)為,不僅對(duì)團(tuán)隊(duì)來(lái)說(shuō),就算是你自己寫(xiě)代碼,也要堅(jiān)持一種語(yǔ)法風(fēng)格。從瀏覽器解析的角度講,不存在哪種語(yǔ)法比另一種更好的問(wèn)題,但我認(rèn)為,作為專(zhuān)業(yè)人士,我們必須能夠自信地講“這就是我的編碼風(fēng)格!比欢也徽J(rèn)為語(yǔ)言里應(yīng)該內(nèi)置這種開(kāi)關(guān)。你可以使用lint工具來(lái)統(tǒng)一編碼風(fēng)格。現(xiàn)在就來(lái)說(shuō)說(shuō)lint工具。大家可以登錄htmllint.com,在其中運(yùn)行你的HTML5文檔,它會(huì)幫你檢查屬性值是否加了引號(hào),元素是否小寫(xiě),你還可以通過(guò)勾選復(fù)選框來(lái)設(shè)置其他檢查項(xiàng)。
出處:Alibaba.com UED
責(zé)任編輯:bluehearts
上一頁(yè) HTML5設(shè)計(jì)原則 [3] 下一頁(yè) HTML5設(shè)計(jì)原則 [5]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|