支持已有的內(nèi)容
支持已有的內(nèi)容。這一點非常重要,因為很多人都認為HTML5很新,很閃亮;它應(yīng)該代表著未來發(fā)展的方向,應(yīng)該把Web推向一個新的發(fā)展階段。這就是HTML5,對嗎?顯然,我們都會考慮讓W(xué)eb的未來發(fā)展得更好,但他們則必須考慮過去。別忘了W3C這個工作組中有很多人代表的是瀏覽器廠商,他們肯定是要考慮支持已有內(nèi)容的。只要你想構(gòu)建一款瀏覽器,就必須記住這個原則:必須支持已有的內(nèi)容。
下面我們就來看一個HTML5支持已有內(nèi)容的例子。
這個例子展示了編寫同樣內(nèi)容的四種不同方式。上面是一個img元素,下面是帶一個屬性的段落元素。四種寫法唯一的不同點就是語法。把其中任何一段代碼交給瀏覽器,瀏覽器都會生成相同的DOM樹,沒有任何問題。從瀏覽器的角度看,這四種寫法沒有區(qū)別。因而在HTML5中,你可以隨意使用下列任何語法。
<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>
好了,看到這幾段代碼,恐怕有人會說“不對不對不對。其中只有一個是對的,另外三個——說不好!辈粚,應(yīng)該給屬性值加引號!拜托,我們可是一直都給屬性值加引號的!元素名大寫對嗎?這種做法10年不是就被拋棄了嗎?
看到HTML5同時允許這些寫法,我心里忍不住一陣陣想吐。我寫了10年的XHTML 1.0,已經(jīng)非常適應(yīng)嚴格的語法了。但你必須明白,站在瀏覽器的角度上,這些寫法實際上都是一樣的。確實沒有什么問題。
還有誰也感到不舒服了嗎?有誰看到這些之后想“噢,這不是亂寫嘛,這樣做不對”?只有我這樣想嗎?還有別人嗎?
但是,HTML5必須支持已經(jīng)存在的內(nèi)容,而已有的內(nèi)容就是這個樣子的。不是嗎?根據(jù)伯斯塔爾法則,瀏覽器沒有別的選擇。
有人可能會說“這樣不行。我覺得語言本身應(yīng)該提供一種開關(guān),讓作者能夠表明自己想做什么!北热缯f,想使用某種特定的語法,像XHTML,而不是使用其他語法。我理解這些人的想法。但我不贊成在語言里設(shè)置開關(guān)。因為我們討論的只是編碼風(fēng)格或者寫作風(fēng)格,跟哪種語法正確無關(guān)。對于像我們這樣的專業(yè)人士,我認為可以使用lint工具(一種軟件質(zhì)量保證工具,或者說是一種更加嚴格的編譯器。它不僅可以象普通編譯器那樣檢查出一般的語法錯誤,還可以檢查出那些雖然完全合乎語法要求,但很可能是潛在的、不易發(fā)現(xiàn)的錯誤),對其他技術(shù)我們不是也在使用lint工具嘛。
比如說對JavaScript使用lint工具。JavaScript同樣也是比較混亂、不嚴謹?shù)睦樱浅姶,原因恰恰是它混亂、不嚴謹,而且有很多不同的編碼方式。在JavaScript,你可以在每條語句末尾加上分號,但不是必需的,因為JavaScript會自動插入分號……是不是聽起來有點不好接受?
正因為如此,才有了像JSlint這樣的工具,在道格拉斯·克勞克福德(Douglas Crockford)的網(wǎng)站jslint.org上面。有個網(wǎng)頁上寫著“JSlint可能會傷害你的感情。”但這確實是個非常棒的工具,它可以把JavaScript代碼變得完美無瑕。如果你通過JSlint運行JavaScript,它會告訴你“好,你的JavaScript代碼有效,但寫法不妥。你這種編碼風(fēng)格啊,我不喜歡。不贊成你這樣寫。這樣寫不好!碧貏e是對團隊,對于要使用統(tǒng)一的編碼風(fēng)格的團隊,JSlint是非常方便的工具。
我個人認為,不僅對團隊來說,就算是你自己寫代碼,也要堅持一種語法風(fēng)格。從瀏覽器解析的角度講,不存在哪種語法比另一種更好的問題,但我認為,作為專業(yè)人士,我們必須能夠自信地講“這就是我的編碼風(fēng)格!比欢也徽J為語言里應(yīng)該內(nèi)置這種開關(guān)。你可以使用lint工具來統(tǒng)一編碼風(fēng)格,F(xiàn)在就來說說lint工具。大家可以登錄htmllint.com,在其中運行你的HTML5文檔,它會幫你檢查屬性值是否加了引號,元素是否小寫,你還可以通過勾選復(fù)選框來設(shè)置其他檢查項。
但這不意味著拒絕粗心大意的標(biāo)記,做不做清理完全取決于你自己。我說過,因為瀏覽器必須支持已有的內(nèi)容,HTML5自然也不能例外。歸根結(jié)底還是伯斯塔爾法則。我們始終離不開伯斯塔爾法則。
出處:
責(zé)任編輯:bluehearts
上一頁 HTML5設(shè)計原理 [5] 下一頁 HTML5設(shè)計原理 [7]
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|