关于HTML5规范的一些核心思想

 

  昨天看了Jeremy Keith在Fronteers 2010上的主题演讲,讲的是关于HTML5规范的一些核心思想——是HTML5规范,而不是“能用HTML5等做的一切好玩的事情”。

  在HTML5规范的设计思想中,有一个原则是“避免不必要的复杂性”,并且利用这个设计思想,将许多HTML标签都简化了,比如Doctype现在只需要<!doctype html>就可以了,而不需要原本一长串的HTML4.01声明或者XHMTL1.0Strict声明,而且在Link到StypeSheet的时候只需要Rel而不需要Type了。这些都是一种大大的简化。

  而在另一方面,HTML5表象得更加“语义化”,用Keith的话说,就是更加“求真务实”,比如现在我们除了有DIV、SPAN和P这三个表示“段落”(等)的Tag外,还有Section、Article、Header、Footer和Aside——甚至于,我在自己编写HTML5网站的时候可以创建诸如Circle、Pole、SelectBar、SlideBar这样的Tag,浏览器一样能识别出来——这也是HTML5设计时的“Postel's Law”吧,虽然Postel's Law更多是为旧时代那些不合规范的HTML所写的。

  OK,现在一个有意思的话题来了:

  抛开作者在实际编写时自己创造的Tag不谈(从技术上说,这项工作在XHTML1.1时代已经可以做到了,甚至可以自定义一套很复杂的HTC规则来拓展Tag),我们是否有必要把Section、Article等Tag列为一种规范?

  甚至于,H1~H6这些Tag是否必须要列为一种规范?Div、Span以及P这三个标签也有很大的功能重复性——事实上,从CSS2开始,这三个标签在实际用户体验中的最大区别在于其默认CSS的不同。也就是说,即使是对P标签,配合适当的CSS,我一样可以让他看上去和Div、Span一样。

  于是,这就有问题了:HTML的Tag在一定程度上造成了CSS与HTML的重复——虽然从语义的角度来说,CSS不提供语义,所以不构成重复,但从功能上说,的确是重复了。尤其是,我们知道从CSS2开始,CSS选择器就已经非常强大了,因此我完全可以在P上追加自定义Attribution,然后利用CSS Selector(e.g. P[Att=XXX])来实现各种不同HTML Tag——因此,从这个意义上说,DIV、SPAN和P是功能重复了,与HTML5设计核心思想中的“避免不必要的复杂性”相矛盾。

  当然,我们可以将这种功能的保留理解为设计思想中的“向前向后兼容”,但这种兼容事实上是浏览器要做的事情,并不应该是一个HTML规范所作的事情。

  还有比如H1到H6这六个Tag,事实上的作用并不比P多多少——或许,我们可以说从文档结构来看,的确是多了不少内容,但实际作用上却未必——尤其具体到用户体验的时候,一个H1标签与一个Rich-CSSed的P是无法区分的。

  在文章中,Keith提到过的最后一条HTML规范的设计思想,就是“最终用户优先”原则,也就是用户>作者>实现者(浏览器厂商)>规则制定者(W3C的HTML5 Task Force与WHATWG)>理论上的完美。因而,如果说两个Tag在用户看来没有多大区别的话,为何要保留这两个Tag呢?

  当然,这里有一个思想的误用,那就是上述原则其实是对Tag制定的否决上起作用的,而不能构成Tag被否决的根本理由。但如果我们从一个“精简原则”出发的话——事实上,物理学家现在的主流思想之一就是这个原则——那如果两个TAG在配合适当的CSS以后,行为总是一样的话,那就没有一个很好的不合并的理由。

  这里暂且不提JS对Tag的影响,因为JS太动态了。

  那么,有什么Tag是肯定彼此不同的?

  很显然,IMG这个Tag和P就很不同。P里面我们没法直接放图片。但有意思的是,W3C曾经一度想把IMG废除而采用Object(XHTML2中)。Object现在一般被当作是除了IMG、Video与Audio以外的东西(在HTML5)中而存在,所以暂且还是可以将Object与Img分开的。

  BR这个Tag也是一个很独特的Tag,使得文章在一个Section内可以分段,而不需要另一个Section。虽然BR的工作总能用DIV来实现,但由于这样可以保证Section内容的完整性与一致性,所以还是可以将BR作为一个独立的Tag。

  Section标签(以及派生的Article、Aside、Header、Footer和Nav)和DIV标签就比较纠结了。从语义上说,前者提供了更好的结构框架,从而将特殊功能的Section与内容Section做了区分。但是,如果说DIV就是“没有侧栏、页眉、页脚及导航”以外的文字区域的话,那与Article以及泛泛的Section便又没区别了……

  所以,如果要从真正的去除不必要的复杂性入手的话,DIV、SPAN和P都可以用一个Section或者Article标签来代替——当然,这点其实也未必,因为如果从语义职能来说,Article下可以分很多的Paragraph,所以P标签从语义职能上来说可以保留——但这种即便是从语义职能出发而来的保留也是很弱的,因为Section标签本来就可以具有这种职能——因为Section实在是太泛泛了。

  H1到H6也是。可以利用Header或者Legend(这里不是表示传奇,表示“图例”)配合一定的Attribution来实现其用户体验功能以及文档结构功能,比如<Legend Level=1>表示<H1>。

  这样的话,事实上在一个最简规范下,能保留的Tag并不是很多。

 

转自:http://www.linsanyang.com/Share/8.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值