就是这样再老不过的话题让我在腾讯面试官的面前大乱阵脚,最终错失良机。 别人说过的原话不会在我的口中说出第二遍,当然,我可以换一种方式来说,也算是蹚了一次浑水,也算是××之我见了。 当时面试的情形是这样的,在我回答对页面重构的理解时涉及到div+css,于是面试官顺水推舟问我为什么选用div+css布局,用table+css有什么不好——多么容易回答的问题啊,但当时是在面试而且面试之前我也被网上的纷争搞得乱七八糟不知道该相信那一种模式好一些,于是乱了阵脚…… 废话少说,到底为什么人们会推崇div+css布局,而那么排斥table+css呢?殊不知div+css还不为人所知的时候,table为页面布局贡献了多大的功劳啊!好了,现在一个web标准推出来,div狂人跟病毒一样扩散,table就像封建主义一样被摒弃了。 我个人还是推崇用div+css的模式进行布局的,因为我开始系统学习css的时候div已经占领市场了,所以我对table时代没多少切身体会——以上说我是在‘系统学习css’的时候,没错,在我系统学习之前还是有搞过小动作的,呵呵,当时div确实还不大为人所知哟^_^。可能是人的思维都差不多吧,当时我知道html有table这样一个标签却不知道div,我确实为多列布局烦恼过,但是没多久我就想到了用table来实现多列的布局了(事实情况真是这样的,我学习的时候一般不喜欢先看书,我会在仅知道某一部分知识的情况下就迫不及待地先做起事情来,当然,这样让我动脑筋的同时也让我利用一些被人所摒弃的技术做一些被‘潮人’所不耻的无用功,这也是为什么后来乃至现在我会花时间去‘系统学习’了)。 好吧,我的废话确实太多了(可能腾讯鄙视我就是这个缘故,囧),还是步入正题寻求见解吧。 要回答这个问题,首先必须先了解一下web标准,先看一下目前最让我信服的一种定义吧:web标准,即网站标准,它不是一个标准而是W3C制定的一系列标准的集合,主要由:结构、表现和行为三大标准组成。 以上提及web标准有三部分:结构、表现及行为,资深的重构师一般都会推荐将这三种标准分离,这是他们的经验,他们的告诫是将三者分离的重构模式会让网站更易于维护及扩展。以上所说的‘分离’是指,结构、表现及行为,三者各自负责分内工作,用业界的专业术语应该叫做解耦合,即结构完全由HTML/XHTML负责,表现完全由CSS负责,行为完全由脚本语言负责,三者最好的结合模式就是功能不重叠。 按照以上‘不成文’的规则,table+css进行布局的做法让现在的重构师所不耻也情有可原了。为什么?很显然,看看‘table+css’中table和css的功能吧,table负责架构和布局,css负责布局和样式,功能重叠了吧,‘布局’是属于表现的功能范围,table越界了。再来比较一下‘div+css’吧,我们会习惯这样说:“用div+css进行布局。”,其实,div+css并不能当作一个整体来定义,更确切地,我们应该说:“用div进行架构,用css进行布局。”div仅仅能定义浏览器视窗中的某一块区域,确实不能进行定位布局的,不信,你试试在不用css的情况下将两个div块在浏览器视窗中以两列布局看看。当你知道以上做法的难度的时候,你还发现table实现两列布局那是小菜一碟! 总结一下,table+css并不能实现结构与表现的分离,而div+css却完全做到了,div+css更加符合标准的思想!——我想,这就是div+css这么受欢迎的缘故之一吧。 虽然我个人是站在主流行列推崇div+css的,但这并不代表我会像div狂人一样视table为封建遗孤。我在为table庆幸,table的设计本来就是为了显示数据的,实现布局仅仅是走投无路的设计者们自作聪明寻求的一种迫不得已的替换方案,现在好了,table可以全心全意地发挥它的功能——显示数据了,table用于布局被折腾了那么多年累了,该休息了,现在它终于可以休息了,难道这不让人值得为它庆幸吗?
温馨提示:答案为网友推荐,仅供参考