zoukankan      html  css  js  c++  java
  • DOCTYPE

    在HTML中 doctype 有两个主要目的。

    • 对文档进行有效性验证:

    它告诉用户代理和校验器这个文档是按照什么DTD 写的。这个动作是被动的,每次页面加载时,浏览器并不会下载DTD 并检查合法性,只有当手动校验页面时才启用。

    • 决定浏览器的呈现模式:

    对于实际操作,通知浏览器读取文档时用哪种解析算法。如果没有写,则浏览器则根据自身的规则对代码进行解析,可能会严重影响HTML 排版布局。浏览器有三种方式解析HTML文档。

    • 非怪异(标准)模式

    • 怪异模式

    • 部分怪异(近乎标准)模式

    2000 年 1 月 5 日,微软发表声明要发布 「IE5 for Mac」。

    我们先不要惊叹 IE 居然开发过 Mac 版本,也不要惊讶 Mac 版本的 IE2 到 IE5 存在了长达十年,更不要惊呼 IE for Mac 作为 Mac 的默认浏览器存在了五六年的时间。

    以当时的眼光来说,那个时候的 IE5 非常先进,它完全实现了当时最新的 html 标准「HTML 4.0」。但是随之而来的问题是,对于一些旧的网页却不能正确的呈现(或者说,他们是被正确渲染了),那些网页是按照当时占统治地位的浏览器的渲染模式来渲染的,IE5 肯定不能就这样发布。

    微软想到了一个解决方案,没错,这就是 「DOCTYPE」。使用新标准的页面可以在 之前加上 doctype 来激活新的标准模式。很快,各个浏览器都采用了这个方案,使用「混杂模式(Quirks)」和「标准模式(Standard Mode)」来进行渲染,但是实际上很多网页在使用标准模式时,却是基于某种混杂模式来写的,于是 Mozilla 1.1 创造了「准标准模式(Almost Standard Mode)」。

    总结起来,混杂模式是不符合 Web 标准的模式,准标准模式是几乎要符合标准的模式,标准模式是符合标准的模式。

    我们可以使用不同的 doctype 来激活不同的模式。

    <!DOCTYPE html>
    
    <!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 XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    No doctype
    

    除了上面这些还有非常多的 doctype 类型,而他们在不同的浏览器中又会激活不同的模式,以我的经验而言,现在最常用的就是这两个:

    第一种是 html5 的 doctype,激活标准模式

    <!DOCTYPE html>
    

    第二种是 XHTML 1.0 用于过渡的 doctype,它会激活准标准模式

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

    可以说,这两种 doctype 占了整个互联网页面的绝大部分,现在的网页除了第一种就是第二种。这两种 doctype 的背后也有很多故事可以讲。

    什么是 XHTML

    首先我们先来明确一点,什么是 XHTML?

    W3C 发布了 HTML4 之后转向了 XHTML,「XHTML is the future」。XHTML 1.0 并没有在 HTML4 的基础上增加新的特性,而是用 XML 将 HTML4 进行了重写。这次重写对 HTML 进行了严格的限制,比如要使用 <br/> 而不是<br>,要在属性值上使用双引号。而一旦遇到一个错误就要立刻停止解析,并显示错误信息。而当时的页面绝大多数都不可能满足这种严格的标准,所以开发者们也使用了这种新的语法,但是却是以 text/html 的形式来发布的。

    声明自己使用的是 XHTML 1.0 的方式就是使用 doctype,

    而随后发布的 XHTML 1.1 却没有得到广泛的支持,因为它只允许以 application/xhtml+xml 的形式发布,所以 WEB 开发者们就直接忽略掉了。

    HTML5 的 doctype

    为什么 html5 的 doctype 这么简单呢?因为 HTML5 不再是基于 SGML 的语言,而 doctype 只是用来激活模式的。

    HTML5 之前,HTML 都是用 SGML 来书写的,DOCTYPE 则用来声明文档类型,它可以告诉 SGML parser 使用什么 DTD 来解析文档。所以到了 HTML5,根本就没有对应的 DTD,也就没有后面一串异常复杂的表述了。

    那么,为什么 HTML5 不再是 SGML 了呢?

    我想它的原因可能是这样:SGML 需要在 DTD 中定义好标签和属性,但是 HTML5 中要允许自定的标签和属性的,原来的框架太过束缚,它需要更加广大的范围来放飞自己。

    什么是 SGML

    它是可以定义标签语言的元语言,比如 HTML5 之前的版本都是拿 SGML 来写的。

    总结

    回到主题,doctype 有什么作用,它的作用就是用来激活各种渲染模式啊。

    拓展链接:

    doctype(文档类型)的作用是什么

    深入理解浏览器兼容性模式

    通过 Doctype 启用浏览器模式

    怪异模式(Quirks Mode)对 HTML 页面的影响

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/masai1969/p/4350707.html
Copyright © 2011-2022 走看看