天天看点

DOCTYPE 探索 【已翻译100%】(1/2)

介绍

最近在我学习html5的时候,心里想到的第一个问题就是浏览器怎么会知道,我们编写的html是否兼容html v4.1或者html v5呢.

为了找到对相同查询的回复,我开始了我的探索,这里我想分享对此的一些了解. 研究这个东西的时候,我了解到所有这些都是由一个叫做 的标签来控制的,它是大多数网页的最开头的一个标签,真正令我感觉惊奇的事情,则是因为我看到每一个web页面不管何时被某个ide添加,都会自动添加上这个标签,而我也从未关心过这个标签,也从未想过要去研究研究它,但这一次出于对这个标签的好奇,我对此稍微更深入了一点.

本文中我将描述有关标签的东西,并将给出下面一些问题的答案.

浏览器时如何知道,我们编写的页面是html4.1 还是 html5的呢?

什么是 标签,它是干什么的?

html4.1 & html5 有多少种类型的doctype?

在不同的浏览器上面, 是如何影响到html元素的渲染的?

错误的“”会怎样使得一个html页面不可用?

如何验证一个页面是是否是验证通过的呢?

我们如何决定类型的定义呢?

如何同文档模式关联起来的(标准, 怪异 和大体标准模式) ,还有浏览器是如何决定是在标准模式,还是怪异模式下渲染一个网页的呢?

让我们开始研究

那么让我们一个一个的来解答.

浏览器是如何知道我们写的页面是html4.1 还是 html5 的?

如我前面所说,使用某种ide添加一个页面的时候,一个叫做的标签会自动被添加到web页面的顶部,标签里面会定义好一些属性. 这个 标签呈述和通知浏览器页面使用的html版本. 浏览器遇到一个包含此标签的web页面时,都会使用此文档类型的值来决定用于此页面的文档模式. 由于html 5只有一个我们将会在后面讨论的, 因此该 就被定义成像这样. 该标签自身显示了web页面是兼容html 5的. 因此 被定义成时,就意味着我们使用了html5.

什么是“doctype” 标签,它能干什么?

“文档类型声明” 或者说 标签向浏览器指出了我们编写的html,web页面所使用的笨笨,还有其他标签将会在浏览器上被如何渲染.

告诉浏览器, “我使用的是 html 4.01.” 当浏览器看到这个的时候,就知道你讲的是什么,以及你确实是在编写 html 4.01. 那样浏览器就会使用面向 html 4.01的布局和显示规则. 该标签告知浏览器,所写的是一个标准的为所有浏览器所接受的html。这一标准可以这3种之一 例如我们将在下面进一步讨论的严格、 过度和框架集标准.

当“doctype” 被定义在一个页面中时,浏览器就能准确知道如何处理你的页面(至少是你关心的那些浏览器)如何按照预期的显示. 它会告诉浏览器文档的类型.

“doctype” 声明表示使用了标准的html,而所写的html页面是兼容由w3c(万维网联盟)所定义标准的.

在html 4.01中, 申请引用了一个 dtd (文档类型定义) . dtd 指定了标记语言的规则,因此浏览器能准确的渲染出内容来.

dtd的目的是定义好一个xml文档的合法构造块.dtd用一个合法元素和属性的列表定义了文档架构. dtd 可以在一个xml文档里面内联定义, 或者是作为一个外部文件被引用.

标签必须是html文档的第一个标签,它看起来像这样

下面的图片剖析了doctype标签的每一个部分。请仔细阅读,以获得对此的一个合理的理解.

现在你可能会想到我们并没有谈及 ”过渡transitional ”这个词. 这个过渡是用来干嘛的呢? 如果我们写的是 “标准 standard” html 4.01, 那为什么它要是过渡的呢? 让我们来理解这样作的意义.

实际上,存在两个doctype, 一个是面向使用 html 4.01 编写的html页面的过渡的, 还有一个面向那些已经存在的更严格的 doctype.

设想你已经有一个拥有数以百计的web页面的web站点. 你也许会想升级网站使全部的html升级到 4.01标准, 但是你的页面中使用了许多html 2.0和3.2那个时代的旧东西. 你该怎么办? 那就得使用 html 4.01 过渡的 doctype了, 它允许你验证你的页面,但是仍然允许一些传统的html存在 . 那样,你就能确保你的标记里面不会有明显的错误(比如错别字,标签不配对等等),而你就不用将整个html推导重来,以通过验证. 然后,在你移除了全部的传统html之后,你就已经对严格文档类型有了完全的准备,就能确保你能有一个完全兼容的标准的web站点.

doctype html4.1, xhtml & html5 有多少种类型?

html 4.01 & xhtml 有三类不同的 声明,而html5则仅仅只有一种 声明.

html 4.01 strict

在这个dtd中, 除了展示性的以及过时的html 元素和属性(比如font)之外,其它都允许. frameset 也不被允许.

html 4.01 transitional

在这个dtd中, 所有的html元素和属性,包括展示性的和过时的元素(比如font)都允许. 但是frameset仍然不被允许.

**

html 4.01 frameset**

在这个dtd中, 所有的html元素和属性,包括展示性的和过时的元素(比如font),还有frameset内容,都允许.

xhtml 1.0 strict

在这个 dtd 中, 标签必须使用格式良好的xml编写。除了展示性的和过时的,所有的html元素和属性都允许使用。frameset不被允许.

此 dtd 相当于 html4.01 strict dtd,但是标记必须也是使用格式良好的 xml 编写.

xhtml 1.0 transitional

在这个 dtd 中, 标签必须使用格式良好的xml编写. 包括展示性和过时在内的,所有的html元素和属性都允许使用。frameset不被允许.

此 dtd 相当于 html4.01 transitional dtd ,但是标记必须也是使用格式良好的 xml 编写.

xhtml 1.0 frameset

此 dtd 相当于 xhtml 1.0 transitional, 但允许frameset内容的使用.

xhtml 1.1

该 dtd 相当于 xhtml 1.0 strict, 但允许你添加模块 (例如提供对于东亚语言的ruby支持).

html 5

不同的浏览器上,"" 是如何影响到html元素的渲染的?

不同浏览器对各种标签的渲染都有所不同. 我们定义一个 doctype 的时候,就意味着我们在告诉浏览器使用了特定doctype的html标准.

当我回想一下不久的过去,我不解于应用程序的一些页面会在“怪异”的浏览器模式下打开,而还有一些会在“标准”浏览器模式下打开而感到沮丧,真感觉好笑. 研究了"doctype", 我才知道只有正确的 "doctype" 才能让web页面在正确的浏览器模式下打开.

继续阅读