《HTML5与HTML4 的差异(2014年12月9日工作组笔记)》仅供参考,如有任何问题,始终以英文文档为准
订正感谢 | 旧译版本 | 译者致谢
By uedbet手机官网下载 2015-01-05
提交订正请到此版本的译者日志留言

W3C

HTML5与HTML4 的差异

W3C 工作组笔记 2014年12月9日

当前版本:
http://www.w3.org/TR/2014/NOTE-html5-diff-20141209/
最新版本:
http://www.w3.org/TR/html5-diff/
参与:
归档bug (开放的bug)
版本历史:
https://github.com/whatwg/html-differences/commits
之前的版本:
http://www.w3.org/TR/2014/WD-html5-diff-20140918/
http://www.w3.org/TR/2013/WD-html5-diff-20130528/
http://www.w3.org/TR/2012/WD-html5-diff-20121025/
http://www.w3.org/TR/2012/WD-html5-diff-20120329/
http://www.w3.org/TR/2011/WD-html5-diff-20110525/
http://www.w3.org/TR/2011/WD-html5-diff-20110405/
http://www.w3.org/TR/2011/WD-html5-diff-20110113/
http://www.w3.org/TR/2010/WD-html5-diff-20101019/
http://www.w3.org/TR/2010/WD-html5-diff-20100624/
http://www.w3.org/TR/2010/WD-html5-diff-20100304/
http://www.w3.org/TR/2009/WD-html5-diff-20090825/
http://www.w3.org/TR/2009/WD-html5-diff-20090423/
http://www.w3.org/TR/2009/WD-html5-diff-20090212/
http://www.w3.org/TR/2008/WD-html5-diff-20080610/
http://www.w3.org/TR/2008/WD-html5-diff-20080122/
编者:
Simon Pieters (Opera Software ASA) <simonp@opera.com>
之前的编者:
Anne van Kesteren <annevk@annevk.nl>

摘要

"HTML5与HTML4 的差异" 描述了HTML5规范中那些与HTML4中的差异。

本文档的状态

本节描述了本文档在其出版时的状态。其他文档也可能取代本文档。当前W3C的发布列表,以及本技术报告的最新修订,可以在W3C技术报告索引中找到,网址是 http://www.w3.org/TR/.

这是一份由HTML工作组产生的2014年12月9日的W3C工作组笔记,其作为HTML活动的一部分,工作组打算将这份文档作为工作组笔记发布。征求意见的对应论坛是 W3C Bugzilla。 (public-html-comments@w3.org, 这个伴随着公共档案的邮件列表,不再作为追踪评论使用。)

作为一份工作组笔记公布并不意味着W3C成员的认可。这是一个草案文件,并随时可能会被其他文档更新、取代或者废弃。在进程中的工作外引用此文档是不恰当的。

本文档是由一个小组根据 2004年2月5日W3C专利政策 操作并生成。 W3C维护了一个专利披露的公开名单,用来将小组的交付相连。 该页还包括披露专利的说明。拥有专利实际知识的个人,如果个人相信此专利包含必要的申明,则必须按照W3C专利政策的第6条来披露信息。

本文档受制于2005年10月14日万维网联盟流程文档.

