在由InfoQ獨(dú)家社區(qū)支持的上海“擁抱HTML5”活動(dòng)上,第一次來(lái)到中國(guó)的《JavaScript DOM編程藝術(shù)》和《HTML5 For Web Designer》作者Jeremy Keith與大家一起回顧了HTML的發(fā)展歷程,分享了HTML5的設(shè)計(jì)原則,并與在場(chǎng)與會(huì)者做了精彩互動(dòng)。
首先,Jeremy回顧了HTML的歷史,從HTML 2.0到XHTML 2.0,此處他引用了Postel法則(魯棒性原則):
對(duì)自己發(fā)送的東西要嚴(yán)格,對(duì)接收的東西則要寬容。指出XHTML 2.0由于語(yǔ)法解析過(guò)于嚴(yán)格,因此不太適合于Web。
Jeremy認(rèn)為所有的項(xiàng)目都應(yīng)該有設(shè)計(jì)原則,HTML5也同樣如此,W3C就為此發(fā)布了HTML設(shè)計(jì)原則,他強(qiáng)調(diào)了其中的兼容性、實(shí)用性與互操作性。
1、避免不必要的復(fù)雜性
Jeremy舉了DOCTYPE的例子,表示HTML 4.01和XHTML中的DOCTYPE過(guò)于冗長(zhǎng),連自己都記不住這些內(nèi)容,但在HTML5中只需要簡(jiǎn)單的就可以了。DOCTYPE是給驗(yàn)證器用的,而非瀏覽器,瀏覽器只在做DOCTYPE切換時(shí)關(guān)注這個(gè)標(biāo)簽,因此并不需要寫(xiě)得太復(fù)雜。然后,他又提到如何指定字符集,在HTML5中只需要。
規(guī)范也許會(huì)寫(xiě)得十分復(fù)雜,但瀏覽器的實(shí)現(xiàn)卻可能很簡(jiǎn)單,規(guī)范有時(shí)會(huì)去遷就瀏覽器的實(shí)現(xiàn)。
2、支持已有內(nèi)容
XHTML 2.0最大的問(wèn)題就是不支持已經(jīng)存在的內(nèi)容,這違反了Postel法則,F(xiàn)實(shí)情況中,開(kāi)發(fā)者可以寫(xiě)出各種風(fēng)格的HTML,瀏覽器遇到這些代碼時(shí),在內(nèi)部所構(gòu)建出的結(jié)構(gòu)應(yīng)該是一樣的,呈現(xiàn)的效果也應(yīng)該是一樣的。
3、解決實(shí)際問(wèn)題
規(guī)范應(yīng)該去解決現(xiàn)實(shí)中實(shí)際遇到的問(wèn)題,而不該考慮那些復(fù)雜的理論問(wèn)題。例如,既然有在中嵌套多個(gè)段落標(biāo)簽的需要,那就讓規(guī)范支持它。4、用戶(hù)怎么使用的,就怎么設(shè)計(jì)規(guī)范
當(dāng)一個(gè)實(shí)踐已經(jīng)被廣泛接受時(shí),就應(yīng)該考慮將它吸納進(jìn)來(lái),而不是禁止它或搞一個(gè)新的實(shí)踐出來(lái)。
例如,HTML5中新增了nav、section、article及aside標(biāo)簽,它們引入了新的文檔模型,即文檔中的文檔。在section中,還可以嵌套h1到h6的標(biāo)簽,這樣就有了無(wú)限的標(biāo)題層級(jí),這也是很早之前Tim Berners Lee所設(shè)想的。
5、優(yōu)雅地降級(jí)
Jeremy在此處舉了input的例子,HTML5中input標(biāo)簽的type屬性增加了很多類(lèi)型,當(dāng)瀏覽器不支持這些類(lèi)型時(shí),默認(rèn)會(huì)將其視為text。這就是一種優(yōu)雅降級(jí)。
此外,在談到HTML5與Flash之爭(zhēng)時(shí),他認(rèn)為很多情況下,這就是和