该版本已经废弃,请查阅新的版本《HTML5与HTML4 的差异》
HTML是万维网的核心语言。W3C发布了HTML5和HTML5.1。网页超文本技术工作小組(WHATWG)发布的HTML则大致是W3C HTML5.1的超集。 “与HTML4 的差异”描述了那些与HTML4中的定义的区别,并举例说明它们在哪里互不相同。 本文档可能不能提供准确信息,因为规范仍在积极发展中。 如有疑问,始终以规范本身为准 [HTML5] [HTML5NIGHTLY] [HTML]
本节描述了本文档在其出版时的状态。其他文档也可能取代本文档。当前W3C发布列表以及本技术报告的最新修订可以在W3C技术报告索引里找到,网址是 http://www.w3.org/TR/.
这是一份由HTML活动的一部分——HTML工作组产生的2013年5月28日的W3C工作草案。 工作组打算将这份文档作为工作组笔记发布。 征求意见的对应论坛是W3C Bugzilla. (public-html-comments@w3.org, 这个伴随公共档案的邮件列表,不再作为追踪评论使用。)
作为一个工作草案公布并不意味着W3C成员的认可。这是一个草案文件,并随时可能会被其他文档更新、取代或者废弃。在进程中的工作外引用此文档是不恰当的。
本文档是由一个小组根据2004年2月5日W3C专利政策操作并生成。W3C维护了一个用于小组的交付的专利披露的公开名单。该页还包括披露专利的说明。有专利的实际知识的个人,如果个人相信此专利包含必要的申明,必须按照W3C专利政策的第6条披露信息。
本文档涵盖W3C HTML5规范,W3C HTML5.1规范,以及WHATWG HTML标准。为了保持可读性,当所述适用于它们全部时,它们就如同是一个单独的规范被简称为“HTML规范”,或是简单的"HTML"。否则,就使用明确的称呼。
HTML自从90年代初被引入到互联网以来一直在不断发展。某些特性被规范引入;其他则被软件的发布引入。在某些方面,实现以及web开发者的实践不仅相互融合,也与规范与标准融合,但在其他方面它们也不断地偏离。
HTML4在1997年成为W3C推荐标准。虽然它继续作为一个许多HTML的核心功能的粗略指南,但它并没有提供足够的用以构建相互操作的实现信息,更重要的是,也没有提供用以操作的Web内容的实现信息。定义了HTML4的XML序列化的XHTML1,以及为HTML和XHTML定义了JavaScript API的DOM Level 2 HTML也是同样的情况,HTML将会取代这些文档。 [DOM2HTML] [HTML4] [XHTML1]
HTML规范反映了自2004年开始的研究当代HTML实现及Web内容的努力。规范:
定义了单一的语言叫做HTML,它可以用HTML或者XML的语法书写。
定义详细的处理模式,以促进互操作的实现。
为文档改进标记。
为新兴词语引入标记和API,如Web应用。
HTML的内容,以及这份依赖于HTML规范的文档的内容,都仍还在HTML工作组和WHATWG邮件列表中讨论。
关于WHATWG HTML的开放的问题,可以查看在规范顶部的“问题(Issues):”。在规范的边距空白处有注解框能链接到错误(bug)。
关于W3C HTML5和W3C HTML5.1的开放的问题,可以查看“本文档的状态”部分。
HTML被以一种与用户代理{1}处理内容的方式向后兼容的方式定义。为了对Web开发者保持语言的相对简单,一些旧的元素和属性不再被包含在内,它们会在文档的其他小节列出,比如表示样式的元素用CSS来处理会更好。
当然用户代理将会总是支持这些老的元素和属性。这就是为什么HTML规范清楚地分离对Web开发者(在规范中被称为作者)和用户代理的要求的原因。
例如,这意味着Web开发者不能再使用 isindex
或者 plaintext
元素,但是用户代理为了兼容Web内容,而被要求以兼容这些元素如何表现的方式支持它们。
因为HTML已经分离了对作者和用户代理的一致性要求,所以不再需要用“废弃(deprecated)”去标记一个已过时的功能。
在用户代理中完全实现HTML4规范之前,规范就已经达到了推荐的状态。HTML4仍未完全被实现,因为其包含了各种错误,而这些错误在当前的HTML规范里已经被修正,相比HTML4,用户代理更接近实现HTML规范。
WHATWG HTML标准正在不断发展,随着时间的推移其中的错误被修正,新特性被引入。如果特性缺少实现者(implementor)的兴趣,不被Web开发者所用,或者为了其他理由,特性也会从规范中移除。WHATWG不会发布冻结的快照。
W3C HTML5规范试图达到推荐状态。通常不添加新特性除非新特性被至少两个浏览器实现并且有测试展示交互操作性。可以应用小错误的修正。这意味着W3C HTML5可能包含错误,而这些错误已经在WHATWG HTML或W3C HTML5.1(或同时两者)中被修正。
W3C HTML5.1规范和WHATWG HTML相似:它不断发展,随着时间的推移其中的错误被修正,新特性被引入,并会因为与WHATWG HTML相同的原因而从规范中移除特性。它会小心地选择来自WHATWG HTML标准的变更,也会获得直接的变更。预计最后它会经历和W3C HTML5一样的过程,然后一个新的版本将被铸造出来。
HTML定义了一种语法,被称为HTML语法,其几乎兼容在web上已发布的HTML4和XHTML1文档,但不兼容更为深奥的HTML4的SGML特性。
比如
处理指令
和
速记标记,因为大多数用户代理都不支持这些。使用HTML语法的文件的媒体类型是 text/html
。
HTML也为这个很大程度上与HTML4时代的实现相兼容的语法定义了详细的解析规则(包括“错误处理”),用户代理必须对有 text/html
媒体类型的资源使用这些规则。这里是一个符合HTML语法的范例文件:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Example document</title> </head> <body> <p>Example paragraph</p> </body> </html>
另一种可以被用作HTML的语法是XML。此语法与XHTML1的文件和实现相兼容。使用这种语法的文件需使用XML媒体类型(比如 application/xhtml+xml
或 application/xml
),并且元素需被放进 http://www.w3.org/1999/xhtml
命名空间并遵循XML规范中规定的规则
[XML] [XMLNS]
下面是一个符合HTML的XML语法的范例文件:
<?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Example document</title> </head> <body> <p>Example paragraph</p> </body> </html>
对于HTML语法,要求Web开发者声明字符编码。有三种设置的方法:
在传输层;例如通过使用HTTP Content-Type
头。
在文件的开头使用字节顺序标记(BOM)字符。这些字符提供了所使用编码的签名。
使用一个带有 charset
属性的
meta
元素,在该文件的前1024字节里,指定编码。例如,可以使用 <meta charset="UTF-8">
来指定UTF-8编码。这取代了原来的 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
,尽管后者仍然有效。
对于XML语法而言,Web开发者必须使用XML规范中规定的规则来设置字符编码。
HTML语法要求定义一个doctype来确保浏览器使用标准模式渲染页面。doctype没有其他目的。 [DOCTYPE]
HTML语法的doctype声明是 <!DOCTYPE html>
,且不区分大小写。之前版本的HTML的doctype要更长,那是因为HTML语言基于SGML,因此需要一个DTD的引用。现在已经不再是这种情况,并且需要doctype只是为使用HTML语法撰写的文档启用标准模式。浏览器已经为 <!DOCTYPE html>
做到了这一点。
为了支持不能产生首选简短doctype的遗留的标记生成器,doctype <!DOCTYPE html SYSTEM
"about:legacy-compat">
在HTML语法里是被允许的。
HTML 4.0,HTML 4.01,,XHTML 1.0以及XHTML 1.1的严格型(strict) doctypes在HTML语法里也是被允许的(但不鼓励这么做)。
在XML语法里,可以使用任何doctype声明,或者也可以一起忽略。以XML为媒体类型的文档总是在标准模式中处理。
HTML语法允许在文档中使用MathML和SVG元素。math
或者 svg
开始标签会使HTML解析器切换到一个特殊的插入模式,此模式將元素和属性放到合适的命名空间,修正有混合情况的元素和属性,并支持如XML中的空元素语法。语法仍然不区分大小写并且属性允许与HTML元素相同的语法。命名空间声明会被省过。CDATA部分则会在插入模式中被支持。
一些MathML和SVG元素会使解析器切换回“HTML模式”,例如,mtext
和 foreignObject
,这样你就可以使用HTML元素或新的 math
或 svg
元素。
例如,一个非常简单的使用一些最少的语法特性的文档看起来像这样:
<!doctype html> <title>SVG in text/html</title> <p> A green circle: <svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg> </p>
还有一些其他HTML语法的变化值得一提:
⟨
和 ⟩
命名字符引用现在从 U+2329 和 U+232A(左/右点尖括号)分别扩大到 U+27E8 和 U+27E9(数学的左/右尖括号){2}。
添加了许多新的命名字符引用,包括所有来自MathML的字符
允许Void元素(在HTML4中被称为"EMPTY")有结尾斜杠(trailing slash)
与符号 (&
) 在更多的情况下相比HTML4,会保持不转义
属性间必须被至少1个空白字符分隔
空值的属性可以只写属性名而省略等号和值,即使属性不是布尔属性。(人们普遍认为HTML4允许省略布尔属性的值,然而事实是,对于枚举属性,HTML4允许只用属性 value 并省略属性名,但这一点浏览器并不支持。)
允许对值省略引号的属性使用比HTML4更大的字符集
HTML解析器不做任何属性值空白的标准化;比如,id
属性中的开头和结尾空白不会被忽略(从而导致无效),并且在 input
的 value
属性中可以不必使用字符引用,而使用换行符。
optgroup
结束标签现在是可选项
colgroup
开始标签现在是可选项并且由HTML解析器推断出来
这部分被分割成几个小节来更清楚地阐述相对于HTML4的各种不同。
为了更好的结构化,引入下面这些元素:
section
代表一个通用的文件或应用部分。它可以和
h1
, h2
, h3
,
h4
, h5
, 以及 h6
元素同时使用来表明文档的结构。
article
代表了一个文档内容的独立片段,比如博客条目或报纸文章。
main
可以用作另一个元素主内容的容器,例如页面的主要内容。在W3C HTML5和W3C HTML 5.1中,一篇文档只允许一个这样的元素。
aside
代表了一段与页面的其余部分稍稍相关的内容。
在WHATWG HTML中,hgroup
代表一个部分(section)的头(header)。
header
代表一组介绍或导航辅助。
footer
代表一个部分(section)的尾(footer)并可以容纳关于作者、版权等信息。
nav
代表了用于导航目的的文档的一部分。
figure
代表一个独立的流内容片段,通常作为一个文档主流的独立单元。
<figure> <video src="example.webm" controls></video> <figcaption>Example</figcaption> </figure>
figcaption
被用作标题 (它是可选的).
还有其他一些新的元素:
video
和
audio
用于多媒体内容。两者都提供了一个API使得Web开发者可以编写他们自己的用户界面,但也有一种方法触发由用户代理提供的用户界面。如果有各种类型的可用流,source
被与这些元素放在一起使用。
embed
用于插件内容。
mark
代表一连串文档中用作参考的被备注和高亮的文本,由于其在另一个上下文相关。
progress
代表一个任务完成度,比如下载或者执行一系列耗时的操作。
meter
代表一个度量,比如磁盘使用情况。
time
表示日期和(或)时间。
WHATWG HTML和W3C HTML5.1中有 data
,
用来允许内容带有机器可读值的注释。
dialog
用来显示对话框。
canvas
用来渲染即时创建的动态位图,比如图表和游戏。
menuitem
代表了来自弹出菜单的用户可以调用的命令。
datalist
与 input
的新属性 list
[2]
一起使用可以创建组合框:
<input list="browsers"> <datalist id="browsers"> <option value="Safari"> <option value="Internet Explorer"> <option value="Opera"> <option value="Firefox"> </datalist>
keygen
代表了密钥对的生成控制。
output
代表了一些输出类型,比如表单里的通过脚本的计算结果。
这些新类型的想法是,用户代理可以提供用户界面,比如一个日历日期选择器或用户的地址簿的整合,并提交一个确定的格式到服务器。这给了用户更好的体验,因为他的输入在发送到服务器前被检查,这意味着更少的等待反馈的时间。
几个新属性被引入到了已经是HTML4一部分的各种元素上:
在WHATWG HTML和W3C HTML5.1中 a
和
area
元素有了新的
download
属性。在WHATWG HTML中还有一个
ping
属性。
meta
元素现在有了 charset
属性,因为这已经被广泛支持并且提供了一个定义文档字符编码(character encoding)的好方法。
在WHATWG HTML和W3C HTML5.1中,table
元素现在有了一个 sortable
属性,
th
元素有了一个
sorted
属性,其提供了排序表列的手段。
可以在
input
(除了当 type
属性为
hidden
时), select
, textarea
和
button
元素上定义一个新的
autofocus
属性。它提供了一种页面加载时聚焦表单控件的声明方式。相比使用脚本聚焦元素,使用这个特性可以提升用户体验,比如,如果用户不喜欢可以关闭它。
可以在
input
和 textarea
元素上定义一个新的
placeholder
属性。它代表了一个提示,旨在帮助用户数据录入。
<input type=email placeholder="a@b.com">
input
,
output
, select
, textarea
,
button
, label
, object
和 fieldset
元素有了新的 form
属性,允许控件关联一个表单。现在这些元素可以放置在页面的任何地方,它们仍和 form
关联,而不是只能作为 form
元素的子元素。
<table> <tr> <th>Key <th>Value <th>Action <tr> <td><form id=1><input name=1-key></form> <td><input form=1 name=1-value> <td><button form=1 name=1-action value=save>?</button> <button form=1 name=1-action value=delete>?</button> ... </table>
input
(除了 type
属性值是 hidden
, image
或一些按钮类型比如 submit
外), select
和 textarea
有了新的 required
属性,它提示用户为了能够提交表单而必须填入一个值。对于 select
来说,第一个 option
元素必须以一个空值占位。
<label>Color: <select name=color required> <option value="">Choose one <option>Red <option>Green <option>Blue </select></label>
fieldset
元素现在允许用 disabled
属性来禁用所有子元素的控制(不包括那些 legend
元素的子元素),并允许用 name
属性作脚本访问。
input
元素有几个新的属性来来指定约束:
autocomplete
, min
,
max
, multiple
, pattern
和
step
。之前已经提到,它还有一个与 datalist
元素一起使用的新的 list
属性。当使用 type=image
时,它也有 width
和 height
属性来指定图像的尺寸。
form
元素有了 novalidate
属性,可以用来禁用表单验证提交(即表单总是可以被提交)。
input
和 button
元素有了新属性 formaction
, formenctype
,
formmethod
, formnovalidate
, 和
formtarget
。如果存在,它们覆盖 form
元素上的 action
, enctype
, method
,
novalidate
, 和 target
属性。
在WHATWG HTML和W3C HTML5.1中,input
和
textarea
有了一个 inputmode
属性。
menu
元素有了两个新属性:type
和
label
。它们允许元素转化成典型用户界面里的菜单,并结合全局 contextmenu
属性提供上下文菜单。
在WHATWG HTML和W3C HTML5.1中, button
元素有了一个新的 menu
属性,可以与弹出菜单一起使用。
style
元素有了一个新的 scoped
属性,用来启用限定作用范围的样式表。在一个这样的 style
元素里的样式规则只应用到局部树{7}。
link
元素有了一个新的属性 sizes
。可以结合 icon
的关系(通过设置 rel
属性,可被用于如网站图示)一起使用来表明被引用图标的大小。因此允许了不同的尺寸的图标。
iframe
元素有了三个新属性分别是 sandbox
, seamless
, 和
srcdoc
,用以允许沙箱内容,例如,博客评论。
object
元素有一个新的属性叫做 typemustmatch
,
其允许更安全的嵌入外部资源。
img
元素有了一个新属性叫做
crossorigin
用来在获取过程中使用CORS并且如果成功的话,允许图像数据被
canvas
API
读取。在 WHATWG HTML 和 W3C HTML5.1,script
元素有了一个 crossorigin
属性来允许脚本将错误信息向 onerror
报告(errors to be reported)。在 WHATWG HTML and W3C HTML5.1 中, link
元素也有 crossorigin
属性。
在 WHATWG HTML 中, img
元素有了一个新属性叫做 srcset
用来支持不同分辨率的多图片以及不同是视口尺寸的不同图片。
一些HTML4的属性现在被应用到所有的元素。这些属性被称为全局属性(global attributes): accesskey
, class
, dir
,
id
, lang
, style
,
tabindex
和 title
。此外,XHTML 1.0 只在一些元素上允许 xml:space
,现在它被允许用在XHTML文档所有的元素上。
也有一些新的全局属性:
contenteditable
属性表明元素是一个可编辑的区域。用户可以改变元素的内容以及操作标记。
contextmenu
属性用来指向一个Web开发者提供的上下文目录。
Web开发者定义的 data-*
集合。Web开发者可以定义他们想要的任何属性只要他们在其之前加上 data-
前缀来避免与将来版本的HTML的冲突。这些属性是用作存储Web页面或应用自身消耗的自定义数据的。而不是用来给其他各方(比如用户代理)消耗的。
role
和 aria-*
集合属性用来指导辅助技术。在WHATWG HTML和 W3C HTML5/W3C HTML5.1中,这些属性的要求有一些细微差异。
spellcheck
属性允许暗示是否内容可以被拼写检查。
translate
属性给了翻译器内容是否应该被翻译的提示。
HTML也使得所有来自HTML4的事件处理属性(那些形如 onevent
的属性)变成全局属性,并为其定义的新的事件添加了几个新的时间处理属性。比如,媒体元素(video
和 audio
)API所使用的 play
事件的 onplay
事件处理器。
这些元素在HTML里被略微修改了含义,这是为了更好的反应它们如何被使用在Web上或者让它们变得更有用:
b
元素现在代表一段文本,这段文本仅仅出于功利的目的被提请注意,这种目的里没有传达任何额外的重要性,也没有交替的语言和心情的意味,比如文档摘要的关键字,审查中的产品名,文本驱动的交互软件的可操作词,或文章的导引。
cite
元素现在只代表作品标题(比如,书,报纸,随笔,诗歌,乐谱,歌曲,脚本,电影,电视节目,游戏,雕像,绘画,戏剧,演奏,歌剧,音乐,展览,法律案例报告,等等)。特别是HTML4里它被用来标记一个人的名字的例子不再被视为是符合规范的用法。
dl
元素现在代表一组名称-值的关联列表,并且不再适用于对话。
hr
元素现在代表一个段级专题间断(paragraph-level thematic break)。
i
元素现在代表一段有着交替的语言和心情意味的文本,或者,以表明一种不同的文本质量的方式偏离平常的散文{9},比如分类命名,技术术语,其它语言的惯用短语,一个念头,或西文的船名。
对于 label
元素,浏览器不应该再将焦点从标签移动到控件上,除非这种行为对于底层平台的用户界面是标准的。
重新定义了 menu
元素使其对工具栏和上下文菜单有用。
s
元素现在代表内容不再准确或不再有关联。
script
元素现在可以被用作脚本或者自定义数据块。
small
元素现在代表侧边注释的小字。
strong
元素现在代表重要性而不是强烈的强调。
一些属性以各种方式发生了变化
全局属性 accesskey
现在允许指定多字符,而用户代理能从其中选择。
全局属性 dir
现在允许值 auto
。
不再允许 img
, iframe
和 object
的 width
和 height
属性包含百分比。也不允许使用它们将图片从固有的高宽比拉伸到另一个不同的高宽比。
meta
的
http-equiv
属性不再表示被HTTP服务器用来在HTTP响应中创建HTTP头,而是,表示被用户代理所使用的指令。
全局属性 id
现在允许任意值,只要是唯一的,不为空的字符串,并且不包含空格字符。
全局属性 lang
除了接受有效的语言标识符以外,还能接受空字符串,就如同XML中的 xml:lang
一样。
事件处理器属性(比如,onclick
)现在总使用JavaScript作为脚本语言。
li
元素的 value
属性不再被废弃,因为它不是样式性的属性。ol
元素的 start
和
type
属性也是一样的情况。
全局属性 style
现在总使用CSS作为样式语言。
全局属性 tabindex
现在允许负值,其表示元素可以接受聚焦但是不能由tab切换到。
如果脚本语言和样式语言分别是JavaScript和CSS,那么 script
和 style
的 type
属性不再是必须的。
img
的
usemap
属性不再接受URL,而是接受一个 map
元素的有效哈希名引用(valid hash-name reference)。
下面这些元素被允许使用,但是不鼓励Web开发者使用它们,而是强烈鼓励使用替代的解决方案:
Web开发者不该再使用这个小节里的元素。但用户代理将仍然支持它们,HTML的几个小节定义了如何支持它们。比如,废弃的 isindex
元素由解析器部分处理。
下面的元素不在HTML内,因为它们的作用纯粹是表象(样式)作用,CSS能更好的处理它们的功能。
下面的元素不在HTML内,因为使用它们会破坏可用性和可访问性。
不包含下面的元素是因为它们甚少被使用,造成混淆,或者它们的功能能被其他元素处理。
最后,noscript
元素只符合HTML语法。XML语法不允许使用。这是因为,为了不仅要视觉上隐藏还要阻止内容运行脚本,应用样式,控制可提交的表单,加载资源等等,HTML解析器将 noscript
元素的内容作为纯文本解析。同样的做法在XML解析器中是不可能的。
一些来自HTML4的属性在HTML中不再被允许使用。规范定义了用户代理应该如何在遗留文档里处理它们,但是它们并不是有效的,Web开发者绝不能再使用它们。
HTML对你使用什么来代替它们有些建议
此外,HTML没有一个HTML4中的表象(样式)属性,因为CSS能更好的处理它们的功能。
caption
,
iframe
, img
, input
,
object
, legend
, table
,
hr
, div
, h1
, h2
,
h3
, h4
, h5
, h6
,
p
, col
, colgroup
,
tbody
, td
, tfoot
,
th
, thead
和 tr
的 align
属性。
body
的 background
属性。
cellpadding
和 cellspacing
属性 on
table
.
col
, colgroup
, tbody
,
td
, tfoot
, th
, thead
和 tr
的 char
和 charoff
属性。
iframe
的 frameborder
属性。
iframe
的 marginheight
和 marginwidth
属性。
col
,
colgroup
, tbody
, td
,
tfoot
, th
, thead
和
tr
的 valign
属性。
内容模型定义了元素如何被嵌套 — 允许什么作为容器元素的子元素(或后代元素)。
总的来说,HTML4有两种主要的元素类别,"行内(inline)"(比如 span
, img
, text)和"块级(block-level)"(比如 div
, hr
,
table
)。还有一些元素不属于这两者。
一些元素允许"行内"元素(例如 p
),一些元素允许"块级"元素(例如 body
),一些元素允许两者(例如 div
),
而另一些元素两者都不允许但只允许特定的元素(比如 dl
, table
),或者完全不允许任何子元素(例如 link
, img
,
hr
)。
注意元素本身作为某个类别与元素有某个类别的内容模型之间的区别。比如,p
元素自身是"块级"元素,但是有"行内"的内容模型。
使其更加混乱的是,HTML4在其严格(Strict),过渡(Transitional)和框架集(Frameset)模式有不同的内容模型规则。比如,在严格模式里,body
元素只允许"块级"元素,但是在过渡模式里,其允许"行内"和"块级"。
还有让事情变的更混乱的是,CSS使用术语"块级元素(block-level element)"和"行级元素(inline-level element)"作为它的可视化格式模型,其与CSS的'display'属性相关且与HTML的内容模型规则无关。
为了减少与CSS的混淆,HTML不使用术语"块级"或者"行内"作为其内容模型规则的一部分。然而,HTML相比HTML4有更多的类别,并且,一个元素可以不是任何类别的一部分,也可以是其中一个类别的一部分,或者几个类别的一部分。
作为一个相比HTML5的广泛的变化,HTML不再有任何只接受在HTML4中被称为"块级"元素的元素;例如,body
元素现在允许流内容,所以,相比HTML4严格模式,这更接近HTML4过渡模式。
进一步的变化包括:
address
元素现在允许流内容,但是不含标题内容后代,不含分片内容后代,不含header
,
footer
, 或 address
元素后代。
noscript
元素在HTML4中是"块级"元素,但在HTML中它是短语内容。
表元素必须符合 表模型(table model) (例如 两个单元格不允许重叠)。
table
元素现在不允许 col
元素作为直接子元素。不过,HTML解析器暗示存在 colgroup
元素,所以这个变更不会影响 text/html
内容。
a
元素现在有了一种透明(transparent)内容模型(除了它不能允许交互内容后代外),意味着它拥护和它父元素相同的内容模型。这意味着 a
元素可以包含例如 div
元素,只要它的父元素允许流内容。
The map
元素也有透明内容模型。如果有一个 map
元素祖先,area
元素被认为是短语内容,这意味着它们不必作为 map
的直接子元素。
HTML引入了许多新的API,并扩展,变更或废弃了一些显存的API。
HTML引入了若干API来帮助创建Web应用。这些API可以和为了应用而被引入的新元素一起使用:
约束验证的 API(例如,setCustomValidity()
方法)。
用户可以调用的 commands 的 API。
启用离线Web应用的 API,包括 应用缓存(application cache).
允许Web应用来为某种协议或媒体类型注册自身的 API,使用 registerProtocolHandler()
和 registerContentHandler()
。
结合新的全局 contenteditable
属性使用的编辑 API。
结合 draggable
属性使用的拖放 API。
暴露文档URL组件并允许脚本导航,重定向和重新载入的 API (Location
接口)。
暴露会话历史并允许脚本不用实际导航来更新文档URL,使得应用不必滥用 fragment 组件作"Ajax风格"导航的 API (History
接口)。
安排基于时间的定时器的回调的 API (setTimeout()
和 setInterval()
)。
提示用户的 API (alert()
, confirm()
, prompt()
, showModalDialog()
)。
打印文档的 API (print()
)。
处理搜索提供方的 API (AddSearchProvider()
和 IsSearchProviderInstalled()
)。
定义了 Window
对象。
WHATWG HTML 有不在 W3C HTML5 中但在 W3C 分开规范中的更深入的 APIs:
微数据 API。
跨文档和管道消息的 API (postMessage()
和 MessageChannel
)。
后台运行脚本的 API (Worker
和 SharedWorker
)。
客户端存储的 API (localStorage
和 sessionStorage
)。
双向客户端服务器端通讯的 API (WebSocket
)。
服务端到客户端的数据推送的 API (EventSource
)。
以下来自 DOM Level 2 HTML 的特性在各种方面有变化:
document.title
现在获取时折叠空白。
使得 document.domain
可设置,其能改变文档的有效脚本域。
document.open()
现在清除文档(如果调用时有两个或者三个参数),或者行为就如同 window.open()
(如果调用时有三个或四个参数)。前一种情况下,在XML中抛出一个异常。
document.close()
, document.write()
和
document.writeln()
在XML中抛出一个异常。后两个现在支持可变参数;它们能在文档的输入流还在被解析时就在其中加入文本,暗示调用 document.open()
,或者在某些情况下被完全忽略。
document.getElementsByName()
现在返回所有带有与参数匹配的 name
属性的HTML元素。
HTMLFormElement
的 elements
现在返回一个 button
, fieldset
, input
, keygen
, object
, output
, select
和 textarea
元素的
HTMLFormControlsCollection
。length
返回 elements
中的节点数。
HTMLSelectElement
的
add()
现在也接受一个整数作为其第二个参数
如果参数超出范围,HTMLSelectElement
的 remove()
现在移除集合里的第一个元素。
Document
扩展DOM Level 2 HTML 有一个 HTMLDocument
接口,其继承自 Document
并在文档上提供了HTML特定成员。
HTML 已经将这些成员移动到 Document
接口,并且在很多方面扩展了它。因为所有的文档都使用
Document
接口,HTML特定成员现在在所有文档上可用,所以它们在比如SVG文档中也一样可用。它也有几个新的成员:
location
, lastModified
和 readyState
用来帮助资源元数据管理。
dir
,
head
, embeds
, plugins
, scripts
, commands
, 以及通用的名称 getter,用来访问DOM树的各个部分。
WHATWG HTML 有微数据的 getItems()
。
WHATWG HTML 和 W3C HTML5.1 有 cssElementMap
来配合 CSS
element()
特性。
WHATWG HTML 和 W3C HTML5.1 有 currentScript
来返回当前运行中的
script
元素 (或 null).
activeElement
和 hasFocus
风别用来确定哪个元素是当前的焦点以及 Document
是否有焦点。
编辑 API 的 designMode
, execCommand()
,
queryCommandEnabled()
, queryCommandIndeterm()
,
queryCommandState()
, queryCommandSupported()
, queryCommandValue()
。
所有的事件处理IDL{10}属性。同样的,onreadystatechange
是一个特殊的事件处理IDL属性,它只在 Document
上可用。
现有的更改 HTMLDocument
的原型的脚本应该继续工作,因为 window.HTMLDocument
现在返回
Document
接口对象。
HTMLElement
扩展HTMLElement
接口也获得了几个在HTML中的扩展:
translate
,
hidden
, tabIndex
, accessKey
, draggable
, dropzone
, contentEditable
,
contextMenu
,
spellcheck
和
style
反映内容属性。
dataset
是一个处理 data-*
属性的方便的特性,其作为驼峰式大小写属性暴露。比如,elm.dataset.fooBar
= 'test'
设置了elm
的 data-foo-bar
内容属性。
对于微数据,WHATWG HTML 有 itemScope
, itemType
, itemId
, itemRef
, itemProp
, properties
和 itemValue
。
accessKeyLabel
给出了用户代理已经分配给元素的快捷键,Web开发者可以用
accesskey
属性来影响它。
如果元素可以编辑,isContentEditable
返回 true。
forceSpellCheck()
导致用户代理检查元素的拼写。
commandType
, commandLabel
, commandIcon
, commandHidden
, commandDisabled
和 commandChecked
是命令API的一部分。
所有的事件处理IDL属性。
一些成员之前被定义在 HTMLElement
上但在DOM标准 ([DOM]) 中已经被移到 Element
接口。
id
反映 id
内容属性。
className
反映 class
内容属性。
classList
是一个方便的 className
访问器。其返回的对象暴露了用于控制元素类名的方法(contains()
, add()
,
remove()
, and toggle()
)
getElementsByClassName()
返回一个带有特定类名的元素的列表。
在DOM Level 2 HTML中的一些接口也作了扩展。
HTMLOptionsCollection
现在有了遗留调用(legacy caller),setter 创建器,以及成员 add()
, remove()
和 selectedIndex
。
HTMLLinkElement
和 HTMLStyleElement
现在实现来自CSSOM的
LinkStyle
接口。[CSSOM]
HTMLFormElement
现在有了指明的 getter 和索引的 getter。
HTMLSelectElement
现在有了
getter, item()
和 namedItem()
方法,setter 创建器,
selectedOptions
和 labels
IDL属性,
以及表单约束验证API的成员:willValidate
。
validity
, validationMessage
, checkValidity()
和 setCustomValidity()
。
HTMLOptionElement
现在有了一个构造器 Option
。
HTMLInputElement
现在有了成员 files
,
height
, indeterminate
,
list
, valueAsDate
,
valueAsNumber
, width
, stepUp()
, stepDown()
,
表单约束验证API成员,labels
,以及文本域选择API的成员:selectionStart
, selectionEnd
, selectionDirection
,
setSelectionRange()
和 setRangeText()
。
HTMLTextAreaElement
现在有了成员 textLength
,表单约束验证API成员,labels
以及文本域选择API的成员。
HTMLButtonElement
现在有了表单约束验证API成员以及 labels
。
HTMLLabelElement
现在有了成员 control
。
HTMLFieldSetElement
现在有了成员 type
,
elements
以及表单约束验证API成员。
HTMLAnchorElement
现在有了成员 relList
,
text
,并实现了 URLUtils
接口,其中有成员
href
, origin
,
protocol
, username
,
password
, host
,
hostname
, port
,
pathname
, search
,
query
和 hash
。
HTMLLinkElement
和 HTMLAreaElement
也有了 relList
IDL属性。
HTMLAreaElement
也实现了 URLUtils
接口。
HTMLImageElement
现在有了一个构造器 Image
,以及成员naturalWidth
, naturalHeight
和
complete
。
HTMLObjectElement
现在有了成员 contentWindow
,表单约束验证API成员和遗留调用(legacy caller)。
HTMLMapElement
现在有了成员 images
。
HTMLTableElement
现在有了成员 createTBody()
以及,在 WHATWG HTML 和 W3C HTML5.1 中,
stopSorting()
。
在 WHATWG HTML 和 W3C HTML5.1 中,
HTMLTableHeaderCellElement
现在有了成员
sort()
。
HTMLIFrameElement
现在有了成员
contentWindow
。
除了这些以外,在元素的接口上新内容属性大多也有对应的IDL属性,例如,HTMLLinkElement
上的 sizes
IDL属性反映 sizes
内容属性。
一些API现在被全部移除了,或者被标记为废弃。
所有反映本身是废弃的内容属性的IDL属性,现在也废弃;例如,HTMLBodyElement
上的反映废弃的 bgcolor
内容属性的 bgColor
IDL属性现在是废弃的。
因为元素被废弃以下接口被标记为废弃:HTMLAppletElement
, HTMLFrameSetElement
, HTMLFrameElement
, HTMLDirectoryElement
和 HTMLFontElement
.
HTMLIsIndexElement
接口被全部移除了,因为HTML解析器扩展了一个 isindex
标签到其他元素。HTMLBaseFontElement
接口也被移除了因为元素没有效果。
以下这些 HTMLDocument
接口(已经被移到 Document
)的成员现在是废弃的:anchors
和 applets
。
这部分中的更新日志表明了WHATWG HTML, W3C HTML5 和 W3C HTML5.1中,靠近 W3C HTML5 或 W3C HTML5.1 草案发布的随意的日期之间,有些什么变化。变更的理由可以在 public-html@w3.org and whatwg@whatwg.org 邮件列表存档以及 WHATWG Weekly 一系列的博文里找到。更多根本的理由被集中在 WHATWG Rationale 维基页面上。许多社论和细微的技术变化没有包含在这些更新日志里。强烈鼓励实现者在频繁的基础上跟随主要规范的发展,从而他们知道所有影响到他们早期实现的变化。
更新日志的变更大致以时间的前后逆序。
canvas 2d context 有了一个新方法 isPointInStroke()
。(WHATWG HTML 和 W3C HTML5.1)
DataTransferItemList
接口(拖放API的一部分) 现在有了一个 remove()
方法而不是 deleter。(WHATWG HTML 和 W3C HTML5.1)
registerProtocolHandler()
API 现在支持 bitcoin:
和 geo:
机制。(bitcoin:
仅 WHATWG HTML)
alert()
, confirm()
和 prompt()
方法现在所有参数都为可选。(WHATWG HTML 和 W3C HTML5.1)
fieldset
元素现在能匹配 :invalid
伪类。(WHATWG HTML 和 W3C HTML5.1)
移除了 HTMLBaseFontElement
接口。(WHATWG HTML 和 W3C HTML5.1)
规范和URL标准做了集成,URL标准有效地将 origin
, username
, password
和 query
IDL属性添加到 a
和 area
元素以及 location
对象。(WHATWG HTML 和 W3C HTML5.1)
删除了 hgroup
元素。(W3C HTML5 和 W3C HTML5.1)
HTML 解析器现在更好地支持非HTML元素的 innerHTML
。 (WHATWG HTML 和 W3C HTML5.1)
各种在WHATWG HTML中出现但在W3C HTML5.1中缺失的东西"未分叉(un-forked)":a
和 area
上的 download
属性,应用缓存优先在线(prefer-online)特性,input
和 textarea
上的文本范围API,Document
上的 cssElementMap
IDL属性,微数据的不同位。(仅 W3C HTML5.1)
拖放 API 现在有了一个 dragexit
事件。(WHATWG HTML 和 W3C HTML5.1)
当提交英文表单验证失败(除了单个控件以外),form
元素现在接受一个 invalid
事件。(WHATWG HTML 和 W3C HTML5.1)
navigator
对象现在有了一个 product
IDL属性总是返回 "Gecko"(为了兼容性)。(WHATWG HTML 和 W3C HTML5.1)
time
元素的 datetime
IDL属性被更名为 dateTime
。(WHATWG HTML 和 W3C HTML5.1)
现在调用 pushState()
和 replaceState()
方法可以用 null
作为第三个参数。
添加了一个新的 main
元素。
调整了 input
元素上的 stepUp()
和 stepDown()
方法。(WHATWG HTML 和 W3C HTML5.1)
img
元素现在支持 progress 事件。(WHATWG HTML 和 W3C HTML5.1)
一个新的 fillRule
IDL属性被添加到 canvas 2d context。(仅 WHATWG HTML)
HTML元素的 style
IDL属性现在是可设置的。(WHATWG HTML 和 W3C HTML5.1)
从 a
和 area
元素上删除了 media
属性。(WHATWG HTML 和 W3C HTML5.1)
现在在 hgroup
中的标题元素如果更随着 h1
元素,那么它们支持自动大小。(仅 WHATWG HTML)
navigator
对象现在有了一个 language
IDL属性。(WHATWG HTML 和 W3C HTML5.1)
移除了 menu
API。删除了 command
元素。添加了一个新的 menuitem
元素。menu
元素的 type
属性现在用值 "popup
" 替代 "context
"。button
元素有了一个新的 menu
属性并且 type
属性支持一个新值 "menu
"。(WHATWG HTML 和 W3C HTML5.1)
table
元素现在支持排序列。table
元素有了一个新的 sortable
属性和一个 stopSorting()
方法。th
元素有了一个新的 sorted
属性和一个 sort()
方法。(WHATWG HTML 和 W3C HTML5.1)
表单控件的 autocomplete
属性现在支持 cc-type
类型。(WHATWG HTML 和 W3C HTML5.1)
document
上添加了一个新的 currentScript
IDL属性。(WHATWG HTML 和 W3C HTML5.1)
link
和 script
元素现在支持 crossorigin
属性。(WHATWG HTML 和 W3C HTML5.1)
canvas
元素现在支持间接和代理渲染上下文,来支持从worker绘制。引入了 CanvasProxy
, ImageBitmap
接口, canvas
元素有了新的 setContext()
和 transferControlToProxy()
方法,并在 window
上引入了一个新的 createImageBitmap()
方法。(WHATWG HTML 和 W3C HTML5.1)
canvas 2d context 有了一个新的 direction
IDL属性。(仅 WHATWG HTML)
screen
对象有了一个新的 canvasResolution
IDL属性。(仅 WHATWG HTML)
添加了一个新的 PortCollection()
构造器来支持发送消息到许多端口并允许他们被垃圾收集。(仅 WHATWG HTML)
Storage
上的 getItem()
方法现在可以返回 null。(仅 WHATWG HTML)
iframe
上的 sandbox
属性支持一个新的值 "allow-pointer-lock
"。(WHATWG HTML 和 W3C HTML5.1)
HTML 解析器现在调用突变观察其。(WHATWG HTML 和 W3C HTML5.1)
canvas
元素有了一个新的 supportsContext()
方法。(WHATWG HTML 和 W3C HTML5.1)
th
元素上的 abbr
属性现在是符合规范的。
在HTML元素上添加了一个新的 forceSpellCheck()
元素。(WHATWG HTML 和 W3C HTML5.1)
现在 EventSource
为DNS错误和TCP级别连接失败重新连接。(仅 WHATWG HTML)
一个新的 fastSeek()
方法被添加到媒体元素。(WHATWG HTML 和 W3C HTML5.1)
由于缺乏兴趣,http+aes:
和 https+aes:
机制被移除了。(仅 WHATWG HTML)
带有 rel=noreferrer
的 Navigation 现在不会克隆 sessionStorage
.
Worker
对象的 error
事件现在有一个 column
IDL属性。(仅 WHATWG HTML)
当 showModal()
方法被调用时,dialog
元素中的表单控件的 autofocus
属性现在有一个效果。
ruby
的内容模型有关于嵌套 ruby
元素的变更。
现在在HTML语法中自闭合的SVG script
标签将执行。
删除了 find()
API 的占位符部分。
在HTML语法中即使只使用ASCII字符也必须要有字符声明。
一些拖放API的错误修正。
为 TextTrack
添加了 inBandMetadataTrackDispatchType
IDL属性。
TextTrackCue()
构造器现在的参数更少。
accept
属性现在支持文件扩展名和MIME类型。
删除了媒体元素上的 initialTime
IDL属性。
媒体元素上的 startOffsetTime
IDL属性被重命名为 startDate
。
WHATWG HTML中有进一步的变化,这些变化并不影响W3C HTML5:
在Text Track API中有几个变更和错误修正。
从拖放 API中删除了 addElement()
。
媒体查询现在是带有 seamless
属性的 iframe
元素的代理。
:enabled
和 :disabled
伪类现在应用于隐藏状态中的 input
。
ssh
, sip
和 magnet
机制现在在 registerProtocolHandler()
白名单上。
table
元素现在将 'box-sizing:border-box' 作为默认。
在"潜在CORS启用获取(potentially CORS-enabled fetch)"算法中的错误修正。
文档概述算法现在忽略带有 hidden
属性的元素。
不能提供必须的 alt
文本的标记生成器现在能在 img
上使用一个特定的属性以使验证器忽略遗漏 alt
的错误。
worker以及共享worker现在支持 data:
URL。
为 input
和 textarea
添加了 inputmode
属性。
扩展了 autocomplete
属性来预填特定的内容。
WebSocket 支持发送 ArrayBufferView
以及 ArrayBuffer
。
table
上的 border
属性再次不符合规范。
canvas ImageData方法现在假定96dpi,并且引入了一组"HD"方法。
共享worker connect
事件现在也在 source
IDL属性中暴露源端口。
在WebSocket send()
中,单独代理(Lone surrogates) 被转换为 U+FFFD{11}而不是抛出异常。
为 input
和 textarea
添加了 setRangeText()
方法。
为 img
添加了 srcset
属性。
应用缓存现在有了一个 prefer-online
模式。
对话框现在被 dialog
元素,inert
全局属性以及 form
的 dialog
方法支持。
为 canvas 2d context 添加了 resetTransform()
方法,currentTransform
IDL属性,几个字体度量的IDL属性,resetClip()
方法,imageSmoothingEnabled
IDL属性,addHitRegion()
方法,removeHitRegion()
方法,虚线的支持。
添加了突变观察器。
TextTrackCue
成员 alignment
, linePosition
, textPosition
和 direction
分别被重命名为 align
, line
, position
和 vertical
。
command
元素现在有了一个 command
属性。
建议拖放内容被用户代理过滤来阻止XSS攻击。
添加了 translate
全局属性。
在 pagehide
, beforeunload
和 unload
事件期间,showModalDialog()
, alert()
, confirm()
和 prompt()
方法现在不允许做任何事。
script
元素现在支持 beforescriptexecute
和 afterscriptexecute
事件。
window.onerror
现在为了列位置支持第四个参数。
window.opener
IDL属性现在在某些情况下能返回null。
使 clearTimeout()
和 clearInterval()
方法为代名词。
为了和带有 scoped
属性的 style
元素一起使用,引入了CSS @global
@规则。
embed
和 object
元素现在有了遗留调用(legacy caller)。
window.onerror
的返回值的处理变得符合现实。
setTimeout()
API 现在允许在后台tab中被终止。
:valid
和 :invalid
伪类现在能应用于 form
元素。
将源清除标志(origin-clean flag)授予 canvas
的 toBlob()
方法。
当子文档获得焦点时,activeElement
IDL属性现在指向相应的浏览内容的容器 (例如 iframe
)。
atob()
方法现在忽略空白。
dropzone
属性现在使用 "string:
" 和 "file:
" 替代 "s:
" and "f:
"。
修正HTML解析器使其正确处理涉及外国土地(foreign lands)和寄养父母(foster parenting)的情况。
日期和时间微语法现在允许单个空格替代"T"。
应用缓存不再检查缓存清单的MIME类型。
TextTrackCue
的 cueAsSource
IDL属性被更名为 text
。
跨域脚本的 window.onerror
API 现在以伪参数调用。
textarea
元素的 value
和 textLength
IDL属性将它们的换行标准化到 LF。
q
元素现在有默认渲染的语言特定的引号。
引入了 data
元素。
time
元素被重新设计使其与人们想要如何使用它相匹配。删除了它的 pubdate
属性。
移除了 form
上的遗留调用。
移除了 location.resolveURL()
方法。
track
元素现在嗅探而不是服从MIME类型。
由 createDocument()
创建的文档上的 load()
方法现在被定义到 XMLDocument
接口上。
HTMLDocument
的成员移动到 Document
并且 window.HTMLDocument
现在只返回 window.Document
。
MutableTextTrack
和 TextTrack
接口被合并了,并使 TextTrackCue
更可变。
删除了 input
上的 selectedOption
IDL属性。
对所有属性,选择器中的属性值现在区分大小写。
readyState
IDL属性从 TextTrack
移动到 HTMLTrackElement
.
删除了 text/html-sandboxed
MIME类型。
浮点数现在允许以".
"字符开头。
现在支持导航到一个音频或视频资源。
表格单元现在允许流内容,但是不允许 header
, footer
, 分片内容和标题内容后代。
添加曲目到媒体元素现在会在相应曲目列表对象上发送一个 addtrack
事件。
在媒体尚未加载完就设置媒体元素上的 currentTime
现在会延缓查找进度而不是抛出异常。
如果插件被授予 sandbox
属性那么它们在沙箱 iframe
中不再禁用。
一些历史导航和相关事件的调整。
媒体元素以及 MediaController
在它们结束时会暂停。
事件现在支持构造器并且一些 init*Event()
方法被移除。
当资源加载完,媒体元素现在发送一个 suspend
事件。
现在表单提交会将换行标准化为CRLF。
关于 bidi 和 br
元素的一些调整。
很大一部分编辑内容移动到了HTML Editing APIs。
UndoManager
和相关特性移动到了 UndoManager 和 DOM Transaction。
添加了 isProtocolHandlerRegistered()
, isContentHandlerRegistered()
, unregisterProtocolHandler()
和unregisterContentHandler()
。
registerContentHandler()
现在有了一个MIME类型的黑名单。
registerProtocolHandler()
现在有一个协议的白名单,但也支持任何以 "web+
" 开头的协议。
text/html
资源的片段标识符现在不必指向一个有匹配ID的元素。
audio
元素现在允许有零 source
子元素。
现在在bidi格式字符的使用上有一些限制。
带有 type=number
的 input
元素上允许 maxlength
和 size
属性(但是在验证器中给出警告)。
现在允许连接关系 "shortcut icon
"
标题元素现在允许有 heading
和 tab
角色。
现在使用 EventTarget
会从其继承而不是"实现"。
setInterval()
API 现在间隔4ms而不是10ms。
select
元素和它的 options
集合现在有了一个setter。
链接上的 rel=help
现在默认显示一个帮助的鼠标光标。
在文档加载完之前调用 window.print()
将会延缓打印机直到页面加载完。
应用缓存获得了一个 abort()
方法。
HTMLCollection
, DOMTokenList
, getElementsByClassName()
, createHTMLDocument()
, 一些DOM核心特性的HTML特定覆盖(比如 createElement()
), 一些定义, id
IDL属性以及ID处理移动到了DOM4。
片段标识符现在经历重定向后仍能存在。
pushState()
和 replaceState()
方法现在变更历史条目为GET。
现在 command API 的属性都有前缀,所以它们现在是 commandLabel
, commandIcon
, commandHidden
, commandDisabled
和 commandChecked
。
结构克隆算法现在支持稀疏数组。
window.postMessage
现在支持传输一些对象而不是克隆它们,并且支持传输 ArrayBuffer
。
使应用缓存在检查其MIME类型时更为严格。
带有 type=number
的 input
元素现在允许 placeholder
。
MediaController
获得了一个新的 onended
事件监听器。
在一些地方HTML解析器改变了其U+0000字符的处理。
object
属性获得了一个新的属性 typemustmatch
,使Web开发者嵌入不受信的期望中特定内容类型的资源更为安全。
从 meter
和 progress
移除了 form
属性。
使得HTML解析器在 ruby
的处理上有更好的向前兼容性。
定义了一些保证不再会被脚本类型支持的MIME类型(例如 text/plain
),这样Web开发这就可以安全的使用它们作为自定义数据块。
由 window.open()
创建的 about:blank
文档现在获得了一个 load
事件。
定义了 window.status
的存在,但不做任何事。
拖放 DataTransferItems
被重命名为 DataTransferItemList
。
应用缓存现在支持 'no-store' 和 HTTPS。
结构克隆算法现在支持 getters。
crossorigin
属性被添加到 img
, video
和 audio
来使用CORS。
external
IDL属性被添加到 window
并且这个属性有成员 AddSearchProvider()
和 IsSearchProviderInstalled()
。
WHATWG HTML中有进一步的变化,这些变化并不影响W3C HTML5:
2d context现在有 arc()
和 arcTo()
方法以及新的 ellipse()
方法支持椭圆。
2d context现在支持 Path
对象。能为 Path
添加SVG路径属性。
添加了 http+aes:
和 https+aes:
URL机制,来允许非受信的服务器持有敏感资源。
当 itemprop
属性被用在一个元素上,且微数据从这个元素的属性(像是 a
元素的 href
)获得其值时,那个属性就是必须的。
PeerConnection
被移到了 WebRTC。
WebVTT移到了它自己的规范中。
WebSockets在 CLOSING
状态不再接受消息。
删除了Atom转换算法。
itemtype
属性现在允许多类型。
删除了 CanvasPixelArray
而改用 Uint8ClampedArray
。
删除了微数据到RDF的转换算法。
link
元素不再允许同时有rel
和 itemprop
。
如果文档使用一个安全连接那么WebSocket API就不允许打开一个不安全的连接。
"存储互斥(storage mutex)"作为可选。
Web Storage不再支持结构化数据。
a
元素获得了一个新的 download
属性。这个属性不被W3C HTML5包含在内。
为 window.find()
方法添加了一个实验性的定义。
2d context fillText()
和 strokeText()
方法现在不会折叠空白。
微数据现在处理无限循环。
Web Worker location
现在字符串化。
在一个Web Worker中的脚本错误现在可以被父worker或带有 onerror
处理器的document检测到。
EventSource
现在支持 CORS。
EventSource
MIME类型检查更为严格。
Web Workers 获得了 atob()
和 btoa()
方法。
Web Workers 获得了 ononline
和 onoffline
事件处理器。
WebSockets API 又一次有了 error
事件。
WebSockets API 现在暴露选定扩展名。.
UDP PeerConnection
API 的各种调整。
WebSocket关闭代码和原因现在API中被支持了。
在WebSockets中支持了二进制数据。
为了安全原因在WebSockets中的重定向现在被阻止了。
删除了对在 img
, object
, CSS 等等的 javascript:
体系的支持。
为 canvas
添加了 toBlob()
方法。
canvas
2d context 的 drawFocusRing()
方法被分割成两个方法,drawSystemFocusRing()
和 drawCustomFocusRing()
。
PropertyNodeList
的 values
属性被替换为 getValues()
方法。
定义了 select
事件。
为 input
and textarea
添加了 selectDirection
IDL属性。
现在 :enabled
和 :disabled
伪类匹配 fieldset
,并且 :indeterminate
伪类现在能匹配 progress
。
为 TrackList
添加了 getKind()
方法。
为媒体元素的同步回放添加了 MediaController
API和 mediagroup
属性。
一些ARIA{12}的默认有变化,并且现在指定匹配默认的ARIA属性是无效的。
TrackList
的 getName()
方法被重命名为 getLabel()
。
table
的 border
属性现在是符合规范的。
u
元素现在是符合规范的。
table
的 summary
属性现在是不合规范的。
video
的 audio
属性变更为一个布尔的 muted
属性。
Content-Language
元指令现在是不合规范的。
基于Firefox中的实现反馈而变更了 pushState
和 replaceState
特性,并引入了 history.state
。
媒体元素的 tracks
IDL属性被重命名为 textTracks
。
事件处理器内容属性现在支持JavaScript严格模式。
删除了 forminput
和 formchange
事件,以及 dispatchFormInput()
和 dispatchFormChange()
方法。
删除了 rel
关键字 archives
, up
, last
, index
, first
以及相关的同义词。
在同一个脚本中从DOM里移除或重新插入一个媒体元素现在不会中断媒体元素。
video
元素的信箱规则现在在CSS 'object-fit' 中的条款中指定。
当在 canvas
上绘制时,跨域字体现在不会泄露字体的信息。
字符编码声明现在允许在前1024字节之内而不是前512字节。
onerror
事件处理函数现在同时被编译时脚本错误以及运行时错误调用。
由脚本插入的 script
元素现在的 async
属性值默认为 true
,设置为 false
时可使脚本按插入顺序执行。
指定了 atob()
和 btoa()
方法。
应用缓存清单文件的建议文件扩展名从 .manifest
变为 .appcache
。
action
和 formaction
属性不再允许有空字符串作为值。
提炼了拖放模型。
添加了一个新的全局 dropzone
属性。
添加了一个新的 bdi
元素来辅助用户生成的有双向影响的内容。
dir
属性获得了一个新的 "auto
" 值。
添加了一个 dirname
属性到 input
元素。当被指定时用户指定的方向性也将被提交给服务器。
为视频文本轨道添加了一个新的 track
元素和相关的文本轨道(TextTrack) API。
现在允许了 ol
元素上的 type
属性。
getSelection()
API 移到了独立的 DOM Range 草案。类似地,现在从W3C HTML5副本中移除了 UndoManager
因其尚未就绪。
基于实现反馈对HTML解析算法做了众多变更。
hidden
属性现在作用于表相关的元素。
canvas
getContext()
方法现在被定义为能更好的处理多上下文。
媒体属性的 startTime
IDL属性被重命名为 initialTime
并添加了 startOffsetTime
。
prefetch
链接关系现在可以被用在 a
元素上。
ins
和 del
的 datetime
属性不再须要指定一个时间。
使用 PUT 和 DELETE 作为 form
元素的HTTP方法不再被支持。
不再废弃 s
元素。
video
元素有了一个新 audio
属性。
与往常一样,也做了大量的轻微的修正
HTML5的W3C版本中移除了 ping
属性。
对于 iframe
srcdoc
文档以及其他标题已经可得的场景,与email情况一样,title
元素是可选的。
keywords
现在是一个标准的 meta
元素的元数据名。
为 iframe
元素的 sandbox
属性添加了 allow-top-navigation
值。当其被定义时允许嵌入内容来导航其父元素。
添加了 wbr
元素。
link
元素的 rel
属性的 alternate
关键字现在可以再次用来指向订阅,即使订阅不是文档的替代。
从HTML5 W3C版本中移除了HTML原子映射。
文档还做了其他大量轻微变更,信息的明确,和修正。
移除了 dialog
元素。一个如何标记谈话的部分有效的替代了它。
引入了 document.head
来方便的从脚本访问 head
元素。
移除了链接类型(link type) feed
。指定媒体类型的 alternate
取而代之。
引入了 createHTMLDocument()
作为API来允许方便的创建HTML文档。
meter
和 progress
元素都不在对他们的内容作“神奇的”处理因为其不能国际化。
meter
和 progress
元素,以及 output
元素,现在能用 label
元素打标。
引入了一个新的媒体类型,text/html-sandboxed
,用来在不造成伤害的情况下伺服有潜在威胁的内容。
为 iframe
元素引入了一个 srcdoc
属性,用来内联嵌入有潜在威胁内容。预想中它将与 sandbox
和 seamless
属性一起使用。
figure
元素现在使用一个新的元素 figcaption
而不是 figure
元素,因为人们想要在早在HTML到达W3C推荐标准之前使用它。
因为相同的原因,details
元素现在使用新的元素 summary
。
媒体元素上的 autobuffer
属性被重命名为 preload
。
一大堆其它小问题被解决了。上述列表总结了被认为是Web开发者主要感兴趣的内容。
除了上述以外,微数据,canvas
2D context API,以及Web Messaging (postMessage()
API),在W3C中被分割到他们自己的草案中(WHATWG仍然发布了一个包含它们的HTML版本):
具体的微数据词汇跟随W3C HTML5草案而没有作为单独草案发布。WHATWG HTML草案则仍旧包含它们。
当 time
元素为空,用户代理必须以特定区域的方式渲染时间。
load
时间在 Window
上发出,但现在它有 Document
作为其目标。
pushState()
现在影响 Referer
(sic)头。
onundo
和 onredo
现在在 Window
上。
媒体元素现在有一个 startTime
成员表示当前资源从哪里开始。
header
被重命名为 hgroup
。并且引入了一个新的 header
元素。
createImageData()
现在也接受 ImageData
对象。
createPattern()
现在也能接受 video
元素作为参数。
header
中不再允许有 footer
元素,并且 address
或 footer
中不允许有 header
。
引入了一个新的控件: <input type="tel">
。
命令(Command) API现在作用于所有元素。
accesskey
现在被正确定义。
section
和 article
现在接受一个 cite
属性。
引入了一个叫做微数据(Microdata)的新特性,其允许人们在他们的HTML文档中嵌入自定义数据。
包含三个预定义的词汇来使用微数据模型:vCard, vEvent, 和一个许可模型。
更新了拖放使其能与微数据模型协同。
添加textLength
作为 textarea
元素的成员。
rp
元素现在接受短语内容,而不是单一字符。
现在定义了 location.reload()
。
hashchange
事件现在在异步触发。
添加了与XPath 1.0和XSLT 1.0兼容的规则。
现在 spellcheck
IDL属性映射到 DOMString
。
hasFeature()
支持被减少到最小。
Audio()
构造器设置 autobuffer
属性。
thead
中不再允许 td
元素。
input
元素以及 DataTransfer
对象现在有了 files
IDL属性。
移除了 datagrid
和 bb
因为它们的设计并未商定。
从媒体元素上移除了提示范围API。
集成了对WAI-ARIA的支持。
在这个列表的顶部,好几个轻微的明确,错别字,特定的实现的问题,以及其他小问题都已经被解决了。
此外,下面的HTML部分已经被提取出来,并且将会在IETF深入发展:
URL的定义
内容类型嗅探(Content-Type sniffing)定义
添加了一个新的全局属性叫做 spellcheck
定义了JavaScript this
在全局对象中返回一个 WindowProxy
对象而不是 Window
对象。
现在定义了 input
元素在文件上传状态的 value
IDL属性。
designMode
的定义变更为与遗留的实现更一致。
2D绘图API的 drawImage()
方法现在也能接受 video
元素。
改变了媒体元素加载资源的方式。
document.domain
现在与IPv6兼容。
video
元素获得一个 autobuffer
布尔属性来作为一个提示。
现在允许你在XML文档中指定 meta
元素的 charset
属性,只要其属性值与文档编码匹配。(注意它不指定值,它只是一种护符)
移除了媒体元素的成员 bufferingRate
和 bufferingThrottled
。
媒体元素资源选择算法现在是异步的。
现在 postMessage()
API 接受一个 MessagePort
对象的数组而不只是单个对象。
select
元素以及 select
元素的 options
成员的 add()
方法的第二个参数现在是可选项。
input
以及 button
元素的 action
, enctype
, method
,
novalidate
, 和 target
属性被重命名为 formaction
, formenctype
,
formmethod
, formnovalidate
, 和
formtarget
。
添加了一种"存储互斥"的概念来处理独立页面试图同时改动一个存储对象(document.cookie
和 localStorage
)。 Navigator
获得了一个 getStorageUpdates()
方法来允许其被明确地发布。
现在定义了一种类似于MathML的SVG语法,以便SVG能够被包含到 text/html
资源中。
添加了 placeholder
属性到 textarea
元素上。
为密钥对生成添加了一个 keygen
元素。
修订了 datagrid
元素,使API更加异步并且允许卸载部分网格。
此外,HTML一些部分已经被提取出来,并且将被Web应用工作组作为独立规范来深入发展。
ImageData
对象的成员 data
从一个数组变更为一个 CanvasPixelArray
对象。
canvas
元素及其API的实现要求有阴影
明确了 canvas
安全模型
canvas
的处理模式做了各种修改以反映实现和web开发者的反馈。例如,明确了当传递 NaN 和 Infinity 时会发生什么,以及修正了
arc()
和 arcTo()
的定义。
稍稍改变了XML中的 innerHTML
来改善双向传递(round-tripping)
现在当媒体类型是 image/jpeg
时,canvas
的 toDataURL()
方法支持设置一个质量级别。
video
元素的 poster
属性现在会影响其固有尺寸。
明确了 link
元素的 type
的行为。
当预计的类型是图片时,允许对 link
的嗅探。
引入了一个关于URL的部分来处理URL值如何被解析以及Web开发这究竟须要做什么。定义中的每个使用URL的特性都被改写,以顾及到新的URL部分。
现在明确了 base
元素的 href
属性不依赖于 xml:base
。
定义了 base URL 变化时应该是何种行为。
URL分解IDL属性现在更多的向 Internet Explorer 靠齐。
现在允许所有的HTML元素上的值为 http://www.w3.org/1999/xhtml
的 xmlns
属性。
embed
元素上的 data-*
属性以及自定义属性现在必须符合 XML
Name
生产{14},并且不能包含冒号。
为了和服务器双向交流而引入了WebSocket API。
媒体元素的 volume
的默认值现在是 1.0 而不是 0.5。
event-source
被重命名为 eventsource
因为没有其它的HTML使用连字符。
引入了消息通道API来充实 postMessage()
添加了新元素 bb
,它代表一个用户可以调用的用户代理命令。
修改了媒体元素的 addCueRange()
方法使其获取一个暴露在回调里的标识符。
定义了如何将DOM变化成信息集(infoset)。
定义了 Window
对象的 parent
属性。
embed
元素被定义为做扩展嗅探,来兼容那些将Flash作为 text/plain
投递的服务器。(这在规范中被标记为一个问题,为了找出是否有更好的方式使其工作。)
现在使用 embed
可以不带它的 src
属性。
为了与CSS保持一致,getElementsByClassName()
在怪异模式里被定义为 ASCII 且不区分大小写。
在HTML文档里,localName
不再返回大写的节点名。
data-*
属性被定义为总是小写的。
当页面是从带有 target="_blank"
和 rel="noreferrer"
的链接打开时,Window
对象的 opener
属性不会出现。
定义了 Window
对象的 top
属性。
现在允许a
元素嵌套流内容(flow content),但不允许嵌套交互内容(interactive content)。
定义了 header
元素对于文档摘要和目录的意义。
定义了获取资源意味着什么。
canvas
元素的图案(Patterns)是必须的。
从 menu
元素上移除了 autosubmit
属性。
添加了对 outerHTML
和
insertAdjacentHTML()
的支持。
在HTML中,当 lang
被指定并且它们有相同的值时,允许 xml:lang
。在XML中,如果 xml:lang
也被指定并且它们有相同的值时,允许 lang
。
Window
对象的 frameElement
属性现在被定义了。
事件循环和任务队列现在定义了详细脚本执行和事件。所有的特性已经被更新,并根据这个机制定义。
如果 alt
属性被省略了,那么 title
属性,闭合的带有 legend
子元素的 figure
元素,或者一个相关联的头部的闭合部分必须出现。
irrelevant
属性被重命名为 hidden
。
MathML的 definitionURL
属性现在被正确支持。之前它会在解析过程中以全小写结束。
为了兼容性的原因,用户代理必须将US-ASCII视作Windows-1252对待。
为了兼容一些XML工具,允许替代的DOCTYPE语法。
移除了数据模板(包括了
datatemplate
, rule
和 nest
元素)。
媒体元素现在支持单一的 loop
属性。
重定义媒体元素上的 load()
方法为异步。现在它轮流尝试文件而不是只查看 source
元素的 type
属性。
一个叫做 canPlayType()
的新成员被添加到媒体元素。
从媒体元素移除了 totalBytes
和 bufferedBytes
属性。
Location
对象获得了一个 resolveURL()
方法。
再次变更了 q
元素。标点再次由浏览器提供。
HTML解析器算法有多种改变,为了使其与Web站点要求的行为更一致。
unload
和 beforeunload
事件现在被定义。
革新规范中的IDL块,使其与即将到来的Web IDL规范一致。
表头可以包含头。要求用户代理支持 headers
属性指向 td
和 th
元素,但是要求Web开发者只让它们指向 th
元素。
兴趣各方现在能注册新的 http-equiv
值。
当 meta
元素有 charset
属性时,其必须出现在前512字节之内。
StorageEvent
对象现在有了一个
storageArea
属性。
定义了如何在SVG foreignObject
元素中使用HTML。
删除了通知(notification) API。
定义了关于 HTMLDocument
和
Window
对象 [[Get]] 如何工作。
Window
对象获得了
locationbar
, menubar
,
personalbar
, scrollbars
,
statusbar
和 toolbar
属性来给出关于用户界面的信息。
大幅修订和更新了应用缓存部分
document.domain
现在依赖于公共后缀列表(Public Suffix List)。
[PSL]
添加了一个非规范的部分,其描述了用户代理对于废弃的及符合规范的元素的渲染规则。
添加了一个规范性部分,其定义了何时特定的选择器匹配HTML元素,这些选择器定义在选择器(Selectors)和CSS基本用户界面模块(CSS3 Basic User Interface Module)里。 [SELECTORS] [CSSUI]
Web Forms 2.0,之前作为一个独立的规范,自最后一次发布后以及被完全集成到HTML中。下面的表单章节的变更:
移除了XML提交的支持。
移除了表单填充的支持。
移除了通过 data
属性来填充 select
和 datalist
元素的支持。
移除了关联多表单的字段的支持。字段仍能通过 form
属性来关联一个不嵌套自身的表单。
从 select
, input
, textarea
, 和
button
元素上移除 dispatchChangeInput()
和
dispatchFormChange()
方法。
重复模板被移除。
inputmode
属性被移除。
文件上传的情况,input
元素不再支持 min
和 max
属性。
文件上传的情况,input
元素的 allow
属性不再具有权威性。
textarea
的属性 pattern
和 accept
属性被移除。
RFC 3106 不再被明确支持。
submit()
方法现在只是提交,它不再确保表单控件是否有效。
input
元素的Range状态现在默认为中(middle),而非最小(minimum)值。
input
元素的 size
属性现在是符合规范的(而非废弃)。
object
元素现在参与表单提交。
input
元素的 type
属性获得了值 color
和 search
。
input
元素获得了一个 multiple
属性,根据 type
属性的值,其允许多email或多文件上传。
input
, button
和 form
元素现在有一个 novalidate
属性用来表明表单字段提交时不必有有效值。
当 label
元素包含一个 input
,它仍可以有一个 for
属性,只要它指向它包含的 input
元素。
input
元素现在有了一个 indeterminate
IDL属性。
input
元素获得了一个 placeholder
属性。
变更了有关 ping
属性的实现和创作细。
<meta http-equiv=content-type>
现在已经是设置字符编码的符合规范的方式。
清理了canvas
元素的API。添加了文本支持。
globalStorage
现在受到同源策略的限制并重命名为 localStorage
,明确了相关的事件调度。
变更了postMessage()
API。只暴露消息源,不再暴露URL。其还须要一个第二参数来表示目标文档的源。
拖放API得到了明确。dataTransfer
对象现在有了一个新的 types
属性,用来表示传送数据的类型。
m
元素现在叫做 mark
.
变更明确了服务端发送事件。它使用一种新的格式,这样旧的实现能不受影响。
figure
元素不再要求标题(caption)。
ol
元素有了一个新的 reversed
属性。
根据反馈变更了字符编码检测。
根据实现的反馈,对HTML解析器部分做了各种变更。
对编辑部分做了各种变更,包括添加 queryCommandEnabled()
以及相关方法。
为 td
元素添加了 headers
属性。
table
元素有了一个新的 createTBody()
方法。
HTML解析器部分添加了MathML支持(SVG支持仍在等待来自SVG工作组的输入)。
添加了Web开发者定义属性。Web开发者能以 data-name
的形式给元素添加属性,并且能(于问题中)在元素上使用
dataset[name]
通过DOM来访问它们。
变更 q
元素内须要标点而不是让浏览器来渲染它。
target
属性现在能有 _blank
值。
添加了 showModalDialog
API。
定义了 document.domain
API。
source
元素现在有了一个新的 pixelratio
属性,其对有某种编码错误的视频有用。
向 video
元素添加了 bufferedBytes
, totalBytes
和
bufferingThrottled
IDL属性。
为了与过程事件规范保持一致,将媒体 begin
事件重命名为 loadstart
。
为 script
添加了 charset
属性。
iframe
元素获得了提供沙箱功能的 sandbox
和 seamless
属性。
添加了 ruby
, rt
和 rp
元素,以支持ruby注释。
添加了一个 showNotification()
方法用来向用户显示通知消息。
添加了对于 beforeprint
和 afterprint
的支持。
编者想要感谢: Ben Millard, Bruce Lawson, Cameron McCormack, Charles McCathieNevile, Dan Connolly, David H?s?ther, Dennis German, Frank Ellermann, Frank Palinkas, Futomi Hatano, Gordon P. Hemsley, Henri Sivonen, James Graham, Jens Meiert, Jeremy Keith, Jukka K. Korpela, Jürgen Jeka, Krijn Hoetmer, Leif Halvard Silli, Maciej Stachowiak, Mallory van Achterberg, Marcos Caceres, Mark Pilgrim, Martijn Wargers, Martin Leese, Martyn Haigh, Masataka Yakura, Michael Smith, Mike Taylor, Ms2ger, Olivier Gendrin, ?istein E. Andersen, Philip J?genstedt, Philip Taylor, Randy Peterman, Steve Faulkner, Toby Inkster, Xaxio Brandish, and Yngve Spjeld Landro 感谢他们为这份文档的贡献。同时也感谢所有多年为HTML做贡献让Web变得更好的人们。
专名号:此处英文原文为"labeling the text as being a proper name in Chinese text (a Chinese proper name mark)",我曾直译为"中文里一个适当的名称的标签文本(一个中国的正确的名称标记)",非常感谢呂康豪提供此处专有名词的校订。
感谢一丝指出此处翻译文案错位,已更正。
通常指浏览器。
ruby注释是用ruby字符标示在汉字等东亚字符的上方或者右方用来标示的拼音的那部分。就像小学读课文时,标记在文字上的拼音,就是ruby字符,或者称之为ruby读作rubi。
书写方向一直是被考虑的,这个的主要用在LTR和RTL文本混合时
为使得文本更可读,浏览器依据wbr提示的换行时机进行更为合理的换行
即书写的方向性
准确地说是应用到当前style元素的父元素根下的子树,即兄弟树
即用户代理将不显示定义了hidden属性的元素。但与表现层的比如tab切换隐藏图层不同,hidden后的元素针对所有的显示,比如屏幕阅读器。与form里的hidden域相似。
特殊性短语
interface definition language
U+FFFD字符名为REPLACEMENT CHARACTE,即俗称的黑钻石问号:�
Accessible Rich Internet Applications,可访问富互联网应用
貌似这是个彩蛋...
"Name
生产"为直译,意译为XML命名规则,参看XML规范 Names and Tokens)
感谢 ATA 的 Neil Yao,给了我第一份工作。
感谢我曾经所在团队:阿里巴巴 AliExpress UED 的每一位。
感谢 Ctrip International Website Department 收留我。