用doctype激活浏览器模式(4)
作者:秦歌 来源:随网之舞 发布时间:2009-06-15 19:02:00
相关链接
Eric Meyer在使用正确doctype中写的关于Mac IE5的模式
Mozilla的doctype嗅探 by David Baron
Lance Silver在IE6中的CSS增强中讨论了在Windows IE6中的模式和doctype嗅探
Faruk Ateş的IE8和X-UA-Compatible解决方案
补遗:对XML的实现者和规范作者的恳求
请不要把doctype嗅探带到XML。
doctype嗅探是用签杂烩汤似的方法解决一个标签杂烩汤问题。doctype嗅探是在HTML4和CSS2规范发布后设计的一种试探方法,它从文档中区分出过时文档以符合其作者可能期望的行为。
偶尔有人建议在XML上使用doctype嗅探来调度不同的处理、识别正在使用的词汇表或激活特性。这是个坏主意。调度和词汇表识别应该是基于名字空间的,而特性激活应该是基于明确的处理指令或元素。
良构(well-formedness)的整个思想是介绍允许XML的无DTD解析,且推广无doctype文档。在正式情况下,两个XML文档有相同的规范形式且应用不同地处理它们(且不同之处并非因为没有选择处理外部实体),这个应用或许被破坏了。在实践情况下,如果两个XML文档导致同样的内容被报告(qnames忽略)给SAX2内容处理器且应用不同地处理文档,这个应用或者被破坏了。考虑到作为 Web作者无法相信每个人都会使用解决额外实体的XMLprocessor来解析其页面(即使一些浏览器看起来这样做,因为它们会映射一定公共的标识符到一个有删节的定义实体的DTD),插入doctype到XML中用于Web是毫无意义的且通常会导致货运崇拜(cargo cultish)习惯。(您仍然使用W3C验证器的DTD覆盖功能来对一个DTD进行验证,虽然W3C验证器会说结果仅仅是暂时有效。或更好的是,你可以用放宽NG验证,它不会污染模式引用的文档。)为了嗅探而要求doctype是非常愚蠢的,即使那是在HTML实践中的解决方法。
此外,当低级别的规范定义两个相等的东西时,高级别的规范不应该尝试给它们不同的含义。请考虑<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
。如果删除公共标识符,依旧指定了同样的DTD,因此doctype <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
表示和前面的doctype一样。应该不同地嗅探它们么?可以进一步理论。假设复制给example.com一个叫foobar.dtd的DTD:<!DOCTYPE html SYSTEM "http://example.com/foobar.dtd">
。这该如何嗅探?应该是同一个意思。甚至整个DTD可以贴在文档中。
换句话说,如果有#include “foo.h”,你不应该给名字foo.h绑定任何black magic,因为它应该允许复制foo.h的内容到文档中或复制foo.h到bar.h中且表示#include “bar.h”。
我不担心HTML和SGML构造相同的参数的原因是Web浏览器不会使用真正的SGML解析器去解析HTML,所以我认为伪装成SGML进行处理是没有用的。无论如何,如果你还不相信,请看W. Eliot Kimber关于此事的文章 comp.text.sgml
附录:text/html中一些doctype的处理方式
下表中,怪癖模式、标准模式和几乎标准分别表示为Q、S和A。当浏览器仅有两种模式时,如果表格单元格的行高和Mozilla的标准模式表现一致时,标准模式标记为“S”,如果表格单元格的行高和Mozilla的几乎标准模式表现一致时,则标记为“A”。
请注意使用XML内容模型提供服务的XHTML在XML模式下渲染。
本表的目的并不是说表中所有的doctype都是新建页面的合理选择。本表的目的是为了展示我的推荐是依据什么样的数据。
下列的简写符号是用于列标题:
NS6
Mozilla 0.6…0.9.4 和 Netscape 6.0…6.2.3
Old Moz
Mozilla 0.9.5 到 1.1 alpha 和 Mozilla 1.0
Moz & Safari & Opera 10 & HTML5
Mozilla 1.0.1, Mozilla 1.1 beta和更高版本, Firefox 到 Netscape 7, Safari 0.9 到 Safari 4.0 beta, Opera 10, Chrome, Konqueror 3.5, HTML5指定的行为
Opera 9.0
Opera 9.0…9.20
IE 8 & Opera 9.5
无 X-UA-Compatible和兼容模式覆盖的默认IE8(该情况下“A”意味着IE8几乎标准模式)、 Opera 7.5…8.54 和 9.5…9.6
IE 7 & Opera 7.10
IE7、兼容模式且无X-UA-Compatible覆盖的IE8(这种情况下“A”意味IE7模式)和Opera 7.10…7.23
IE 6 & Opera 7.0
Windows IE 6 和 Opera 7.0…7.03
Mac IE 5
Mac IE 5.0…5.2.3
Konq 3.2
Konqueror 3.2.2…3.3 (也可能包括 3.1…3.2.1; 我尚未确定)
运行代码框


