博客
关于我
前端翻译:Activating Browser Modes with Doctype
阅读量:423 次
发布时间:2019-03-06

本文共 3949 字,大约阅读时间需要 13 分钟。

一、前言

由于本人英语能力有限,译本内容难免有误,望各位指正!本译文不含附录部分,请知悉。

二、译文内容

为了让用户正常访问遵循Web标准的网站和90年代后期的非标准网站,当前的浏览器都内置了多种引擎模式。本文将解释这些模式和它们触发的原理。


三、文章概要

如果你不耐心阅读全文,本文结论:以<!DOCTYPE html>作为你们的HTML文档(HTTP头的mime为text/http的文档)的首行。如果你们希望禁止用户在使用IE8、9、10浏览你的网站时,不会因点击地址栏旁的兼容性按钮而导致网站以IE7的文档模式被解析、渲染,那么就在HTTP头那加上X-UA-Compatible: IE=Edge,或在<head>``</head>间加句<meta http-equiv="X-UA-Compatible" content="IE=Edge">吧。其实IE一般都会选择合理的文档模式,所以没什么必要加上述IE独有的魔咒。


四、上下文

本文覆盖Firefox、其他基于Gecko内核的浏览器、Safari、Chrome、其他基于Webkit内核的浏览器、Opera、Konqueror、IE 4 Mac,IE 4 Windows(包含4 WP)和其他IE内核的浏览器的模式转换。并使用知名浏览器来代表各款内核描述模式转换。重点讲解模式选择的机制而不是各种模式对应的行为特征。目的是让大家理解如何避免陈旧的模式,当然也不是旨在促进大家采用更良好的模式了。


五、各种模式

1. text/html内容的模式

一般来讲doctype嗅探将影响text/html内容的模式。IE8+影响模式的要求就更加复杂,其中包含网站是否为内网网站,该网站有没有添加到兼容性视图列表当中。倽若IE6、7中安装了Google Chrome Frame插件,那么就不仅doctype嗅探会影响text/html内容的模式了。(Google Chrome Frame其实就在IE6、7、8、9下使用Webkit作内核的插件)

2. 怪异模式

怪异模式是浏览器为了正确呈现90年代后期制作的网页,从而违反当前Web规范的模式。以前,各浏览器的怪异模式各不相同。IE6789的怪异模式其实就是IE5.5的文档模式,而其他浏览器的怪异模式就稍微与近标准模式有偏差而已。但IE10开始,其怪异模式不再仿照IE5.5的文档模式了,而是和其他浏览器的怪异模式相近了。如果你正在开发一个新网站,千万不要用怪异模式,用标准模式吧朋友。

3. 标准模式

标准模式下,浏览器尝试对网站提供HTML规范处理外,还提供浏览器独有的各种特性。由于各浏览器对HTML规范实现的不同,所以各浏览器的标准模式不尽相同。在HTML specification中标准模式被称作“非怪异模式”。

4. 准标准模式

准标准模式被称为“受限的怪异模式”。Firefox、Safari、Chrome、Opera 和 IE9,HTTP头的Content-Type为application/xhtml+xml会触发XML模式。当处理XML模式时,上述浏览器会结合自身浏览器所提供的特征行为并符合标准规范来解析、处理XML文档。


六、IE特有的模式

以下的模式是IE独有的,并不符合HTML5规范且其他浏览器均没有实现的。通过在HTTP头或meta元素设置X-UA-Compatible来触发。

1. IE5怪异模式

除了和其他浏览器相近的怪异模式外,IE10还提供了一个“IE5怪异模式”,其实就是IE6789的怪异模式而已(IE5.5的文档模式)。

2. IE7标准模式

IE8910提供该模式用于模拟IE7的标准模式。

3. IE8标准模式

IE910提供该模式用于模拟IE8的标准模式。

4. IE8准标准模式

IE910提供该模式用于模拟IE8的准标准模式,但在开发者工具中,该模式和IE8标准模式是合并在一起的。

5. IE9标准模式

IE10提供该模式用于模拟IE9的标准模式。

6. IE9准标准模式

IE10提供该模式用于模拟IE9的准标准模式,但在开发者工具中,该模式和IE9标准模式是合并在一起的。

7. IE9 XML模式

IE10提供该模式用于模拟IE9的XML模式,但在开发者工具中,该模式和IE9标准模式是合并在一起的。


