一、文档声明的作用?

  告知浏览器当前文档的类型,以html的哪个版本进行编写指令。

二、文档声明的书写位置?

  文档声明必须写在HTML根标签的前面,保证浏览器第一时间去获取网页的文档模式,进而解析渲染页面。

三、一个网页中不写文档声明或者格式写错了会怎么样?

  会导致文档以混杂模式进行呈现。

四、标准模式和混杂模式分别是什么?

  由于历史原因,在W3c没有出现之前,没有统一的网页标准,不同的浏览器对页面的渲染不同。在w3c标准出现后,

随着标准一致性越来越重要,浏览器开发商不得不面临一个艰难的抉择:逐渐遵循w3c的标准是前进的方向。但是改变现有的css,完全去遵循标准,会使许多旧网站或多或少的收到破坏,如果浏览器突然以正确的方式解析现存的css,陈旧的网站的显示必然会受到影响。所以,所有的浏览器都需要提供两种模式,混杂模式服务于旧世规则,严格模式服务于标准规则。

于是,为了解决这一问题,之后所有的浏览器都会支持两种模式,即标准模式和混杂模式。

  标准模式:以浏览器支持的最高标准进行渲染。

  混杂模式:以相对宽松的向后兼容的方式,模拟老式浏览器保证站点可以正常工作。

五、如何触发这两种模式呢?

  触发混杂模式: 

    所有浏览器中都以省略文档开头的 doctype 声明作为混杂模式判断的标准。但这种约定并不合理,因为混杂模式在不同浏览器中的差异非常大。

    另外,若doctype 声明 不正确,也会导致HTML和XHTML文档以混杂模式呈现。

  触发标准模式:

    // HTML 4.01 Strict:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.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">
    // HTML5:
    <!DOCTYPE html>
六、如何查看浏览器以何种方式渲染界面?
  

    浏览器提供了以标准、混杂模式渲染页面的能力之后,检测页面渲染模式成为一个必要的需求。该功能最初是由IE6提出的,目前已被各大浏览器所支持。HTML5 最终也把 compatMode 属性的实现标  准化了。

    基于document.compatMode属性,判断浏览器当前处于什么渲染模式:

      标准模式下,值为"CSS1Compat"

      混杂模式下,值为"BackCompat"

      //判断浏览器当前处于什么渲染模式
      if (document.compatMode == "CSS1Compat"){
	console.log("Standards mode");
      } else {
	console.log("Quirks mode");
       }    

      注:该属性 IE浏览器 最低兼容到 IE6