- 浏览: 5179130 次
- 性别:
- 来自: 天津
-
博客专栏
-
-
实战 Groovy
浏览量:29482
文章分类
- 全部博客 (639)
- 代码之谜 (6)
- JavaScript quirks (5)
- 程序员 (92)
- Java (93)
- BT编程 (7)
- html/css (64)
- Groovy&Grails (42)
- Android (20)
- C/C++ (5)
- PHP/Perl/Python (46)
- 经典文章 (51)
- CodeIgniter (14)
- JQuery (10)
- 笑话 (4)
- 其他 (32)
- javascript (69)
- 云计算 (0)
- html5 (7)
- 面试 (8)
- google (3)
- nosql (2)
- nodejs (11)
- go (5)
- erlang (1)
- 小常识 (3)
- 冷知识 (5)
- database (4)
- web (12)
- 架构 (12)
- Exception (0)
最新评论
-
jqw1992:
https://www.chromefor.com/libra ...
[福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus -
litjerk:
初步算了一下,目前最最精简的Win98版是5M,他5个小时多敲 ...
让人目瞪口呆的三位世界级电脑大师 -
379855529:
。。似乎重点没说NIO啊,前面基础只是铺垫的很好的,可是我要的 ...
Java NIO与IO的详细区别(通俗篇) -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
一步步开发 Spring MVC 应用 -
匡建武:
Good
四个程序员的一天
上一篇文章主要讲述了HTML文档的构成,同时肤浅地接触了“标签省略”这一概念,本文会从概念上介绍HTML文档中第一个出现的重要元素 – DOCTYPE。
所谓DOCTYPE,最初是XML的概念,即通过一种特定的语法,作为一种元数据,来描述XML文档中允许出现的元素,以及各元素的组成、嵌套规则等。具体的概念可以在WIKI中中得到一个更详细的结果。
但是在HTML中,DOCTYPE又有着一些不同的效果,其中之一就是著名的触发浏览器标准模式的功能。即如果没有DOCTYPE,浏览器会进入一种被称为Quirks模式的怪异状态,在该模式下,浏览器的盒模型、样式解析、布局等都与标准规定的存在差异。
需要注意的是,所谓的HTML标准、DOM标准等,只规定了在标准模式下的概念和行为,正如文档构成中提到的,DOCTYPE是一个HTML文档绝对不可以省略的部分,因此就根本不存在“Quirks模式”这样的概念。也正是因为标准中没有对Quirks模式做出任何的规定,因此不同浏览器在Quirks模式下的处理也是不同的,应用Quirks模式可谓难上加难。
HTML4的DOCTYPE
在HTML4的标准中,DOCTYPE被归属于“HTML版本信息”一章中。在该章节中,标准指定了3种DOCTYPE:
- 严格模式:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
。 - 过渡模式:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
。 - 框架模式:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
。
在HTML4的标准中,每一个DOCTYPE对应的dtd文件都是有合法的URL指定的,可以通过互联网进行下载。浏览器可以根据URL获得到dtd的具体内容,并根据内容的规定来解析文档。
现实是不同的
HTML4如同XML一样,是一个相当理想化的标准。但是,现实往往并没有这么理想,试想下面的HTML文档:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>I'm not a frameset</title>
</head>
<body>
<p>So what?</p>
</body>
</html>
这个文档采用了一个框架模式的DOCTYPE,但其正文确没有使用任何<frame>
元素,相对应地使用了应该由严格模式或者过渡模式指定的,标准的HTML结构。那么在这种情况下,浏览器能做什么呢?
拒绝渲染该页面?不,浏览器不敢这么做,在激烈的市场竞争之中,如果因此而导致部分页面无法渲染的话,就只能眼睁睁看着市场份额注入别家田了。所以浏览器顶多弱弱地报一个警告以示抗议,却依旧得乖乖地解析出这个文档并正确渲染。
这就是所谓的浏览器的“容错性”,事实上无论你的DOCTYPE是什么,浏览器都会以最大的兼容能力去解析一个文档,并以最大的努力让这个文档显示得符合开发者的预期。而浏览器的这一特性,也逐渐让标准制定者开始意识到,DOCTYPE似乎真的不怎么重要。因此,在HTML5中,DOCTYPE发生了一次重大的变化……
HTML5的DOCTYPE
到了HTML5了,这一变化相信多数人已经知道,就是HTML5将DOCTYPE的声明简化了,只需要<!DOCTYPE html>
即可。
正好前文所述,在HTML4时代,标准制定者已经认识到,DOCTYPE对浏览器的渲染并没有太大的帮助,除了给无聊的w3c验证器看以外,DOCTYPE似乎只有触发浏览器兼容模式的作用。于是标准工作组采取了非常实际的态度,测试了所有课程顺触发标准模式的最简DOCTYPE,最终得出了这一结论。
但是故事不会这么简单,标准工作组也不是完成这么简单的动作就撒手不管的无赖分子,事实上他们还是很尽责任地考虑到了向后兼容性、可扩展性等一系列的事情,最后将DOCTYPE一章用了大量文字来进行描述,得到一个非常详实的结果。
HTML5的参考手册相关章节中,将DOCTYPE分为3类:
普通DOCTYPE就是我们所见的最简形式,即<!DOCTYPE html>
,他的真正组成是这样的:
- 一段文本,即
<!DOCTYPE
,大小写不敏感。 - 1个或多个空格,关于空格的定义请参照简介中的解释。
- 字符
HTML
,同样大小写不敏感。 - 1个或多个空格。
- 结束标记,即
>
。
即所谓HTML4时代的几个DOCTYPE,其组成如下:
- 一段文本,即
<!DOCTYPE
,大小写不敏感。 - 1个或多个空格。
- 字符
HTML
,同样大小写不敏感。 - 1个或多个空格。
- 字符
PUBLIC
,大小写不敏感。 - 继续1个或多个空格。
- 一对引号或单引号(必须前后匹配),引号中放一个Public ID。
- 可选内容:
- 1个或多个空格。
- 一对引号或单引号(必须前后匹配),引号中放一个与前面的Public ID对应的System ID。
- 1个或多个空格。
- 结束标记,即
>
。
在标准中,Public ID和System ID是有严格的对应关系的,如果规定的System ID不能有Public ID,则上面的第8项可选内容也就不能存在。HTML5彻底放弃了HTML4中的过渡型和框架型的DOCTYPE,同时整合了XHTML的DOCTYPE声明,得出以下6种组合方式:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
顾名思义,完全是为了兼容久远时代的历史遗产而准备的DOCTYPE,甚至都已经没办法考证什么样的“工具”会搞出这种DOCTYPE来……遗留工具型的DOCTYPE的组成如下:
- 一段文本,即
<!DOCTYPE
,大小写不敏感。 - 1个或多个空格。
- 字符
HTML
,同样大小写不敏感。 - 1个或多个空格。
- 字符
SYSTEM
,大小写不敏感。 - 继续1个或多个空格。
- 一对引号或单引号(必须前后匹配),引号中放一段文本
about:legacy-compat
,注意这段文本是大小写敏感的。 - 1个或多个空格。
- 结束标记,即
>
。
比如这样的DOCTYPE就属于此类:<!doctype HTML system "about:legacy-compat">
,基本上除了大小写,没有什么值得改变的。
现实的细节
对于DOCTYPE的作用,在真正的浏览中,仅仅起到触发浏览器的标准模式的作用。虽然根据标准,一个HTML文档中,DOCTYPE前可以有其他的元素,如一个U+FFEF的BOM,几个注释,一点空格,但是在当前的状态下,并没有这么理想:
- 对于IE6-9,如果DOCTYPE前存在注释,会进入Quirks模式。
- 对于IE6,如果DOCTYPE前存在一个XML声明,会进入Quirks模式。
写完才发现,问题又全出在IE下……关于DOCTYPE的问题纠结至此,下一章主要讲述编码声明的问题。
发表评论
-
基于单个 div 的 CSS 绘图
2015-01-04 12:38 88106原文: Single Div Drawings with C ... -
常用的 HTML5 移动应用开发框架比较
2012-07-25 09:14 1637对于Mobile Web来说,现在是快速成长时代。由于采用了H ... -
10 个改善网页可读性的实用排版技巧
2012-07-25 08:48 1849网页的排版问题常常被忽视。这挺遗憾的,如果你能改进你的网页排版 ... -
10个有用的排版技巧提升你网站的可读性
2012-07-23 11:12 0排版在网页设计中经常被忽略。其实这是很傻逼的,因为注重网 ... -
移动Web界面样式-CSS3
2012-07-17 12:48 2901CSS2.1发布至今已经有7年的历史,在这7年里,互联网的发展 ... -
浏览器如何渲染文本
2012-04-13 12:14 1619浏览器是我们最常用的软件之一,文本又是网页中最主要的元素, 在 ... -
默认Web字体样式
2012-04-13 12:13 1966通常用户看到的页面的样式(css)会受到三层控制: ... -
最佳 Web 中文默认字体
2012-04-13 12:12 2673最近淘宝网首页有个小小的 默认字体调整风波,中文默认字体 ... -
关于html5的7个传说
2012-04-10 15:41 1133正如 Opera 的布道者 Bruce Lawson 讲 ... -
现在就使用HTML5的十大原因
2012-04-06 14:15 1415你难道还没有考虑使用HTML5? 当然我猜想你可能有自己 ... -
HTML5标准学习 – 文档结构
2012-03-28 09:49 1505说起HTML的结构,很多人都能说得头头是道,一般来说答案 ... -
HTML5标准学习 – 简介
2012-03-28 09:48 1250最近前端的群都蛮热闹的,但我发现多数讨论的是javasc ... -
CSS语法简单入门
2012-03-27 15:57 1393整体组成 在CSS中,顶层元素被称为Rule,而C ... -
《高性能网站建设指南》读书总结
2012-02-28 13:26 1735昨天完整的读了一遍《高性能网站建设指南》,收获颇丰。正如作 ... -
别告诉我你懂Javascript
2012-03-30 10:46 1488过去几年我注意到技术圈一个很奇怪的现象,有太多程序员将那些他们 ... -
StackOverflow的404错误页面
2011-12-02 15:30 2254不知道大家有没有注意到StakeOverflow的404错误页 ... -
这样去写你的 HTML
2011-05-27 13:19 9555昨天在 twitter 上说,怎么忍心把页面写得这么难用? ... -
面向对象的XHTML与CSS编程
2010-09-01 17:26 1254要是XHTML与CSS能面向对象。。太阳应该从北边升起了。 ... -
CSS Frameworks的概念
2010-09-01 17:25 1509最近看到N多介绍CSS框架,前些天我说过一句话:“在我有限 ... -
加速图片显示
2010-09-01 17:24 1475加速的关键,不是降低重量,而是减少个数。如果重量在200K ...
相关推荐
随着网络技术的发展,HTML5和CSS3作为新一代的网页设计标准,在提升用户体验、简化开发流程方面扮演着越来越重要的角色。 #### 二、HTML5基础及语义化标签 - **HTML5基础**:本书的第一章介绍了HTML5的基础知识,...
HTML5是Web开发的最新标准,它引入了许多新特性,以增强网页的交互性和功能。在三天内学习HTML5是一个挑战性的任务,但通过分解学习过程,我们可以逐步掌握这个强大的工具。今天是学习的第三天,我们将专注于一个...
- XHTML通过遵循WAI-ARIA(Web Accessibility Initiative – Accessible Rich Internet Applications)标准,增强了残障人士访问网页的能力。 10. **跨平台和设备兼容性** - 由于XHTML基于XML,其结构化的特性...
2. **创建文件目录**:按照标准的网站结构创建必要的文件夹如`css`、`images`等,并将HTML文件保存为`index.html`。 3. **设置网站容器**:在HTML文件中创建一个宽度为760px的容器,并在CSS文件中定义其样式。 - ...
【标签】"HTML"确认了这个话题的核心是关于超文本标记语言(HTML),这是一种用于创建网页的标准标记语言。HTML允许用户通过一系列预定义的标签来组织和格式化文本,包括标题、段落、列表、图像和链接等。 【压缩...
TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)...– Our to do list data –> <ToDo>...