[ac] (0) Try to clarify some confusion.
[whatwg:webapps.git] / index
1 <!DOCTYPE html><html lang=en-US-x-hixie><title>HTML Standard</title><script>
2    var loadTimer = new Date();
3    var current_revision = "r" + "$Revision$".substr(11);
4    current_revision = current_revision.substr(0, current_revision.length - 2);
5    var last_known_revision = current_revision;
6    function getCookie(name) {
7      var params = location.search.substr(1).split("&");
8      for (var index = 0; index < params.length; index++) {
9        if (params[index] == name)
10          return "1";
11        var data = params[index].split("=");
12        if (data[0] == name)
13          return unescape(data[1]);
14      }
15      var cookies = document.cookie.split("; ");
16      for (var index = 0; index < cookies.length; index++) {
17        var data = cookies[index].split("=");
18        if (data[0] == name)
19          return unescape(data[1]);
20      }
21      return null;
22    }
23    var currentAlert;
24    var currentAlertTimeout;
25    function showAlert(s, href) {
26      if (!currentAlert) {
27        currentAlert = document.createElement('div');
28        currentAlert.id = 'alert';
29        var x = document.createElement('button');
30        x.textContent = '\u2573';
31        x.onclick = closeAlert2;
32        currentAlert.appendChild(x);
33        currentAlert.appendChild(document.createElement('span'));
34        currentAlert.onmousemove = function () {
35          clearTimeout(currentAlertTimeout);
36          currentAlert.className = '';
37          currentAlertTimeout = setTimeout(closeAlert, 10000);
38        }
39        document.body.appendChild(currentAlert);
40      } else {
41        clearTimeout(currentAlertTimeout);
42        currentAlert.className = '';
43      }
44      currentAlert.lastChild.textContent = s + ' ';
45      if (href) {
46        var link = document.createElement('a');
47        link.href = href;
48        link.textContent = href;
49        currentAlert.lastChild.appendChild(link);
50      }
51      currentAlertTimeout = setTimeout(closeAlert, 10000);
52    }
53    function closeAlert() {
54      clearTimeout(currentAlertTimeout);
55      if (currentAlert) {
56        currentAlert.className = 'closed';
57        currentAlertTimeout = setTimeout(closeAlert2, 3000);
58      }
59    }
60    function closeAlert2() {
61      clearTimeout(currentAlertTimeout);
62      if (currentAlert) {
63        currentAlert.parentNode.removeChild(currentAlert);
64        currentAlert = null;
65      }
66    }
67    window.addEventListener('keydown', function (event) {
68      if (event.keyCode == 27) {
69        if (currentAlert)
70          closeAlert2();
71      } else {
72        closeAlert();
73      }
74    }, false);
75    window.addEventListener('scroll', function (event) {
76      closeAlert();
77    }, false);
78    function load(script) {
79      var e = document.createElement('script');
80      e.setAttribute('src', 'http://www.whatwg.org/specs/web-apps/current-work/' + script);
81      document.body.appendChild(e);
82    }
83   </script><link href=http://www.whatwg.org/style/specification rel=stylesheet><link href=http://www.whatwg.org/images/icon rel=icon><style>
84    .proposal { border: blue solid; padding: 1em; }
85    .bad, .bad *:not(.XXX) { color: gray; border-color: gray; background: transparent; }
86    #updatesStatus { display: none; }
87    #updatesStatus.relevant { display: block; position: fixed; right: 1em; top: 1em; padding: 0.5em; font: bold small sans-serif; min-width: 25em; width: 30%; max-width: 40em; height: auto; border: ridge 4px gray; background: #EEEEEE; color: black; }
88    div.head .logo { width: 11em; margin-bottom: 20em; }
89    #configUI { position: absolute; z-index: 20; top: 10em; right: 0; width: 11em; padding: 0 0.5em 0 0.5em; font-size: small; background: gray; background: rgba(32,32,32,0.9); color: white; border-radius: 1em 0 0 1em; -moz-border-radius: 1em 0 0 1em; }
90    #configUI p { margin: 0.75em 0; padding: 0.3em; }
91    #configUI p label { display: block; }
92    #configUI #updateUI, #configUI .loginUI { text-align: center; }
93    #configUI input[type=button] { display: block; margin: auto; }
94    #configUI :link, #configUI :visited { color: white; }
95    #configUI :link:hover, #configUI :visited:hover { background: transparent; }
96    #reviewer { position: fixed; bottom: 0; right: 0; padding: 0.15em 0.25em 0em 0.5em; white-space: nowrap; overflow: hidden; z-index: 30; background: gray; background: rgba(32,32,32,0.9); color: white; border-radius: 1em 0 0 0; -moz-border-radius: 1em 0 0 0; max-width: 90%; }
97    #reviewer input { max-width: 50%; }
98    #reviewer * { font-size: small; }
99    #reviewer.off > :not(:first-child) { display: none; }
100    #alert { position: fixed; top: 20%; left: 20%; right: 20%; font-size: 2em; padding: 0.5em; z-index: 40; background: gray; background: rgba(32,32,32,0.9); color: white; border-radius: 1em; -moz-border-radius: 1em; -webkit-transition: opacity 1s linear; }
101    #alert.closed { opacity: 0; }
102    #alert button { position: absolute; top: -1em; right: 2em; border-radius: 1em 1em 0 0; border: none; line-height: 0.9; color: white; background: rgb(64,64,64); font-size: 0.6em; font-weight: 900; cursor: pointer; }
103    #alert :link, #alert :visited { color: white; }
104    #alert :link:hover, #alert :visited:hover { background: transparent; }
105    @media print { #configUI { display: none; } }
106    .rfc2119 { font-variant: small-caps; text-shadow: 0 0 0.5em yellow; position: static; }
107    .rfc2119::after { position: absolute; left: 0; width: 25px; text-align: center; color: yellow; text-shadow: 0.075em 0.075em 0.2em black; }
108    .rfc2119.m\ust::after { content: '\2605'; }
109    .rfc2119.s\hould::after { content: '\2606'; }
110    [hidden] { display: none; }
111   </style><style type=text/css>
112
113    .fingerprint { float: right; }
114
115    .applies thead th > * { display: block; }
116    .applies thead code { display: block; }
117    .applies td { text-align: center; }
118    .applies .yes { background: yellow; }
119
120    .matrix, .matrix td { border: hidden; text-align: right; }
121    .matrix { margin-left: 2em; }
122
123    .vertical-summary-table tr > th[rowspan="2"]:first-child + th,
124    .vertical-summary-table tr > td[rowspan="2"]:first-child + td { border-bottom: hidden; }
125
126    .dice-example { border-collapse: collapse; border-style: hidden solid solid hidden; border-width: thin; margin-left: 3em; }
127    .dice-example caption { width: 30em; font-size: smaller; font-style: italic; padding: 0.75em 0; text-align: left; }
128    .dice-example td, .dice-example th { border: solid thin; width: 1.35em; height: 1.05em; text-align: center; padding: 0; }
129
130    td.eg { border-width: thin; text-align: center; }
131
132    #table-example-1 { border: solid thin; border-collapse: collapse; margin-left: 3em; }
133    #table-example-1 * { font-family: "Essays1743", serif; line-height: 1.01em; }
134    #table-example-1 caption { padding-bottom: 0.5em; }
135    #table-example-1 thead, #table-example-1 tbody { border: none; }
136    #table-example-1 th, #table-example-1 td { border: solid thin; }
137    #table-example-1 th { font-weight: normal; }
138    #table-example-1 td { border-style: none solid; vertical-align: top; }
139    #table-example-1 th { padding: 0.5em; vertical-align: middle; text-align: center; }
140    #table-example-1 tbody tr:first-child td { padding-top: 0.5em; }
141    #table-example-1 tbody tr:last-child td { padding-bottom: 1.5em; }
142    #table-example-1 tbody td:first-child { padding-left: 2.5em; padding-right: 0; width: 9em; }
143    #table-example-1 tbody td:first-child::after { content: leader(". "); }
144    #table-example-1 tbody td { padding-left: 2em; padding-right: 2em; }
145    #table-example-1 tbody td:first-child + td { width: 10em; }
146    #table-example-1 tbody td:first-child + td ~ td { width: 2.5em; }
147    #table-example-1 tbody td:first-child + td + td + td ~ td { width: 1.25em; }
148
149    .apple-table-examples { border: none; border-collapse: separate; border-spacing: 1.5em 0em; width: 40em; margin-left: 3em; }
150    .apple-table-examples * { font-family: "Times", serif; }
151    .apple-table-examples td, .apple-table-examples th { border: none; white-space: nowrap; padding-top: 0; padding-bottom: 0; }
152    .apple-table-examples tbody th:first-child { border-left: none; width: 100%; }
153    .apple-table-examples thead th:first-child ~ th { font-size: smaller; font-weight: bolder; border-bottom: solid 2px; text-align: center; }
154    .apple-table-examples tbody th::after, .apple-table-examples tfoot th::after { content: leader(". ") }
155    .apple-table-examples tbody th, .apple-table-examples tfoot th { font: inherit; text-align: left; }
156    .apple-table-examples td { text-align: right; vertical-align: top; }
157    .apple-table-examples.e1 tbody tr:last-child td { border-bottom: solid 1px; }
158    .apple-table-examples.e1 tbody + tbody tr:last-child td { border-bottom: double 3px; }
159    .apple-table-examples.e2 th[scope=row] { padding-left: 1em; }
160    .apple-table-examples sup { line-height: 0; }
161
162    .three-column-nowrap tr > td:first-child,
163    .three-column-nowrap tr > td:first-child + td,
164    .three-column-nowrap tr > td:first-child + td + td { white-space: nowrap; }
165
166    .details-example img { vertical-align: top; }
167
168    #base64-table {
169      white-space: nowrap;
170      font-size: 0.6em;
171      column-width: 6em;
172      column-count: 5;
173      column-gap: 1em;
174      -moz-column-width: 6em;
175      -moz-column-count: 5;
176      -moz-column-gap: 1em;
177      -webkit-column-width: 6em;
178      -webkit-column-count: 5;
179      -webkit-column-gap: 1em;
180    }
181    #base64-table thead { display: none; }
182    #base64-table * { border: none; }
183    #base64-table tbody td:first-child:after { content: ':'; }
184    #base64-table tbody td:last-child { text-align: right; }
185
186    #named-character-references-table {
187      white-space: nowrap;
188      font-size: 0.6em;
189      column-width: 30em;
190      column-gap: 1em;
191      -moz-column-width: 30em;
192      -moz-column-gap: 1em;
193      -webkit-column-width: 30em;
194      -webkit-column-gap: 1em;
195    }
196    #named-character-references-table > table > tbody > tr > td:first-child + td,
197    #named-character-references-table > table > tbody > tr > td:last-child { text-align: center; }
198    #named-character-references-table > table > tbody > tr > td:last-child:hover > span { position: absolute; top: auto; left: auto; margin-left: 0.5em; line-height: 1.2; font-size: 5em; border: outset; padding: 0.25em 0.5em; background: white; width: 1.25em; height: auto; text-align: center; }
199    #named-character-references-table > table > tbody > tr#entity-CounterClockwiseContourIntegral > td:first-child { font-size: 0.5em; }
200
201    .glyph.control { color: red; }
202
203    @font-face {
204      font-family: 'Essays1743';
205      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743.ttf');
206    }
207    @font-face {
208      font-family: 'Essays1743';
209      font-weight: bold;
210      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Bold.ttf');
211    }
212    @font-face {
213      font-family: 'Essays1743';
214      font-style: italic;
215      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Italic.ttf');
216    }
217    @font-face {
218      font-family: 'Essays1743';
219      font-style: italic;
220      font-weight: bold;
221      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-BoldItalic.ttf');
222    }
223
224   </style><link href=data:text/css, rel=stylesheet title=Normal><link href=data:text/css,.impl%20{%20background:%20pink;%20} rel="stylesheet alternate" title="Highlight implementation-only prose"><link href=status.css rel=stylesheet><script>
225    var startedInit = 0;
226    function init() {
227      startedInit = 1;
228      if (location.search == '?slow-browser')
229        return;
230      var configUI = document.createElement('div');
231      configUI.id = 'configUI';
232      document.body.appendChild(configUI);
233      load('reviewer.js');
234      if (document.documentElement.className == "" || document.documentElement.className == "split index")
235        load('toc.js');
236      load('updater.js');
237      load('dfn.js');
238      load('status.js');
239      if (getCookie('profile') == '1')
240        document.getElementsByTagName('h2')[0].textContent += '; load: ' + (new Date() - loadTimer) + 'ms';
241    }
242    if (document.documentElement.className == "")
243      setTimeout(function () {
244        if (!startedInit)
245          showAlert("Too slow? Try reading the multipage copy of the spec instead:", "http://whatwg.org/html");
246      }, 6000);
247
248    window.addEventListener('keypress', function (event) {
249      if ((event.which == 114) && (event.metaKey)) {
250        if (!confirm('Are you sure you want to reload this page?'))
251          event.preventDefault();
252      }
253    }, false);
254
255   </script><body onload=init()>
256
257   <header class=head id=head><p><a class=logo href=http://www.whatwg.org/><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
258    <hgroup><h1 class=allcaps>HTML</h1>
259     <h2 class="no-num no-toc">Living Standard &mdash; Last Updated 28 May 2013</h2>
260    </hgroup><dl><dt><strong>Web developer edition:</strong></dt>
261     <dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
262     <dt>Multiple-page version:</dt>
263     <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/multipage/>http://whatwg.org/html</a></dd>
264     <dt>One-page version:</dt>
265     <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/>http://whatwg.org/c</a></dd>
266     <dt>Participate:</dt>
267     <dd><a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
268     <dd><a href=http://forums.whatwg.org/>http://forums.whatwg.org/</a></dd>
269     <dd><a href=http://wiki.whatwg.org/wiki/IRC>IRC: #whatwg on Freenode</a></dd>
270     <dt>FAQ:</dt>
271     <dd><a href=http://wiki.whatwg.org/wiki/FAQ>http://wiki.whatwg.org/wiki/FAQ</a></dd>
272     <dt>Version history:</dt>
273     <dd>Twitter updates: <a href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></dd>
274     <dd>Commit-Watchers mailing list: <a href=http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org>http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a></dd>
275     <dd>Interactive Web interface: <a href=http://html5.org/tools/web-apps-tracker>http://html5.org/tools/web-apps-tracker</a></dd>
276     <dd>Subversion interface: <a href=http://svn.whatwg.org/>http://svn.whatwg.org/</a></dd>
277     <dt>Issues:</dt>
278     <dd>To view the open bugs: <a href="https://www.w3.org/Bugs/Public/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=WHATWG&amp;component=HTML&amp;longdesc_type=allwordssubstr&amp;longdesc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailtype1=substring&amp;email1=&amp;emailtype2=substring&amp;email2=&amp;bug_id_type=anyexact&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">HTML bug list</a></dd>
279     <dd>To file bugs, use the "submit review comments" feature at the bottom of the window</dd>
280     <dd>To send feedback by e-mail: <a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
281     <dd>To view and vote on e-mail feedback: <a href=http://www.whatwg.org/issues/>http://www.whatwg.org/issues/</a></dd>
282     <dt>Editor:</dt>
283     <dd>Ian Hickson, Google, ian@hixie.ch</dd>
284    </dl><p class=copyright>&copy; Copyright 2004-2011 Apple Computer, Inc.,
285    Mozilla Foundation, and Opera Software ASA.</p>
286    <p class=copyright>You are granted a license to use, reproduce
287    and create derivative works of this document.</p>
288   </header><hr><h2 class="no-num no-toc" id=contents>Table of contents</h2>
289   
290 <!--begin-toc-->
291 <ol class=toc>
292  <li><a href=#introduction><span class=secno>1 </span>Introduction</a>
293   <ol>
294    <li><a href=#abstract><span class=secno>1.1 </span>Where does this specification fit?</a></li>
295    <li><a href=#is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</a></li>
296    <li><a href=#background><span class=secno>1.3 </span>Background</a></li>
297    <li><a href=#audience><span class=secno>1.4 </span>Audience</a></li>
298    <li><a href=#scope><span class=secno>1.5 </span>Scope</a></li>
299    <li><a href=#history-1><span class=secno>1.6 </span>History</a></li>
300    <li><a href=#design-notes><span class=secno>1.7 </span>Design notes</a>
301     <ol>
302      <li><a href=#serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</a></li>
303      <li><a href=#compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</a></ol></li>
304    <li><a href=#html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</a></li>
305    <li><a href=#structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</a>
306     <ol>
307      <li><a href=#how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</a></li>
308      <li><a href=#typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</a></ol></li>
309    <li><a href=#fingerprint><span class=secno>1.10 </span>Privacy concerns</a></li>
310    <li><a href=#a-quick-introduction-to-html><span class=secno>1.11 </span>A quick introduction to HTML</a>
311     <ol>
312      <li><a href=#writing-secure-applications-with-html><span class=secno>1.11.1 </span>Writing secure applications with HTML</a></li>
313      <li><a href=#common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.11.2 </span>Common pitfalls to avoid when using the scripting APIs</a></ol></li>
314    <li><a href=#conformance-requirements-for-authors><span class=secno>1.12 </span>Conformance requirements for authors</a>
315     <ol>
316      <li><a href=#presentational-markup><span class=secno>1.12.1 </span>Presentational markup</a></li>
317      <li><a href=#syntax-errors><span class=secno>1.12.2 </span>Syntax errors</a></li>
318      <li><a href=#restrictions-on-content-models-and-on-attribute-values><span class=secno>1.12.3 </span>Restrictions on content models and on attribute values</a></ol></li>
319    <li><a href=#suggested-reading><span class=secno>1.13 </span>Suggested reading</a></ol></li>
320  <li><a href=#infrastructure><span class=secno>2 </span>Common infrastructure</a>
321   <ol>
322    <li><a href=#terminology><span class=secno>2.1 </span>Terminology</a>
323     <ol>
324      <li><a href=#resources><span class=secno>2.1.1 </span>Resources</a></li>
325      <li><a href=#xml><span class=secno>2.1.2 </span>XML</a></li>
326      <li><a href=#dom-trees><span class=secno>2.1.3 </span>DOM trees</a></li>
327      <li><a href=#scripting-0><span class=secno>2.1.4 </span>Scripting</a></li>
328      <li><a href=#plugins><span class=secno>2.1.5 </span>Plugins</a></li>
329      <li><a href=#encoding-terminology><span class=secno>2.1.6 </span>Character encodings</a></ol></li>
330    <li><a href=#conformance-requirements><span class=secno>2.2 </span>Conformance requirements</a>
331     <ol>
332      <li><a href=#conformance-classes><span class=secno>2.2.1 </span>Conformance classes</a></li>
333      <li><a href=#dependencies><span class=secno>2.2.2 </span>Dependencies</a></li>
334      <li><a href=#extensibility><span class=secno>2.2.3 </span>Extensibility</a></ol></li>
335    <li><a href=#case-sensitivity-and-string-comparison><span class=secno>2.3 </span>Case-sensitivity and string comparison</a></li>
336    <li><a href=#common-microsyntaxes><span class=secno>2.4 </span>Common microsyntaxes</a>
337     <ol>
338      <li><a href=#common-parser-idioms><span class=secno>2.4.1 </span>Common parser idioms</a></li>
339      <li><a href=#boolean-attributes><span class=secno>2.4.2 </span>Boolean attributes</a></li>
340      <li><a href=#keywords-and-enumerated-attributes><span class=secno>2.4.3 </span>Keywords and enumerated attributes</a></li>
341      <li><a href=#numbers><span class=secno>2.4.4 </span>Numbers</a>
342       <ol>
343        <li><a href=#signed-integers><span class=secno>2.4.4.1 </span>Signed integers</a></li>
344        <li><a href=#non-negative-integers><span class=secno>2.4.4.2 </span>Non-negative integers</a></li>
345        <li><a href=#floating-point-numbers><span class=secno>2.4.4.3 </span>Floating-point numbers</a></li>
346        <li><a href=#percentages-and-dimensions><span class=secno>2.4.4.4 </span>Percentages and lengths</a></li>
347        <li><a href=#lists-of-integers><span class=secno>2.4.4.5 </span>Lists of integers</a></li>
348        <li><a href=#lists-of-dimensions><span class=secno>2.4.4.6 </span>Lists of dimensions</a></ol></li>
349      <li><a href=#dates-and-times><span class=secno>2.4.5 </span>Dates and times</a>
350       <ol>
351        <li><a href=#months><span class=secno>2.4.5.1 </span>Months</a></li>
352        <li><a href=#dates><span class=secno>2.4.5.2 </span>Dates</a></li>
353        <li><a href=#yearless-dates><span class=secno>2.4.5.3 </span>Yearless dates</a></li>
354        <li><a href=#times><span class=secno>2.4.5.4 </span>Times</a></li>
355        <li><a href=#local-dates-and-times><span class=secno>2.4.5.5 </span>Local dates and times</a></li>
356        <li><a href=#time-zones><span class=secno>2.4.5.6 </span>Time zones</a></li>
357        <li><a href=#global-dates-and-times><span class=secno>2.4.5.7 </span>Global dates and times</a></li>
358        <li><a href=#weeks><span class=secno>2.4.5.8 </span>Weeks</a></li>
359        <li><a href=#durations><span class=secno>2.4.5.9 </span>Durations</a></li>
360        <li><a href=#vaguer-moments-in-time><span class=secno>2.4.5.10 </span>Vaguer moments in time</a></ol></li>
361      <li><a href=#colors><span class=secno>2.4.6 </span>Colors</a></li>
362      <li><a href=#space-separated-tokens><span class=secno>2.4.7 </span>Space-separated tokens</a></li>
363      <li><a href=#comma-separated-tokens><span class=secno>2.4.8 </span>Comma-separated tokens</a></li>
364      <li><a href=#syntax-references><span class=secno>2.4.9 </span>References</a></li>
365      <li><a href=#mq><span class=secno>2.4.10 </span>Media queries</a></ol></li>
366    <li><a href=#urls><span class=secno>2.5 </span>URLs</a>
367     <ol>
368      <li><a href=#terminology-0><span class=secno>2.5.1 </span>Terminology</a></li>
369      <li><a href=#resolving-urls><span class=secno>2.5.2 </span>Resolving URLs</a></li>
370      <li><a href=#dynamic-changes-to-base-urls><span class=secno>2.5.3 </span>Dynamic changes to base URLs</a></ol></li>
371    <li><a href=#fetching-resources><span class=secno>2.6 </span>Fetching resources</a>
372     <ol>
373      <li><a href=#terminology-1><span class=secno>2.6.1 </span>Terminology</a></li>
374      <li><a href=#processing-model><span class=secno>2.6.2 </span>Processing model</a></li>
375      <li><a href=#encrypted-http-and-related-security-concerns><span class=secno>2.6.3 </span>Encrypted HTTP and related security concerns</a></li>
376      <li><a href=#content-type-sniffing><span class=secno>2.6.4 </span>Determining the type of a resource</a></li>
377      <li><a href=#extracting-character-encodings-from-meta-elements><span class=secno>2.6.5 </span>Extracting character encodings from <code>meta</code> elements</a></li>
378      <li><a href=#cors-settings-attributes><span class=secno>2.6.6 </span>CORS settings attributes</a></li>
379      <li><a href=#cors-enabled-fetch><span class=secno>2.6.7 </span>CORS-enabled fetch</a></ol></li>
380    <li><a href=#common-dom-interfaces><span class=secno>2.7 </span>Common DOM interfaces</a>
381     <ol>
382      <li><a href=#reflecting-content-attributes-in-idl-attributes><span class=secno>2.7.1 </span>Reflecting content attributes in IDL attributes</a></li>
383      <li><a href=#collections-0><span class=secno>2.7.2 </span>Collections</a>
384       <ol>
385        <li><a href=#htmlallcollection-0><span class=secno>2.7.2.1 </span>HTMLAllCollection</a></li>
386        <li><a href=#htmlformcontrolscollection-0><span class=secno>2.7.2.2 </span>HTMLFormControlsCollection</a></li>
387        <li><a href=#htmloptionscollection-0><span class=secno>2.7.2.3 </span>HTMLOptionsCollection</a></li>
388        <li><a href=#htmlpropertiescollection-0><span class=secno>2.7.2.4 </span>HTMLPropertiesCollection</a></ol></li>
389      <li><a href=#domstringmap-0><span class=secno>2.7.3 </span>DOMStringMap</a></li>
390      <li><a href=#domelementmap-0><span class=secno>2.7.4 </span>DOMElementMap</a></li>
391      <li><a href=#transferable-objects><span class=secno>2.7.5 </span>Transferable objects</a></li>
392      <li><a href=#safe-passing-of-structured-data><span class=secno>2.7.6 </span>Safe passing of structured data</a></li>
393      <li><a href=#callbacks><span class=secno>2.7.7 </span>Callbacks</a></li>
394      <li><a href=#garbage-collection><span class=secno>2.7.8 </span>Garbage collection</a></ol></li>
395    <li><a href=#namespaces><span class=secno>2.8 </span>Namespaces</a></ol></li>
396  <li><a href=#dom><span class=secno>3 </span>Semantics, structure, and APIs of HTML documents</a>
397   <ol>
398    <li><a href=#documents><span class=secno>3.1 </span>Documents</a>
399     <ol>
400      <li><a href=#the-document-object><span class=secno>3.1.1 </span>The <code>Document</code> object</a></li>
401      <li><a href=#security-document><span class=secno>3.1.2 </span>Security</a></li>
402      <li><a href=#resource-metadata-management><span class=secno>3.1.3 </span>Resource metadata management</a></li>
403      <li><a href=#dom-tree-accessors><span class=secno>3.1.4 </span>DOM tree accessors</a></li>
404      <li><a href=#loading-xml-documents><span class=secno>3.1.5 </span>Loading XML documents</a></ol></li>
405    <li><a href=#elements><span class=secno>3.2 </span>Elements</a>
406     <ol>
407      <li><a href=#semantics-0><span class=secno>3.2.1 </span>Semantics</a></li>
408      <li><a href=#elements-in-the-dom><span class=secno>3.2.2 </span>Elements in the DOM</a></li>
409      <li><a href=#global-attributes><span class=secno>3.2.3 </span>Global attributes</a>
410       <ol>
411        <li><a href=#the-id-attribute><span class=secno>3.2.3.1 </span>The <code>id</code> attribute</a></li>
412        <li><a href=#the-title-attribute><span class=secno>3.2.3.2 </span>The <code title=attr-title>title</code> attribute</a></li>
413        <li><a href=#the-lang-and-xml:lang-attributes><span class=secno>3.2.3.3 </span>The <code title=attr-lang>lang</code> and <code title=attr-xml-lang>xml:lang</code> attributes</a></li>
414        <li><a href=#the-translate-attribute><span class=secno>3.2.3.4 </span>The <code title=attr-translate>translate</code> attribute</a></li>
415        <li><a href=#the-xml:base-attribute-(xml-only)><span class=secno>3.2.3.5 </span>The <code>xml:base</code> attribute (XML only)</a></li>
416        <li><a href=#the-dir-attribute><span class=secno>3.2.3.6 </span>The <code>dir</code> attribute</a></li>
417        <li><a href=#classes><span class=secno>3.2.3.7 </span>The <code>class</code> attribute</a></li>
418        <li><a href=#the-style-attribute><span class=secno>3.2.3.8 </span>The <code>style</code> attribute</a></li>
419        <li><a href=#embedding-custom-non-visible-data-with-the-data-*-attributes><span class=secno>3.2.3.9 </span>Embedding custom non-visible data with the <code title=attr-data-*>data-*</code> attributes</a></ol></li>
420      <li><a href=#element-definitions><span class=secno>3.2.4 </span>Element definitions</a>
421       <ol>
422        <li><a href=#attributes><span class=secno>3.2.4.1 </span>Attributes</a></ol></li>
423      <li><a href=#content-models><span class=secno>3.2.5 </span>Content models</a>
424       <ol>
425        <li><a href=#kinds-of-content><span class=secno>3.2.5.1 </span>Kinds of content</a>
426         <ol>
427          <li><a href=#metadata-content-0><span class=secno>3.2.5.1.1 </span>Metadata content</a></li>
428          <li><a href=#flow-content-0><span class=secno>3.2.5.1.2 </span>Flow content</a></li>
429          <li><a href=#sectioning-content-0><span class=secno>3.2.5.1.3 </span>Sectioning content</a></li>
430          <li><a href=#heading-content-0><span class=secno>3.2.5.1.4 </span>Heading content</a></li>
431          <li><a href=#phrasing-content-0><span class=secno>3.2.5.1.5 </span>Phrasing content</a></li>
432          <li><a href=#embedded-content-0><span class=secno>3.2.5.1.6 </span>Embedded content</a></li>
433          <li><a href=#interactive-content-0><span class=secno>3.2.5.1.7 </span>Interactive content</a></li>
434          <li><a href=#palpable-content-0><span class=secno>3.2.5.1.8 </span>Palpable content</a></ol></li>
435        <li><a href=#transparent-content-models><span class=secno>3.2.5.2 </span>Transparent content models</a></li>
436        <li><a href=#paragraphs><span class=secno>3.2.5.3 </span>Paragraphs</a></ol></li>
437      <li><a href=#requirements-relating-to-bidirectional-algorithm-formatting-characters><span class=secno>3.2.6 </span>Requirements relating to bidirectional-algorithm formatting characters</a></li>
438      <li><a href=#wai-aria><span class=secno>3.2.7 </span>WAI-ARIA</a></ol></li>
439    <li><a href=#interactions-with-xpath-and-xslt><span class=secno>3.3 </span>Interactions with XPath and XSLT</a></li>
440    <li><a href=#dynamic-markup-insertion><span class=secno>3.4 </span>Dynamic markup insertion</a>
441     <ol>
442      <li><a href=#opening-the-input-stream><span class=secno>3.4.1 </span>Opening the input stream</a></li>
443      <li><a href=#closing-the-input-stream><span class=secno>3.4.2 </span>Closing the input stream</a></li>
444      <li><a href=#document.write()><span class=secno>3.4.3 </span><code title=dom-document-write>document.write()</code></a></li>
445      <li><a href=#document.writeln()><span class=secno>3.4.4 </span><code title=dom-document-writeln>document.writeln()</code></a></ol></ol></li>
446  <li><a href=#semantics><span class=secno>4 </span>The elements of HTML</a>
447   <ol>
448    <li><a href=#the-root-element><span class=secno>4.1 </span>The root element</a>
449     <ol>
450      <li><a href=#the-html-element><span class=secno>4.1.1 </span>The <code>html</code> element</a></ol></li>
451    <li><a href=#document-metadata><span class=secno>4.2 </span>Document metadata</a>
452     <ol>
453      <li><a href=#the-head-element><span class=secno>4.2.1 </span>The <code>head</code> element</a></li>
454      <li><a href=#the-title-element><span class=secno>4.2.2 </span>The <code>title</code> element</a></li>
455      <li><a href=#the-base-element><span class=secno>4.2.3 </span>The <code>base</code> element</a></li>
456      <li><a href=#the-link-element><span class=secno>4.2.4 </span>The <code>link</code> element</a></li>
457      <li><a href=#the-meta-element><span class=secno>4.2.5 </span>The <code>meta</code> element</a>
458       <ol>
459        <li><a href=#standard-metadata-names><span class=secno>4.2.5.1 </span>Standard metadata names</a></li>
460        <li><a href=#other-metadata-names><span class=secno>4.2.5.2 </span>Other metadata names</a></li>
461        <li><a href=#pragma-directives><span class=secno>4.2.5.3 </span>Pragma directives</a></li>
462        <li><a href=#other-pragma-directives><span class=secno>4.2.5.4 </span>Other pragma directives</a></li>
463        <li><a href=#charset><span class=secno>4.2.5.5 </span>Specifying the document's character encoding</a></ol></li>
464      <li><a href=#the-style-element><span class=secno>4.2.6 </span>The <code>style</code> element</a></li>
465      <li><a href=#styling><span class=secno>4.2.7 </span>Styling</a></ol></li>
466    <li><a href=#scripting-1><span class=secno>4.3 </span>Scripting</a>
467     <ol>
468      <li><a href=#the-script-element><span class=secno>4.3.1 </span>The <code>script</code> element</a>
469       <ol>
470        <li><a href=#scriptingLanguages><span class=secno>4.3.1.1 </span>Scripting languages</a></li>
471        <li><a href=#restrictions-for-contents-of-script-elements><span class=secno>4.3.1.2 </span>Restrictions for contents of <code>script</code> elements</a></li>
472        <li><a href=#inline-documentation-for-external-scripts><span class=secno>4.3.1.3 </span>Inline documentation for external scripts</a></li>
473        <li><a href=#scriptTagXSLT><span class=secno>4.3.1.4 </span>Interaction of <code>script</code> elements and XSLT</a></ol></li>
474      <li><a href=#the-noscript-element><span class=secno>4.3.2 </span>The <code>noscript</code> element</a></ol></li>
475    <li><a href=#sections><span class=secno>4.4 </span>Sections</a>
476     <ol>
477      <li><a href=#the-body-element><span class=secno>4.4.1 </span>The <code>body</code> element</a></li>
478      <li><a href=#the-article-element><span class=secno>4.4.2 </span>The <code>article</code> element</a></li>
479      <li><a href=#the-section-element><span class=secno>4.4.3 </span>The <code>section</code> element</a></li>
480      <li><a href=#the-nav-element><span class=secno>4.4.4 </span>The <code>nav</code> element</a></li>
481      <li><a href=#the-aside-element><span class=secno>4.4.5 </span>The <code>aside</code> element</a></li>
482      <li><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements><span class=secno>4.4.6 </span>The <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code>, and <code>h6</code> elements</a></li>
483      <li><a href=#the-hgroup-element><span class=secno>4.4.7 </span>The <code>hgroup</code> element</a></li>
484      <li><a href=#the-header-element><span class=secno>4.4.8 </span>The <code>header</code> element</a></li>
485      <li><a href=#the-footer-element><span class=secno>4.4.9 </span>The <code>footer</code> element</a></li>
486      <li><a href=#the-address-element><span class=secno>4.4.10 </span>The <code>address</code> element</a></li>
487      <li><a href=#headings-and-sections><span class=secno>4.4.11 </span>Headings and sections</a>
488       <ol>
489        <li><a href=#outlines><span class=secno>4.4.11.1 </span>Creating an outline</a></li>
490        <li><a href=#sample-outlines><span class=secno>4.4.11.2 </span>Sample outlines</a></ol></li>
491      <li><a href=#usage-summary-0><span class=secno>4.4.12 </span>Usage summary</a>
492       <ol>
493        <li><a href=#article-or-section?><span class=secno>4.4.12.1 </span>Article or section?</a></ol></ol></li>
494    <li><a href=#grouping-content><span class=secno>4.5 </span>Grouping content</a>
495     <ol>
496      <li><a href=#the-p-element><span class=secno>4.5.1 </span>The <code>p</code> element</a></li>
497      <li><a href=#the-hr-element><span class=secno>4.5.2 </span>The <code>hr</code> element</a></li>
498      <li><a href=#the-pre-element><span class=secno>4.5.3 </span>The <code>pre</code> element</a></li>
499      <li><a href=#the-blockquote-element><span class=secno>4.5.4 </span>The <code>blockquote</code> element</a></li>
500      <li><a href=#the-ol-element><span class=secno>4.5.5 </span>The <code>ol</code> element</a></li>
501      <li><a href=#the-ul-element><span class=secno>4.5.6 </span>The <code>ul</code> element</a></li>
502      <li><a href=#the-li-element><span class=secno>4.5.7 </span>The <code>li</code> element</a></li>
503      <li><a href=#the-dl-element><span class=secno>4.5.8 </span>The <code>dl</code> element</a></li>
504      <li><a href=#the-dt-element><span class=secno>4.5.9 </span>The <code>dt</code> element</a></li>
505      <li><a href=#the-dd-element><span class=secno>4.5.10 </span>The <code>dd</code> element</a></li>
506      <li><a href=#the-figure-element><span class=secno>4.5.11 </span>The <code>figure</code> element</a></li>
507      <li><a href=#the-figcaption-element><span class=secno>4.5.12 </span>The <code>figcaption</code> element</a></li>
508      <li><a href=#the-main-element><span class=secno>4.5.13 </span>The <code>main</code> element</a></li>
509      <li><a href=#the-div-element><span class=secno>4.5.14 </span>The <code>div</code> element</a></ol></li>
510    <li><a href=#text-level-semantics><span class=secno>4.6 </span>Text-level semantics</a>
511     <ol>
512      <li><a href=#the-a-element><span class=secno>4.6.1 </span>The <code>a</code> element</a></li>
513      <li><a href=#the-em-element><span class=secno>4.6.2 </span>The <code>em</code> element</a></li>
514      <li><a href=#the-strong-element><span class=secno>4.6.3 </span>The <code>strong</code> element</a></li>
515      <li><a href=#the-small-element><span class=secno>4.6.4 </span>The <code>small</code> element</a></li>
516      <li><a href=#the-s-element><span class=secno>4.6.5 </span>The <code>s</code> element</a></li>
517      <li><a href=#the-cite-element><span class=secno>4.6.6 </span>The <code>cite</code> element</a></li>
518      <li><a href=#the-q-element><span class=secno>4.6.7 </span>The <code>q</code> element</a></li>
519      <li><a href=#the-dfn-element><span class=secno>4.6.8 </span>The <code>dfn</code> element</a></li>
520      <li><a href=#the-abbr-element><span class=secno>4.6.9 </span>The <code>abbr</code> element</a></li>
521      <li><a href=#the-data-element><span class=secno>4.6.10 </span>The <code>data</code> element</a></li>
522      <li><a href=#the-time-element><span class=secno>4.6.11 </span>The <code>time</code> element</a></li>
523      <li><a href=#the-code-element><span class=secno>4.6.12 </span>The <code>code</code> element</a></li>
524      <li><a href=#the-var-element><span class=secno>4.6.13 </span>The <code>var</code> element</a></li>
525      <li><a href=#the-samp-element><span class=secno>4.6.14 </span>The <code>samp</code> element</a></li>
526      <li><a href=#the-kbd-element><span class=secno>4.6.15 </span>The <code>kbd</code> element</a></li>
527      <li><a href=#the-sub-and-sup-elements><span class=secno>4.6.16 </span>The <code>sub</code> and <code>sup</code> elements</a></li>
528      <li><a href=#the-i-element><span class=secno>4.6.17 </span>The <code>i</code> element</a></li>
529      <li><a href=#the-b-element><span class=secno>4.6.18 </span>The <code>b</code> element</a></li>
530      <li><a href=#the-u-element><span class=secno>4.6.19 </span>The <code>u</code> element</a></li>
531      <li><a href=#the-mark-element><span class=secno>4.6.20 </span>The <code>mark</code> element</a></li>
532      <li><a href=#the-ruby-element><span class=secno>4.6.21 </span>The <code>ruby</code> element</a></li>
533      <li><a href=#the-rt-element><span class=secno>4.6.22 </span>The <code>rt</code> element</a></li>
534      <li><a href=#the-rp-element><span class=secno>4.6.23 </span>The <code>rp</code> element</a></li>
535      <li><a href=#the-bdi-element><span class=secno>4.6.24 </span>The <code>bdi</code> element</a></li>
536      <li><a href=#the-bdo-element><span class=secno>4.6.25 </span>The <code>bdo</code> element</a></li>
537      <li><a href=#the-span-element><span class=secno>4.6.26 </span>The <code>span</code> element</a></li>
538      <li><a href=#the-br-element><span class=secno>4.6.27 </span>The <code>br</code> element</a></li>
539      <li><a href=#the-wbr-element><span class=secno>4.6.28 </span>The <code>wbr</code> element</a></li>
540      <li><a href=#usage-summary><span class=secno>4.6.29 </span>Usage summary</a></ol></li>
541    <li><a href=#edits><span class=secno>4.7 </span>Edits</a>
542     <ol>
543      <li><a href=#the-ins-element><span class=secno>4.7.1 </span>The <code>ins</code> element</a></li>
544      <li><a href=#the-del-element><span class=secno>4.7.2 </span>The <code>del</code> element</a></li>
545      <li><a href=#attributes-common-to-ins-and-del-elements><span class=secno>4.7.3 </span>Attributes common to <code>ins</code> and <code>del</code> elements</a></li>
546      <li><a href=#edits-and-paragraphs><span class=secno>4.7.4 </span>Edits and paragraphs</a></li>
547      <li><a href=#edits-and-lists><span class=secno>4.7.5 </span>Edits and lists</a></li>
548      <li><a href=#edits-and-tables><span class=secno>4.7.6 </span>Edits and tables</a></ol></li>
549    <li><a href=#embedded-content-1><span class=secno>4.8 </span>Embedded content</a>
550     <ol>
551      <li><a href=#the-img-element><span class=secno>4.8.1 </span>The <code>img</code> element</a>
552       <ol>
553        <li><a href=#alt><span class=secno>4.8.1.1 </span>Requirements for providing text to act as an alternative for images</a>
554         <ol>
555          <li><a href=#general-guidelines><span class=secno>4.8.1.1.1 </span>General guidelines</a></li>
556          <li><a href=#a-link-or-button-containing-nothing-but-the-image><span class=secno>4.8.1.1.2 </span>A link or button containing nothing but the image</a></li>
557          <li><a href=#a-phrase-or-paragraph-with-an-alternative-graphical-representation:-charts,-diagrams,-graphs,-maps,-illustrations><span class=secno>4.8.1.1.3 </span>A phrase or paragraph with an alternative graphical representation: charts, diagrams, graphs, maps, illustrations</a></li>
558          <li><a href=#a-short-phrase-or-label-with-an-alternative-graphical-representation:-icons,-logos><span class=secno>4.8.1.1.4 </span>A short phrase or label with an alternative graphical representation: icons, logos</a></li>
559          <li><a href=#text-that-has-been-rendered-to-a-graphic-for-typographical-effect><span class=secno>4.8.1.1.5 </span>Text that has been rendered to a graphic for typographical effect</a></li>
560          <li><a href=#a-graphical-representation-of-some-of-the-surrounding-text><span class=secno>4.8.1.1.6 </span>A graphical representation of some of the surrounding text</a></li>
561          <li><a href="#a-purely-decorative-image-that-doesn't-add-any-information"><span class=secno>4.8.1.1.7 </span>A purely decorative image that doesn't add any information</a></li>
562          <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-no-links><span class=secno>4.8.1.1.8 </span>A group of images that form a single larger picture with no links</a></li>
563          <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-links><span class=secno>4.8.1.1.9 </span>A group of images that form a single larger picture with links</a></li>
564          <li><a href=#a-key-part-of-the-content><span class=secno>4.8.1.1.10 </span>A key part of the content</a></li>
565          <li><a href=#an-image-not-intended-for-the-user><span class=secno>4.8.1.1.11 </span>An image not intended for the user</a></li>
566          <li><a href=#an-image-in-an-e-mail-or-private-document-intended-for-a-specific-person-who-is-known-to-be-able-to-view-images><span class=secno>4.8.1.1.12 </span>An image in an e-mail or private document intended for a specific person who is known to be able to view images</a></li>
567          <li><a href=#guidance-for-markup-generators><span class=secno>4.8.1.1.13 </span>Guidance for markup generators</a></li>
568          <li><a href=#guidance-for-conformance-checkers><span class=secno>4.8.1.1.14 </span>Guidance for conformance checkers</a></ol></li>
569        <li><a href=#adaptive-images><span class=secno>4.8.1.2 </span>Adaptive images</a></ol></li>
570      <li><a href=#the-iframe-element><span class=secno>4.8.2 </span>The <code>iframe</code> element</a></li>
571      <li><a href=#the-embed-element><span class=secno>4.8.3 </span>The <code>embed</code> element</a></li>
572      <li><a href=#the-object-element><span class=secno>4.8.4 </span>The <code>object</code> element</a></li>
573      <li><a href=#the-param-element><span class=secno>4.8.5 </span>The <code>param</code> element</a></li>
574      <li><a href=#the-video-element><span class=secno>4.8.6 </span>The <code>video</code> element</a></li>
575      <li><a href=#the-audio-element><span class=secno>4.8.7 </span>The <code>audio</code> element</a></li>
576      <li><a href=#the-source-element><span class=secno>4.8.8 </span>The <code>source</code> element</a></li>
577      <li><a href=#the-track-element><span class=secno>4.8.9 </span>The <code>track</code> element</a></li>
578      <li><a href=#media-elements><span class=secno>4.8.10 </span>Media elements</a>
579       <ol>
580        <li><a href=#error-codes><span class=secno>4.8.10.1 </span>Error codes</a></li>
581        <li><a href=#location-of-the-media-resource><span class=secno>4.8.10.2 </span>Location of the media resource</a></li>
582        <li><a href=#mime-types><span class=secno>4.8.10.3 </span>MIME types</a></li>
583        <li><a href=#network-states><span class=secno>4.8.10.4 </span>Network states</a></li>
584        <li><a href=#loading-the-media-resource><span class=secno>4.8.10.5 </span>Loading the media resource</a></li>
585        <li><a href=#offsets-into-the-media-resource><span class=secno>4.8.10.6 </span>Offsets into the media resource</a></li>
586        <li><a href=#ready-states><span class=secno>4.8.10.7 </span>Ready states</a></li>
587        <li><a href=#playing-the-media-resource><span class=secno>4.8.10.8 </span>Playing the media resource</a></li>
588        <li><a href=#seeking><span class=secno>4.8.10.9 </span>Seeking</a></li>
589        <li><a href=#media-resources-with-multiple-media-tracks><span class=secno>4.8.10.10 </span>Media resources with multiple media tracks</a>
590         <ol>
591          <li><a href=#audiotracklist-and-videotracklist-objects><span class=secno>4.8.10.10.1 </span><code>AudioTrackList</code> and <code>VideoTrackList</code> objects</a></li>
592          <li><a href=#selecting-specific-audio-and-video-tracks-declaratively><span class=secno>4.8.10.10.2 </span>Selecting specific audio and video tracks declaratively</a></ol></li>
593        <li><a href=#synchronising-multiple-media-elements><span class=secno>4.8.10.11 </span>Synchronising multiple media elements</a>
594         <ol>
595          <li><a href=#introduction-0><span class=secno>4.8.10.11.1 </span>Introduction</a></li>
596          <li><a href=#media-controllers><span class=secno>4.8.10.11.2 </span>Media controllers</a></li>
597          <li><a href=#assigning-a-media-controller-declaratively><span class=secno>4.8.10.11.3 </span>Assigning a media controller declaratively</a></ol></li>
598        <li><a href=#timed-text-tracks><span class=secno>4.8.10.12 </span>Timed text tracks</a>
599         <ol>
600          <li><a href=#text-track-model><span class=secno>4.8.10.12.1 </span>Text track model</a></li>
601          <li><a href=#sourcing-in-band-text-tracks><span class=secno>4.8.10.12.2 </span>Sourcing in-band text tracks</a></li>
602          <li><a href=#sourcing-out-of-band-text-tracks><span class=secno>4.8.10.12.3 </span>Sourcing out-of-band text tracks</a></li>
603          <li><a href=#guidelines-for-exposing-cues-in-various-formats-as-text-track-cues><span class=secno>4.8.10.12.4 </span>Guidelines for exposing cues in various formats as text track cues</a></li>
604          <li><a href=#text-track-api><span class=secno>4.8.10.12.5 </span>Text track API</a></li>
605          <li><a href=#text-tracks-describing-chapters><span class=secno>4.8.10.12.6 </span>Text tracks describing chapters</a></li>
606          <li><a href=#cue-events><span class=secno>4.8.10.12.7 </span>Event definitions</a></ol></li>
607        <li><a href=#user-interface><span class=secno>4.8.10.13 </span>User interface</a></li>
608        <li><a href=#time-ranges><span class=secno>4.8.10.14 </span>Time ranges</a></li>
609        <li><a href=#event-definitions><span class=secno>4.8.10.15 </span>Event definitions</a></li>
610        <li><a href=#mediaevents><span class=secno>4.8.10.16 </span>Event summary</a></li>
611        <li><a href=#security-and-privacy-considerations><span class=secno>4.8.10.17 </span>Security and privacy considerations</a></li>
612        <li><a href=#best-practices-for-authors-using-media-elements><span class=secno>4.8.10.18 </span>Best practices for authors using media elements</a></li>
613        <li><a href=#best-practices-for-implementors-of-media-elements><span class=secno>4.8.10.19 </span>Best practices for implementors of media elements</a></ol></li>
614      <li><a href=#the-canvas-element><span class=secno>4.8.11 </span>The <code>canvas</code> element</a>
615       <ol>
616        <li><a href=#proxying-canvases-to-workers><span class=secno>4.8.11.1 </span>Proxying canvases to workers</a></li>
617        <li><a href=#2dcontext><span class=secno>4.8.11.2 </span>The 2D rendering context</a>
618         <ol>
619          <li><a href=#implementation-notes><span class=secno>4.8.11.2.1 </span>Implementation notes</a></li>
620          <li><a href=#the-canvas-state><span class=secno>4.8.11.2.2 </span>The canvas state</a></li>
621          <li><a href=#drawingstyle-objects><span class=secno>4.8.11.2.3 </span><code>DrawingStyle</code> objects</a></li>
622          <li><a href=#line-styles><span class=secno>4.8.11.2.4 </span>Line styles</a></li>
623          <li><a href=#text-styles><span class=secno>4.8.11.2.5 </span>Text styles</a></li>
624          <li><a href=#building-paths><span class=secno>4.8.11.2.6 </span>Building paths</a></li>
625          <li><a href=#path-objects><span class=secno>4.8.11.2.7 </span><code>Path</code> objects</a></li>
626          <li><a href=#transformations><span class=secno>4.8.11.2.8 </span>Transformations</a></li>
627          <li><a href=#image-sources-for-2d-rendering-contexts><span class=secno>4.8.11.2.9 </span>Image sources for 2D rendering contexts</a></li>
628          <li><a href=#fill-and-stroke-styles><span class=secno>4.8.11.2.10 </span>Fill and stroke styles</a></li>
629          <li><a href=#drawing-rectangles-to-the-bitmap><span class=secno>4.8.11.2.11 </span>Drawing rectangles to the bitmap</a></li>
630          <li><a href=#drawing-text-to-the-bitmap><span class=secno>4.8.11.2.12 </span>Drawing text to the bitmap</a></li>
631          <li><a href=#drawing-paths-to-the-canvas><span class=secno>4.8.11.2.13 </span>Drawing paths to the canvas</a></li>
632          <li><a href=#drawing-images><span class=secno>4.8.11.2.14 </span>Drawing images</a></li>
633          <li><a href=#hit-regions><span class=secno>4.8.11.2.15 </span>Hit regions</a></li>
634          <li><a href=#pixel-manipulation><span class=secno>4.8.11.2.16 </span>Pixel manipulation</a></li>
635          <li><a href=#compositing><span class=secno>4.8.11.2.17 </span>Compositing</a></li>
636          <li><a href=#image-smoothing><span class=secno>4.8.11.2.18 </span>Image smoothing</a></li>
637          <li><a href=#shadows><span class=secno>4.8.11.2.19 </span>Shadows</a></li>
638          <li><a href=#drawing-model><span class=secno>4.8.11.2.20 </span>Drawing model</a></li>
639          <li><a href=#best-practices><span class=secno>4.8.11.2.21 </span>Best practices</a></li>
640          <li><a href=#examples><span class=secno>4.8.11.2.22 </span>Examples</a></ol></li>
641        <li><a href=#pixel-density><span class=secno>4.8.11.3 </span>Pixel density</a></li>
642        <li><a href=#color-spaces-and-color-correction><span class=secno>4.8.11.4 </span>Color spaces and color correction</a></li>
643        <li><a href=#serializing-bitmaps-to-a-file><span class=secno>4.8.11.5 </span>Serializing bitmaps to a file</a></li>
644        <li><a href=#security-with-canvas-elements><span class=secno>4.8.11.6 </span>Security with <code>canvas</code> elements</a></ol></li>
645      <li><a href=#the-map-element><span class=secno>4.8.12 </span>The <code>map</code> element</a></li>
646      <li><a href=#the-area-element><span class=secno>4.8.13 </span>The <code>area</code> element</a></li>
647      <li><a href=#image-maps><span class=secno>4.8.14 </span>Image maps</a>
648       <ol>
649        <li><a href=#authoring><span class=secno>4.8.14.1 </span>Authoring</a></li>
650        <li><a href=#processing-model-0><span class=secno>4.8.14.2 </span>Processing model</a></ol></li>
651      <li><a href=#mathml><span class=secno>4.8.15 </span>MathML</a></li>
652      <li><a href=#svg-0><span class=secno>4.8.16 </span>SVG</a></li>
653      <li><a href=#dimension-attributes><span class=secno>4.8.17 </span>Dimension attributes</a></ol></li>
654    <li><a href=#tabular-data><span class=secno>4.9 </span>Tabular data</a>
655     <ol>
656      <li><a href=#the-table-element><span class=secno>4.9.1 </span>The <code>table</code> element</a>
657       <ol>
658        <li><a href=#table-descriptions-techniques><span class=secno>4.9.1.1 </span>Techniques for describing tables</a></li>
659        <li><a href=#table-layout-techniques><span class=secno>4.9.1.2 </span>Techniques for table design</a></ol></li>
660      <li><a href=#the-caption-element><span class=secno>4.9.2 </span>The <code>caption</code> element</a></li>
661      <li><a href=#the-colgroup-element><span class=secno>4.9.3 </span>The <code>colgroup</code> element</a></li>
662      <li><a href=#the-col-element><span class=secno>4.9.4 </span>The <code>col</code> element</a></li>
663      <li><a href=#the-tbody-element><span class=secno>4.9.5 </span>The <code>tbody</code> element</a></li>
664      <li><a href=#the-thead-element><span class=secno>4.9.6 </span>The <code>thead</code> element</a></li>
665      <li><a href=#the-tfoot-element><span class=secno>4.9.7 </span>The <code>tfoot</code> element</a></li>
666      <li><a href=#the-tr-element><span class=secno>4.9.8 </span>The <code>tr</code> element</a></li>
667      <li><a href=#the-td-element><span class=secno>4.9.9 </span>The <code>td</code> element</a></li>
668      <li><a href=#the-th-element><span class=secno>4.9.10 </span>The <code>th</code> element</a></li>
669      <li><a href=#attributes-common-to-td-and-th-elements><span class=secno>4.9.11 </span>Attributes common to <code>td</code> and <code>th</code> elements</a></li>
670      <li><a href=#processing-model-1><span class=secno>4.9.12 </span>Processing model</a>
671       <ol>
672        <li><a href=#forming-a-table><span class=secno>4.9.12.1 </span>Forming a table</a></li>
673        <li><a href=#header-and-data-cell-semantics><span class=secno>4.9.12.2 </span>Forming relationships between data cells and header cells</a></ol></li>
674      <li><a href=#table-sorting-model><span class=secno>4.9.13 </span>Table sorting model</a></li>
675      <li><a href=#examples-0><span class=secno>4.9.14 </span>Examples</a></ol></li>
676    <li><a href=#forms><span class=secno>4.10 </span>Forms</a>
677     <ol>
678      <li><a href=#introduction-1><span class=secno>4.10.1 </span>Introduction</a>
679       <ol>
680        <li><a href="#writing-a-form's-user-interface"><span class=secno>4.10.1.1 </span>Writing a form's user interface</a></li>
681        <li><a href=#implementing-the-server-side-processing-for-a-form><span class=secno>4.10.1.2 </span>Implementing the server-side processing for a form</a></li>
682        <li><a href=#configuring-a-form-to-communicate-with-a-server><span class=secno>4.10.1.3 </span>Configuring a form to communicate with a server</a></li>
683        <li><a href=#client-side-form-validation><span class=secno>4.10.1.4 </span>Client-side form validation</a></li>
684        <li><a href=#enabling-client-side-automatic-filling-of-form-controls><span class=secno>4.10.1.5 </span>Enabling client-side automatic filling of form controls</a></li>
685        <li><a href=#improving-the-user-experience-on-mobile-devices><span class=secno>4.10.1.6 </span>Improving the user experience on mobile devices</a></li>
686        <li><a href=#the-difference-between-the-field-type,-the-autofill-field-name,-and-the-input-modality><span class=secno>4.10.1.7 </span>The difference between the field type, the autofill field name, and the input modality</a></li>
687        <li><a href=#input-author-notes><span class=secno>4.10.1.8 </span>Date, time, and number formats</a></ol></li>
688      <li><a href=#categories><span class=secno>4.10.2 </span>Categories</a></li>
689      <li><a href=#the-form-element><span class=secno>4.10.3 </span>The <code>form</code> element</a></li>
690      <li><a href=#the-fieldset-element><span class=secno>4.10.4 </span>The <code>fieldset</code> element</a></li>
691      <li><a href=#the-legend-element><span class=secno>4.10.5 </span>The <code>legend</code> element</a></li>
692      <li><a href=#the-label-element><span class=secno>4.10.6 </span>The <code>label</code> element</a></li>
693      <li><a href=#the-input-element><span class=secno>4.10.7 </span>The <code>input</code> element</a>
694       <ol>
695        <li><a href=#states-of-the-type-attribute><span class=secno>4.10.7.1 </span>States of the <code title=attr-input-type>type</code> attribute</a>
696         <ol>
697          <li><a href="#hidden-state-(type=hidden)"><span class=secno>4.10.7.1.1 </span>Hidden state (<code title="">type=hidden</code>)</a></li>
698          <li><a href="#text-(type=text)-state-and-search-state-(type=search)"><span class=secno>4.10.7.1.2 </span>Text (<code title="">type=text</code>) state and Search state (<code title="">type=search</code>)</a></li>
699          <li><a href="#telephone-state-(type=tel)"><span class=secno>4.10.7.1.3 </span>Telephone state (<code title="">type=tel</code>)</a></li>
700          <li><a href="#url-state-(type=url)"><span class=secno>4.10.7.1.4 </span>URL state (<code title="">type=url</code>)</a></li>
701          <li><a href="#e-mail-state-(type=email)"><span class=secno>4.10.7.1.5 </span>E-mail state (<code title="">type=email</code>)</a></li>
702          <li><a href="#password-state-(type=password)"><span class=secno>4.10.7.1.6 </span>Password state (<code title="">type=password</code>)</a></li>
703          <li><a href="#date-and-time-state-(type=datetime)"><span class=secno>4.10.7.1.7 </span>Date and Time state (<code title="">type=datetime</code>)</a></li>
704          <li><a href="#date-state-(type=date)"><span class=secno>4.10.7.1.8 </span>Date state (<code title="">type=date</code>)</a></li>
705          <li><a href="#month-state-(type=month)"><span class=secno>4.10.7.1.9 </span>Month state (<code title="">type=month</code>)</a></li>
706          <li><a href="#week-state-(type=week)"><span class=secno>4.10.7.1.10 </span>Week state (<code title="">type=week</code>)</a></li>
707          <li><a href="#time-state-(type=time)"><span class=secno>4.10.7.1.11 </span>Time state (<code title="">type=time</code>)</a></li>
708          <li><a href="#local-date-and-time-state-(type=datetime-local)"><span class=secno>4.10.7.1.12 </span>Local Date and Time state (<code title="">type=datetime-local</code>)</a></li>
709          <li><a href="#number-state-(type=number)"><span class=secno>4.10.7.1.13 </span>Number state (<code title="">type=number</code>)</a></li>
710          <li><a href="#range-state-(type=range)"><span class=secno>4.10.7.1.14 </span>Range state (<code title="">type=range</code>)</a></li>
711          <li><a href="#color-state-(type=color)"><span class=secno>4.10.7.1.15 </span>Color state (<code title="">type=color</code>)</a></li>
712          <li><a href="#checkbox-state-(type=checkbox)"><span class=secno>4.10.7.1.16 </span>Checkbox state (<code title="">type=checkbox</code>)</a></li>
713          <li><a href="#radio-button-state-(type=radio)"><span class=secno>4.10.7.1.17 </span>Radio Button state (<code title="">type=radio</code>)</a></li>
714          <li><a href="#file-upload-state-(type=file)"><span class=secno>4.10.7.1.18 </span>File Upload state (<code title="">type=file</code>)</a></li>
715          <li><a href="#submit-button-state-(type=submit)"><span class=secno>4.10.7.1.19 </span>Submit Button state (<code title="">type=submit</code>)</a></li>
716          <li><a href="#image-button-state-(type=image)"><span class=secno>4.10.7.1.20 </span>Image Button state (<code title="">type=image</code>)</a></li>
717          <li><a href="#reset-button-state-(type=reset)"><span class=secno>4.10.7.1.21 </span>Reset Button state (<code title="">type=reset</code>)</a></li>
718          <li><a href="#button-state-(type=button)"><span class=secno>4.10.7.1.22 </span>Button state (<code title="">type=button</code>)</a></ol></li>
719        <li><a href=#input-impl-notes><span class=secno>4.10.7.2 </span>Implemention notes regarding localization of form controls</a></li>
720        <li><a href=#common-input-element-attributes><span class=secno>4.10.7.3 </span>Common <code>input</code> element attributes</a>
721         <ol>
722          <li><a href=#the-maxlength-attribute><span class=secno>4.10.7.3.1 </span>The <code title=attr-input-maxlength>maxlength</code> attribute</a></li>
723          <li><a href=#the-size-attribute><span class=secno>4.10.7.3.2 </span>The <code title=attr-input-size>size</code> attribute</a></li>
724          <li><a href=#the-readonly-attribute><span class=secno>4.10.7.3.3 </span>The <code title=attr-input-readonly>readonly</code> attribute</a></li>
725          <li><a href=#the-required-attribute><span class=secno>4.10.7.3.4 </span>The <code title=attr-input-required>required</code> attribute</a></li>
726          <li><a href=#the-multiple-attribute><span class=secno>4.10.7.3.5 </span>The <code title=attr-input-multiple>multiple</code> attribute</a></li>
727          <li><a href=#the-pattern-attribute><span class=secno>4.10.7.3.6 </span>The <code title=attr-input-pattern>pattern</code> attribute</a></li>
728          <li><a href=#the-min-and-max-attributes><span class=secno>4.10.7.3.7 </span>The <code title=attr-input-min>min</code> and <code title=attr-input-max>max</code> attributes</a></li>
729          <li><a href=#the-step-attribute><span class=secno>4.10.7.3.8 </span>The <code title=attr-input-step>step</code> attribute</a></li>
730          <li><a href=#the-list-attribute><span class=secno>4.10.7.3.9 </span>The <code title=attr-input-list>list</code> attribute</a></li>
731          <li><a href=#the-placeholder-attribute><span class=secno>4.10.7.3.10 </span>The <code title=attr-input-placeholder>placeholder</code> attribute</a></ol></li>
732        <li><a href=#common-input-element-apis><span class=secno>4.10.7.4 </span>Common <code>input</code> element APIs</a></li>
733        <li><a href=#common-event-behaviors><span class=secno>4.10.7.5 </span>Common event behaviors</a></ol></li>
734      <li><a href=#the-button-element><span class=secno>4.10.8 </span>The <code>button</code> element</a></li>
735      <li><a href=#the-select-element><span class=secno>4.10.9 </span>The <code>select</code> element</a></li>
736      <li><a href=#the-datalist-element><span class=secno>4.10.10 </span>The <code>datalist</code> element</a></li>
737      <li><a href=#the-optgroup-element><span class=secno>4.10.11 </span>The <code>optgroup</code> element</a></li>
738      <li><a href=#the-option-element><span class=secno>4.10.12 </span>The <code>option</code> element</a></li>
739      <li><a href=#the-textarea-element><span class=secno>4.10.13 </span>The <code>textarea</code> element</a></li>
740      <li><a href=#the-keygen-element><span class=secno>4.10.14 </span>The <code>keygen</code> element</a></li>
741      <li><a href=#the-output-element><span class=secno>4.10.15 </span>The <code>output</code> element</a></li>
742      <li><a href=#the-progress-element><span class=secno>4.10.16 </span>The <code>progress</code> element</a></li>
743      <li><a href=#the-meter-element><span class=secno>4.10.17 </span>The <code>meter</code> element</a></li>
744      <li><a href=#form-control-infrastructure><span class=secno>4.10.18 </span>Form control infrastructure</a>
745       <ol>
746        <li><a href="#a-form-control's-value"><span class=secno>4.10.18.1 </span>A form control's value</a></li>
747        <li><a href=#mutability><span class=secno>4.10.18.2 </span>Mutability</a></li>
748        <li><a href=#association-of-controls-and-forms><span class=secno>4.10.18.3 </span>Association of controls and forms</a></ol></li>
749      <li><a href=#attributes-common-to-form-controls><span class=secno>4.10.19 </span>Attributes common to form controls</a>
750       <ol>
751        <li><a href=#naming-form-controls:-the-name-attribute><span class=secno>4.10.19.1 </span>Naming form controls: the <code title=attr-fe-name>name</code> attribute</a></li>
752        <li><a href=#submitting-element-directionality:-the-dirname-attribute><span class=secno>4.10.19.2 </span>Submitting element directionality: the <code title=attr-fe-dirname>dirname</code> attribute</a></li>
753        <li><a href=#limiting-user-input-length:-the-maxlength-attribute><span class=secno>4.10.19.3 </span>Limiting user input length: the <code title=attr-fe-maxlength>maxlength</code> attribute</a></li>
754        <li><a href=#enabling-and-disabling-form-controls:-the-disabled-attribute><span class=secno>4.10.19.4 </span>Enabling and disabling form controls: the <code title=attr-fe-disabled>disabled</code> attribute</a></li>
755        <li><a href=#form-submission-0><span class=secno>4.10.19.5 </span>Form submission</a></li>
756        <li><a href=#autofocusing-a-form-control:-the-autofocus-attribute><span class=secno>4.10.19.6 </span>Autofocusing a form control: the <code title=attr-fe-autofocus>autofocus</code> attribute</a></li>
757        <li><a href=#input-modalities:-the-inputmode-attribute><span class=secno>4.10.19.7 </span>Input modalities: the <code title=attr-fe-inputmode>inputmode</code> attribute</a></li>
758        <li><a href=#autofilling-form-controls:-the-autocomplete-attribute><span class=secno>4.10.19.8 </span>Autofilling form controls: the <code title=attr-fe-autocomplete>autocomplete</code> attribute</a></ol></li>
759      <li><a href=#textFieldSelection><span class=secno>4.10.20 </span>APIs for the text field selections</a></li>
760      <li><a href=#constraints><span class=secno>4.10.21 </span>Constraints</a>
761       <ol>
762        <li><a href=#definitions><span class=secno>4.10.21.1 </span>Definitions</a></li>
763        <li><a href=#constraint-validation><span class=secno>4.10.21.2 </span>Constraint validation</a></li>
764        <li><a href=#the-constraint-validation-api><span class=secno>4.10.21.3 </span>The constraint validation API</a></li>
765        <li><a href=#security-forms><span class=secno>4.10.21.4 </span>Security</a></ol></li>
766      <li><a href=#form-submission><span class=secno>4.10.22 </span>Form submission</a>
767       <ol>
768        <li><a href=#introduction-2><span class=secno>4.10.22.1 </span>Introduction</a></li>
769        <li><a href=#implicit-submission><span class=secno>4.10.22.2 </span>Implicit submission</a></li>
770        <li><a href=#form-submission-algorithm><span class=secno>4.10.22.3 </span>Form submission algorithm</a></li>
771        <li><a href=#constructing-form-data-set><span class=secno>4.10.22.4 </span>Constructing the form data set</a></li>
772        <li><a href=#selecting-a-form-submission-encoding><span class=secno>4.10.22.5 </span>Selecting a form submission encoding</a></li>
773        <li><a href=#url-encoded-form-data><span class=secno>4.10.22.6 </span>URL-encoded form data</a></li>
774        <li><a href=#multipart-form-data><span class=secno>4.10.22.7 </span>Multipart form data</a></li>
775        <li><a href=#plain-text-form-data><span class=secno>4.10.22.8 </span>Plain text form data</a></ol></li>
776      <li><a href=#resetting-a-form><span class=secno>4.10.23 </span>Resetting a form</a></ol></li>
777    <li><a href=#interactive-elements><span class=secno>4.11 </span>Interactive elements</a>
778     <ol>
779      <li><a href=#the-details-element><span class=secno>4.11.1 </span>The <code>details</code> element</a></li>
780      <li><a href=#the-summary-element><span class=secno>4.11.2 </span>The <code>summary</code> element</a></li>
781      <li><a href=#the-menu-element><span class=secno>4.11.3 </span>The <code>menu</code> element</a></li>
782      <li><a href=#the-menuitem-element><span class=secno>4.11.4 </span>The <code>menuitem</code> element</a></li>
783      <li><a href=#context-menus><span class=secno>4.11.5 </span>Context menus</a>
784       <ol>
785        <li><a href=#declaring-a-context-menu><span class=secno>4.11.5.1 </span>Declaring a context menu</a></li>
786        <li><a href=#processing-model-2><span class=secno>4.11.5.2 </span>Processing model</a></li>
787        <li><a href=#event-definitions-0><span class=secno>4.11.5.3 </span>Event definitions</a></ol></li>
788      <li><a href=#commands><span class=secno>4.11.6 </span>Commands</a>
789       <ol>
790        <li><a href=#facets-0><span class=secno>4.11.6.1 </span>Facets</a></li>
791        <li><a href=#using-the-a-element-to-define-a-command><span class=secno>4.11.6.2 </span>Using the <code>a</code> element to define a command</a></li>
792        <li><a href=#using-the-button-element-to-define-a-command><span class=secno>4.11.6.3 </span>Using the <code>button</code> element to define a command</a></li>
793        <li><a href=#using-the-input-element-to-define-a-command><span class=secno>4.11.6.4 </span>Using the <code>input</code> element to define a command</a></li>
794        <li><a href=#using-the-option-element-to-define-a-command><span class=secno>4.11.6.5 </span>Using the <code>option</code> element to define a command</a></li>
795        <li><a href=#using-the-menuitem-element-to-define-a-command><span class=secno>4.11.6.6 </span>Using the <code>menuitem</code> element to define a
796   command</a></li>
797        <li><a href=#using-the-command-attribute-on-menuitem-elements-to-define-a-command-indirectly><span class=secno>4.11.6.7 </span>Using the <code title=attr-menuitem-command>command</code> attribute on <code>menuitem</code> elements to define
798   a command indirectly</a></li>
799        <li><a href=#using-the-accesskey-attribute-on-a-label-element-to-define-a-command><span class=secno>4.11.6.8 </span>Using the <code title=attr-accesskey>accesskey</code> attribute
800   on a <code>label</code> element to define a command</a></li>
801        <li><a href=#using-the-accesskey-attribute-on-a-legend-element-to-define-a-command><span class=secno>4.11.6.9 </span>Using the <code title=attr-accesskey>accesskey</code> attribute
802   on a <code>legend</code> element to define a command</a></li>
803        <li><a href=#using-the-accesskey-attribute-to-define-a-command-on-other-elements><span class=secno>4.11.6.10 </span>Using the <code title=attr-accesskey>accesskey</code>
804   attribute to define a command on other elements</a></ol></li>
805      <li><a href=#the-dialog-element><span class=secno>4.11.7 </span>The <code>dialog</code> element</a>
806       <ol>
807        <li><a href=#anchor-points><span class=secno>4.11.7.1 </span>Anchor points</a></ol></ol></li>
808    <li><a href=#links><span class=secno>4.12 </span>Links</a>
809     <ol>
810      <li><a href=#introduction-3><span class=secno>4.12.1 </span>Introduction</a></li>
811      <li><a href=#links-created-by-a-and-area-elements><span class=secno>4.12.2 </span>Links created by <code>a</code> and <code>area</code> elements</a></li>
812      <li><a href=#following-hyperlinks-0><span class=secno>4.12.3 </span>Following hyperlinks</a></li>
813      <li><a href=#downloading-resources><span class=secno>4.12.4 </span>Downloading resources</a>
814       <ol>
815        <li><a href=#hyperlink-auditing><span class=secno>4.12.4.1 </span>Hyperlink auditing</a></ol></li>
816      <li><a href=#linkTypes><span class=secno>4.12.5 </span>Link types</a>
817       <ol>
818        <li><a href=#rel-alternate><span class=secno>4.12.5.1 </span>Link type "<code>alternate</code>"</a></li>
819        <li><a href=#link-type-author><span class=secno>4.12.5.2 </span>Link type "<code>author</code>"</a></li>
820        <li><a href=#link-type-bookmark><span class=secno>4.12.5.3 </span>Link type "<code>bookmark</code>"</a></li>
821        <li><a href=#link-type-help><span class=secno>4.12.5.4 </span>Link type "<code>help</code>"</a></li>
822        <li><a href=#rel-icon><span class=secno>4.12.5.5 </span>Link type "<code>icon</code>"</a></li>
823        <li><a href=#link-type-license><span class=secno>4.12.5.6 </span>Link type "<code>license</code>"</a></li>
824        <li><a href=#link-type-nofollow><span class=secno>4.12.5.7 </span>Link type "<code>nofollow</code>"</a></li>
825        <li><a href=#link-type-noreferrer><span class=secno>4.12.5.8 </span>Link type "<code>noreferrer</code>"</a></li>
826        <li><a href=#link-type-prefetch><span class=secno>4.12.5.9 </span>Link type "<code>prefetch</code>"</a></li>
827        <li><a href=#link-type-search><span class=secno>4.12.5.10 </span>Link type "<code>search</code>"</a></li>
828        <li><a href=#link-type-sidebar><span class=secno>4.12.5.11 </span>Link type "<code>sidebar</code>"</a></li>
829        <li><a href=#link-type-stylesheet><span class=secno>4.12.5.12 </span>Link type "<code>stylesheet</code>"</a></li>
830        <li><a href=#link-type-tag><span class=secno>4.12.5.13 </span>Link type "<code>tag</code>"</a></li>
831        <li><a href=#sequential-link-types><span class=secno>4.12.5.14 </span>Sequential link types</a>
832         <ol>
833          <li><a href=#link-type-next><span class=secno>4.12.5.14.1 </span>Link type "<code>next</code>"</a></li>
834          <li><a href=#link-type-prev><span class=secno>4.12.5.14.2 </span>Link type "<code>prev</code>"</a></ol></li>
835        <li><a href=#other-link-types><span class=secno>4.12.5.15 </span>Other link types</a></ol></ol></li>
836    <li><a href=#common-idioms><span class=secno>4.13 </span>Common idioms without dedicated elements</a>
837     <ol>
838      <li><a href=#the-main-part-of-the-content><span class=secno>4.13.1 </span>The main part of the content</a></li>
839      <li><a href=#rel-up><span class=secno>4.13.2 </span>Bread crumb navigation</a></li>
840      <li><a href=#tag-clouds><span class=secno>4.13.3 </span>Tag clouds</a></li>
841      <li><a href=#conversations><span class=secno>4.13.4 </span>Conversations</a></li>
842      <li><a href=#footnotes><span class=secno>4.13.5 </span>Footnotes</a></ol></li>
843    <li><a href=#disabled-elements><span class=secno>4.14 </span>Disabled elements</a></li>
844    <li><a href=#selectors><span class=secno>4.15 </span>Matching HTML elements using selectors</a>
845     <ol>
846      <li><a href=#case-sensitivity><span class=secno>4.15.1 </span>Case-sensitivity</a></li>
847      <li><a href=#pseudo-classes><span class=secno>4.15.2 </span>Pseudo-classes</a></ol></ol></li>
848  <li><a href=#microdata><span class=secno>5 </span>Microdata</a>
849   <ol>
850    <li><a href=#introduction-4><span class=secno>5.1 </span>Introduction</a>
851     <ol>
852      <li><a href=#overview><span class=secno>5.1.1 </span>Overview</a></li>
853      <li><a href=#the-basic-syntax><span class=secno>5.1.2 </span>The basic syntax</a></li>
854      <li><a href=#typed-items><span class=secno>5.1.3 </span>Typed items</a></li>
855      <li><a href=#global-identifiers-for-items><span class=secno>5.1.4 </span>Global identifiers for items</a></li>
856      <li><a href=#selecting-names-when-defining-vocabularies><span class=secno>5.1.5 </span>Selecting names when defining vocabularies</a></li>
857      <li><a href=#using-the-microdata-dom-api><span class=secno>5.1.6 </span>Using the microdata DOM API</a></ol></li>
858    <li><a href=#encoding-microdata><span class=secno>5.2 </span>Encoding microdata</a>
859     <ol>
860      <li><a href=#the-microdata-model><span class=secno>5.2.1 </span>The microdata model</a></li>
861      <li><a href=#items><span class=secno>5.2.2 </span>Items</a></li>
862      <li><a href=#names:-the-itemprop-attribute><span class=secno>5.2.3 </span>Names: the <code>itemprop</code> attribute</a></li>
863      <li><a href=#values><span class=secno>5.2.4 </span>Values</a></li>
864      <li><a href=#associating-names-with-items><span class=secno>5.2.5 </span>Associating names with items</a></li>
865      <li><a href=#microdata-and-other-namespaces><span class=secno>5.2.6 </span>Microdata and other namespaces</a></ol></li>
866    <li><a href=#microdata-dom-api><span class=secno>5.3 </span>Microdata DOM API</a></li>
867    <li><a href=#mdvocabs><span class=secno>5.4 </span>Sample microdata vocabularies</a>
868     <ol>
869      <li><a href=#vcard><span class=secno>5.4.1 </span>vCard</a>
870       <ol>
871        <li><a href=#conversion-to-vcard><span class=secno>5.4.1.1 </span>Conversion to vCard</a></li>
872        <li><a href=#examples-1><span class=secno>5.4.1.2 </span>Examples</a></ol></li>
873      <li><a href=#vevent><span class=secno>5.4.2 </span>vEvent</a>
874       <ol>
875        <li><a href=#conversion-to-icalendar><span class=secno>5.4.2.1 </span>Conversion to iCalendar</a></li>
876        <li><a href=#examples-2><span class=secno>5.4.2.2 </span>Examples</a></ol></li>
877      <li><a href=#licensing-works><span class=secno>5.4.3 </span>Licensing works</a>
878       <ol>
879        <li><a href=#examples-3><span class=secno>5.4.3.1 </span>Examples</a></ol></ol></li>
880    <li><a href=#converting-html-to-other-formats><span class=secno>5.5 </span>Converting HTML to other formats</a>
881     <ol>
882      <li><a href=#json><span class=secno>5.5.1 </span>JSON</a></ol></ol></li>
883  <li><a href=#browsers><span class=secno>6 </span>Loading Web pages</a>
884   <ol>
885    <li><a href=#windows><span class=secno>6.1 </span>Browsing contexts</a>
886     <ol>
887      <li><a href=#nested-browsing-contexts><span class=secno>6.1.1 </span>Nested browsing contexts</a>
888       <ol>
889        <li><a href=#navigating-nested-browsing-contexts-in-the-dom><span class=secno>6.1.1.1 </span>Navigating nested browsing contexts in the DOM</a></ol></li>
890      <li><a href=#auxiliary-browsing-contexts><span class=secno>6.1.2 </span>Auxiliary browsing contexts</a>
891       <ol>
892        <li><a href=#navigating-auxiliary-browsing-contexts-in-the-dom><span class=secno>6.1.2.1 </span>Navigating auxiliary browsing contexts in the DOM</a></ol></li>
893      <li><a href=#secondary-browsing-contexts><span class=secno>6.1.3 </span>Secondary browsing contexts</a></li>
894      <li><a href=#security-nav><span class=secno>6.1.4 </span>Security</a></li>
895      <li><a href=#groupings-of-browsing-contexts><span class=secno>6.1.5 </span>Groupings of browsing contexts</a></li>
896      <li><a href=#browsing-context-names><span class=secno>6.1.6 </span>Browsing context names</a></ol></li>
897    <li><a href=#the-window-object><span class=secno>6.2 </span>The <code>Window</code> object</a>
898     <ol>
899      <li><a href=#security-window><span class=secno>6.2.1 </span>Security</a></li>
900      <li><a href=#apis-for-creating-and-navigating-browsing-contexts-by-name><span class=secno>6.2.2 </span>APIs for creating and navigating browsing contexts by name</a></li>
901      <li><a href=#accessing-other-browsing-contexts><span class=secno>6.2.3 </span>Accessing other browsing contexts</a></li>
902      <li><a href=#named-access-on-the-window-object><span class=secno>6.2.4 </span>Named access on the <code>Window</code> object</a></li>
903      <li><a href=#garbage-collection-and-browsing-contexts><span class=secno>6.2.5 </span>Garbage collection and browsing contexts</a></li>
904      <li><a href=#closing-browsing-contexts><span class=secno>6.2.6 </span>Closing browsing contexts</a></li>
905      <li><a href=#browser-interface-elements><span class=secno>6.2.7 </span>Browser interface elements</a></li>
906      <li><a href=#the-windowproxy-object><span class=secno>6.2.8 </span>The <code>WindowProxy</code> object</a></ol></li>
907    <li><a href=#origin-0><span class=secno>6.3 </span>Origin</a>
908     <ol>
909      <li><a href=#relaxing-the-same-origin-restriction><span class=secno>6.3.1 </span>Relaxing the same-origin restriction</a></ol></li>
910    <li><a href=#sandboxing><span class=secno>6.4 </span>Sandboxing</a></li>
911    <li><a href=#history><span class=secno>6.5 </span>Session history and navigation</a>
912     <ol>
913      <li><a href=#the-session-history-of-browsing-contexts><span class=secno>6.5.1 </span>The session history of browsing contexts</a></li>
914      <li><a href=#the-history-interface><span class=secno>6.5.2 </span>The <code>History</code> interface</a></li>
915      <li><a href=#the-location-interface><span class=secno>6.5.3 </span>The <code>Location</code> interface</a>
916       <ol>
917        <li><a href=#security-location><span class=secno>6.5.3.1 </span>Security</a></ol></li>
918      <li><a href=#history-notes><span class=secno>6.5.4 </span>Implementation notes for session history</a></ol></li>
919    <li><a href=#browsing-the-web><span class=secno>6.6 </span>Browsing the Web</a>
920     <ol>
921      <li><a href=#navigating-across-documents><span class=secno>6.6.1 </span>Navigating across documents</a></li>
922      <li><a href=#read-html><span class=secno>6.6.2 </span>Page load processing model for HTML files</a></li>
923      <li><a href=#read-xml><span class=secno>6.6.3 </span>Page load processing model for XML files</a></li>
924      <li><a href=#read-text><span class=secno>6.6.4 </span>Page load processing model for text files</a></li>
925      <li><a href=#read-multipart-x-mixed-replace><span class=secno>6.6.5 </span>Page load processing model for <code>multipart/x-mixed-replace</code> resources</a></li>
926      <li><a href=#read-media><span class=secno>6.6.6 </span>Page load processing model for media</a></li>
927      <li><a href=#read-plugin><span class=secno>6.6.7 </span>Page load processing model for content that uses plugins</a></li>
928      <li><a href=#read-ua-inline><span class=secno>6.6.8 </span>Page load processing model for inline content that doesn't have a DOM</a></li>
929      <li><a href=#scroll-to-fragid><span class=secno>6.6.9 </span>Navigating to a fragment identifier</a></li>
930      <li><a href=#history-traversal><span class=secno>6.6.10 </span>History traversal</a>
931       <ol>
932        <li><a href=#event-definitions-1><span class=secno>6.6.10.1 </span>Event definitions</a></ol></li>
933      <li><a href=#unloading-documents><span class=secno>6.6.11 </span>Unloading documents</a>
934       <ol>
935        <li><a href=#event-definition><span class=secno>6.6.11.1 </span>Event definition</a></ol></li>
936      <li><a href=#aborting-a-document-load><span class=secno>6.6.12 </span>Aborting a document load</a></ol></li>
937    <li><a href=#offline><span class=secno>6.7 </span>Offline Web applications</a>
938     <ol>
939      <li><a href=#introduction-5><span class=secno>6.7.1 </span>Introduction</a>
940       <ol>
941        <li><a href=#supporting-offline-caching-for-legacy-applications><span class=secno>6.7.1.1 </span>Supporting offline caching for legacy applications</a></li>
942        <li><a href=#appcacheevents><span class=secno>6.7.1.2 </span>Event summary</a></ol></li>
943      <li><a href=#appcache><span class=secno>6.7.2 </span>Application caches</a></li>
944      <li><a href=#manifests><span class=secno>6.7.3 </span>The cache manifest syntax</a>
945       <ol>
946        <li><a href=#some-sample-manifests><span class=secno>6.7.3.1 </span>Some sample manifests</a></li>
947        <li><a href=#writing-cache-manifests><span class=secno>6.7.3.2 </span>Writing cache manifests</a></li>
948        <li><a href=#parsing-cache-manifests><span class=secno>6.7.3.3 </span>Parsing cache manifests</a></ol></li>
949      <li><a href=#downloading-or-updating-an-application-cache><span class=secno>6.7.4 </span>Downloading or updating an application cache</a></li>
950      <li><a href=#the-application-cache-selection-algorithm><span class=secno>6.7.5 </span>The application cache selection algorithm</a></li>
951      <li><a href=#changesToNetworkingModel><span class=secno>6.7.6 </span>Changes to the networking model</a></li>
952      <li><a href=#expiring-application-caches><span class=secno>6.7.7 </span>Expiring application caches</a></li>
953      <li><a href=#disk-space><span class=secno>6.7.8 </span>Disk space</a></li>
954      <li><a href=#application-cache-api><span class=secno>6.7.9 </span>Application cache API</a></li>
955      <li><a href=#browser-state><span class=secno>6.7.10 </span>Browser state</a></ol></ol></li>
956  <li><a href=#webappapis><span class=secno>7 </span>Web application APIs</a>
957   <ol>
958    <li><a href=#scripting><span class=secno>7.1 </span>Scripting</a>
959     <ol>
960      <li><a href=#introduction-6><span class=secno>7.1.1 </span>Introduction</a></li>
961      <li><a href=#enabling-and-disabling-scripting><span class=secno>7.1.2 </span>Enabling and disabling scripting</a></li>
962      <li><a href=#processing-model-3><span class=secno>7.1.3 </span>Processing model</a>
963       <ol>
964        <li><a href=#definitions-0><span class=secno>7.1.3.1 </span>Definitions</a></li>
965        <li><a href=#calling-scripts><span class=secno>7.1.3.2 </span>Calling scripts</a></li>
966        <li><a href=#creating-scripts><span class=secno>7.1.3.3 </span>Creating scripts</a></li>
967        <li><a href=#killing-scripts><span class=secno>7.1.3.4 </span>Killing scripts</a></li>
968        <li><a href=#runtime-script-errors><span class=secno>7.1.3.5 </span>Runtime script errors</a>
969         <ol>
970          <li><a href=#runtime-script-errors-in-documents><span class=secno>7.1.3.5.1 </span>Runtime script errors in documents</a></ol></ol></li>
971      <li><a href=#event-loops><span class=secno>7.1.4 </span>Event loops</a>
972       <ol>
973        <li><a href=#definitions-1><span class=secno>7.1.4.1 </span>Definitions</a></li>
974        <li><a href=#processing-model-4><span class=secno>7.1.4.2 </span>Processing model</a></li>
975        <li><a href=#generic-task-sources><span class=secno>7.1.4.3 </span>Generic task sources</a></ol></li>
976      <li><a href=#javascript-protocol><span class=secno>7.1.5 </span>The <code title="">javascript:</code> URL scheme</a></li>
977      <li><a href=#events><span class=secno>7.1.6 </span>Events</a>
978       <ol>
979        <li><a href=#event-handler-attributes><span class=secno>7.1.6.1 </span>Event handlers</a></li>
980        <li><a href=#event-handlers-on-elements,-document-objects,-and-window-objects><span class=secno>7.1.6.2 </span>Event handlers on elements, <code>Document</code> objects, and <code>Window</code> objects</a>
981         <ol>
982          <li><a href=#idl-definitions><span class=secno>7.1.6.2.1 </span>IDL definitions</a></ol></li>
983        <li><a href=#event-firing><span class=secno>7.1.6.3 </span>Event firing</a></li>
984        <li><a href=#events-and-the-window-object><span class=secno>7.1.6.4 </span>Events and the <code>Window</code> object</a></ol></ol></li>
985    <li><a href=#atob><span class=secno>7.2 </span>Base64 utility methods</a></li>
986    <li><a href=#timers><span class=secno>7.3 </span>Timers</a></li>
987    <li><a href=#user-prompts><span class=secno>7.4 </span>User prompts</a>
988     <ol>
989      <li><a href=#simple-dialogs><span class=secno>7.4.1 </span>Simple dialogs</a></li>
990      <li><a href=#printing><span class=secno>7.4.2 </span>Printing</a></li>
991      <li><a href=#dialogs-implemented-using-separate-documents><span class=secno>7.4.3 </span>Dialogs implemented using separate documents</a></ol></li>
992    <li><a href=#system-state-and-capabilities><span class=secno>7.5 </span>System state and capabilities</a>
993     <ol>
994      <li><a href=#the-navigator-object><span class=secno>7.5.1 </span>The <code>Navigator</code> object</a>
995       <ol>
996        <li><a href=#client-identification><span class=secno>7.5.1.1 </span>Client identification</a></li>
997        <li><a href=#language-preferences><span class=secno>7.5.1.2 </span>Language preferences</a></li>
998        <li><a href=#custom-handlers><span class=secno>7.5.1.3 </span>Custom scheme and content handlers</a>
999         <ol>
1000          <li><a href=#security-and-privacy><span class=secno>7.5.1.3.1 </span>Security and privacy</a></li>
1001          <li><a href=#sample-handler-impl><span class=secno>7.5.1.3.2 </span>Sample user interface</a></ol></li>
1002        <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.4 </span>Manually releasing the storage mutex</a></ol></li>
1003      <li><a href=#the-external-interface><span class=secno>7.5.2 </span>The <code>External</code> interface</a></ol></li>
1004    <li><a href=#images><span class=secno>7.6 </span>Images</a></ol></li>
1005  <li><a href=#editing><span class=secno>8 </span>User interaction</a>
1006   <ol>
1007    <li><a href=#the-hidden-attribute><span class=secno>8.1 </span>The <code>hidden</code> attribute</a></li>
1008    <li><a href=#inert-subtrees><span class=secno>8.2 </span>Inert subtrees</a>
1009     <ol>
1010      <li><a href=#the-inert-attribute><span class=secno>8.2.1 </span>The <code>inert</code> attribute</a></ol></li>
1011    <li><a href=#activation><span class=secno>8.3 </span>Activation</a></li>
1012    <li><a href=#focus><span class=secno>8.4 </span>Focus</a>
1013     <ol>
1014      <li><a href=#sequential-focus-navigation-and-the-tabindex-attribute><span class=secno>8.4.1 </span>Sequential focus navigation and the <code title=attr-tabindex>tabindex</code> attribute</a></li>
1015      <li><a href=#focus-management><span class=secno>8.4.2 </span>Focus management</a></li>
1016      <li><a href=#document-level-focus-apis><span class=secno>8.4.3 </span>Document-level focus APIs</a></li>
1017      <li><a href=#element-level-focus-apis><span class=secno>8.4.4 </span>Element-level focus APIs</a></ol></li>
1018    <li><a href=#assigning-keyboard-shortcuts><span class=secno>8.5 </span>Assigning keyboard shortcuts</a>
1019     <ol>
1020      <li><a href=#introduction-7><span class=secno>8.5.1 </span>Introduction</a></li>
1021      <li><a href=#the-accesskey-attribute><span class=secno>8.5.2 </span>The <code>accesskey</code> attribute</a></li>
1022      <li><a href=#processing-model-5><span class=secno>8.5.3 </span>Processing model</a></ol></li>
1023    <li><a href=#editing-0><span class=secno>8.6 </span>Editing</a>
1024     <ol>
1025      <li><a href=#contenteditable><span class=secno>8.6.1 </span>Making document regions editable: The <code title=attr-contenteditable>contenteditable</code> content attribute</a></li>
1026      <li><a href=#making-entire-documents-editable:-the-designmode-idl-attribute><span class=secno>8.6.2 </span>Making entire documents editable: The <code title=dom-document-designMode>designMode</code> IDL attribute</a></li>
1027      <li><a href=#best-practices-for-in-page-editors><span class=secno>8.6.3 </span>Best practices for in-page editors</a></li>
1028      <li><a href=#editing-apis><span class=secno>8.6.4 </span>Editing APIs</a></li>
1029      <li><a href=#spelling-and-grammar-checking><span class=secno>8.6.5 </span>Spelling and grammar checking</a></ol></li>
1030    <li><a href=#dnd><span class=secno>8.7 </span>Drag and drop</a>
1031     <ol>
1032      <li><a href=#introduction-8><span class=secno>8.7.1 </span>Introduction</a></li>
1033      <li><a href=#the-drag-data-store><span class=secno>8.7.2 </span>The drag data store</a></li>
1034      <li><a href=#the-datatransfer-interface><span class=secno>8.7.3 </span>The <code>DataTransfer</code> interface</a>
1035       <ol>
1036        <li><a href=#the-datatransferitemlist-interface><span class=secno>8.7.3.1 </span>The <code>DataTransferItemList</code> interface</a></li>
1037        <li><a href=#the-datatransferitem-interface><span class=secno>8.7.3.2 </span>The <code>DataTransferItem</code> interface</a></ol></li>
1038      <li><a href=#the-dragevent-interface><span class=secno>8.7.4 </span>The <code>DragEvent</code> interface</a></li>
1039      <li><a href=#drag-and-drop-processing-model><span class=secno>8.7.5 </span>Drag-and-drop processing model</a></li>
1040      <li><a href=#dndevents><span class=secno>8.7.6 </span>Events summary</a></li>
1041      <li><a href=#the-draggable-attribute><span class=secno>8.7.7 </span>The <code>draggable</code> attribute</a></li>
1042      <li><a href=#the-dropzone-attribute><span class=secno>8.7.8 </span>The <code>dropzone</code> attribute</a></li>
1043      <li><a href=#security-risks-in-the-drag-and-drop-model><span class=secno>8.7.9 </span>Security risks in the drag-and-drop model</a></ol></ol></li>
1044  <li><a href=#workers><span class=secno>9 </span>Web workers</a>
1045   <ol>
1046    <li><a href=#introduction-9><span class=secno>9.1 </span>Introduction</a>
1047     <ol>
1048      <li><a href=#scope-0><span class=secno>9.1.1 </span>Scope</a></li>
1049      <li><a href=#examples-4><span class=secno>9.1.2 </span>Examples</a>
1050       <ol>
1051        <li><a href=#a-background-number-crunching-worker><span class=secno>9.1.2.1 </span>A background number-crunching worker</a></li>
1052        <li><a href=#worker-used-for-background-i/o><span class=secno>9.1.2.2 </span>Worker used for background I/O</a></li>
1053        <li><a href=#shared-workers-introduction><span class=secno>9.1.2.3 </span>Shared workers introduction</a></li>
1054        <li><a href=#shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Shared state using a shared worker</a></li>
1055        <li><a href=#delegation><span class=secno>9.1.2.5 </span>Delegation</a></ol></li>
1056      <li><a href=#tutorials><span class=secno>9.1.3 </span>Tutorials</a>
1057       <ol>
1058        <li><a href=#creating-a-dedicated-worker><span class=secno>9.1.3.1 </span>Creating a dedicated worker</a></li>
1059        <li><a href=#communicating-with-a-dedicated-worker><span class=secno>9.1.3.2 </span>Communicating with a dedicated worker</a></li>
1060        <li><a href=#shared-workers><span class=secno>9.1.3.3 </span>Shared workers</a></ol></ol></li>
1061    <li><a href=#infrastructure-0><span class=secno>9.2 </span>Infrastructure</a>
1062     <ol>
1063      <li><a href=#the-global-scope><span class=secno>9.2.1 </span>The global scope</a>
1064       <ol>
1065        <li><a href=#the-workerglobalscope-common-interface><span class=secno>9.2.1.1 </span>The <code>WorkerGlobalScope</code> common interface</a></li>
1066        <li><a href=#dedicated-workers-and-the-dedicatedworkerglobalscope-interface><span class=secno>9.2.1.2 </span>Dedicated workers and the <code>DedicatedWorkerGlobalScope</code> interface</a></li>
1067        <li><a href=#shared-workers-and-the-sharedworkerglobalscope-interface><span class=secno>9.2.1.3 </span>Shared workers and the <code>SharedWorkerGlobalScope</code> interface</a></ol></li>
1068      <li><a href=#the-event-loop><span class=secno>9.2.2 </span>The event loop</a></li>
1069      <li><a href="#the-worker's-lifetime"><span class=secno>9.2.3 </span>The worker's lifetime</a></li>
1070      <li><a href=#processing-model-6><span class=secno>9.2.4 </span>Processing model</a></li>
1071      <li><a href=#runtime-script-errors-0><span class=secno>9.2.5 </span>Runtime script errors</a></li>
1072      <li><a href=#creating-workers><span class=secno>9.2.6 </span>Creating workers</a>
1073       <ol>
1074        <li><a href=#the-abstractworker-abstract-interface><span class=secno>9.2.6.1 </span>The <code>AbstractWorker</code> abstract interface</a></li>
1075        <li><a href=#dedicated-workers-and-the-worker-interface><span class=secno>9.2.6.2 </span>Dedicated workers and the <code>Worker</code> interface</a></li>
1076        <li><a href=#shared-workers-and-the-sharedworker-interface><span class=secno>9.2.6.3 </span>Shared workers and the <code>SharedWorker</code> interface</a></ol></ol></li>
1077    <li><a href=#apis-available-to-workers><span class=secno>9.3 </span>APIs available to workers</a>
1078     <ol>
1079      <li><a href=#importing-scripts-and-libraries><span class=secno>9.3.1 </span>Importing scripts and libraries</a></li>
1080      <li><a href=#the-workernavigator-object><span class=secno>9.3.2 </span>The <code>WorkerNavigator</code> object</a></li>
1081      <li><a href=#interface-objects-and-constructors><span class=secno>9.3.3 </span>Interface objects and constructors</a></li>
1082      <li><a href=#worker-locations><span class=secno>9.3.4 </span>Worker locations</a></ol></ol></li>
1083  <li><a href=#comms><span class=secno>10 </span>Communication</a>
1084   <ol>
1085    <li><a href=#event-definitions-2><span class=secno>10.1 </span>Event definitions</a></li>
1086    <li><a href=#server-sent-events><span class=secno>10.2 </span>Server-sent events</a>
1087     <ol>
1088      <li><a href=#server-sent-events-intro><span class=secno>10.2.1 </span>Introduction</a></li>
1089      <li><a href=#the-eventsource-interface><span class=secno>10.2.2 </span>The <code>EventSource</code> interface</a></li>
1090      <li><a href=#processing-model-7><span class=secno>10.2.3 </span>Processing model</a></li>
1091      <li><a href=#parsing-an-event-stream><span class=secno>10.2.4 </span>Parsing an event stream</a></li>
1092      <li><a href=#event-stream-interpretation><span class=secno>10.2.5 </span>Interpreting an event stream</a></li>
1093      <li><a href=#notes><span class=secno>10.2.6 </span>Notes</a></li>
1094      <li><a href=#eventsource-push><span class=secno>10.2.7 </span>Connectionless push and other features</a></li>
1095      <li><a href=#garbage-collection-0><span class=secno>10.2.8 </span>Garbage collection</a></li>
1096      <li><a href=#iana-considerations><span class=secno>10.2.9 </span>IANA considerations</a>
1097       <ol>
1098        <li><a href=#text/event-stream><span class=secno>10.2.9.1 </span><code>text/event-stream</code></a></li>
1099        <li><a href=#last-event-id><span class=secno>10.2.9.2 </span><code>Last-Event-ID</code></a></ol></ol></li>
1100    <li><a href=#network><span class=secno>10.3 </span>Web sockets</a>
1101     <ol>
1102      <li><a href=#network-intro><span class=secno>10.3.1 </span>Introduction</a></li>
1103      <li><a href=#the-websocket-interface><span class=secno>10.3.2 </span>The <code>WebSocket</code> interface</a></li>
1104      <li><a href=#feedback-from-the-protocol><span class=secno>10.3.3 </span>Feedback from the protocol</a></li>
1105      <li><a href=#ping-and-pong-frames><span class=secno>10.3.4 </span>Ping and Pong frames</a></li>
1106      <li><a href=#parsing-websocket-urls><span class=secno>10.3.5 </span>Parsing WebSocket URLs</a></li>
1107      <li><a href=#event-definitions-3><span class=secno>10.3.6 </span>Event definitions</a></li>
1108      <li><a href=#garbage-collection-1><span class=secno>10.3.7 </span>Garbage collection</a></ol></li>
1109    <li><a href=#web-messaging><span class=secno>10.4 </span>Cross-document messaging</a>
1110     <ol>
1111      <li><a href=#introduction-10><span class=secno>10.4.1 </span>Introduction</a></li>
1112      <li><a href=#security-postmsg><span class=secno>10.4.2 </span>Security</a>
1113       <ol>
1114        <li><a href=#authors><span class=secno>10.4.2.1 </span>Authors</a></li>
1115        <li><a href=#user-agents><span class=secno>10.4.2.2 </span>User agents</a></ol></li>
1116      <li><a href=#posting-messages><span class=secno>10.4.3 </span>Posting messages</a></ol></li>
1117    <li><a href=#channel-messaging><span class=secno>10.5 </span>Channel messaging</a>
1118     <ol>
1119      <li><a href=#introduction-11><span class=secno>10.5.1 </span>Introduction</a>
1120       <ol>
1121        <li><a href=#examples-5><span class=secno>10.5.1.1 </span>Examples</a></li>
1122        <li><a href=#ports-as-the-basis-of-an-object-capability-model-on-the-web><span class=secno>10.5.1.2 </span>Ports as the basis of an object-capability model on the Web</a></li>
1123        <li><a href=#ports-as-the-basis-of-abstracting-out-service-implementations><span class=secno>10.5.1.3 </span>Ports as the basis of abstracting out service implementations</a></ol></li>
1124      <li><a href=#message-channels><span class=secno>10.5.2 </span>Message channels</a></li>
1125      <li><a href=#message-ports><span class=secno>10.5.3 </span>Message ports</a></li>
1126      <li><a href=#broadcasting-to-many-ports><span class=secno>10.5.4 </span>Broadcasting to many ports</a></li>
1127      <li><a href=#ports-and-garbage-collection><span class=secno>10.5.5 </span>Ports and garbage collection</a></ol></ol></li>
1128  <li><a href=#webstorage><span class=secno>11 </span>Web storage</a>
1129   <ol>
1130    <li><a href=#introduction-12><span class=secno>11.1 </span>Introduction</a></li>
1131    <li><a href=#storage><span class=secno>11.2 </span>The API</a>
1132     <ol>
1133      <li><a href=#the-storage-interface><span class=secno>11.2.1 </span>The <code>Storage</code> interface</a></li>
1134      <li><a href=#the-sessionstorage-attribute><span class=secno>11.2.2 </span>The <code title=dom-sessionStorage>sessionStorage</code> attribute</a></li>
1135      <li><a href=#the-localstorage-attribute><span class=secno>11.2.3 </span>The <code title=dom-localStorage>localStorage</code> attribute</a>
1136       <ol>
1137        <li><a href=#security-localStorage><span class=secno>11.2.3.1 </span>Security</a></ol></li>
1138      <li><a href=#the-storage-event><span class=secno>11.2.4 </span>The <code title=event-storage>storage</code> event</a>
1139       <ol>
1140        <li><a href=#event-definition-0><span class=secno>11.2.4.1 </span>Event definition</a></ol></li>
1141      <li><a href=#threads><span class=secno>11.2.5 </span>Threads</a></ol></li>
1142    <li><a href=#disk-space-0><span class=secno>11.3 </span>Disk space</a></li>
1143    <li><a href=#privacy><span class=secno>11.4 </span>Privacy</a>
1144     <ol>
1145      <li><a href=#user-tracking><span class=secno>11.4.1 </span>User tracking</a></li>
1146      <li><a href=#sensitivity-of-data><span class=secno>11.4.2 </span>Sensitivity of data</a></ol></li>
1147    <li><a href=#security-storage><span class=secno>11.5 </span>Security</a>
1148     <ol>
1149      <li><a href=#dns-spoofing-attacks><span class=secno>11.5.1 </span>DNS spoofing attacks</a></li>
1150      <li><a href=#cross-directory-attacks><span class=secno>11.5.2 </span>Cross-directory attacks</a></li>
1151      <li><a href=#implementation-risks><span class=secno>11.5.3 </span>Implementation risks</a></ol></ol></li>
1152  <li><a href=#syntax><span class=secno>12 </span>The HTML syntax</a>
1153   <ol>
1154    <li><a href=#writing><span class=secno>12.1 </span>Writing HTML documents</a>
1155     <ol>
1156      <li><a href=#the-doctype><span class=secno>12.1.1 </span>The DOCTYPE</a></li>
1157      <li><a href=#elements-0><span class=secno>12.1.2 </span>Elements</a>
1158       <ol>
1159        <li><a href=#start-tags><span class=secno>12.1.2.1 </span>Start tags</a></li>
1160        <li><a href=#end-tags><span class=secno>12.1.2.2 </span>End tags</a></li>
1161        <li><a href=#attributes-0><span class=secno>12.1.2.3 </span>Attributes</a></li>
1162        <li><a href=#optional-tags><span class=secno>12.1.2.4 </span>Optional tags</a></li>
1163        <li><a href=#element-restrictions><span class=secno>12.1.2.5 </span>Restrictions on content models</a></li>
1164        <li><a href=#cdata-rcdata-restrictions><span class=secno>12.1.2.6 </span>Restrictions on the contents of raw text and RCDATA elements</a></ol></li>
1165      <li><a href=#text-0><span class=secno>12.1.3 </span>Text</a>
1166       <ol>
1167        <li><a href=#newlines><span class=secno>12.1.3.1 </span>Newlines</a></ol></li>
1168      <li><a href=#character-references><span class=secno>12.1.4 </span>Character references</a></li>
1169      <li><a href=#cdata-sections><span class=secno>12.1.5 </span>CDATA sections</a></li>
1170      <li><a href=#comments><span class=secno>12.1.6 </span>Comments</a></ol></li>
1171    <li><a href=#parsing><span class=secno>12.2 </span>Parsing HTML documents</a>
1172     <ol>
1173      <li><a href=#overview-of-the-parsing-model><span class=secno>12.2.1 </span>Overview of the parsing model</a></li>
1174      <li><a href=#the-input-byte-stream><span class=secno>12.2.2 </span>The input byte stream</a>
1175       <ol>
1176        <li><a href=#determining-the-character-encoding><span class=secno>12.2.2.1 </span>Determining the character encoding</a></li>
1177        <li><a href=#character-encodings><span class=secno>12.2.2.2 </span>Character encodings</a></li>
1178        <li><a href=#changing-the-encoding-while-parsing><span class=secno>12.2.2.3 </span>Changing the encoding while parsing</a></li>
1179        <li><a href=#preprocessing-the-input-stream><span class=secno>12.2.2.4 </span>Preprocessing the input stream</a></ol></li>
1180      <li><a href=#parse-state><span class=secno>12.2.3 </span>Parse state</a>
1181       <ol>
1182        <li><a href=#the-insertion-mode><span class=secno>12.2.3.1 </span>The insertion mode</a></li>
1183        <li><a href=#the-stack-of-open-elements><span class=secno>12.2.3.2 </span>The stack of open elements</a></li>
1184        <li><a href=#the-list-of-active-formatting-elements><span class=secno>12.2.3.3 </span>The list of active formatting elements</a></li>
1185        <li><a href=#the-element-pointers><span class=secno>12.2.3.4 </span>The element pointers</a></li>
1186        <li><a href=#other-parsing-state-flags><span class=secno>12.2.3.5 </span>Other parsing state flags</a></ol></li>
1187      <li><a href=#tokenization><span class=secno>12.2.4 </span>Tokenization</a>
1188       <ol>
1189        <li><a href=#data-state><span class=secno>12.2.4.1 </span>Data state</a></li>
1190        <li><a href=#character-reference-in-data-state><span class=secno>12.2.4.2 </span>Character reference in data state</a></li>
1191        <li><a href=#rcdata-state><span class=secno>12.2.4.3 </span>RCDATA state</a></li>
1192        <li><a href=#character-reference-in-rcdata-state><span class=secno>12.2.4.4 </span>Character reference in RCDATA state</a></li>
1193        <li><a href=#rawtext-state><span class=secno>12.2.4.5 </span>RAWTEXT state</a></li>
1194        <li><a href=#script-data-state><span class=secno>12.2.4.6 </span>Script data state</a></li>
1195        <li><a href=#plaintext-state><span class=secno>12.2.4.7 </span>PLAINTEXT state</a></li>
1196        <li><a href=#tag-open-state><span class=secno>12.2.4.8 </span>Tag open state</a></li>
1197        <li><a href=#end-tag-open-state><span class=secno>12.2.4.9 </span>End tag open state</a></li>
1198        <li><a href=#tag-name-state><span class=secno>12.2.4.10 </span>Tag name state</a></li>
1199        <li><a href=#rcdata-less-than-sign-state><span class=secno>12.2.4.11 </span>RCDATA less-than sign state</a></li>
1200        <li><a href=#rcdata-end-tag-open-state><span class=secno>12.2.4.12 </span>RCDATA end tag open state</a></li>
1201        <li><a href=#rcdata-end-tag-name-state><span class=secno>12.2.4.13 </span>RCDATA end tag name state</a></li>
1202        <li><a href=#rawtext-less-than-sign-state><span class=secno>12.2.4.14 </span>RAWTEXT less-than sign state</a></li>
1203        <li><a href=#rawtext-end-tag-open-state><span class=secno>12.2.4.15 </span>RAWTEXT end tag open state</a></li>
1204        <li><a href=#rawtext-end-tag-name-state><span class=secno>12.2.4.16 </span>RAWTEXT end tag name state</a></li>
1205        <li><a href=#script-data-less-than-sign-state><span class=secno>12.2.4.17 </span>Script data less-than sign state</a></li>
1206        <li><a href=#script-data-end-tag-open-state><span class=secno>12.2.4.18 </span>Script data end tag open state</a></li>
1207        <li><a href=#script-data-end-tag-name-state><span class=secno>12.2.4.19 </span>Script data end tag name state</a></li>
1208        <li><a href=#script-data-escape-start-state><span class=secno>12.2.4.20 </span>Script data escape start state</a></li>
1209        <li><a href=#script-data-escape-start-dash-state><span class=secno>12.2.4.21 </span>Script data escape start dash state</a></li>
1210        <li><a href=#script-data-escaped-state><span class=secno>12.2.4.22 </span>Script data escaped state</a></li>
1211        <li><a href=#script-data-escaped-dash-state><span class=secno>12.2.4.23 </span>Script data escaped dash state</a></li>
1212        <li><a href=#script-data-escaped-dash-dash-state><span class=secno>12.2.4.24 </span>Script data escaped dash dash state</a></li>
1213        <li><a href=#script-data-escaped-less-than-sign-state><span class=secno>12.2.4.25 </span>Script data escaped less-than sign state</a></li>
1214        <li><a href=#script-data-escaped-end-tag-open-state><span class=secno>12.2.4.26 </span>Script data escaped end tag open state</a></li>
1215        <li><a href=#script-data-escaped-end-tag-name-state><span class=secno>12.2.4.27 </span>Script data escaped end tag name state</a></li>
1216        <li><a href=#script-data-double-escape-start-state><span class=secno>12.2.4.28 </span>Script data double escape start state</a></li>
1217        <li><a href=#script-data-double-escaped-state><span class=secno>12.2.4.29 </span>Script data double escaped state</a></li>
1218        <li><a href=#script-data-double-escaped-dash-state><span class=secno>12.2.4.30 </span>Script data double escaped dash state</a></li>
1219        <li><a href=#script-data-double-escaped-dash-dash-state><span class=secno>12.2.4.31 </span>Script data double escaped dash dash state</a></li>
1220        <li><a href=#script-data-double-escaped-less-than-sign-state><span class=secno>12.2.4.32 </span>Script data double escaped less-than sign state</a></li>
1221        <li><a href=#script-data-double-escape-end-state><span class=secno>12.2.4.33 </span>Script data double escape end state</a></li>
1222        <li><a href=#before-attribute-name-state><span class=secno>12.2.4.34 </span>Before attribute name state</a></li>
1223        <li><a href=#attribute-name-state><span class=secno>12.2.4.35 </span>Attribute name state</a></li>
1224        <li><a href=#after-attribute-name-state><span class=secno>12.2.4.36 </span>After attribute name state</a></li>
1225        <li><a href=#before-attribute-value-state><span class=secno>12.2.4.37 </span>Before attribute value state</a></li>
1226        <li><a href=#attribute-value-(double-quoted)-state><span class=secno>12.2.4.38 </span>Attribute value (double-quoted) state</a></li>
1227        <li><a href=#attribute-value-(single-quoted)-state><span class=secno>12.2.4.39 </span>Attribute value (single-quoted) state</a></li>
1228        <li><a href=#attribute-value-(unquoted)-state><span class=secno>12.2.4.40 </span>Attribute value (unquoted) state</a></li>
1229        <li><a href=#character-reference-in-attribute-value-state><span class=secno>12.2.4.41 </span>Character reference in attribute value state</a></li>
1230        <li><a href=#after-attribute-value-(quoted)-state><span class=secno>12.2.4.42 </span>After attribute value (quoted) state</a></li>
1231        <li><a href=#self-closing-start-tag-state><span class=secno>12.2.4.43 </span>Self-closing start tag state</a></li>
1232        <li><a href=#bogus-comment-state><span class=secno>12.2.4.44 </span>Bogus comment state</a></li>
1233        <li><a href=#markup-declaration-open-state><span class=secno>12.2.4.45 </span>Markup declaration open state</a></li>
1234        <li><a href=#comment-start-state><span class=secno>12.2.4.46 </span>Comment start state</a></li>
1235        <li><a href=#comment-start-dash-state><span class=secno>12.2.4.47 </span>Comment start dash state</a></li>
1236        <li><a href=#comment-state><span class=secno>12.2.4.48 </span>Comment state</a></li>
1237        <li><a href=#comment-end-dash-state><span class=secno>12.2.4.49 </span>Comment end dash state</a></li>
1238        <li><a href=#comment-end-state><span class=secno>12.2.4.50 </span>Comment end state</a></li>
1239        <li><a href=#comment-end-bang-state><span class=secno>12.2.4.51 </span>Comment end bang state</a></li>
1240        <li><a href=#doctype-state><span class=secno>12.2.4.52 </span>DOCTYPE state</a></li>
1241        <li><a href=#before-doctype-name-state><span class=secno>12.2.4.53 </span>Before DOCTYPE name state</a></li>
1242        <li><a href=#doctype-name-state><span class=secno>12.2.4.54 </span>DOCTYPE name state</a></li>
1243        <li><a href=#after-doctype-name-state><span class=secno>12.2.4.55 </span>After DOCTYPE name state</a></li>
1244        <li><a href=#after-doctype-public-keyword-state><span class=secno>12.2.4.56 </span>After DOCTYPE public keyword state</a></li>
1245        <li><a href=#before-doctype-public-identifier-state><span class=secno>12.2.4.57 </span>Before DOCTYPE public identifier state</a></li>
1246        <li><a href=#doctype-public-identifier-(double-quoted)-state><span class=secno>12.2.4.58 </span>DOCTYPE public identifier (double-quoted) state</a></li>
1247        <li><a href=#doctype-public-identifier-(single-quoted)-state><span class=secno>12.2.4.59 </span>DOCTYPE public identifier (single-quoted) state</a></li>
1248        <li><a href=#after-doctype-public-identifier-state><span class=secno>12.2.4.60 </span>After DOCTYPE public identifier state</a></li>
1249        <li><a href=#between-doctype-public-and-system-identifiers-state><span class=secno>12.2.4.61 </span>Between DOCTYPE public and system identifiers state</a></li>
1250        <li><a href=#after-doctype-system-keyword-state><span class=secno>12.2.4.62 </span>After DOCTYPE system keyword state</a></li>
1251        <li><a href=#before-doctype-system-identifier-state><span class=secno>12.2.4.63 </span>Before DOCTYPE system identifier state</a></li>
1252        <li><a href=#doctype-system-identifier-(double-quoted)-state><span class=secno>12.2.4.64 </span>DOCTYPE system identifier (double-quoted) state</a></li>
1253        <li><a href=#doctype-system-identifier-(single-quoted)-state><span class=secno>12.2.4.65 </span>DOCTYPE system identifier (single-quoted) state</a></li>
1254        <li><a href=#after-doctype-system-identifier-state><span class=secno>12.2.4.66 </span>After DOCTYPE system identifier state</a></li>
1255        <li><a href=#bogus-doctype-state><span class=secno>12.2.4.67 </span>Bogus DOCTYPE state</a></li>
1256        <li><a href=#cdata-section-state><span class=secno>12.2.4.68 </span>CDATA section state</a></li>
1257        <li><a href=#tokenizing-character-references><span class=secno>12.2.4.69 </span>Tokenizing character references</a></ol></li>
1258      <li><a href=#tree-construction><span class=secno>12.2.5 </span>Tree construction</a>
1259       <ol>
1260        <li><a href=#creating-and-inserting-elements><span class=secno>12.2.5.1 </span>Creating and inserting elements</a></li>
1261        <li><a href=#closing-elements-that-have-implied-end-tags><span class=secno>12.2.5.2 </span>Closing elements that have implied end tags</a></li>
1262        <li><a href=#foster-parenting><span class=secno>12.2.5.3 </span>Foster parenting</a></li>
1263        <li><a href=#parsing-main-inhtml><span class=secno>12.2.5.4 </span>The rules for parsing tokens in HTML content</a>
1264         <ol>
1265          <li><a href=#the-initial-insertion-mode><span class=secno>12.2.5.4.1 </span>The "initial" insertion mode</a></li>
1266          <li><a href=#the-before-html-insertion-mode><span class=secno>12.2.5.4.2 </span>The "before html" insertion mode</a></li>
1267          <li><a href=#the-before-head-insertion-mode><span class=secno>12.2.5.4.3 </span>The "before head" insertion mode</a></li>
1268          <li><a href=#parsing-main-inhead><span class=secno>12.2.5.4.4 </span>The "in head" insertion mode</a></li>
1269          <li><a href=#parsing-main-inheadnoscript><span class=secno>12.2.5.4.5 </span>The "in head noscript" insertion mode</a></li>
1270          <li><a href=#the-after-head-insertion-mode><span class=secno>12.2.5.4.6 </span>The "after head" insertion mode</a></li>
1271          <li><a href=#parsing-main-inbody><span class=secno>12.2.5.4.7 </span>The "in body" insertion mode</a></li>
1272          <li><a href=#parsing-main-incdata><span class=secno>12.2.5.4.8 </span>The "text" insertion mode</a></li>
1273          <li><a href=#parsing-main-intable><span class=secno>12.2.5.4.9 </span>The "in table" insertion mode</a></li>
1274          <li><a href=#parsing-main-intabletext><span class=secno>12.2.5.4.10 </span>The "in table text" insertion mode</a></li>
1275          <li><a href=#parsing-main-incaption><span class=secno>12.2.5.4.11 </span>The "in caption" insertion mode</a></li>
1276          <li><a href=#parsing-main-incolgroup><span class=secno>12.2.5.4.12 </span>The "in column group" insertion mode</a></li>
1277          <li><a href=#parsing-main-intbody><span class=secno>12.2.5.4.13 </span>The "in table body" insertion mode</a></li>
1278          <li><a href=#parsing-main-intr><span class=secno>12.2.5.4.14 </span>The "in row" insertion mode</a></li>
1279          <li><a href=#parsing-main-intd><span class=secno>12.2.5.4.15 </span>The "in cell" insertion mode</a></li>
1280          <li><a href=#parsing-main-inselect><span class=secno>12.2.5.4.16 </span>The "in select" insertion mode</a></li>
1281          <li><a href=#parsing-main-inselectintable><span class=secno>12.2.5.4.17 </span>The "in select in table" insertion mode</a></li>
1282          <li><a href=#parsing-main-afterbody><span class=secno>12.2.5.4.18 </span>The "after body" insertion mode</a></li>
1283          <li><a href=#parsing-main-inframeset><span class=secno>12.2.5.4.19 </span>The "in frameset" insertion mode</a></li>
1284          <li><a href=#parsing-main-afterframeset><span class=secno>12.2.5.4.20 </span>The "after frameset" insertion mode</a></li>
1285          <li><a href=#the-after-after-body-insertion-mode><span class=secno>12.2.5.4.21 </span>The "after after body" insertion mode</a></li>
1286          <li><a href=#the-after-after-frameset-insertion-mode><span class=secno>12.2.5.4.22 </span>The "after after frameset" insertion mode</a></ol></li>
1287        <li><a href=#parsing-main-inforeign><span class=secno>12.2.5.5 </span>The rules for parsing tokens in foreign content</a></ol></li>
1288      <li><a href=#the-end><span class=secno>12.2.6 </span>The end</a></li>
1289      <li><a href=#coercing-an-html-dom-into-an-infoset><span class=secno>12.2.7 </span>Coercing an HTML DOM into an infoset</a></li>
1290      <li><a href=#an-introduction-to-error-handling-and-strange-cases-in-the-parser><span class=secno>12.2.8 </span>An introduction to error handling and strange cases in the parser</a>
1291       <ol>
1292        <li><a href=#misnested-tags:-b-i-/b-/i><span class=secno>12.2.8.1 </span>Misnested tags: &lt;b&gt;&lt;i&gt;&lt;/b&gt;&lt;/i&gt;</a></li>
1293        <li><a href=#misnested-tags:-b-p-/b-/p><span class=secno>12.2.8.2 </span>Misnested tags: &lt;b&gt;&lt;p&gt;&lt;/b&gt;&lt;/p&gt;</a></li>
1294        <li><a href=#unexpected-markup-in-tables><span class=secno>12.2.8.3 </span>Unexpected markup in tables</a></li>
1295        <li><a href=#scripts-that-modify-the-page-as-it-is-being-parsed><span class=secno>12.2.8.4 </span>Scripts that modify the page as it is being parsed</a></li>
1296        <li><a href=#the-execution-of-scripts-that-are-moving-across-multiple-documents><span class=secno>12.2.8.5 </span>The execution of scripts that are moving across multiple documents</a></li>
1297        <li><a href=#unclosed-formatting-elements><span class=secno>12.2.8.6 </span>Unclosed formatting elements</a></ol></ol></li>
1298    <li><a href=#serializing-html-fragments><span class=secno>12.3 </span>Serializing HTML fragments</a></li>
1299    <li><a href=#parsing-html-fragments><span class=secno>12.4 </span>Parsing HTML fragments</a></li>
1300    <li><a href=#named-character-references><span class=secno>12.5 </span>Named character references</a></ol></li>
1301  <li><a href=#the-xhtml-syntax><span class=secno>13 </span>The XHTML syntax</a>
1302   <ol>
1303    <li><a href=#writing-xhtml-documents><span class=secno>13.1 </span>Writing XHTML documents</a></li>
1304    <li><a href=#parsing-xhtml-documents><span class=secno>13.2 </span>Parsing XHTML documents</a></li>
1305    <li><a href=#serializing-xhtml-fragments><span class=secno>13.3 </span>Serializing XHTML fragments</a></li>
1306    <li><a href=#parsing-xhtml-fragments><span class=secno>13.4 </span>Parsing XHTML fragments</a></ol></li>
1307  <li><a href=#rendering><span class=secno>14 </span>Rendering</a>
1308   <ol>
1309    <li><a href=#introduction-13><span class=secno>14.1 </span>Introduction</a></li>
1310    <li><a href=#the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>14.2 </span>The CSS user agent style sheet and presentational hints</a></li>
1311    <li><a href=#non-replaced-elements><span class=secno>14.3 </span>Non-replaced elements</a>
1312     <ol>
1313      <li><a href=#hidden-elements><span class=secno>14.3.1 </span>Hidden elements</a></li>
1314      <li><a href=#the-page><span class=secno>14.3.2 </span>The page</a></li>
1315      <li><a href=#flow-content-1><span class=secno>14.3.3 </span>Flow content</a></li>
1316      <li><a href=#phrasing-content-1><span class=secno>14.3.4 </span>Phrasing content</a></li>
1317      <li><a href=#bidirectional-text><span class=secno>14.3.5 </span>Bidirectional text</a></li>
1318      <li><a href=#quotes><span class=secno>14.3.6 </span>Quotes</a></li>
1319      <li><a href=#sections-and-headings><span class=secno>14.3.7 </span>Sections and headings</a></li>
1320      <li><a href=#lists><span class=secno>14.3.8 </span>Lists</a></li>
1321      <li><a href=#tables><span class=secno>14.3.9 </span>Tables</a></li>
1322      <li><a href=#form-controls><span class=secno>14.3.10 </span>Form controls</a></li>
1323      <li><a href=#the-hr-element-0><span class=secno>14.3.11 </span>The <code>hr</code> element</a></li>
1324      <li><a href=#the-fieldset-element-0><span class=secno>14.3.12 </span>The <code>fieldset</code> element</a></ol></li>
1325    <li><a href=#replaced-elements><span class=secno>14.4 </span>Replaced elements</a>
1326     <ol>
1327      <li><a href=#embedded-content-2><span class=secno>14.4.1 </span>Embedded content</a></li>
1328      <li><a href=#images-0><span class=secno>14.4.2 </span>Images</a></li>
1329      <li><a href=#attributes-for-embedded-content-and-images><span class=secno>14.4.3 </span>Attributes for embedded content and images</a></li>
1330      <li><a href=#image-maps-0><span class=secno>14.4.4 </span>Image maps</a></ol></li>
1331    <li><a href=#bindings><span class=secno>14.5 </span>Bindings</a>
1332     <ol>
1333      <li><a href=#introduction-14><span class=secno>14.5.1 </span>Introduction</a></li>
1334      <li><a href=#the-button-element-0><span class=secno>14.5.2 </span>The <code>button</code> element</a></li>
1335      <li><a href=#the-details-element-0><span class=secno>14.5.3 </span>The <code>details</code> element</a></li>
1336      <li><a href=#the-input-element-as-a-text-entry-widget><span class=secno>14.5.4 </span>The <code>input</code> element as a text entry widget</a></li>
1337      <li><a href=#the-input-element-as-domain-specific-widgets><span class=secno>14.5.5 </span>The <code>input</code> element as domain-specific widgets</a></li>
1338      <li><a href=#the-input-element-as-a-range-control><span class=secno>14.5.6 </span>The <code>input</code> element as a range control</a></li>
1339      <li><a href=#the-input-element-as-a-color-well><span class=secno>14.5.7 </span>The <code>input</code> element as a color well</a></li>
1340      <li><a href=#the-input-element-as-a-checkbox-and-radio-button-widgets><span class=secno>14.5.8 </span>The <code>input</code> element as a checkbox and radio button widgets</a></li>
1341      <li><a href=#the-input-element-as-a-file-upload-control><span class=secno>14.5.9 </span>The <code>input</code> element as a file upload control</a></li>
1342      <li><a href=#the-input-element-as-a-button><span class=secno>14.5.10 </span>The <code>input</code> element as a button</a></li>
1343      <li><a href=#the-marquee-element-0><span class=secno>14.5.11 </span>The <code>marquee</code> element</a></li>
1344      <li><a href=#the-meter-element-0><span class=secno>14.5.12 </span>The <code>meter</code> element</a></li>
1345      <li><a href=#the-progress-element-0><span class=secno>14.5.13 </span>The <code>progress</code> element</a></li>
1346      <li><a href=#the-select-element-0><span class=secno>14.5.14 </span>The <code>select</code> element</a></li>
1347      <li><a href=#the-textarea-element-0><span class=secno>14.5.15 </span>The <code>textarea</code> element</a></li>
1348      <li><a href=#the-keygen-element-0><span class=secno>14.5.16 </span>The <code>keygen</code> element</a></ol></li>
1349    <li><a href=#frames-and-framesets><span class=secno>14.6 </span>Frames and framesets</a></li>
1350    <li><a href=#interactive-media><span class=secno>14.7 </span>Interactive media</a>
1351     <ol>
1352      <li><a href=#links,-forms,-and-navigation><span class=secno>14.7.1 </span>Links, forms, and navigation</a></li>
1353      <li><a href=#the-title-attribute-0><span class=secno>14.7.2 </span>The <code title=attr-title>title</code> attribute</a></li>
1354      <li><a href=#editing-hosts><span class=secno>14.7.3 </span>Editing hosts</a></li>
1355      <li><a href=#text-rendered-in-native-user-interfaces><span class=secno>14.7.4 </span>Text rendered in native user interfaces</a></ol></li>
1356    <li><a href=#print-media><span class=secno>14.8 </span>Print media</a></li>
1357    <li><a href=#unstyled-xml-documents><span class=secno>14.9 </span>Unstyled XML documents</a></ol></li>
1358  <li><a href=#obsolete><span class=secno>15 </span>Obsolete features</a>
1359   <ol>
1360    <li><a href=#obsolete-but-conforming-features><span class=secno>15.1 </span>Obsolete but conforming features</a>
1361     <ol>
1362      <li><a href=#warnings-for-obsolete-but-conforming-features><span class=secno>15.1.1 </span>Warnings for obsolete but conforming features</a></ol></li>
1363    <li><a href=#non-conforming-features><span class=secno>15.2 </span>Non-conforming features</a></li>
1364    <li><a href=#requirements-for-implementations><span class=secno>15.3 </span>Requirements for implementations</a>
1365     <ol>
1366      <li><a href=#the-applet-element><span class=secno>15.3.1 </span>The <code>applet</code> element</a></li>
1367      <li><a href=#the-marquee-element><span class=secno>15.3.2 </span>The <code>marquee</code> element</a></li>
1368      <li><a href=#frames><span class=secno>15.3.3 </span>Frames</a></li>
1369      <li><a href=#other-elements,-attributes-and-apis><span class=secno>15.3.4 </span>Other elements, attributes and APIs</a></ol></ol></li>
1370  <li><a href=#iana><span class=secno>16 </span>IANA considerations</a>
1371   <ol>
1372    <li><a href=#text/html><span class=secno>16.1 </span><code>text/html</code></a></li>
1373    <li><a href=#multipart/x-mixed-replace><span class=secno>16.2 </span><code>multipart/x-mixed-replace</code></a></li>
1374    <li><a href=#application/xhtml+xml><span class=secno>16.3 </span><code>application/xhtml+xml</code></a></li>
1375    <li><a href=#application/x-www-form-urlencoded><span class=secno>16.4 </span><code>application/x-www-form-urlencoded</code></a></li>
1376    <li><a href=#text/cache-manifest><span class=secno>16.5 </span><code>text/cache-manifest</code></a></li>
1377    <li><a href=#text/ping><span class=secno>16.6 </span><code>text/ping</code></a></li>
1378    <li><a href=#application/microdata+json><span class=secno>16.7 </span><code>application/microdata+json</code></a></li>
1379    <li><a href=#ping-from><span class=secno>16.8 </span><code>Ping-From</code></a></li>
1380    <li><a href=#ping-to><span class=secno>16.9 </span><code>Ping-To</code></a></li>
1381    <li><a href=#web+-scheme-prefix><span class=secno>16.10 </span><code>web+</code> scheme prefix</a></ol></li>
1382  <li><a class=no-num href=#index>Index</a>
1383   <ol>
1384    <li><a class=no-num href=#elements-1>Elements</a></li>
1385    <li><a class=no-num href=#element-content-categories>Element content categories</a></li>
1386    <li><a class=no-num href=#attributes-1>Attributes</a></li>
1387    <li><a class=no-num href=#element-interfaces>Element Interfaces</a></li>
1388    <li><a class=no-num href=#all-interfaces>All Interfaces</a></ol></li>
1389  <li><a class=no-num href=#references>References</a></li>
1390  <li><a class=no-num href=#acknowledgements>Acknowledgements</a></ol>
1391 <!--end-toc-->
1392   <hr><!-- An advisory for those reading this source. --><!-- In this specification, there are a number of comments (like
1393         this one) that have three consecutive Xs. These indicate known
1394         problems that are expected to be resolved in the future. --><!-- There are also comments with the string "v2", "v3", "v4", or
1395         higher numbers. These indicate ideas for future versions of
1396         the specification that have not yet been included, usually
1397         because it's too early (one has to move slowly lest the
1398         browser vendors get overwhelmed with changes). --><!-- Finally, there may also be some known issues in this
1399         specification marked with the following punctuation: --><!--!--><!-- These are issues that are known to the editor but cannot be
1400         currently fixed because they were introduced by W3C decisions.
1401         In theory we could fork the WHATWG copy of the spec, but doing
1402         so would introduce normative differences between the W3C and
1403         WHATWG specs and these issues are not worth the hassle that
1404         this would cause. We'll probably be able to fix them some day,
1405         but for now we are living with them. --><h2 id=introduction><span class=secno>1 </span>Introduction</h2>
1406
1407
1408   <h3 id=abstract><span class=secno>1.1 </span>Where does this specification fit?</h3>
1409
1410   <p>This specification defines a big part of the Web platform, in
1411   lots of detail. Its place in the Web platform specification stack
1412   relative to other specifications can be best summed up as
1413   follows:</p>
1414
1415   <p><img alt="It consists of everything else, above such core technologies as HTTP, URI/IRIs, DOM, XML, Unicode, and ECMAScript; below presentation-layer technologies like CSS, XBL, and the NPAPI; and to the side of technologies like Geolocation, SVG, MathML, and XHR." height=359 src=http://images.whatwg.org/abstract.png width=398></p>
1416
1417
1418
1419   <h3 id=is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</h3><!--VERSION-->
1420
1421   <p><i>This section is non-normative.</i></p>
1422
1423   <p>In short: Yes.</p>
1424
1425   <p>In more length: The term "HTML5" is widely used as a buzzword to
1426   refer to modern Web technologies, many of which (though by no means
1427   all) are developed at the WHATWG, in some cases in conjunction with
1428   the W3C and IETF.</p>
1429
1430   <p>The WHATWG work is all published in one specification
1431
1432   (the one you are reading right now),
1433
1434   parts of which are republished in an edition optimized for Web developers
1435   </p>
1436
1437   <p>The W3C also publishes parts of this specification as separate
1438   documents. One of these parts is called "HTML5"; it is a forked subset of
1439
1440   this specification (the HTML Living Standard).
1441   There are numerous differences between 
1442
1443   this specification (the HTML Living Standard)
1444   and the W3C version, some minor, some major. Unfortunately these are not currently accurately
1445   documented anywhere, so there is no way to know which are intentional and which are not.</p>
1446
1447
1448
1449   <h3 id=background><span class=secno>1.3 </span>Background</h3>
1450
1451   <p><i>This section is non-normative.</i></p>
1452
1453   <p>The World Wide Web's markup language has always been HTML. HTML was primarily designed as a
1454   language for semantically describing scientific documents, although its general design and
1455   adaptations over the years have enabled it to be used to describe a number of other types of
1456   documents.</p>
1457
1458   <p>The main area that has not been adequately addressed by HTML is a vague subject referred to as
1459   Web Applications. This specification attempts to rectify this, while at the same time updating the
1460   HTML specifications to address issues raised in the past few years.</p>
1461
1462
1463   <h3 id=audience><span class=secno>1.4 </span>Audience</h3>
1464
1465   <p><i>This section is non-normative.</i></p>
1466
1467   <p>This specification is intended for authors of documents and scripts that use the features
1468   defined in this specification<span class=impl>, implementors of tools that operate on pages that
1469   use the features defined in this specification, and individuals wishing to establish the
1470   correctness of documents or implementations with respect to the requirements of this
1471   specification</span>.</p>
1472
1473   <p>This document is probably not suited to readers who do not already have at least a passing
1474   familiarity with Web technologies, as in places it sacrifices clarity for precision, and brevity
1475   for completeness. More approachable tutorials and authoring guides can provide a gentler
1476   introduction to the topic.</p>
1477
1478   <p>In particular, familiarity with the basics of DOM is necessary for a complete understanding of
1479   some of the more technical parts of this specification. An understanding of Web IDL, HTTP, XML,
1480   Unicode, character encodings, JavaScript, and CSS will also be helpful in places but is not
1481   essential.</p>
1482
1483
1484   <h3 id=scope><span class=secno>1.5 </span>Scope</h3>
1485
1486   <p><i>This section is non-normative.</i></p>
1487
1488   <p>This specification is limited to providing a semantic-level markup language and associated
1489   semantic-level scripting APIs for authoring accessible pages on the Web ranging from static
1490   documents to dynamic applications.</p>
1491
1492   <p>The scope of this specification does not include providing mechanisms for media-specific
1493   customization of presentation (although default rendering rules for Web browsers are included at
1494   the end of this specification, and several mechanisms for hooking into CSS are provided as part of
1495   the language).</p>
1496
1497   <p>The scope of this specification is not to describe an entire operating system. In particular,
1498   hardware configuration software, image manipulation tools, and applications that users would be
1499   expected to use with high-end workstations on a daily basis are out of scope. In terms of
1500   applications, this specification is targeted specifically at applications that would be expected
1501   to be used by users on an occasional basis, or regularly but from disparate locations, with low
1502   CPU requirements. Examples of such applications include online purchasing systems, searching
1503   systems, games (especially multiplayer online games), public telephone books or address books,
1504   communications software (e-mail clients, instant messaging clients, discussion software), document
1505   editing software, etc.</p>
1506
1507
1508   <h3 id=history-1><span class=secno>1.6 </span>History</h3>
1509
1510   <p><i>This section is non-normative.</i></p>
1511
1512   <p>For its first five years (1990-1995), HTML went through a number of revisions and experienced a
1513   number of extensions, primarily hosted first at CERN, and then at the IETF.</p>
1514
1515   <p>With the creation of the W3C, HTML's development changed venue again. A first abortive attempt
1516   at extending HTML in 1995 known as HTML 3.0 then made way to a more pragmatic approach known as
1517   HTML 3.2, which was completed in 1997. HTML4 quickly followed later that same year.</p>
1518
1519   <p>The following year, the W3C membership decided to stop evolving HTML and instead begin work on
1520   an XML-based equivalent, called XHTML. <!-- http://www.w3.org/MarkUp/future/#summary --> This
1521   effort started with a reformulation of HTML4 in XML, known as XHTML 1.0, which added no new
1522   features except the new serialization, and which was completed in 2000. After XHTML 1.0, the W3C's
1523   focus turned to making it easier for other working groups to extend XHTML, under the banner of
1524   XHTML Modularization. In parallel with this, the W3C also worked on a new language that was not
1525   compatible with the earlier HTML and XHTML languages, calling it XHTML2.</p>
1526
1527   <p>Around the time that HTML's evolution was stopped in 1998, parts of the API for HTML developed
1528   by browser vendors were specified and published under the name DOM Level 1 (in 1998) and DOM Level
1529   2 Core and DOM Level 2 HTML (starting in 2000 and culminating in 2003). These efforts then petered
1530   out, with some DOM Level 3 specifications published in 2004 but the working group being closed
1531   before all the Level 3 drafts were completed.</p>
1532
1533   <p>In 2003, the publication of XForms, a technology which was positioned as the next generation of
1534   Web forms, sparked a renewed interest in evolving HTML itself, rather than finding replacements
1535   for it. This interest was borne from the realization that XML's deployment as a Web technology was
1536   limited to entirely new technologies (like RSS and later Atom), rather than as a replacement for
1537   existing deployed technologies (like HTML).</p>
1538
1539   <p>A proof of concept to show that it was possible to extend HTML4's forms to provide many of the
1540   features that XForms 1.0 introduced, without requiring browsers to implement rendering engines
1541   that were incompatible with existing HTML Web pages, was the first result of this renewed
1542   interest. At this early stage, while the draft was already publicly available, and input was
1543   already being solicited from all sources, the specification was only under Opera Software's
1544   copyright.</p>
1545
1546   <p>The idea that HTML's evolution should be reopened was tested at a W3C workshop in 2004, where
1547   some of the principles that underlie the HTML5 work (described below), as well as the
1548   aforementioned early draft proposal covering just forms-related features, were presented to the
1549   W3C jointly by Mozilla and Opera. The proposal was rejected on the grounds that the proposal
1550   conflicted with the previously chosen direction for the Web's evolution; the W3C staff and
1551   membership voted to continue developing XML-based replacements instead.</p>
1552
1553   <p>Shortly thereafter, Apple, Mozilla, and Opera jointly announced their intent to continue
1554   working on the effort under the umbrella of a new venue called the WHATWG. A public mailing list
1555   was created, and the draft was moved to the WHATWG site. The copyright was subsequently amended to
1556   be jointly owned by all three vendors, and to allow reuse of the specification.</p>
1557
1558   <p>The WHATWG was based on several core principles, in particular that technologies need to be
1559   backwards compatible, that specifications and implementations need to match even if this means
1560   changing the specification rather than the implementations, and that specifications need to be
1561   detailed enough that implementations can achieve complete interoperability without
1562   reverse-engineering each other.</p>
1563
1564   <p>The latter requirement in particular required that the scope of the HTML5 specification include
1565   what had previously been specified in three separate documents: HTML4, XHTML1, and DOM2 HTML. It
1566   also meant including significantly more detail than had previously been considered the norm.</p>
1567
1568   <p>In 2006, the W3C indicated an interest to participate in the development of HTML5 after all,
1569   and in 2007 formed a working group chartered to work with the WHATWG on the development of the
1570   HTML5 specification. Apple, Mozilla, and Opera allowed the W3C to publish the specification under
1571   the W3C copyright, while keeping a version with the less restrictive license on the WHATWG
1572   site.</p>
1573
1574   <p>For a number of years, both groups then worked together. In 2011, however, the groups came to
1575   the conclusion that they had different goals: the W3C wanted to publish a "finished" version of
1576   "HTML5", while the WHATWG wanted to continue working on a Living Standard for HTML, continuously
1577   maintaining the specification rather than freezing it in a state with known problems, and adding
1578   new features as needed to evolve the platform.</p>
1579
1580   <p>Since then, the WHATWG has been working on this specification (amongst others), and the W3C has
1581   been copying fixes made by the WHATWG into their fork of the document, as well as making other
1582   changes, many of which are described <a href=#is-this-html5?>above</a>.</p>
1583
1584
1585
1586
1587   <h3 id=design-notes><span class=secno>1.7 </span>Design notes</h3>
1588
1589   <p><i>This section is non-normative.</i></p>
1590
1591   <p>It must be admitted that many aspects of HTML appear at first glance to be nonsensical and
1592   inconsistent.</p>
1593
1594   <p>HTML, its supporting DOM APIs, as well as many of its supporting technologies, have been
1595   developed over a period of several decades by a wide array of people with different priorities
1596   who, in many cases, did not know of each other's existence.</p>
1597
1598   <p>Features have thus arisen from many sources, and have not always been designed in especially
1599   consistent ways. Furthermore, because of the unique characteristics of the Web, implementation
1600   bugs have often become de-facto, and now de-jure, standards, as content is often unintentionally
1601   written in ways that rely on them before they can be fixed.</p>
1602
1603   <p>Despite all this, efforts have been made to adhere to certain design goals. These are described
1604   in the next few subsections.</p>
1605
1606
1607   <h4 id=serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</h4>
1608
1609   <p><i>This section is non-normative.</i></p>
1610
1611   <p>To avoid exposing Web authors to the complexities of multithreading, the HTML and DOM APIs are
1612   designed such that no script can ever detect the simultaneous execution of other scripts. Even
1613   with <a href=#worker title=Worker>workers</a>, the intent is that the behavior of implementations can
1614   be thought of as completely serializing the execution of all scripts in all <a href=#browsing-context title="browsing
1615   context">browsing contexts</a>.</p>
1616
1617   <p class=note>The <code title=dom-navigator-yieldForStorageUpdates><a href=#dom-navigator-yieldforstorageupdates>navigator.yieldForStorageUpdates()</a></code> method, in
1618   this model, is equivalent to allowing other scripts to run while the calling script is
1619   blocked.</p>
1620
1621
1622   <h4 id=compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</h4>
1623
1624   <p><i>This section is non-normative.</i></p>
1625
1626   <p>This specification interacts with and relies on a wide variety of other specifications. In
1627   certain circumstances, unfortunately, conflicting needs have led to this specification violating
1628   the requirements of these other specifications. Whenever this has occurred, the transgressions
1629   have each been noted as a "<dfn id=willful-violation>willful violation</dfn>", and the reason for the violation has
1630   been noted.</p>
1631
1632
1633
1634
1635   <h3 id=html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</h3>
1636
1637   <p><i>This section is non-normative.</i></p>
1638
1639   <p>This specification defines an abstract language for describing documents and applications, and
1640   some APIs for interacting with in-memory representations of resources that use this language.</p>
1641
1642   <p>The in-memory representation is known as "DOM HTML", or "the DOM" for short.</p>
1643
1644   <p>There are various concrete syntaxes that can be used to transmit resources that use this
1645   abstract language, two of which are defined in this specification.</p>
1646
1647   <p>The first such concrete syntax is the HTML syntax. This is the format suggested for most
1648   authors. It is compatible with most legacy Web browsers. If a document is transmitted with the
1649   <code><a href=#text/html>text/html</a></code> <a href=#mime-type>MIME type</a>, then it will be processed as an HTML document by
1650   Web browsers. This specification defines the latest HTML syntax, known simply as "HTML".</p>
1651
1652   <p>The second concrete syntax is the XHTML syntax, which is an application of XML. When a document
1653   is transmitted with an <a href=#xml-mime-type>XML MIME type</a>, such as <code><a href=#application/xhtml+xml>application/xhtml+xml</a></code>,
1654   then it is treated as an XML document by Web browsers, to be parsed by an XML processor. Authors
1655   are reminded that the processing for XML and HTML differs; in particular, even minor syntax errors
1656   will prevent a document labeled as XML from being rendered fully, whereas they would be ignored in
1657   the HTML syntax. This specification defines the latest XHTML syntax, known simply as "XHTML".</p>
1658
1659   <p>The DOM, the HTML syntax, and the XHTML syntax cannot all represent the same content. For
1660   example, namespaces cannot be represented using the HTML syntax, but they are supported in the DOM
1661   and in the XHTML syntax. Similarly, documents that use the <code><a href=#the-noscript-element>noscript</a></code> feature can be
1662   represented using the HTML syntax, but cannot be represented with the DOM or in the XHTML syntax.
1663   Comments that contain the string "<code title="">--&gt;</code>" can only be represented in the
1664   DOM, not in the HTML and XHTML syntaxes.</p>
1665
1666
1667   <h3 id=structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</h3>
1668
1669   <p><i>This section is non-normative.</i></p>
1670
1671   <p>This specification is divided into the following major sections:</p>
1672
1673   <dl><dt><a href=#introduction>Introduction</a></dt>
1674
1675    <dd>Non-normative materials providing a context for the HTML standard.</dd>
1676
1677
1678    <dt><a href=#infrastructure>Common infrastructure</a></dt>
1679
1680    <dd>The conformance classes, algorithms, definitions, and the common underpinnings of the rest of
1681    the specification.</dd>
1682
1683
1684    <dt><a href=#dom>Semantics, structure, and APIs of HTML documents</a></dt>
1685
1686    <dd>Documents are built from elements. These elements form a tree using the DOM. This section
1687    defines the features of this DOM, as well as introducing the features common to all elements, and
1688    the concepts used in defining elements.</dd>
1689
1690
1691    <dt><a href=#semantics>The elements of HTML</a></dt>
1692
1693    <dd>Each element has a predefined meaning, which is explained in this section. Rules for authors
1694    on how to use the element<span class=impl>, along with user agent requirements for how to
1695    handle each element,</span> are also given. This includes large signature features of HTML such
1696    as video playback and subtitles, form controls and form submission, and a 2D graphics API known
1697    as the HTML canvas.</dd>
1698
1699
1700    <dt><a href=#microdata>Microdata</a></dt>
1701
1702    <dd>This specification introduces a mechanism for adding machine-readable annotations to
1703    documents, so that tools can extract trees of name-value pairs from the document. This section
1704    describes this mechanism<span class=impl> and some algorithms that can be used to convert HTML
1705    documents into other formats</span>. This section also defines some sample Microdata vocabularies
1706    for contact information, calendar events, and licensing works.</dd>
1707
1708
1709    <dt><a href=#browsers>Loading Web pages</a></dt>
1710
1711    <dd>HTML documents do not exist in a vacuum &mdash; this section defines many of the features
1712    that affect environments that deal with multiple pages, such as Web browsers and offline
1713    caching of Web applications.</dd>
1714
1715
1716    <dt><a href=#webappapis>Web application APIs</a></dt>
1717
1718    <dd>This section introduces basic features for scripting of applications in HTML.</dd>
1719
1720
1721    <dt><a href=#editing>User interaction</a></dt>
1722
1723    <dd>HTML documents can provide a number of mechanisms for users to interact with and modify
1724    content, which are described in this section, such as how focus works, and drag-and-drop.</dd>
1725
1726
1727
1728    <dt><a href=#workers>Web workers</a></dt>
1729
1730    <dd>This section defines an API for background threads in JavaScript.</dd>
1731
1732
1733
1734    <dt><a href=#comms>The communication APIs</a></dt>
1735
1736    <dd>This section describes some mechanisms that applications written in HTML can use to
1737    communicate with other applications from different domains running on the same client.
1738
1739
1740    It also introduces a server-push event stream mechanism known as Server Sent Events or
1741    <code><a href=#eventsource>EventSource</a></code>, and a two-way full-duplex socket protocol for scripts known as Web
1742    Sockets.
1743
1744
1745    </dd>
1746
1747
1748
1749    <dt><a href=#webstorage>Web storage</a></dt>
1750
1751    <dd>This section defines a client-side storage mechanism based on name-value pairs.</dd>
1752
1753
1754
1755    <dt><a href=#syntax>The HTML syntax</a></dt>
1756    <dt><a href=#xhtml>The XHTML syntax</a></dt>
1757
1758    <dd>All of these features would be for naught if they couldn't be represented in a serialized
1759    form and sent to other people, and so these sections define the syntaxes of HTML and XHTML<span class=impl>, along with rules for how to parse content using those syntaxes</span>.</dd>
1760
1761
1762    <dt><a href=#rendering>Rendering</a></dt>
1763
1764    <dd>This section defines the default rendering rules for Web browsers.</dd>
1765
1766
1767   </dl><p>There are also some appendices, listing <a href=#obsolete>obsolete features</a> and <a href=#iana>IANA considerations</a>, and several indices.</p>
1768
1769
1770
1771   <h4 id=how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</h4>
1772
1773   <p>This specification should be read like all other specifications. First, it should be read
1774   cover-to-cover, multiple times. Then, it should be read backwards at least once. Then it should be
1775   read by picking random sections from the contents list and following all the cross-references.</p>
1776
1777   <p>As described in the conformance requirements section below, this specification describes
1778   conformance criteria for a variety of conformance classes. In particular, there are conformance
1779   requirements that apply to <em>producers</em>, for example authors and the documents they create,
1780   and there are conformance requirements that apply to <em>consumers</em>, for example Web browsers.
1781   They can be distinguished by what they are requiring: a requirement on a producer states what is
1782   allowed, while a requirement on a consumer states how software is to act.</p>
1783
1784   <div class=example>
1785
1786    <p>For example, "the <code title="">foo</code> attribute's value must be a <a href=#valid-integer>valid
1787    integer</a>" is a requirement on producers, as it lays out the allowed values; in contrast,
1788    the requirement "the <code title="">foo</code> attribute's value must be parsed using the
1789    <a href=#rules-for-parsing-integers>rules for parsing integers</a>" is a requirement on consumers, as it describes how to
1790    process the content.</p>
1791
1792   </div>
1793
1794   <p><strong>Requirements on producers have no bearing whatsoever on consumers.</strong></p>
1795
1796   <div class=example>
1797
1798    <p>Continuing the above example, a requirement stating that a particular attribute's value is
1799    constrained to being a <a href=#valid-integer>valid integer</a> emphatically does <em>not</em> imply anything
1800    about the requirements on consumers. It might be that the consumers are in fact required to treat
1801    the attribute as an opaque string, completely unaffected by whether the value conforms to the
1802    requirements or not. It might be (as in the previous example) that the consumers are required to
1803    parse the value using specific rules that define how invalid (non-numeric in this case) values
1804    are to be processed.</p>
1805
1806   </div>
1807
1808
1809
1810   <h4 id=typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</h4>
1811
1812   <p>This is a definition, requirement, or explanation.</p>
1813
1814   <p class=note>This is a note.</p>
1815
1816   <p class=example>This is an example.</p>
1817
1818   <p class=XXX>This is an open issue.</p>
1819
1820   <p class=warning>This is a warning.</p>
1821
1822   <pre class="idl extract">interface <dfn title="">Example</dfn> {
1823   // this is an IDL definition
1824 };</pre>
1825
1826   <dl class=domintro><dt><var title="">variable</var> = <var title="">object</var> . <code title="">method</code>( [ <var title="">optionalArgument</var> ] )</dt>
1827
1828    <dd>
1829
1830     <p>This is a note to authors describing the usage of an interface.</p>
1831
1832    </dd>
1833
1834   </dl><pre class=css>/* this is a CSS fragment */</pre>
1835
1836   <p>The defining instance of a term is marked up like <dfn id=x-this title=x-this>this</dfn>. Uses of that
1837   term are marked up like <a href=#x-this title=x-this>this</a> or like <i title=x-this><a href=#x-this>this</a></i>.</p>
1838
1839   <p>The defining instance of an element, attribute, or API is marked up like <dfn id=x-that title=x-that><code>this</code></dfn>. References to that element, attribute, or API are marked
1840   up like <code title=x-that><a href=#x-that>this</a></code>.</p>
1841
1842   <p>Other code fragments are marked up <code title="">like this</code>.</p>
1843
1844   <p>Variables are marked up like <var title="">this</var>.</p>
1845
1846   <p class=impl>This is an implementation requirement.</p>
1847
1848   <p>In an algorithm, steps in <a href=#synchronous-section title="synchronous section">synchronous sections</a> are
1849   marked with &#8987;.</p>
1850
1851
1852   <h3 id=fingerprint><span class=secno>1.10 </span>Privacy concerns</h3>
1853
1854   <p><i>This section is non-normative.</i></p>
1855
1856   <p>Some features of HTML trade user convenience for a measure of user privacy.</p>
1857
1858   <p>In general, due to the Internet's architecture, a user can be distinguished from another by the
1859   user's IP address. IP addresses do not perfectly match to a user; as a user moves from device to
1860   device, or from network to network, their IP address will change; similarly, NAT routing, proxy
1861   servers, and shared computers enable packets that appear to all come from a single IP address to
1862   actually map to multiple users. Technologies such as onion routing can be used to further
1863   anonymize requests so that requests from a single user at one node on the Internet appear to come
1864   from many disparate parts of the network.</p>
1865
1866   <p>However, the IP address used for a user's requests is not the only mechanism by which a user's
1867   requests could be related to each other. Cookies, for example, are designed specifically to enable
1868   this, and are the basis of most of the Web's session features that enable you to log into a site
1869   with which you have an account.</p>
1870
1871   <p>There are other mechanisms that are more subtle. Certain characteristics of a user's system can
1872   be used to distinguish groups of users from each other; by collecting enough such information, an
1873   individual user's browser's "digital fingerprint" can be computed, which can be as good, if not
1874   better, as an IP address in ascertaining which requests are from the same user.</p>
1875
1876   <p>Grouping requests in this manner, especially across multiple sites, can be used for both benign
1877   (and even arguably positive) purposes, as well as for malevolent purposes. An example of a
1878   reasonably benign purpose would be determining whether a particular person seems to prefer sites
1879   with dog illustrations as opposed to sites with cat illustrations (based on how often they visit
1880   the sites in question) and then automatically using the preferred illustrations on subsequent
1881   visits to participating sites. Malevolent purposes, however, could include governments combining
1882   information such as the person's home address (determined from the addresses they use when getting
1883   driving directions on one site) with their apparent political affiliations (determined by
1884   examining the forum sites that they participate in) to determine whether the person should be
1885   prevented from voting in an election.</p>
1886
1887   <p>Since the malevolent purposes can be remarkably evil, user agent implementors are encouraged to
1888   consider how to provide their users with tools to minimize leaking information that could be used
1889   to fingerprint a user.</p>
1890
1891   <p>Unfortunately, as the first paragraph in this section implies, sometimes there is great benefit
1892   to be derived from exposing the very information that can also be used for fingerprinting
1893   purposes, so it's not as easy as simply blocking all possible leaks. For instance, the ability to
1894   log into a site to post under a specific identity requires that the user's requests be
1895   identifiable as all being from the same user, more or less by definition. More subtly, though,
1896   information such as how wide text is, which is necessary for many effects that involve drawing
1897   text onto a canvas (e.g. any effect that involves drawing a border around the text) also leaks
1898   information that can be used to group a user's requests. (In this case, by potentially exposing,
1899   via a brute force search, which fonts a user has installed, information which can vary
1900   considerably from user to user.)</p>
1901
1902   <p>Features in this specification which can be used to fingerprint the user are marked as this
1903   paragraph is.
1904   <a class=fingerprint href=#fingerprint><img alt="(This is a fingerprinting vector.)" height=64 src=http://images.whatwg.org/fingerprint.png width=46></a>
1905   </p>
1906
1907   <p>Other features in the platform can be used for the same purpose, though, including, though not
1908   limited to:</p>
1909
1910   <ul><li>The exact list of which features a user agents supports.</li>
1911
1912    <li>The maximum allowed stack depth for recursion in script.</li>
1913
1914    <li>Features that describe the user's environment, like Media Queries and the <code><a href=#screen>Screen</a></code>
1915    object. <a href=#refsMQ>[MQ]</a> <a href=#refsCSSOMVIEW>[CSSOMVIEW]</a></li>
1916
1917    <li>The user's time zone.</li>
1918
1919   </ul><h3 id=a-quick-introduction-to-html><span class=secno>1.11 </span>A quick introduction to HTML</h3>
1920
1921   <p><i>This section is non-normative.</i></p>
1922
1923   <p>A basic HTML document looks like this:</p>
1924
1925   <pre id=intro-early-example>&lt;!DOCTYPE html&gt;
1926 &lt;html&gt;
1927  &lt;head&gt;
1928   &lt;title&gt;Sample page&lt;/title&gt;
1929  &lt;/head&gt;
1930  &lt;body&gt;
1931   &lt;h1&gt;Sample page&lt;/h1&gt;
1932   &lt;p&gt;This is a &lt;a href="demo.html"&gt;simple&lt;/a&gt; sample.&lt;/p&gt;
1933   &lt;!-- this is a comment --&gt;
1934  &lt;/body&gt;
1935 &lt;/html&gt;</pre>
1936
1937   <p>HTML documents consist of a tree of elements and text. Each element is denoted in the source by
1938   a <a href=#syntax-start-tag title=syntax-start-tag>start tag</a>, such as "<code title="">&lt;body&gt;</code>", and
1939   an <a href=#syntax-end-tag title=syntax-end-tag>end tag</a>, such as "<code title="">&lt;/body&gt;</code>".
1940   (Certain start tags and end tags can in certain cases be <a href=#syntax-tag-omission title=syntax-tag-omission>omitted</a> and are implied by other tags.)</p>
1941
1942   <p>Tags have to be nested such that elements are all completely within each other, without
1943   overlapping:</p>
1944
1945   <pre class=bad>&lt;p&gt;This is &lt;em&gt;very &lt;strong&gt;wrong&lt;/em&gt;!&lt;/strong&gt;&lt;/p&gt;</pre>
1946   <pre>&lt;p&gt;This &lt;em&gt;is &lt;strong&gt;correct&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;</pre>
1947
1948   <p>This specification defines a set of elements that can be used in HTML, along with rules about
1949   the ways in which the elements can be nested.</p>
1950
1951   <p>Elements can have attributes, which control how the elements work. In the example below, there
1952   is a <a href=#hyperlink>hyperlink</a>, formed using the <code><a href=#the-a-element>a</a></code> element and its <code title=attr-hyperlink-href><a href=#attr-hyperlink-href>href</a></code> attribute:</p>
1953
1954   <pre>&lt;a href="demo.html"&gt;simple&lt;/a&gt;</pre>
1955
1956   <p><a href=#syntax-attributes title=syntax-attributes>Attributes</a> are placed inside the start tag, and consist
1957   of a <a href=#syntax-attribute-name title=syntax-attribute-name>name</a> and a <a href=#syntax-attribute-value title=syntax-attribute-value>value</a>, separated by an "<code title="">=</code>" character.
1958   The attribute value can remain <a href=#unquoted>unquoted</a> if it doesn't contain <a href=#space-character title="space character">space characters</a> or any of <code title="">"</code> <code title="">'</code> <code title="">`</code> <code title="">=</code> <code title="">&lt;</code> or
1959   <code title="">&gt;</code>. Otherwise, it has to be quoted using either single or double quotes.
1960   The value, along with the "<code title="">=</code>" character, can be omitted altogether if the
1961   value is the empty string.</p>
1962
1963   <pre>&lt;!-- empty attributes --&gt;
1964 &lt;input name=address disabled&gt;
1965 &lt;input name=address disabled=""&gt;
1966
1967 &lt;!-- attributes with a value --&gt;
1968 &lt;input name=address maxlength=200&gt;
1969 &lt;input name=address maxlength='200'&gt;
1970 &lt;input name=address maxlength="200"&gt;</pre>
1971
1972   <p>HTML user agents (e.g. Web browsers) then <i>parse</i> this markup, turning it into a DOM
1973   (Document Object Model) tree. A DOM tree is an in-memory representation of a document.</p>
1974
1975   <p>DOM trees contain several kinds of nodes, in particular a <code><a href=#documenttype>DocumentType</a></code> node,
1976   <code><a href=#element>Element</a></code> nodes, <code><a href=#text>Text</a></code> nodes, <code><a href=#comment-0>Comment</a></code> nodes, and in some cases
1977   <code><a href=#processinginstruction>ProcessingInstruction</a></code> nodes.</p>
1978
1979   <p>The <a href=#intro-early-example>markup snippet at the top of this section</a> would be
1980   turned into the following DOM tree:</p>
1981
1982   <ul class=domTree><li class=t10>DOCTYPE: <code title="">html</code><li class=t1><code><a href=#the-html-element>html</a></code><ul><li class=t1><code><a href=#the-head-element>head</a></code><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-title-element>title</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span><li class=t1><code><a href=#the-body-element>body</a></code><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t3><code>#text</code>: <span title="">This is a <!--grammar-check-override--></span><li class=t1><code><a href=#the-a-element>a</a></code> <span class=t2 title=""><code class="attribute name">href</code>="<code class="attribute value">demo.html</code>"</span><ul><li class=t3><code>#text</code>: <span title="">simple</span></ul><li class=t3><code>#text</code>: <span title=""> sample.</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t8><code>#comment</code>: <span title=""> this is a comment </span><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9166;</span></ul></ul></ul><p>The <a href=#root-element>root element</a> of this tree is the <code><a href=#the-html-element>html</a></code> element, which is the
1983   element always found at the root of HTML documents. It contains two elements, <code><a href=#the-head-element>head</a></code>
1984   and <code><a href=#the-body-element>body</a></code>, as well as a <code><a href=#text>Text</a></code> node between them.</p>
1985
1986   <p>There are many more <code><a href=#text>Text</a></code> nodes in the DOM tree than one would initially expect,
1987   because the source contains a number of spaces (represented here by "&#9251;") and line breaks
1988   ("&#9166;") that all end up as <code><a href=#text>Text</a></code> nodes in the DOM. However, for historical
1989   reasons not all of the spaces and line breaks in the original markup appear in the DOM. In
1990   particular, all the whitespace before <code><a href=#the-head-element>head</a></code> start tag ends up being dropped silently,
1991   and all the whitespace after the <code><a href=#the-body-element>body</a></code> end tag ends up placed at the end of the
1992   <code><a href=#the-body-element>body</a></code>.</p>
1993
1994   <p>The <code><a href=#the-head-element>head</a></code> element contains a <code><a href=#the-title-element>title</a></code> element, which itself contains a
1995   <code><a href=#text>Text</a></code> node with the text "Sample page". Similarly, the <code><a href=#the-body-element>body</a></code> element
1996   contains an <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code> element, a <code><a href=#the-p-element>p</a></code> element, and a comment.</p>
1997
1998   <hr><p>This DOM tree can be manipulated from scripts in the page. Scripts (typically in JavaScript)
1999   are small programs that can be embedded using the <code><a href=#the-script-element>script</a></code> element or using <a href=#event-handler-content-attributes>event
2000   handler content attributes</a>. For example, here is a form with a script that sets the value
2001   of the form's <code><a href=#the-output-element>output</a></code> element to say "Hello World":</p>
2002
2003   <pre>&lt;<a href=#the-form-element>form</a> <a href=#attr-form-name title=attr-form-name>name</a>="main"&gt;
2004  Result: &lt;<a href=#the-output-element>output</a> <a href=#attr-fe-name title=attr-fe-name>name</a>="result"&gt;&lt;/output&gt;
2005  &lt;<a href=#the-script-element>script</a>&gt;
2006   <a href=#document title=Document>document</a>.<a href=#dom-document-forms title=dom-document-forms>forms</a>.main.<a href=#dom-form-elements title=dom-form-elements>elements</a>.result.<a href=#dom-output-value title=dom-output-value>value</a> = 'Hello World';
2007  &lt;/script&gt;
2008 &lt;/form&gt;</pre>
2009
2010   <p>Each element in the DOM tree is represented by an object, and these objects have APIs so that
2011   they can be manipulated. For instance, a link (e.g. the <code><a href=#the-a-element>a</a></code> element in the tree above)
2012   can have its "<code title=attr-hyperlink-href><a href=#attr-hyperlink-href>href</a></code>" attribute changed in several
2013   ways:</p>
2014
2015   <pre>var a = <a href=#document title=Document>document</a>.<a href=#dom-document-links title=dom-document-links>links</a>[0]; // obtain the first link in the document
2016 a.<a href=#dom-url-href title=dom-url-href>href</a> = 'sample.html'; // change the destination URL of the link
2017 a.<a href=#dom-url-protocol title=dom-url-protocol>protocol</a> = 'https'; // change just the scheme part of the URL
2018 a.setAttribute('href', 'http://example.com/'); // change the content attribute directly</pre>
2019
2020   <p>Since DOM trees are used as the way to represent HTML documents when they are processed and
2021   presented by implementations (especially interactive implementations like Web browsers), this
2022   specification is mostly phrased in terms of DOM trees, instead of the markup described above.</p>
2023
2024   <hr><p>HTML documents represent a media-independent description of interactive content. HTML documents
2025   might be rendered to a screen, or through a speech synthesizer, or on a braille display. To
2026   influence exactly how such rendering takes place, authors can use a styling language such as
2027   CSS.</p>
2028
2029   <p>In the following example, the page has been made yellow-on-blue using CSS.</p>
2030
2031   <pre>&lt;!DOCTYPE html&gt;
2032 &lt;html&gt;
2033  &lt;head&gt;
2034   &lt;title&gt;Sample styled page&lt;/title&gt;
2035   &lt;style&gt;
2036    body { background: navy; color: yellow; }
2037   &lt;/style&gt;
2038  &lt;/head&gt;
2039  &lt;body&gt;
2040   &lt;h1&gt;Sample styled page&lt;/h1&gt;
2041   &lt;p&gt;This page is just a demo.&lt;/p&gt;
2042  &lt;/body&gt;
2043 &lt;/html&gt;</pre>
2044
2045   <p>For more details on how to use HTML, authors are encouraged to consult tutorials and guides.
2046   Some of the examples included in this specification might also be of use, but the novice author is
2047   cautioned that this specification, by necessity, defines the language with a level of detail that
2048   might be difficult to understand at first.</p>
2049
2050 <!--ADD-TOPIC:Security-->
2051   <h4 id=writing-secure-applications-with-html><span class=secno>1.11.1 </span>Writing secure applications with HTML</h4>
2052
2053   <p><i>This section is non-normative.</i></p>
2054
2055   <p>When HTML is used to create interactive sites, care needs to be taken to avoid introducing
2056   vulnerabilities through which attackers can compromise the integrity of the site itself or of the
2057   site's users.</p>
2058
2059   <p>A comprehensive study of this matter is beyond the scope of this document, and authors are
2060   strongly encouraged to study the matter in more detail. However, this section attempts to provide
2061   a quick introduction to some common pitfalls in HTML application development.</p>
2062
2063   <p>The security model of the Web is based on the concept of "origins", and correspondingly many of
2064   the potential attacks on the Web involve cross-origin actions. <a href=#refsORIGIN>[ORIGIN]</a></p>
2065
2066   <dl><dt>Not validating user input</dt>
2067    <dt>Cross-site scripting (XSS)</dt>
2068    <dt>SQL injection</dt>
2069
2070    <dd>
2071
2072     <p>When accepting untrusted input, e.g. user-generated content such as text comments, values in
2073     URL parameters, messages from third-party sites, etc, it is imperative that the data be
2074     validated before use, and properly escaped when displayed. Failing to do this can allow a
2075     hostile user to perform a variety of attacks, ranging from the potentially benign, such as
2076     providing bogus user information like a negative age, to the serious, such as running scripts
2077     every time a user looks at a page that includes the information, potentially propagating the
2078     attack in the process, to the catastrophic, such as deleting all data in the server.</p>
2079
2080     <p>When writing filters to validate user input, it is imperative that filters always be
2081     whitelist-based, allowing known-safe constructs and disallowing all other input. Blacklist-based
2082     filters that disallow known-bad inputs and allow everything else are not secure, as not
2083     everything that is bad is yet known (for example, because it might be invented in the
2084     future).</p>
2085
2086     <div class=example>
2087
2088      <p>For example, suppose a page looked at its URL's query string to determine what to display,
2089      and the site then redirected the user to that page to display a message, as in:</p>
2090
2091      <pre>&lt;ul&gt;
2092  &lt;li&gt;&lt;a href="message.cgi?say=Hello"&gt;Say Hello&lt;/a&gt;
2093  &lt;li&gt;&lt;a href="message.cgi?say=Welcome"&gt;Say Welcome&lt;/a&gt;
2094  &lt;li&gt;&lt;a href="message.cgi?say=Kittens"&gt;Say Kittens&lt;/a&gt;
2095 &lt;/ul&gt;</pre>
2096
2097      <p>If the message was just displayed to the user without escaping, a hostile attacker could
2098      then craft a URL that contained a script element:</p>
2099
2100      <pre>http://example.com/message.cgi?say=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E</pre>
2101
2102      <p>If the attacker then convinced a victim user to visit this page, a script of the attacker's
2103      choosing would run on the page. Such a script could do any number of hostile actions, limited
2104      only by what the site offers: if the site is an e-commerce shop, for instance, such a script
2105      could cause the user to unknowingly make arbitrarily many unwanted purchases.</p>
2106
2107      <p>This is called a cross-site scripting attack.</p>
2108
2109     </div>
2110
2111     <p>There are many constructs that can be used to try to trick a site into executing code. Here
2112     are some that authors are encouraged to consider when writing whitelist filters:</p>
2113
2114     <ul><li>When allowing harmless-seeming elements like <code><a href=#the-img-element>img</a></code>, it is important to whitelist
2115      any provided attributes as well. If one allowed all attributes then an attacker could, for
2116      instance, use the <code title=handler-onload><a href=#handler-onload>onload</a></code> attribute to run arbitrary
2117      script.</li>
2118
2119      <li>When allowing URLs to be provided (e.g. for links), the scheme of each URL also needs to be
2120      explicitly whitelisted, as there are many schemes that can be abused. The most prominent
2121      example is "<code title=javascript-protocol>javascript:</code>", but user agents can
2122      implement (and indeed, have historically implemented) others.</li> <!-- IE had vbscript:,
2123      Netscape had livescript:, etc. -->
2124
2125      <li>Allowing a <code><a href=#the-base-element>base</a></code> element to be inserted means any <code><a href=#the-script-element>script</a></code> elements
2126      in the page with relative links can be hijacked, and similarly that any form submissions can
2127      get redirected to a hostile site.</li>
2128
2129     </ul></dd>
2130
2131
2132    <dt>Cross-site request forgery (CSRF)</dt>
2133
2134    <dd>
2135
2136     <p>If a site allows a user to make form submissions with user-specific side-effects, for example
2137     posting messages on a forum under the user's name, making purchases, or applying for a passport,
2138     it is important to verify that the request was made by the user intentionally, rather than by
2139     another site tricking the user into making the request unknowingly.</p>
2140
2141     <p>This problem exists because HTML forms can be submitted to other origins.</p>
2142
2143     <p>Sites can prevent such attacks by populating forms with user-specific hidden tokens, or by
2144     checking <code title=http-origin>Origin</code> headers on all requests.</p>
2145
2146    </dd>
2147
2148
2149
2150    <dt>Clickjacking</dt>
2151
2152    <dd>
2153
2154     <p>A page that provides users with an interface to perform actions that the user might not wish
2155     to perform needs to be designed so as to avoid the possibility that users can be tricked into
2156     activating the interface.</p>
2157
2158     <p>One way that a user could be so tricked is if a hostile site places the victim site in a
2159     small <code><a href=#the-iframe-element>iframe</a></code> and then convinces the user to click, for instance by having the user
2160     play a reaction game. Once the user is playing the game, the hostile site can quickly position
2161     the iframe under the mouse cursor just as the user is about to click, thus tricking the user
2162     into clicking the victim site's interface.</p>
2163
2164     <p>To avoid this, sites that do not expect to be used in frames are encouraged to only enable
2165     their interface if they detect that they are not in a frame (e.g. by comparing the <code title=dom-window><a href=#dom-window>window</a></code> object to the value of the <code title=dom-top><a href=#dom-top>top</a></code>
2166     attribute).</p>
2167
2168    </dd>
2169
2170   </dl><!--REMOVE-TOPIC:Security--><h4 id=common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.11.2 </span>Common pitfalls to avoid when using the scripting APIs</h4>
2171
2172   <p><i>This section is non-normative.</i></p>
2173
2174   <p>Scripts in HTML have "run-to-completion" semantics, meaning that the browser will generally run
2175   the script uninterrupted before doing anything else, such as firing further events or continuing
2176   to parse the document.</p>
2177
2178   <p>On the other hand, parsing of HTML files happens asynchronously and incrementally, meaning that
2179   the parser can pause at any point to let scripts run. This is generally a good thing, but it does
2180   mean that authors need to be careful to avoid hooking event handlers after the events could have
2181   possibly fired.</p>
2182
2183   <p>There are two techniques for doing this reliably: use <a href=#event-handler-content-attributes>event handler content
2184   attributes</a>, or create the element and add the event handlers in the same script. The latter
2185   is safe because, as mentioned earlier, scripts are run to completion before further events can
2186   fire.</p>
2187
2188   <div class=example>
2189
2190    <p>One way this could manifest itself is with <code><a href=#the-img-element>img</a></code> elements and the <code title=event-load>load</code> event. The event could fire as soon as the element has been
2191    parsed, especially if the image has already been cached (which is common).</p>
2192
2193    <p>Here, the author uses the <code title=handler-onload><a href=#handler-onload>onload</a></code> handler on an
2194    <code><a href=#the-img-element>img</a></code> element to catch the <code title=event-load>load</code> event:</p>
2195
2196    <pre>&lt;img src="games.png" alt="Games" onload="gamesLogoHasLoaded(event)"&gt;</pre>
2197
2198    <p>If the element is being added by script, then so long as the event handlers are added in the
2199    same script, the event will still not be missed:</p>
2200
2201    <pre>&lt;script&gt;
2202  var img = new Image();
2203  img.src = 'games.png';
2204  img.alt = 'Games';
2205  img.onload = gamesLogoHasLoaded;
2206  // img.addEventListener('load', gamesLogoHasLoaded, false); // would work also
2207 &lt;/script&gt;</pre>
2208
2209    <p>However, if the author first created the <code><a href=#the-img-element>img</a></code> element and then in a separate
2210    script added the event listeners, there's a chance that the <code title=event-load>load</code>
2211    event would be fired in between, leading it to be missed:</p>
2212
2213    <pre class=bad>&lt;!-- Do not use this style, it has a race condition! --&gt;
2214  &lt;img id="games" src="games.png" alt="Games"&gt;
2215  &lt;!-- the 'load' event might fire here while the parser is taking a
2216       break, in which case you will not see it! --&gt;
2217  &lt;script&gt;
2218   var img = document.getElementById('games');
2219   img.onload = gamesLogoHasLoaded; // might never fire!
2220  &lt;/script&gt;</pre>
2221
2222   </div>
2223
2224
2225
2226   <h3 id=conformance-requirements-for-authors><span class=secno>1.12 </span>Conformance requirements for authors</h3>
2227
2228   <p><i>This section is non-normative.</i></p>
2229
2230   <p>Unlike previous versions of the HTML specification, this specification defines in some detail
2231   the required processing for invalid documents as well as valid documents.</p> <!-- This has led to
2232   some questioning the purpose of conformance criteria: if there is no ambiguity in how something
2233   will be processed, why disallow it? -->
2234
2235   <p>However, even though the processing of invalid content is in most cases well-defined,
2236   conformance requirements for documents are still important: in practice, interoperability (the
2237   situation in which all implementations process particular content in a reliable and identical or
2238   equivalent way) is not the only goal of document conformance requirements. This section details
2239   some of the more common reasons for still distinguishing between a conforming document and one
2240   with errors.</p>
2241
2242
2243   <h4 id=presentational-markup><span class=secno>1.12.1 </span>Presentational markup</h4>
2244
2245   <p><i>This section is non-normative.</i></p>
2246
2247   <p>The majority of presentational features from previous versions of HTML are no longer allowed.
2248   Presentational markup in general has been found to have a number of problems:</p>
2249
2250   <dl><dt>The use of presentational elements leads to poorer accessibility</dt>
2251
2252    <dd>
2253
2254     <p>While it is possible to use presentational markup in a way that provides users of assistive
2255     technologies (ATs) with an acceptable experience (e.g. using ARIA), doing so is significantly
2256     more difficult than doing so when using semantically-appropriate markup. Furthermore, even using
2257     such techniques doesn't help make pages accessible for non-AT non-graphical users, such as users
2258     of text-mode browsers.</p>
2259
2260     <p>Using media-independent markup, on the other hand, provides an easy way for documents to be
2261     authored in such a way that they work for more users (e.g. text browsers).</p>
2262
2263    </dd>
2264
2265
2266    <dt>Higher cost of maintenance</dt>
2267
2268    <dd>
2269
2270     <p>It is significantly easier to maintain a site written in such a way that the markup is
2271     style-independent. For example, changing the color of a site that uses
2272     <code>&lt;font&nbsp;color=""&gt;</code> throughout requires changes across the entire site, whereas
2273     a similar change to a site based on CSS can be done by changing a single file.</p>
2274
2275    </dd>
2276
2277
2278    <dt>Larger document sizes</dt>
2279
2280    <dd>
2281
2282     <p>Presentational markup tends to be much more redundant, and thus results in larger document
2283     sizes.</p>
2284
2285    </dd>
2286
2287   </dl><p>For those reasons, presentational markup has been removed from HTML in this version. This
2288   change should not come as a surprise; HTML4 deprecated presentational markup many years ago and
2289   provided a mode (HTML4 Transitional) to help authors move away from presentational markup; later,
2290   XHTML 1.1 went further and obsoleted those features altogether.</p>
2291
2292   <p>The only remaining presentational markup features in HTML are the <code title=attr-style><a href=#the-style-attribute>style</a></code> attribute and the <code><a href=#the-style-element>style</a></code> element. Use of the <code title=attr-style><a href=#the-style-attribute>style</a></code> attribute is somewhat discouraged in production environments, but
2293   it can be useful for rapid prototyping (where its rules can be directly moved into a separate
2294   style sheet later) and for providing specific styles in unusual cases where a separate style sheet
2295   would be inconvenient. Similarly, the <code><a href=#the-style-element>style</a></code> element can be useful in syndication or
2296   for page-specific styles, but in general an external style sheet is likely to be more convenient
2297   when the styles apply to multiple pages.</p>
2298
2299   <p>It is also worth noting that some elements that were previously presentational have been
2300   redefined in this specification to be media-independent: <code><a href=#the-b-element>b</a></code>, <code><a href=#the-i-element>i</a></code>,
2301   <code><a href=#the-hr-element>hr</a></code>, <code><a href=#the-s-element>s</a></code>, <code><a href=#the-small-element>small</a></code>, and <code><a href=#the-u-element>u</a></code>.</p>
2302
2303
2304   <h4 id=syntax-errors><span class=secno>1.12.2 </span>Syntax errors</h4>
2305
2306   <p><i>This section is non-normative.</i></p>
2307
2308   <p>The syntax of HTML is constrained to avoid a wide variety of problems.</p>
2309
2310   <dl><dt>Unintuitive error-handling behavior</dt>
2311
2312    <dd>
2313
2314     <p>Certain invalid syntax constructs, when parsed, result in DOM trees that are highly
2315     unintuitive.</p>
2316
2317     <div class=example>
2318
2319      <p>For example, the following markup fragment results in a DOM with an <code><a href=#the-hr-element>hr</a></code> element
2320      that is an <em>earlier</em> sibling of the corresponding <code><a href=#the-table-element>table</a></code> element:</p>
2321
2322      <pre class=bad>&lt;table&gt;&lt;hr&gt;...</pre>
2323
2324     </div>
2325
2326    </dd>
2327
2328
2329    <dt>Errors with optional error recovery</dt>
2330
2331    <dd>
2332
2333     <p>To allow user agents to be used in controlled environments without having to implement the
2334     more bizarre and convoluted error handling rules, user agents are permitted to fail whenever
2335     encountering a <a href=#parse-error>parse error</a>.</p>
2336
2337    </dd>
2338
2339
2340    <dt>Errors where the error-handling behavior is not compatible with streaming user agents</dt>
2341
2342    <dd>
2343
2344     <p>Some error-handling behavior, such as the behavior for the <code title="">&lt;table&gt;&lt;hr&gt;...</code> example mentioned above, are incompatible with streaming
2345     user agents (user agents that process HTML files in one pass, without storing state). To avoid
2346     interoperability problems with such user agents, any syntax resulting in such behavior is
2347     considered invalid.</p>
2348
2349    </dd>
2350
2351
2352    <dt>Errors that can result in infoset coercion</dt>
2353
2354    <dd>
2355
2356     <p>When a user agent based on XML is connected to an HTML parser, it is possible that certain
2357     invariants that XML enforces, such as comments never containing two consecutive hyphens, will be
2358     violated by an HTML file. Handling this can require that the parser coerce the HTML DOM into an
2359     XML-compatible infoset. Most syntax constructs that require such handling are considered
2360     invalid.</p>
2361
2362    </dd>
2363
2364
2365    <dt>Errors that result in disproportionally poor performance</dt>
2366
2367    <dd>
2368
2369     <p>Certain syntax constructs can result in disproportionally poor performance. To discourage the
2370     use of such constructs, they are typically made non-conforming.</p>
2371
2372     <div class=example>
2373
2374      <p>For example, the following markup results in poor performance, since all the unclosed
2375      <code><a href=#the-i-element>i</a></code> elements have to be reconstructed in each paragraph, resulting in progressively
2376      more elements in each paragraph:</p>
2377
2378      <pre class=bad>&lt;p&gt;&lt;i&gt;He dreamt.
2379 &lt;p&gt;&lt;i&gt;He dreamt that he ate breakfast.
2380 &lt;p&gt;&lt;i&gt;Then lunch.
2381 &lt;p&gt;&lt;i&gt;And finally dinner.</pre>
2382
2383      <p>The resulting DOM for this fragment would be:</p>
2384
2385      <ul class=domTree><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">He dreamt.</span></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">He dreamt that he ate breakfast.</span></ul></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">Then lunch.</span></ul></ul></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">And finally dinner.</span></ul></ul></ul></ul></ul></ul></div>
2386
2387    </dd>
2388
2389
2390    <dt>Errors involving fragile syntax constructs</dt>
2391
2392    <dd>
2393
2394     <p>There are syntax constructs that, for historical reasons, are relatively fragile. To help
2395     reduce the number of users who accidentally run into such problems, they are made
2396     non-conforming.</p>
2397
2398     <div class=example>
2399
2400      <p>For example, the parsing of certain named character references in attributes happens even
2401      with the closing semicolon being omitted. It is safe to include an ampersand followed by
2402      letters that do not form a named character reference, but if the letters are changed to a
2403      string that <em>does</em> form a named character reference, they will be interpreted as that
2404      character instead.</p>
2405
2406      <p>In this fragment, the attribute's value is "<code title="">?bill&amp;ted</code>":</p>
2407
2408      <pre class=bad>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt;</pre>
2409
2410      <p>In the following fragment, however, the attribute's value is actually "<code title="">?art&copy;</code>", <em>not</em> the intended "<code title="">?art&amp;copy</code>",
2411      because even without the final semicolon, "<code title="">&amp;copy</code>" is handled the same
2412      as "<code title="">&amp;copy;</code>" and thus gets interpreted as "<code title="">&copy;</code>":</p>
2413
2414      <pre class=bad>&lt;a href="?art&amp;copy"&gt;Art and Copy&lt;/a&gt;</pre>
2415
2416      <p>To avoid this problem, all named character references are required to end with a semicolon,
2417      and uses of named character references without a semicolon are flagged as errors.</p>
2418
2419      <p>Thus, the correct way to express the above cases is as
2420      follows:</p>
2421
2422      <pre>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt; &lt;!-- &amp;ted is ok, since it's not a named character reference --&gt;</pre>
2423      <pre>&lt;a href="?art&amp;amp;copy"&gt;Art and Copy&lt;/a&gt; &lt;!-- the &amp; has to be escaped, since &amp;copy <em>is</em> a named character reference --&gt;</pre>
2424
2425     </div>
2426
2427    </dd>
2428
2429
2430    <dt>Errors involving known interoperability problems in legacy user agents</dt>
2431
2432    <dd>
2433
2434     <p>Certain syntax constructs are known to cause especially subtle or serious problems in legacy
2435     user agents, and are therefore marked as non-conforming to help authors avoid them.</p>
2436
2437     <div class=example>
2438
2439      <p>For example, this is why the U+0060 GRAVE ACCENT character (`) is not allowed in unquoted
2440      attributes. In certain legacy user agents, <!-- namely IE --> it is sometimes treated as a
2441      quote character.</p>
2442
2443     </div>
2444
2445     <div class=example>
2446
2447      <p>Another example of this is the DOCTYPE, which is required to trigger <a href=#no-quirks-mode>no-quirks
2448      mode</a>, because the behavior of legacy user agents in <a href=#quirks-mode>quirks mode</a> is often
2449      largely undocumented.</p>
2450
2451     </div>
2452
2453    </dd>
2454
2455
2456 <!--ADD-TOPIC:Security-->
2457    <dt>Errors that risk exposing authors to security attacks</dt>
2458
2459    <dd>
2460
2461     <p>Certain restrictions exist purely to avoid known security problems.</p>
2462
2463     <div class=example>
2464
2465      <p>For example, the restriction on using UTF-7 exists purely to avoid authors falling prey to a
2466      known cross-site-scripting attack using UTF-7.</p>
2467
2468     </div>
2469
2470    </dd>
2471 <!--REMOVE-TOPIC:Security-->
2472
2473
2474    <dt>Cases where the author's intent is unclear</dt>
2475
2476    <dd>
2477
2478     <p>Markup where the author's intent is very unclear is often made non-conforming. Correcting
2479     these errors early makes later maintenance easier.</p>
2480
2481     <div class=example>
2482
2483      <p>For example, it is unclear whether the author intended the following to be an
2484      <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code> heading or an <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h2</a></code> heading:</p>
2485
2486      <pre class=bad>&lt;h1&gt;Contact details&lt;/h2&gt;</pre>
2487
2488     </div>
2489
2490    </dd>
2491
2492
2493    <dt>Cases that are likely to be typos</dt>
2494
2495    <dd>
2496
2497     <p>When a user makes a simple typo, it is helpful if the error can be caught early, as this can
2498     save the author a lot of debugging time. This specification therefore usually considers it an
2499     error to use element names, attribute names, and so forth, that do not match the names defined
2500     in this specification.</p>
2501
2502     <div class=example>
2503
2504      <p>For example, if the author typed <code>&lt;capton&gt;</code> instead of
2505      <code>&lt;caption&gt;</code>, this would be flagged as an error and the author could correct the
2506      typo immediately.</p>
2507
2508     </div>
2509
2510    </dd>
2511
2512
2513    <dt>Errors that could interfere with new syntax in the future</dt>
2514
2515    <dd>
2516
2517     <p>In order to allow the language syntax to be extended in the future, certain otherwise
2518     harmless features are disallowed.</p>
2519
2520     <div class=example>
2521
2522      <p>For example, "attributes" in end tags are ignored currently, but they are invalid, in case a
2523      future change to the language makes use of that syntax feature without conflicting with
2524      already-deployed (and valid!) content.</p>
2525
2526     </div>
2527
2528    </dd>
2529
2530
2531   </dl><p>Some authors find it helpful to be in the practice of always quoting all attributes and always
2532   including all optional tags, preferring the consistency derived from such custom over the minor
2533   benefits of terseness afforded by making use of the flexibility of the HTML syntax. To aid such
2534   authors, conformance checkers can provide modes of operation wherein such conventions are
2535   enforced.</p>
2536
2537
2538
2539   <h4 id=restrictions-on-content-models-and-on-attribute-values><span class=secno>1.12.3 </span>Restrictions on content models and on attribute values</h4>
2540
2541   <p><i>This section is non-normative.</i></p>
2542
2543   <p>Beyond the syntax of the language, this specification also places restrictions on how elements
2544   and attributes can be specified. These restrictions are present for similar reasons:</p>
2545
2546   <dl><dt>Errors involving content with dubious semantics</dt>
2547
2548    <dd>
2549
2550     <p>To avoid misuse of elements with defined meanings, content models are defined that restrict
2551     how elements can be nested when such nestings would be of dubious value.</p>
2552
2553     <p class=example>For example, this specification disallows nesting a <code><a href=#the-section-element>section</a></code>
2554     element inside a <code><a href=#the-kbd-element>kbd</a></code> element, since it is highly unlikely for an author to indicate
2555     that an entire section should be keyed in.</p>
2556
2557    </dd>
2558
2559
2560    <dt>Errors that involve a conflict in expressed semantics</dt>
2561
2562    <dd>
2563
2564     <p>Similarly, to draw the author's attention to mistakes in the use of elements, clear
2565     contradictions in the semantics expressed are also considered conformance errors.</p>
2566
2567     <div class=example>
2568
2569      <p>In the fragments below, for example, the semantics are nonsensical: a separator cannot
2570      simultaneously be a cell, nor can a radio button be a progress bar.</p>
2571
2572      <pre class=bad>&lt;hr role="cell"&gt;</pre>
2573      <pre class=bad>&lt;input type=radio role=progressbar&gt;</pre>
2574
2575     </div>
2576
2577     <p class=example>Another example is the restrictions on the content models of the
2578     <code><a href=#the-ul-element>ul</a></code> element, which only allows <code><a href=#the-li-element>li</a></code> element children. Lists by definition
2579     consist just of zero or more list items, so if a <code><a href=#the-ul-element>ul</a></code> element contains something
2580     other than an <code><a href=#the-li-element>li</a></code> element, it's not clear what was meant.</p>
2581
2582    </dd>
2583
2584
2585    <dt>Cases where the default styles are likely to lead to confusion</dt>
2586
2587    <dd>
2588
2589     <p>Certain elements have default styles or behaviors that make certain combinations likely to
2590     lead to confusion. Where these have equivalent alternatives without this problem, the confusing
2591     combinations are disallowed.</p>
2592
2593     <p class=example>For example, <code><a href=#the-div-element>div</a></code> elements are rendered as block boxes, and
2594     <code><a href=#the-span-element>span</a></code> elements as inline boxes. Putting a block box in an inline box is
2595     unnecessarily confusing; since either nesting just <code><a href=#the-div-element>div</a></code> elements, or nesting just
2596     <code><a href=#the-span-element>span</a></code> elements, or nesting <code><a href=#the-span-element>span</a></code> elements inside <code><a href=#the-div-element>div</a></code>
2597     elements all serve the same purpose as nesting a <code><a href=#the-div-element>div</a></code> element in a <code><a href=#the-span-element>span</a></code>
2598     element, but only the latter involves a block box in an inline box, the latter combination is
2599     disallowed.</p>
2600
2601     <p class=example>Another example would be the way <a href=#interactive-content>interactive content</a> cannot be
2602     nested. For example, a <code><a href=#the-button-element>button</a></code> element cannot contain a <code><a href=#the-textarea-element>textarea</a></code>
2603     element. This is because the default behavior of such nesting interactive elements would be
2604     highly confusing to users. Instead of nesting these elements, they can be placed side by
2605     side.</p>
2606
2607    </dd>
2608
2609
2610    <dt>Errors that indicate a likely misunderstanding of the specification</dt>
2611
2612    <dd>
2613
2614     <p>Sometimes, something is disallowed because allowing it would likely cause author
2615     confusion.</p>
2616
2617     <p class=example>For example, setting the <code title=attr-fe-disabled><a href=#attr-fe-disabled>disabled</a></code>
2618     attribute to the value "<code title="">false</code>" is disallowed, because despite the
2619     appearance of meaning that the element is enab