内容表

  • 1 简介
  • 1.1 本文档的范围
  • 1.2 HTML的历史
  • 1.3 开放的问题
  • 1.4 向后兼容
  • 2 语法
  • 2.1 字符编码
  • 2.2 Doctype
  • 2.3 MathML和SVG
  • 2.4 杂项
  • 3 语言
  • 3.1 新元素
  • 3.2 新属性
  • 3.3 变更的元素
  • 3.4 变更的属性
  • 3.5 废弃的元素
  • 3.6 废弃的属性
  • 4 内容模型
  • 5 API
  • 5.1 新API
  • 5.2 变更的API
  • 5.3 Document扩展
  • 5.4 HTMLElement扩展
  • 5.5 其他接口扩展
  • 5.6 废弃的API
  • 致谢
  • 参考文献

    1 简介

    1.1 本文档的范围

    本文档涵盖W3C HTML5规范。但不涵盖W3C HTML5.1规范或WHATWG HTML标准。 [HTML5] [HTML5NIGHTLY] [HTML]

    1.2 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内容的努力。规范:

    1. 定义了单一的语言叫做HTML,它可以用HTML或者XML的语法书写。

    2. 定义详细的处理模式,以促进互操作的实现。

    3. 为文档改进标记。

    4. 为新兴词语引入标记和API,如Web应用。

    1.3 开放的问题

    请查看HTML5规范中“本文档的状态”章节。

    1.4 向后兼容

    HTML被定义为与用户代理处理内容的方式向后兼容。为了对Web开发者保持语言的相对简单,一些旧的元素和属性不再被包含在内,它们会在文档的其他小节列出,比如表示样式的元素用CSS来处理会更好。

    当然用户代理将会总是支持这些老的元素和属性。这就是为什么HTML规范清楚地分离对Web开发者(在规范中被称为作者)和用户代理的要求的原因。 例如,这意味着Web开发者不能再使用 isindex 或者 plaintext 元素,但是用户代理为了兼容Web内容,而被要求以兼容这些元素如何表现的方式支持它们。

    因为HTML已经分离了对作者和用户代理的一致性要求,所以不再需要用“废弃(deprecated)”去标记一个已过时的功能。

    2 语法

    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+xmlapplication/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>

    2.1 字符编码

    对于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规范中规定的规则来设置字符编码。

    2.2 Doctype

    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为媒体类型的文档总是在标准模式中处理。

    2.3 MathML和SVG

    HTML语法允许在文档中使用MathML和SVG元素。math 或者 svg 开始标签会使HTML解析器切换到一个特殊的插入模式,此模式將元素和属性放到合适的命名空间,修正有混合情况的元素和属性,并支持如XML中的空元素语法。语法仍然不区分大小写并且属性允许与HTML元素相同的语法。命名空间声明会被省过。CDATA部分则会在插入模式中被支持。

    一些MathML和SVG元素会使解析器切换回“HTML模式”,例如,mtextforeignObject,这样你就可以使用HTML元素或新的 mathsvg 元素。

    例如,一个非常简单的使用一些最少的语法特性的文档看起来像这样:

    <!doctype html>
    <title>SVG in text/html</title>
    <p>
     A green circle:
     <svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg>
    </p>

    2.4 杂项

    还有一些其他HTML语法的变化值得一提:

  • &lang;&rang; 命名字符引用现在从 U+2329 和 U+232A(左/右点尖括号)分别扩大到 U+27E8 和 U+27E9(数学的左/右尖括号)

  • 添加了许多新的命名字符引用,包括所有来自MathML的字符

  • 允许Void元素(在HTML4中被称为"EMPTY")有结尾斜杠(trailing slash)

  • 在更多的情况下,与符号 (&) 相比HTML4,会保持不转义

  • 属性间必须被至少1个空白字符分隔

  • 空值的属性可以只写属性名而省略等号和值,即使属性不是布尔属性。(人们普遍认为HTML4允许省略布尔属性的值,然而事实是,对于枚举属性,HTML4允许只用属性 value 并省略属性名,但这一点浏览器并不支持。)

  • 允许对值省略引号的属性使用比HTML4更大的字符集

  • HTML解析器不做任何属性值空白的标准化;比如,id 属性中的开头和结尾空白不会被忽略(从而导致无效),并且在 inputvalue 属性中可以不必使用字符引用,而使用换行符。

  • optgroup 结束标签现在是可选项

  • colgroup 开始标签现在是可选项并且由HTML解析器推断出来

  • 3 语言

    这部分被分割成几个小节来更清楚地阐述相对于HTML4的各种不同。

    3.1 新元素

    为了更好的结构化,引入下面这些元素:

  • section 代表一个通用的文件或应用部分。 它应该h1, h2, h3, h4, h5, 以及 h6 元素同时使用来表明文档的结构。

  • article 代表了一个文档内容的独立片段,比如博客条目或报纸文章。

  • main 代表了文档或应用的主体内容。

  • aside 代表了一段与页面的其余部分稍有关联的内容。

  • header 代表一组介绍或导航辅助。

  • footer 代表一个部分(section)的尾(footer)并可以容纳关于作者、版权等信息。

  • nav 代表了用于导航目的的文档的一部分。

  • figure 代表一个独立的流内容片段,通常作为一个文档主流的独立单元。

    <figure>
     <video src="example.webm" controls></video>
     <figcaption>Example</figcaption>
    </figure>

    figcaption 被用作标题 (它是可选的)。

  • template 可被用于声明HTML片段,其会被脚本复制以及插入到文档中。

  • 还有其他一些新的元素:

  • videoaudio 用于多媒体内容。 两者都提供了一个API使得Web开发者可以编写他们自己的用户界面,但也有一种方法触发由用户代理提供的用户界面。如果有各种类型的可用流,source 被与这些元素放在一起使用。

  • track 提供了 video 元素的文本轨道。

  • embed 用于插件内容。

  • mark 代表一连串文档中用作参考的被备注和高亮的文本,由于其在另一个上下文相关。

  • progress 代表一个任务完成度,比如下载或者执行一系列耗时的操作。

  • meter 代表一个度量,比如磁盘使用情况。

  • time 表示日期和(或)时间。

  • ruby, rt, 以及 rp 用来标注ruby注释

  • bdi 代表从其周围独立出来的一段文本,目的是要使用双向文本格式

  • wbr 代表一个换行时机

  • canvas 用来渲染即时创建的动态位图,比如图表和游戏。

  • datalistinput 的新属性 list 一起使用可以创建组合框:

    <input list="browsers">
    <datalist id="browsers">
     <option value="Safari">
     <option value="Internet Explorer">
     <option value="Opera">
     <option value="Firefox">
    </datalist>
  • keygen 代表了密钥对的生成控制。

  • output 代表了一些输出类型,比如表单里的通过脚本的计算结果。

  • The input element's type attribute now has the following new values:

  • tel
  • search
  • url
  • email
  • date
  • time
  • number
  • range
  • color
  • 新增这些类型的想法,是用户代理可以提供用户界面,比如一个日历日期选择器或用户的地址簿的整合,并提交一个确定的格式到服务器。这给了用户更好的体验,因为他的输入在发送到服务器前被检查,这意味着更少的等待反馈的时间。

    3.2 新属性

    几个新属性被引入到了已经是HTML4一部分的各种元素上:

  • 为了和 alink 元素的一致性,area 元素现在也有了hreflang, typerel 属性。

  • 主要为了和 a 元素的一致性,base 元素也有了 target 属性。(这已被广泛支持)

  • meta 元素现在有了 charset 属性,因为这已经被广泛支持并且提供了一个定义文档字符编码(character encoding)的好方法。

  • 可以在 input (除了当 type 属性为 hidden 时), select, textareabutton 元素上定义一个新的 autofocus 属性。它提供了一种页面加载时聚焦表单控件的声明方式。相比使用脚本聚焦元素,使用这个特性可以提升用户体验,比如,如果用户不喜欢可以关闭它。

  • 可以在 inputtextarea 元素上定义一个新的 placeholder 属性。它代表了一个提示,旨在帮助用户数据录入。

    <input type=search name=q placeholder="Enter search phrase..."> <button>Search</button>
    <label>Email <input type=email name=email placeholder="john@example.com"></label>

    placeholder 属性不该被用作 label 元素的替代。

    <!-- Do not do this: -->
    <input type=email name=email placeholder="Email">
  • input, output, select, textarea, button, label, objectfieldset 元素有了新的 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 外), selecttextarea 有了新的 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, patternstep。之前已经提到,它还有一个与 datalist 元素一起使用的新的 list 属性。当使用 type=image 时,它也有 widthheight 属性来指定图像的尺寸。

  • inputtextarea 元素有了一个新元素 dirname,用于用户所设置的提交的方向性的控制

  • textarea 元素也多了三个新属性,maxlength, minlengthwrap,分别用来控制最大输入长度和提交的换行行为。

  • form 元素有了 novalidate 属性,可以用来禁用表单验证提交(即表单总是可以被提交)。

  • inputbutton 元素有了新属性 formaction, formenctype, formmethod, formnovalidate, 和 formtarget。如果存在,它们覆盖 form 元素上的 action, enctype, method, novalidate, 和 target 属性。

  • input元素也有了一个新属性 minlength

  • script 元素有了一个新属性 async,可以影响脚本的加载和执行。

  • html 元素有了一个新属性 manifest,指向一个用于结合离线Web应用API的应用程序缓存清单。

  • link 元素有了一个新的属性 sizes 。可以结合 icon 的关系(通过设置 rel 属性,可被用于如网站图示)一起使用来表明被引用图标的大小。因此允许了不同的尺寸的图标。

  • ol 元素有了一个新属性 reversed 。当其存在时,代表列表中的顺序为降序。

  • iframe 元素有了新属性分别是 sandboxsrcdoc,用以允许沙箱内容,例如,博客评论。

  • object 元素有一个新的属性叫做 typemustmatch, 其允许更安全的嵌入外部资源。

  • img 元素有了一个新属性叫做 crossorigin 用来在获取过程中使用CORS并且如果成功的话,允许图像数据被 canvas API 读取。

  • 一些HTML4的属性现在被应用到所有的元素。这些属性被称为全局属性(global attributes): accesskey, class, dir, id, lang, style, tabindextitle。此外,XHTML 1.0 只在一些元素上允许 xml:space,现在它被允许用在XHTML文档所有的元素上。

    也有一些新的全局属性:

  • contenteditable 属性表明元素是一个可编辑的区域。用户可以改变元素的内容以及操作标记。

  • Web开发者定义的 data-* 集合。Web开发者可以定义他们想要的任何属性只要他们在其之前加上 data- 前缀来避免与将来版本的HTML的冲突。这些属性是用作存储Web页面或应用自身消耗的自定义数据的。而不是用来给其他各方(比如用户代理)消耗的。

  • hidden 属性表示一个元素尚未,或不再有所关联

  • rolearia-* 集合属性用来指导辅助技术。

  • spellcheck 属性允许暗示是否内容可以被拼写检查。

  • translate 属性给了翻译器内容是否应该被翻译的提示。

  • HTML也使得所有来自HTML4的事件处理属性(那些形如 onevent 的属性)变成全局属性,并为其定义的新的事件添加了几个新的时间处理属性。比如,媒体元素(videoaudio)API所使用的 play 事件的 onplay 事件处理器。规范有一份所有事件的索引

    3.3 变更的元素

    这些元素在HTML里被略微修改了含义,这是为了更好的反应它们如何被使用在Web上或者让它们变得更有用:

  • address 元素现在被最近的祖先 articlebody 元素限定了作用范围。

  • b 元素现在代表一段文本,这段文本仅仅出于功利的目的被提请注意,这种目的里没有传达任何额外的重要性,也没有交替的语言和心情的意味,比如文档摘要的关键字,审查中的产品名,文本驱动的交互软件的可操作词,或文章的导引。

  • blockquote元素仍旧代表从引自其他来源的内容,但现在也允许包含在 footercite元素中的引文,以及行间的变化比如注解和缩写。

  • dl 元素现在代表一组名称-值的关联列表,并且不再适用于对话。

  • hr 元素现在代表一个段级专题间断(paragraph-level thematic break)。

  • i 元素现在代表一段有着交替的语言和心情意味的文本,或者,以表明一种不同的文本质量的方式偏离平常的散文,比如分类命名,技术术语,其它语言的惯用短语,一个念头,或西文的船名。

  • 对于 label 元素,浏览器不应该再将焦点从标签移动到控件上,除非这种行为对于底层平台的用户界面是标准的。

  • 当用户代理不支持之前文档里中的 script 元素所调用的脚本语言时,noscript 不再被渲染。

  • s 元素现在代表内容不再准确或不再有关联。

  • script 元素现在可以被用作脚本或者自定义数据块。

  • small 元素现在代表侧边注释的小字。

  • strong 元素现在代表重要性而不是强烈的强调。

  • u 元素现在代表一段文本,带着虽然明白地被呈现却不怎么准确的非文本的注解。比如专名号,或者拼错的标签文本。

  • 3.4 变更的属性

    一些属性以各种方式发生了变化。

  • img 元素的 alt 属性有了更多描述性要求,并且在一些情况下可以被忽略。详情参阅规范

  • inputaccept 属性现在允许值 audio/*, video/*image/*

  • 全局属性 accesskey 现在允许指定多字符,而用户代理能从其中选择。

  • formaction 属性不再允许有空URL。

  • tableborder 属性只允许值为"1"以及空字符。

  • tdthcolspan 属性现在必须大于零。

  • 当元素为圆的状态时,areacoords 属性不再允许半径的百分比值。

  • objectdata 属性不再相对于 codebase 属性。

  • scriptdefer 属性现在明确地使脚本在页面完成解析时执行。

  • 全局属性 dir 现在允许值 auto

  • formenctype 属性现在支持值 text/plain

  • 不再允许 img, iframeobjectwidthheight 属性包含百分比。也不允许使用它们将图片从固有的高宽比拉伸到另一个不同的高宽比。

  • linkhref 属性不再允许有空URL。

  • basehref 属性现在允许相对URL。

  • 如果文档的编码是UTF-8或UTF-16,所有采用URL的属性,比如,a 元素的 href 属性,现在支持IRI。

  • metahttp-equiv 属性不再表示被HTTP服务器用来在HTTP响应中创建HTTP头,而是,表示被用户代理所使用的指令。

  • 全局属性 id 现在允许任意值,只要是唯一的,不为空的字符串,并且不包含空格字符。

  • 全局属性 lang 除了接受有效的语言标识符以外,还能接受空字符串,就如同XML中的 xml:lang 一样。

  • linkmedia 属性现在接受一个媒体查询列表并且默认为"all"。

  • 事件处理器属性(比如,onclick)现在总使用JavaScript作为脚本语言。

  • li 元素的 value 属性不再被废弃,因为它不是样式性的属性。ol 元素的 starttype 属性也是一样的情况。

  • 全局属性 style 现在总使用CSS作为样式语言。

  • 全局属性 tabindex 现在允许负值,其表示元素可以接受聚焦但是不能由tab切换到。

  • aarea 元素的 target 属性不再被废弃,因为它在Web应用中很有用,比如,在配合 iframe 时。

  • 如果脚本语言和样式语言分别是JavaScript和CSS,那么 scriptstyletype 属性不再是必须的。

  • imgusemap 属性不再接受URL,而是接受一个 map 元素的有效哈希名引用(valid hash-name reference)。

  • 3.5 废弃的元素

    Web开发者不该再使用这个小节里的元素。但用户代理将仍然支持它们,HTML的几个小节定义了如何支持它们。比如,废弃的 isindex 元素由解析器部分处理。

    下面的元素不在HTML内,因为它们的作用纯粹是表象(样式)作用,CSS能更好的处理它们的功能。

  • basefont
  • big
  • center
  • font
  • strike
  • tt
  • 下面的元素不在HTML内,因为使用它们会破坏可用性和可访问性。

  • frame
  • frameset
  • noframes
  • 不包含下面的元素是因为它们甚少被使用,造成混淆,或者它们的功能能被其他元素处理。

  • 不包含 acronym 因为它造成了大量的混淆,Web开发者可以用 abbr 表示缩写。

  • applet 已经被废弃,object 是更好的选择。

  • isindex 可以被表单控制代替。

  • dir 已经被废弃,更赞同使用 ul

  • 最后,noscript 元素只符合HTML语法。XML语法不允许使用。这是因为,为了不仅要视觉上隐藏还要阻止内容运行脚本,应用样式,控制可提交的表单,加载资源等等,HTML解析器将 noscript 元素的内容作为纯文本解析。同样的做法在XML解析器中是不可能的。

    3.6 废弃的属性

    一些来自HTML4的属性在HTML中不再被允许使用。规范定义了用户代理应该如何在遗留文档里处理它们,但是它们并不是有效的,Web开发者绝不能再使用它们。

    HTML对你使用什么来代替它们有些建议

  • linkarevcharset 属性。

  • ashapecoords 属性。

  • iframelongdesc 属性。

  • linktarget 属性。

  • areanohref 属性。

  • headprofile 属性。

  • htmlversion 属性。

  • imgname 属性 (使用 id 替代)。

  • metascheme 属性。

  • objectarchive, classid, codebase, codetype, declarestandby 属性。

  • paramvaluetypetype 属性。

  • tdthaxis 属性。

  • tdabbrscope 属性。

  • tablesummary 属性。

  • formaccept 属性。

  • inputusemap 属性。

  • 此外,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, theadtralign 属性。

  • bodyalink, link, textvlink 属性。

  • bodybackground 属性。

  • table, tr, td, thbodybgcolor 属性。

  • objectborder 属性。

  • tablecellpaddingcellspacing 属性。

  • col, colgroup, tbody, td, tfoot, th, theadtrcharcharoff 属性。

  • brclear 属性。

  • dl, olulcompact 属性。

  • tableframe 属性。

  • iframeframeborder 属性。

  • tdthheight 属性。

  • imgobjecthspacevspace 属性。

  • iframemarginheightmarginwidth 属性。

  • hrnoshade 属性。

  • tdthnowrap 属性。

  • tablerules 属性。

  • iframescrolling 属性。

  • hrsize 属性。

  • li, 和 ultype 属性。

  • col, colgroup, tbody, td, tfoot, th, theadtrvalign 属性。

  • hr, table, td, th, col, colgroupprewidth 属性。

  • 下面这些属性允许使用,但是不鼓励Web开发者使用它们,而是强烈鼓励使用替代的解决方案:

  • imgborder 属性。如果存在其值必须是"0"。Web开发者可以使用CSS代替。

  • scriptlanguage 属性。如果存在其值必须是"JavaScript"(不区分大小写),并且不能与 type 属性冲突。作者可以简单地忽略它,因为它没什么作用。

  • aname 属性。Web开发者可以使用 id 属性代替。

  • 4 内容模型

    内容模型定义了元素如何被嵌套 — 允许什么作为容器元素的子元素(或后代元素)。

    总的来说,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有更多的类别,并且,一个元素可以不是任何类别的一部分,也可以是其中一个类别的一部分,或者几个类别的一部分。

  • 元数据内容(Metadata content),例如 link, script

  • 流内容(Flow content),例如 span, div, 文本。其大致像是HTML4的"块级"和"行内"一起。

  • 分片内容(Sectioning content),例如 aside, section

  • 标题内容(Heading content),例如 h1

  • 短语内容(Phrasing content),例如 span, img, 文本。其大致像是HTML4的"行内"。是短语内容的元素也是流元素。

  • 嵌入内容(Embedded content),例如 img, iframe, svg

  • 交互内容(Interactive content),例如 a, button, label。 交互内容不允许嵌套。

  • 作为一个相比HTML5的广泛的变化,HTML不再有任何只接受在HTML4中被称为"块级"元素的元素;例如,body 元素现在允许流内容,所以,相比HTML4严格模式,这更接近HTML4过渡模式。

    进一步的变化包括:

  • address 元素现在允许流内容,但是不含标题内容后代,不含分片内容后代,不含header, footer, 或 address 元素后代。

  • HTML4允许 head 中的 object。HTML不允许。

  • noscript 元素在HTML4中是"块级"元素,但在HTML中它是短语内容。

  • 在HTML中 table, thead, tbody, tfoot, tr, ol, uldl 元素允许为空。

  • 表元素必须符合 表模型(table model) (例如 两个单元格不允许重叠)。

  • table 元素现在不允许 col 元素作为直接子元素。不过,HTML解析器暗示存在 colgroup 元素,所以这个变更不会影响 text/html 内容。

  • table 元素现在允许 tfoot 元素成为最后的子元素。

  • caption 元素现在允许流内容,但不含后代 table 元素。

  • th 元素现在允许流内容,但不含 header, footer, 分片内容, 或标题内容后代。

  • a 元素现在有了一种透明(transparent)内容模型(除了它不能允许交互内容后代外),意味着它拥护和它父元素相同的内容模型。这意味着 a 元素可以包含例如 div 元素,只要它的父元素允许流内容。

  • insdel 元素也有透明内容模型。HTML4有类似的规则在那些无法在DTD中表达的文字里。

  • object 元素也有透明内容模型,在其 param 子元素之后。

  • map 元素也有透明内容模型。如果有一个 map 元素祖先,area 元素被认为是短语内容,这意味着它们不必作为 map 的直接子元素。

  • fieldset 元素不再必须有 legend 子元素。

  • 5 API

    HTML引入了许多新的API,并扩展,变更或废弃了一些现存的API。

    5.1 新API

    HTML引入了若干API来帮助创建Web应用。这些API可以和为了应用而被引入的新元素一起使用:

  • 媒体元素(videoaudio)有了控制回放,同步多媒体元素,和定时文本轨道的 API。(比如,字幕)。

  • 约束验证的 API(例如,setCustomValidity() 方法)。

  • 启用离线Web应用的 API,包括 应用缓存(application cache).

  • 允许Web应用来为某种协议或媒体类型注册自身的 API,使用 registerProtocolHandler()registerContentHandler()

  • 结合新的全局 contenteditable 属性使用的编辑 API。

  • 暴露文档URL组件并允许脚本导航,重定向和重新载入的 API (Location 接口)。

  • 暴露会话历史并允许脚本不用实际导航来更新文档URL,使得应用不必滥用 fragment 组件作"Ajax风格"导航的 API (History 接口)。

  • base64转换的 API (atob()btoa() 方法)。

  • 安排基于时间的定时器的回调的 API (setTimeout()setInterval())。

  • 提示用户的 API (alert(), confirm(), prompt())。

  • 打印文档的 API (print())。

  • 处理搜索提供方的 API (AddSearchProvider()IsSearchProviderInstalled())。

  • 定义了 Window, NavigatorExternal 接口。

  • 5.2 变更的API

    以下来自 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元素。

  • HTMLFormElementelements 现在返回一个 button, fieldset, input, keygen, object, output, selecttextarea 元素的 HTMLFormControlsCollectionlength 返回 elements 中的节点数。

  • HTMLSelectElementadd() 现在也接受一个整数作为其第二个参数

  • 如果参数超出范围,HTMLSelectElementremove() 现在移除集合里的第一个元素。

  • aarea 元素现在字符串它们的 href 属性。

  • click(), focus()blur() 方法现在在所有HTML元素上可用。

  • 5.3 Document扩展

    DOM Level 2 HTML 有一个 HTMLDocument 接口,其继承自 Document 并在文档上提供了HTML特定成员。 HTML 已经将这些成员移动到 Document 接口,并且在很多方面扩展了它。因为所有的文档都使用 Document 接口,HTML特定成员现在在所有文档上可用,所以它们在比如SVG文档中也一样可用。它也有几个新的成员:

  • location, lastModifiedreadyState 用来帮助资源元数据管理。

  • dir, head, embeds, plugins, scripts, 以及通用的名称 getter,用来访问DOM树的各个部分。

  • activeElementhasFocus 风别用来确定哪个元素是当前的焦点以及 Document 是否有焦点。

  • 编辑 API 的 designMode, execCommand(), queryCommandEnabled(), queryCommandIndeterm(), queryCommandState(), queryCommandSupported(), queryCommandValue()

  • 所有的事件处理IDL属性。同样的,onreadystatechange 是一个特殊的事件处理IDL属性,它只在 Document 上可用。

  • 现有的更改 HTMLDocument 的原型的脚本应该继续工作,因为 window.HTMLDocument 现在返回 Document 接口对象。

    5.4 HTMLElement 扩展

    HTMLElement 接口也获得了几个在HTML中的扩展:

  • translate, hidden, tabIndex, accessKey, contentEditable, spellcheckstyle 反映内容属性。

  • dataset 是一个处理 data-* 属性的方便的特性,其作为驼峰式大小写属性暴露。比如,elm.dataset.fooBar = 'test' 设置了 elmdata-foo-bar 内容属性。

  • click(), focus()blur() 允许脚本来模拟点击和移动焦点。

  • accessKeyLabel 给出了用户代理已经分配给元素的快捷键,Web开发者可以用 accesskey 属性来影响它。

  • isContentEditable 返回 true。

  • 所有的事件处理IDL属性。

  • 一些成员之前被定义在 HTMLElement 上但在DOM标准 ([DOM]) 中已经被移到 Element 接口。

  • id 反映 id 内容属性。

  • className 反映 class 内容属性。

  • classList 是一个方便的 className 访问器。其返回的对象暴露了用于控制元素类名的方法(contains(), add(), remove(), and toggle())

  • getElementsByClassName() 返回一个带有特定类名的元素的列表。

  • 5.5 其他接口扩展

    在DOM Level 2 HTML中的一些接口也作了扩展。

  • HTMLOptionsCollection 现在有了遗留调用(legacy caller),setter 创建器,以及成员 add(), remove()selectedIndex

  • HTMLLinkElementHTMLStyleElement 现在实现来自CSSOM的 LinkStyle 接口。[CSSOM]

  • HTMLFormElementcheckValidity() 方法 现在有了命名的 getter 和索引的 getter。

  • HTMLSelectElement 现在有了 getter, item()namedItem() 方法,setter 创建器, selectedOptionslabels IDL属性, 以及表单约束验证API的成员:willValidatevalidity, validationMessage, checkValidity(), reportValidity()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, searchParamshashHTMLLinkElementHTMLAreaElement 也有了 relList IDL属性。 HTMLAreaElement 也实现了 URLUtils 接口。

  • HTMLImageElement 现在有了一个构造器 Image,以及成员naturalWidth, naturalHeightcomplete

  • HTMLObjectElement 现在有了成员 contentWindow,表单约束验证API成员和遗留调用(legacy caller)。

  • HTMLMapElement 现在有了成员 images

  • HTMLTableElement 现在有了成员 createTBody()

  • HTMLIFrameElement 现在有了成员 contentWindow

  • 除了这些以外,在元素的接口上新内容属性大多也有对应的IDL属性,例如,HTMLLinkElement 上的 sizes IDL属性反映 sizes 内容属性。

    5.6 废弃的API

    一些API现在被全部移除了,或者被标记为废弃。

    所有反映本身是废弃的内容属性的IDL属性,现在也废弃;例如,HTMLBodyElement 上的反映废弃的 bgColor 内容属性的 bgcolor IDL属性现在是废弃的。

    因为元素被废弃以下接口被标记为废弃:HTMLAppletElement, HTMLFrameSetElement, HTMLFrameElement, HTMLDirectoryElementHTMLFontElement

    HTMLIsIndexElement 接口被全部移除了,因为HTML解析器扩展了一个 isindex 标签到其他元素。HTMLBaseFontElement 接口也被移除了因为元素没有效果。

    以下这些 HTMLDocument 接口(已经被移到 Document)的成员现在是废弃的:anchorsapplets

    致谢

    编者想要感谢: 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 O. 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, Robin Berjon, Steve Faulkner, Toby Inkster, Xaxio Brandish, Yngve Spjeld Landro and Zhong Yu 感谢他们为这份文档的贡献。同时也感谢所有多年为HTML做贡献让Web变得更好的人们。

    参考文献

    [CSSOM]
    CSS Object Model (CSSOM), Simon Pieters and Glenn Adams. W3C.
    [DOCTYPE]
    Activating Browser Modes with Doctype, Henri Sivonen.
    [DOM]
    DOM, Anne van Kesteren, Aryeh Gregor and Ms2ger. WHATWG.
    [DOM2HTML]
    Document Object Model (DOM) Level 2 HTML Specification, Johnny Stenback, Philippe Le Hégaret and Arnaud Le Hors. W3C.
    [HTML]
    HTML, Ian Hickson. WHATWG.
    [HTML4]
    HTML 4.01 Specification, Dave Raggett, Arnaud Le Hors and Ian Jacobs. W3C.
    [HTML5]
    HTML5, Ian Hickson, Robin Berjon, Steve Faulkner, Travis Leithead et al.. W3C.
    [HTML5NIGHTLY]
    HTML 5.1 Nightly, Robin Berjon, Steve Faulkner, Travis Leithead et al.. W3C.
    [XHTML1]
    XHTML? 1.1 - Module-based XHTML - Second Edition, Murray Altheim and Shane McCarron.
    [XML]
    Extensible Markup Language, Tim Bray, Jean Paoli, C. M. Sperberg-McQueen et al.. W3C.
    [XMLNS]
    Namespaces in XML, Tim Bray, Dave Hollander, Andrew Layman et al.. W3C.

    订正感谢

    1. 感谢呂康豪提供专有名词“书名号”的校订。

    2. 感谢一丝指出翻译文案错位

    旧译版本

  • 与HTML4 的差异 - W3C 工作草案 2013年5月28日
  • HTML5 相对于 HTML4 的差异 - W3C 工作草案 2011年5月25日
  • 译者致谢

  • 感谢 ATA 的 Neil Yao,给了我第一份工作。

  • 感谢我曾经所在团队:阿里巴巴 AliExpress UED 的每一位。

  • 感谢 Ctrip International Website Department 收留我。