猜你喜欢
- 一份完全按照李航<<统计学习方法>>介绍的HMM代码,供大家参考,具体内容如下#coding=utf8 '&
- 情感分析(sentiment analysis)是2018年公布的计算机科学技术名词。它可以根据文本内容判断出所代表的含义是积极的还是负面的
- 表单是让用户与我们的网页应用程序交互的基本元素。Flask 本身并不会帮助我们处理表单,但是 Flask-WTF 扩展让我们在我们的 Fla
- 路由关系映射的一个小问题URL中那个上尖号在正则中表示 以某某开头 $符号表示以某某结尾 这就限制了开头和结尾,也就固定了长度但是 admi
- 前言对MySQL有研究的读者,可能会发现MySQL更新很快,在安装方式上,MySQL提供了两种经典安装方式:解压式和一键式,虽然是两种安装方
- (一) 常用的CSS命名规则:头:header内容:content/container尾:footer导航:nav侧栏:sidebar栏目:
- 编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数,那么 collatz()就打印出 number
- 直线检测原理核心要点:图像坐标空间、参数空间、极坐标参数空间 -> (极坐标)参数空间表决给定一个点,我们一般会写成y=ax+b的形式
- 智能合约1. 是什么智能合约是一种由计算机程序编写的自动化合约,它可以在没有第三方干预的情况下执行交易和契约条款。智能合约使用区块链技术实现
- 一.Numpy库1.什么是numpy?numpy是python进行科学计算的一个基础软件包,他是一个python库,提供多维数组
- 一、概念二维列表的元素还是列表(列表的嵌套),称之为二维列表。需要通过行标和列标来访问二维列表的元素二、创建二维列表1、追加一维列标来生成二
- 一.图像金字塔图像金字塔是指由一组图像且不同分别率的子图集合,它是图像多尺度表达的一种,以多分辨率来解释图像的结构,主要用于图像的分割或压缩
- 本demo的效果是单选框一有a和b两个选项按钮,单选框二有q和w两个选项按钮,选中a,使得q不可选,w选中;选中b,使得w不可选,q选中下面
- 程序在运行过程中所有的的数据都存储在内存 (RAM) 中,「RAM 是易失性存储器,系统掉电后 RAM 中的所有数据将全部丢失」。在大多数情
- 基于python3+OpenCV的人脸和眼睛识别,供大家参考,具体内容如下一、OpenCV人脸检测的xml文件下载人脸检测和眼睛检测要用到h
- 本文实例讲述了Python基础之字典常见操作。分享给大家供大家参考,具体如下:Python字典Python 中的字典是Python中一个键值
- 一、安装前准备查看数据库版本命令: mysql --versionmysql-community-common-8.0.17-1.el7.x
- 本文实例讲述了Python排序搜索基本算法之堆排序。分享给大家供大家参考,具体如下:堆是一种完全二叉树,堆排序是一种树形选择排序,利用了大顶
- 近日一直在折腾vps ,刚刚碰到在搬移wordpress过程中导入数据库的时候。碰到了 #1062 – Duplicate entry
- 在使用python函数print()时,如下代码会出现输出无法显示的问题:分三次在一行输出 123print(1, end="&q