七、IE8、9、10的复杂问题

从IE8开始可通过meta元素来切换模式。IE8有4种模式:IE5.5怪异模式,IE7标准模式,IE8准标准模式和IE8标准模式;IE9有7种模式:IE5.5怪异模式,IE7标准模式,IE8准标准模式,IE8标准模式,IE9准标准模式,IE9标准模式和IE9XML模式;IE10有11中模式:IE5.5怪异模式,IE7标准模式,IE8准标准模式,IE8标准模式,IE9准标准模式,IE9标准模式,IE9XML模式,IE5.5怪异模式,IE7标准模式,IE8准标准模式,IE8标准模式,IE10准标准模式,IE10标准模式和IE10XML模式。


八、模式的作用

除了IE,text/html的模式主要影响CSS布局和样式系统。例如,table中没有样式继承是怪异模式的特性。在IE6789和Opera下,怪异模式就是IE5.5的文档模式。本文无法一一列举怪异模式下的所有布局特征。大家可以参考Mozilla's documentation和Quirks Mode specification。


九、Doctype嗅探

浏览器通过doctype嗅探来决定text/html内容的使用哪种引擎模式。也就是说模式是取决于<!DOCTYPE html>这句的。doctype是SGML的语法(HTML5前的标记框架,仅用于声明HTML的版本信息,而不能用于区分是SGML还是XML文档)。但无论是HTML4.01还是ISO 8879(SGML)都没有标明可以通过doctype来切换浏览器的引擎模式。而设计通过doctype来切换浏览器的引擎模式,是由于大部分使用怪异模式的网站均没有写<!DOCTYPE html>或指向旧的DTD,所以就采用doctype来做切换开关了。而在HTML5规范设计的时候发现doctype的最实际用途就是用来切换模式而已,所以最后得到最简的doctype<!DOCTYPE html>


十、应用建议

  • 标准模式,可验证最新特性:<!DOCTYPE html>
  • 标准模式,不验证最新特性,是历史遗留的严格模式:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/html4/strict.dtd"
  • 准标准模式,不验证最新特性,是历史遗留的松散模式:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " "
  • 怪异模式,没有doctype
  • 最好不要这样做,否则你会后悔的:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " "
  • 建议使用X-UA-Compatible,无论是在HTTP头还是meta元素。

    • 如果你的网站不在微软的黑名单中,而且你更关心避免依赖浏览器各版本特有的特征,而不是用户使用模拟IE7模式解析网站:建议:无需添加X-UA-Compatible了。
    • 如果你的网站在微软的黑名单中,而且你不希望用户使用模拟IE7模式解析网站:建议:添加<meta http-equiv="X-UA-Compatible" content="IE=Edge">或HTTP头上添加X-UA-Compatible: IE=Edge。
    • 如果在IE8、9下使用模拟IE7标准模式:建议:添加<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">或HTTP头上添加X-UA-Compatible: IE=EmulateIE7。然后不要依赖非IE7的行为特征。
    • 如果在IE9下使用模拟IE8标准模式:建议:添加<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">或HTTP头上添加X-UA-Compatible: IE=EmulateIE8。然后不要依赖非IE8的行为特征。
    • 如果在IE10下使用模拟IE9标准模式:建议:添加<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">或HTTP头上添加X-UA-Compatible: IE=EmulateIE9。然后不要依赖非IE9的行为特征。

    十一、Google Chrome Frame下的IE特有的模式

    在IE6789下安装了Google Chrome Frame插件,那么就会有一下IE特有的模式(IE10开始没有这些模式了):

    • Chrome 怪异模式:就是Chrome下的怪异模式(不是IE5.5的文档模式)
    • Chrome 标准模式:就是Chrome下的标准模式
    • Chrome 准标准模式:就是Chrome下的准标准模式
    • Google Chrome Frame下的IE特有的模式

    建议不要使用Chrome Frame:

  • 由于该插件没有得到IE在可访问性上的支持,所以通过屏幕阅读器和Windows语言识别器是无法访问该插件的内容的。
  • 需要客户端安装该插件。
  • 转载地址:http://ljsuz.baihongyu.com/

    你可能感兴趣的文章
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    MySQL 到底能不能放到 Docker 里跑?
    查看>>
    mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
    查看>>