欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

指定网页的doctype解决CSS Hacking方法总结

程序员文章站 2022-06-20 07:59:18
但是实际上,浏览器远远不止这几个,firefox分为firefox 1.5,firefox 2,firefox 3几个主要版本,ie7,ie6中也各有好几个系列,另外除开这...
但是实际上,浏览器远远不止这几个,firefox分为firefox 1.5,firefox 2,firefox 3几个主要版本,ie7,ie6中也各有好几个系列,另外除开这两个主流厂商的产品之外,还有opera,konqueror,netscape,chrome等一系列。

  这些浏览器,各有各的一套,往往在这里运行正常,在那里运行就不正常了。于是wd们拆东边补西边,终于能在几个浏览器下都正常了。结果,产品经理又有了新的需求,需要在哪儿哪儿那儿改一下,于是乎,好不容易糊弄好的的纸架子一下子倒塌了,wd们又忙得焦头烂额。之所以这么说,因为,这是我的经验。

  大凡是wd,总是收集了一堆css hacking 技巧,为的是在各个浏览器下正常。网上一搜,一大堆。

  然而,首先wd们没有弄清楚一个基本问题,我们为什么需要css hacking?如果有1000种浏览器,我们是不是要记住1000种浏览器的hack 技巧?

  事实上, css hacking从某种程度上说,是一个拿不上台面的东西。css hacking有很多技巧,纯粹就是利用了浏览器的bug.比如常见的用_class{….} 去区别ie和firefox,按理说_class是一个不合法的标记方法。css hacking的出现,是wd们不得已而为之,wd们的日常工作并不是疯狂地css hack.

  其实这么多浏览器,并不是可以随便乱来,想自己定义个啥就定义个啥标记的。人们习惯了在标准的世界里生活,在网页世界里,也有一系列标准。浏览器们也都努力地做到web标准兼容。但是有些浏览器出道得早,可以说后来出现的web标准就是在它们的影响下诞生的。还有一个,当年非常牛b,所以做了很多创新,没有把web标准放在心上,蛮不在乎。更何况,标准自身也是在不断更新的。因此,一般各个浏览器产品系统都曾有过一段没有不太在乎web标准的日子,后来大家都意识到不行了,我们大家都妥协一下,要制订一套标准,大家都遵守。可是以前各家都有自己制订的一些小条条小框框,他们不符合标准,咋办呢?

  于是,这些人想了个法子:标准模式和怪异模式。另外还有一种,叫“近乎标准模式”,almost standard.要说真是够怪异,我都听晕了。别着急,听我慢慢道来。

  不是说了吗,这些老大们坐在一起,制定了各式各样的标准,以后大家都按这套标准来解释网页。如果你做的网页可以按这套标准来解释,那就用一个标记doctype注明这是可以按web标准来解释的。这就是标准模式。

  那以前各家都生产过,规定过的小九九们不符合标准,咋办啊?也不能就马上把它们全扔掉不要了吧?软件上大抵有这样一套原则,叫向下兼容。在怪异模式下,各个浏览器都模拟那些老版本的浏览器的操作,以防止老的页面无法工作。在网页没有指定doctype时,浏览器一般就都按怪异模式工作,以防老页面无法工作。

  对于这两种模式之间的差异,最显著的例子涉及windows上ie专有的框模型。在ie 6出现时,在标准模式中使用正确的框模型,在怪异模式中使用老式的专有框模型。为了维持对ie 5和更低版本的向后兼容性,opera 7和更高版本也在怪异模式中使用有缺点的ie框模型。

  mozilla和safari还有第三种模式,称为“几乎标准的模式(almost standards mode)”,除了在处理表格的方式方面有一些细微的差异之外,这种模式与标准模式相同。

  正是由于这个原因,您可以丢掉很多css hacking技巧了。有些书介绍说,ie6和firefox的盒模型(或者有的地方叫框模型)不一致,因此需要这样做hack:

div{
width:100px;
*width:95px;
}

  我说,这种书真是误人子弟。因为,只要正确指定了doctype,这些浏览器解释上的差异就都不存在了,我们按照标准来就行了。

  这个模式的指位于html文件开头的doctype域指定的。一般常见的有这几种:

html 4.01 transitional:


html 4.01 frameset



  xhtml 1.0 strict



xhtml 1.0 transitional



  xhtml 1.0 frameset


  xhtml 1.1