最近又看到有人在吵div与table布局哪个更好。下面挑两个比较有意思的观点吧。
观点一:过去所认为div优势之种种,在于总是div+css联合使用与纯table布局的对比;而css本不该被div独占,table布局也可以用css;所以以往的比较是不公平的。吵至激烈之处,发出“为什么table布局就不能用css?我还要你只用div不用css呢”的感慨。读至此处,心里只觉“绝了”:只用div不用css是什么后果?四个字:不堪设想。
观点二:Web标准没有任何创造(没有新的元素),只是花了很多无谓的时间把本来做得很好的事(指table布局)重新弄得乱七八糟(指div布局),却没有任何的进步。
其实这些观点都源于对Web标准宣传的偏差,造成接受宣传者把Web标准与div+css等同起来(我初学之时也曾受过这种误导)。某些被视为经典的文章也带有强误导性,这里我举两个例子:
《CSS比表格更难吗?》
《表格对决CSS——一场生死之战》
这两篇文章的标题让人(尤其是初学者)以为CSS跟表格(table)对立起来了,于是就产生了上述第一种反对观点。
总之,一切都是由宣传偏差造成的。现在我来试图把Web标准的种种关系重新理一遍。
首先,什么是Web标准?Web标准是很多个标准的集合,这些标准包含(但不限于):XHTML文档标准(好像用HTML标准也行,不过强烈推荐XHTML标准)、CSS样式表标准、WCAG标准、DOM标准。
接下来,强调div+css布局是在哪个标准里的呢?是在XHTML里吗?有人就以XHTML直至1.1版仍保留table标签为由,说table布局也符合标准。这就是没搞清楚div+css之提倡的出处造成的,当然也是宣传者没有明确说明这一点造成的。其实反对table布局、推荐div+css布局出于WCAG 1.0标准,原因是对文档的语义化(semantic)的要求。具体可以参考WCAG 1.0官方文档,尤其第3节和第5节。
语义化是div+css布局的真正目标,其它的什么减小文件、方便开发维护等等,只是宣传者附加的,并且一直是有争议的。语义化其实是为了使文档标准化,至于为什么要标准化,这就跟工业生产中的标准化是一个道理。
对本文开头的观点一,我的结论为:table当然与css不冲突;table布局违背的不是XHTML标准,更不是CSS标准,而是WCAG标准。
下面来解决观点二。Web标准有没有新元素?不可否认,Web标准本身致力于把过去混乱的标签汤(tag soup)网页标准化,标准化本身往往不制造新技术,它是对过去的知识的整理和总结。但是中国有个成语叫“温故知新”。XHTML在把HTML融入XML大框架之后,就获得了很多XML的优点,其中之一即为可借命名空间扩展功能。在XML中加载XHTML命名空间后,就成为一个基本的XHTML文档。接着可以继续加载其它的命名空间,这样就获得了其它的标签,功能就得到了扩展。例如加载MathML命名空间,XHTML就获得了展示数学公式的功能。原则上新命名空间可以无限地创造,于是XHTML也就可以获得无限的扩展,当然在实际应用上,新的命名空间需要客户代理(通常为浏览器)支持才能生效。这种无限扩展的能力,相比旧的HTML,难道不是进步吗?
后续相关:XHTML,不只是网页 (酝酿中,期待……)
用户登录



