正确使用<!DOCTYPE html PUBLIC

本文详细介绍了XHTML1.0中的三种文档类型定义(DTD),包括过渡型、严格型及框架型,阐述了它们的区别与应用场景,并解释了DOCTYPE声明的重要性。

(1)过渡型(Transitional )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 
(2)严格型(Strict )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 


(3)框架型(Frameset )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 

 

 

 

DOCTYPEdocument type( 文档类型) 的简写,用来说明你用的XHTML 或者HTML 是什么版本。

其中的DTD( 例如上例中的xhtml1-transitional.dtd) 叫文档类型定义,里面包含了文档的规则,浏览器就根据你定义的DTD 来解释你页面的标识,并展现出来。

要建立符合标准的网页,DOCTYPE 声明是必不可少的关键组成部分;除非你的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\">
我们选择什么样的DOCTYPE

理想情况当然是严格的DTD ,但对于我们大多数刚接触web 标准的设计师来说,过渡的DTD(XHTML 1.0 Transitional) 是目前理想选择!。因为这种DTD 还允许我们使用表现层的标识、元素和属性,也比较容易通过W3C 的代码校验。
注:上面说的\" 表现层的标识、属性\" 是指那些纯粹用来控制表现的tag ,例如用于排版的表格、背景颜色标识等。在XHTML 中标识是用来表示结构的,而不是用来实现表现形式,我们过渡的目的是最终实现数据和表现相分离。

打个比方:人体模特换衣服。模特就好比数据,衣服则是表现形式,模特和衣服是分离的,这样你就可以随意换衣服。而原来HTML4 中,数据和表现是混杂在一起的,要一次性换个表现形式非常困难。呵呵,有点抽象了,这个概念需要我们在应用过程中逐步领会。

补充

DOCTYPE 声明必须放在每一个XHTML 文档最顶部,在所有代码和标识之上。
DOCTYPE
声明好以后,接下来的代码是:

  CODE:[Copy to clipboard]<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"gb2312\">

通常我们HTML4.0 的代码只是<html> ,这里的\"xmlns\" 是什么呢?

这个\"xmlns\"XHTML namespace 的缩写,叫做\" 名字空间\" 声明。名字空间是什么作用呢?
由于xml 允许你自己定义自己的标识,你定义的标识和其他人定义的标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生错误。为了避免这种错误发生,XML 采用名字空间声明,允许你通过一个网址指向来识别你的标识。例如:

闲看网和论坛网都定义了一个<book> 标识,如果闲看网名字空间是\"http://www.xiankan.com\" ,论坛网名字空间是\"http://www.Yaobbs.com\" ,那么当两个文档交换数据时,也不会混淆<book> 标识,因为它属于不同的名字空间。

更通俗的解释是:名字空间就是给文档做一个标记,告诉别人,这个文档是属于谁的。只不过这个\"\" 用了一个网址来代替。

XHTMLHTMLXML 过渡的标识语言,它需要符合XML 文档规则,因此也需要定义名字空间。又因为XHTML1.0 不能自定义标识,所以它的名字空间都相同,就是\"http://www.w3.org/1999/xhtml\" 。如果你还不太理解也不要紧,目前阶段我们只要照抄代码就可以了。

后面的lang=\"gb2312\", 指定你的文档用简体中文。

 

### 解决HTML Doctype声明错误的方案 在现代Web开发中,`<!DOCTYPE html>` 是HTML5的标准文档类型声明。如果出现Doctype声明错误,可能是由于以下原因导致: 1. **Doctype声明不正确或缺失**:HTML5只需要简单的 `<!DOCTYPE html>` 声明即可触发标准模式[^1]。如果使用了复杂的Doctype声明(如HTML4或XHTML),可能会触发怪异模式(Quirks Mode),从而导致页面渲染异常。 2. **多余的字符或空格**:Doctype声明必须是HTML文档的第一行内容。任何出现在Doctype之前的字符(包括空格、BOM标记或其他不可见字符)都会导致解析错误[^2]。 3. **大小写敏感性**:虽然HTML5对大小写不敏感,但推荐使用小写的 `<!doctype html>` 以保持一致性[^3]。 以下是解决Doctype声明错误的具体方法: #### 确保Doctype声明正确 确保HTML文件的第一行是 `<!DOCTYPE html>`,并且没有任何前导字符或空格。例如: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> ``` #### 检查编码问题 如果HTML文件包含BOM(字节顺序标记),可能会干扰Doctype声明。建议使用无BOM的UTF-8编码保存文件[^4]。 #### 避免过时的Doctype 避免使用HTML4或XHTMLDoctype声明,除非项目明确需要兼容旧版本浏览器。例如: ```html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ``` 这种声明可能触发怪异模式,影响页面布局和样式。 #### 测试与验证 使用在线工具(如W3C Markup Validation Service)验证HTML文件的合法性,确保Doctype声明没有语法错误。 #### 示例代码 以下是一个完整的HTML5文档示例: ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>HTML5示例</title> <style> body { font-family: Arial, sans-serif; } </style> </head> <body> <h1>欢迎使用HTML5</h1> <p>这是一个标准的HTML5文档。</p> </body> </html> ``` ### 注意事项 - 如果项目需要兼容FrontPage组件,可以考虑使用HTML 4.01 Transitional Doctype,但这通常不推荐用于新项目[^2]。 - 确保Doctype声明位于文件的第一行,且没有任何前导字符或空格。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值