原文地址:http://www.zhex.net/effect-on-css-and-js-by-doctype.html
DOCTYPE对CSS及JS的影响
也许你已经发现选用或不用DOCTYPE对你的页面的影响是非常大的,甚至对于不同浏览器结果也不一样。下文以对一段javascript的影响说明:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>divTest</title>
<script>
function changeHeight()
{
document.getElementById("content").style.height="360";
alert(document.getElementById("content").style.height);
alert(document.getElementById("content").offsetHeight);
}
</script>
</head>
<body>
<div id="content" style="height: 60px; border: 1px solid #FF0000;"><a href="javascript:changeHeight()">aa</a></div>
</body>
上文页面是通过按aa超链接表现javascript控制div的高度,读者可以自己试一下
1. IE浏览(我用的是IE 6),content的高度会变大,同时alert出height:360,offsetHeight:362
2. firefox,content的高度不会变,同时alert出height:60,offsetHeight:62
3. 去掉最上面的一句
在firefox下将得到content的高度会变大,同时alert出height:360,offsetHeight:362
我曾看到好多人运行到这里就会得到一个结论去他的DOCTYPE,用了它好多东西都不对了。我以为不是这样的,DOCTYPE定义了一个规范集,去检验你代码的正确性规范性,去掉了DOCTYPE也许只会在你当前机器上的浏览器正确运行,也就是说你的程序不能做到通用,难道这是你追求的吗?这时你会说那上面的问题怎么办呢,难道在firefox就不能那么做吗?回答是当然可以,仔细看一下上面的代码其实是有问题的,在标准中对象的高度、大小必须指定单位的如px,pt等,如果不指定那就要依赖于应用浏览器的默认或支持情况了,因此修改代码如下:
<script>
function changeHeight()
{
document.getElementById("content").style.height="360px";
alert(document.getElementById("content").style.height);
alert(document.getElementById("content").offsetHeight);
}
</script>
运行一下看看是不是对了呢? 定义DOCTYPE是个好习惯,也希望大家能写出标准规范的代码。
原文地址:www.jb51.net/article/15987.html
指定网页的doctype解决CSS Hacking方法总结
我们都知道,要做WD(web designer),首先得伺侯好几个浏览器:IE6,IE7,Firefox.一般的页面,都只要求在IE6,IE7,Firefox下正常工作就行了。
但是实际上,浏览器远远不止这几个,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:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
原文地址:http://www.haoxiai.net/wangzhanzhizuo/cssjiaocheng/50386.html
DOCTYPE文档类型常常让新手们困惑,这到底是什么东西。其实这只是一组机器可读的规划,虽然中间包含了文件的URL,但浏览器不会去读取这些文件,只是用于识别。然后决定以什么样的规划去执行页面中的代码。
DTD是指文档类型定义,它们定义XML、XHTML、HTML的特定的某一个版本中,可以有什么,不可以有什么,在载入网页的时候,浏览器会用既定的声明规划去检查页面的内容,是不是有效,是不是违规,然后采取相应的措施与编码解释文档中的代码。
我们不去深入的了解它是什么工作的,因为它已经超出了本站的范畴。我们必须知道它是非常必要的!缺少了它,我们的页面就可能出现一些异常的情况。往往一个新手编写了代码,按教程进行操作,没有哪里出现一个字母的偏差,却发现显示出来的样子完全不对了。这里应该检查DOCTYPE文档类型是不是正确。大多能解决问题!
我们开发符合Web标准的网站,必须要为我们的XHTML指定一种DOCTYPE,否则CSS可能会应用出错。我们了解一下我们常用的几种类型:
XHTML 1.0 提供了三种DTD声明可供选择:
过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<br>。完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。完整代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
在一般情况下我们选择“过渡的(Transitional)”,这种DTD比较宽松,也比较容易通过W3C的代码校验,比较适合目前国内的环境与大多数开发人员的水平。当然我们的目标是向着“严格的(Strict)”方向努力。
除此而外,我们发现在某些文档中,还有另一句代码:
<html xmlns="http://www.w3.org/1999/xhtml" lang="UTF-8">
这个"xmlns"是XHTML namespace的缩写,叫做"名字空间"声明。XHTML是HTML向XML过渡的标识语言,它需要符合XML文档规则,因此也需要定义名字空间。又因为XHTML1.0不能自定义标识,所以它的名字空间都相同,就是"http://www.w3.org/1999/xhtml"。如果你还不太理解也不要紧,目前阶段我们只要照抄代码就可以了。