Some perf tests time out when ran by run-perf-tests
[WebKit-https.git] / PerformanceTests / Parser / resources / html5.html
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: 6626 $".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 + '?' + encodeURIComponent(location) + '&' + encodeURIComponent(document.referrer));
81      document.body.appendChild(e);
82    }
83   </script>
84   <!-- BEGIN WEBKIT EDITS -->
85   <!-- Note we inline the stylesheets to help make html5-full-render.html show more consistent results. -->
86   <!-- Inlining /style/specification -->
87   <style>
88   /* WHATWG Green: sRGB #3c790a, rgb(60, 121, 10) */
89
90   html { margin: 0; padding: 0; color: black; background: white; }
91   body { margin: 0; padding: 0 1em 2em 8.5em; line-height: 1.35; color: black; background: white top left repeat-y; }
92
93   @media screen {
94     html { background: #eeeeee; }
95     body { margin-bottom: 30%; border-bottom: thin solid #3c790a; }
96   }
97
98   :link { color: #00C; background: transparent }
99   :visited { color: #609; background: transparent }
100   :link:active, :visited:active { color: #C00; background: transparent }
101   :link:hover, :visited:hover { background: #ffa; }
102   code :link, code :visited { color: inherit; }
103
104   body, th, td { font-family: sans-serif, Droid Sans Fallback; }
105
106   h1, h2, h3, h4, h5, h6 { text-align: left; text-rendering: optimiseLegibility; }
107   h1, h2, h3 { color: #3c790a; background: transparent; }
108   h1 { font: 900 200% sans-serif, Droid Sans Fallback; }
109   h1.allcaps { font: 900 350% sans-serif, Droid Sans Fallback; letter-spacing: 2px; }
110   h2 { font: 800 140% sans-serif, Droid Sans Fallback; }
111   h3 { font: 800 125% sans-serif, Droid Sans Fallback; }
112   h4 { font: 800 110% sans-serif, Droid Sans Fallback; }
113   h5 { font: 800 100% sans-serif, Droid Sans Fallback; }
114   h6 { font: 600 italic 100% sans-serif, Droid Sans Fallback; }
115
116   pre { margin-left: 2em; white-space: pre-wrap; }
117   h2 { margin: 3em 0 1em 0; }
118   h3 { margin: 2.5em 0 1em 0; }
119   h4 { margin: 2.5em 0 0.75em 0; }
120   h5, h6 { margin: 2.5em 0 1em; }
121   h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6, h1 + div + h2, h2 + div + h3, h3 + div + h4, h4 + div + h5, h5 + div + h6 { margin-top: 0.5em; }
122   p { margin: 1em 0; }
123   hr { display: block; background: none; border: none; padding: 0; margin: 2em 0; height: auto; }
124   dl, dd { margin-top: 0; margin-bottom: 0; }
125   dt { margin-top: 0.75em; margin-bottom: 0.25em; clear: left; }
126   dt + dt { margin-top: 0; }
127   dd dt { margin-top: 0.25em; margin-bottom: 0; }
128   dd p, dd ol, dd ol.brief { margin-top: 0; }
129   dd dl + p { margin-top: 1em; }
130   dd table + p { margin-top: 1em; }
131   p + * > li, dd li { margin: 1em 0; }
132   dt, dfn { font-weight: bold; font-style: normal; }
133   i, em, dt dfn { font-style: italic; }
134   pre, code { font-size: inherit; font-family: monospace, Droid Sans Fallback, sans-serif; font-variant: normal; }
135   pre strong { color: black; font: inherit; font-weight: bold; background: yellow; }
136   pre em { font-weight: bolder; font-style: normal; }
137   @media screen { code { color: orangered; } }
138   var sub { vertical-align: bottom; font-size: smaller; position: relative; top: 0.1em; }
139   table { border-collapse: collapse; border-style: hidden hidden none hidden; }
140   table thead, table tbody { border-bottom: solid; }
141   table tbody th { text-align: left; }
142   table tbody th:first-child { border-left: solid; }
143   table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; }
144   blockquote { margin: 0 0 0 2em; border: 0; padding: 0; font-style: italic; }
145   ins { background: green; color: white; /* color: green; border: solid thin lime; padding: 0.3em; line-height: 1.6em; */ text-decoration: none; }
146   del { background: maroon; color: white; /* color: maroon; border: solid thin red; padding: 0.3em; line-height: 1.6em; */ text-decoration: line-through; }
147   body ins, body del { display: block; }
148   body * ins, body * del { display: inline; }
149
150   .toc dfn, h1 dfn, h2 dfn, h3 dfn, h4 dfn, h5 dfn, h6 dfn { font: inherit; }
151   img.extra, p.overview { float: right; }
152   hr.bookmark { border: dashed 2em black; background: yellow; }
153   pre::before { font: bold 0.8em sans-serif; padding: 0.5em; position: absolute; top: auto; margin: -0.703125em 0 0 -3.75em /* 1em/0.8 + 1.5em + 0.5em*2 */ ; width: 1.5em; background: inherit; border: 0.078125em; border-style: solid none solid solid; border-radius: 1em 0 0 1em; }
154   pre.idl { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; }
155   pre.idl :link, pre.idl :visited { color: inherit; background: transparent; }
156   pre.idl::before { content: 'IDL'; }
157   pre.asn { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; }
158   pre.asn :link, pre.asn :visited { color: inherit; background: transparent; }
159   pre.asn::before { content: 'ASN'; }
160   pre.css { border: solid 0.0625em; background: #FFFFEE; color: black; padding: 0.5em 1em; }
161   pre.css:first-line { color: #AAAA50; }
162   pre.css::before { content: 'CSS'; }
163   dl.domintro { color: green; margin: 2em 0 2em 2em; padding: 0.5em 1em; border: none; background: #DDFFDD; }
164   hr + dl.domintro, div.impl + dl.domintro { margin-top: 2.5em; margin-bottom: 1.5em; }
165   dl.domintro dt, dl.domintro dt * { color: black; text-decoration: none; }
166   dl.domintro dd { margin: 0.5em 0 1em 2em; padding: 0; }
167   dl.domintro dd p { margin: 0.5em 0; }
168   dl.switch { padding-left: 2em; }
169   dl.switch > dt { text-indent: -1.5em; }
170   dl.switch > dt:before { content: '\21AA'; padding: 0 0.5em 0 0; display: inline-block; width: 1em; text-align: right; line-height: 0.5em; }
171   dl.triple { padding: 0 0 0 1em; }
172   dl.triple dt, dl.triple dd { margin: 0; display: inline }
173   dl.triple dt:after { content: ':'; }
174   dl.triple dd:after { content: '\A'; white-space: pre; }
175   .diff-old { text-decoration: line-through; color: silver; background: transparent; }
176   .diff-chg, .diff-new { text-decoration: underline; color: green; background: transparent; }
177   a .diff-new { border-bottom: 1px blue solid; }
178
179   h2 { page-break-before: always; }
180   h1, h2, h3, h4, h5, h6, dt { page-break-after: avoid; }
181   h1 + h2, hr + h2.no-toc { page-break-before: auto; }
182
183   p  > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]),
184   li > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]) { border-bottom: solid #99CC99; }
185
186   .head { margin: 0 0 1em; padding: 1em 0 0 0; display: block; }
187   .head p { margin: 0; }
188   .head h1 { margin: 0; }
189   .head h2 { margin-top: 0; }
190   .head .logo { float: right; margin: 0 1em; }
191   .head .logo img { display: block; margin: 0 0 0 auto; border: none } /* remove border from top image */
192   .head dl { margin: 1em 0; }
193   p.copyright { font-size: 0.6em; font-style: oblique; margin: 0; }
194
195   body > .toc > li { margin-top: 1em; margin-bottom: 1em; }
196   body > .toc.brief > li { margin-top: 0.35em; margin-bottom: 0.35em; }
197   body > .toc > li > * { margin-bottom: 0.5em; }
198   body > .toc > li > * > li > * { margin-bottom: 0.25em; }
199   .toc, .toc li { list-style: none; }
200
201   .brief { margin-top: 1em; margin-bottom: 1em; line-height: 1.1; }
202   .brief li { margin: 0; padding: 0; }
203   .brief li p { margin: 0; padding: 0; }
204
205   .category-list { margin-top: -0.75em; margin-bottom: 1em; line-height: 1.5; }
206   .category-list::before { content: '\21D2\A0'; font-size: 1.2em; font-weight: 900; }
207   .category-list li { display: inline; }
208   .category-list li:not(:last-child)::after { content: ', '; }
209   .category-list li > span, .category-list li > a { text-transform: lowercase; }
210   .category-list li * { text-transform: none; } /* don't affect <code> nested in <a> */
211
212   [title=WIP], [title=TBW] { background: red; color: yellow; padding: 0.1em 0.3em; border: dotted white; margin: 0 0.7em 0 0.2em; }
213   [title=SCS] { background: green; color: white; padding: 0.1em 0.3em; border-style: none dashed; margin: 0 0.7em 0 0.2em; }
214   [title=WIP] :link, [title=WIP] :visited,
215   [title=TBW] :link, [title=TBW] :visited,
216   [title=SCS] :link, [title=SCS] :visited { background: transparent; color: inherit; }
217
218   .big-issue, .XXX { color: #E50000; background: white; border: solid red; padding: 0.5em; margin: 1em 0; }
219   .big-issue > :first-child, .XXX > :first-child { margin-top: 0; }
220   p .big-issue, p .XXX { line-height: 3em; }
221   .note { color: green; background: transparent; font-family: sans-serif, Droid Sans Fallback; }
222   .warning { color: red; background: transparent; }
223   .note, .warning { font-weight: bolder; font-style: italic; }
224   .note em, .warning em, .note i, .warning i { font-style: normal; }
225   p.note, div.note { padding: 0.5em 2em; }
226   span.note { padding: 0 2em; }
227   .note p:first-child, .warning p:first-child { margin-top: 0; }
228   .note p:last-child, .warning p:last-child { margin-bottom: 0; }
229   .warning:before { font-style: normal; }
230
231   .XXX:before, .XXX:after { content: " ** "; position: absolute; left: 0; width: 8em; text-align: right; }
232   p.note:before { content: 'Note: '; }
233   p.warning:before { content: '\26A0 Warning! '; }
234
235   .bookkeeping:before { display: block; content: 'Bookkeeping details'; font-weight: bolder; font-style: italic; }
236   .bookkeeping { font-size: 0.8em; margin: 2em 0; }
237   .bookkeeping p { margin: 0.5em 2em; display: list-item; list-style: square; }
238   .bookkeeping dt { margin: 0.5em 2em 0; }
239   .bookkeeping dd { margin: 0 3em 0.5em; }
240
241   .critical { margin: 1em; border: double thick red; padding: 1em; background: #FFFFCC; }
242   .critical > :first-child { margin-top: 0; }
243
244   h4 { position: relative; z-index: 3; }
245   h4 + .element, h4 + div + .element { margin-top: -2.5em; padding-top: 2em; }
246   .element { background: #EEFFEE; color: black; margin: 0 0 1em 0.15em; padding: 0 1em 0.25em 0.75em; border-left: solid #99FF99 0.25em; position: relative; z-index: 1; }
247   .element:before { position: absolute; z-index: 2; top: 0; left: -1.15em; height: 2em; width: 0.9em; background: #EEFFEE; content: ' '; border-style: none none solid solid; border-color: #99FF99; border-width: 0.25em; }
248
249   .example { display: block; color: #222222; background: #FCFCFC; border-left: double; margin-left: 2em; padding-left: 1em; }
250   td > .example:only-child { margin: 0 0 0 0.1em; }
251
252   .hide { display: none }
253
254   body.dfnEnabled dfn { cursor: pointer; }
255   .dfnPanel {
256     display: inline;
257     position: absolute;
258     z-index: 10;
259     height: auto;
260     width: auto;
261     padding: 0.5em 0.75em;
262     font: small sans-serif, Droid Sans Fallback;
263     background: #DDDDDD;
264     color: black;
265     border: outset 0.2em;
266   }
267   .dfnPanel * { margin: 0; padding: 0; font: inherit; text-indent: 0; }
268   .dfnPanel :link, .dfnPanel :visited { color: black; }
269   .dfnPanel p { font-weight: bolder; }
270   .dfnPanel * + p { margin-top: 0.25em; }
271   .dfnPanel li { list-style-position: inside; }
272
273   @media aural {  
274     h1, h2, h3 { stress: 20; richness: 90 }
275     .hide { speak: none }
276     p.copyright { volume: x-soft; speech-rate: x-fast }
277     dt { pause-before: 20% }
278     code, pre { speak-punctuation: code } 
279   }
280
281   @media print {
282     html { font-size: 8pt; }
283     @page { margin: 1cm 1cm 1cm 1cm; }
284     @page :left {
285       @bottom-left {
286         font: 6pt sans-serif, Droid Sans Fallback;
287         content: counter(page);
288         padding-top: 0em;
289         vertical-align: top;
290       }
291     }
292     @page :right {
293       @bottom-right {
294         font: 6pt sans-serif, Droid Sans Fallback;
295         content: counter(page);
296         text-align: right;
297         vertical-align: top;
298         padding-top: 0em;
299       }
300     }
301     a[href^="#"]::after { font-size: 0.6em; vertical-align: super; padding: 0 0.15em 0 0.15em; content: "p" target-counter(attr(href), page); }
302     .toc a::after { font: inherit; vertical-align: baseline; padding: 0; content: leader('.') target-counter(attr(href), page); }
303     pre a[href^="#"]::after, blockquote a[href^="#"]::after { content: ""; padding: 0; }
304     table { font-size: smaller; }
305     :link, :visited { text-decoration: none; color: inherit; background: transparent; }
306   }
307
308   ul.domTree, ul.domTree ul { padding: 0 0 0 1em; margin: 0; }
309   ul.domTree li { padding: 0; margin: 0; list-style: none; position: relative; }
310   ul.domTree li li { list-style: none; }
311   ul.domTree li:first-child::before { position: absolute; top: 0; height: 0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
312   ul.domTree li:not(:last-child)::after { position: absolute; top: 0; bottom: -0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
313   ul.domTree span { font-style: italic; font-family: serif, Droid Sans Fallback; }
314   ul.domTree .t1 code { color: purple; font-weight: bold; }
315   ul.domTree .t2 { font-style: normal; font-family: monospace, Droid Sans Fallback; }
316   ul.domTree .t2 .name { color: black; font-weight: bold; }
317   ul.domTree .t2 .value { color: blue; font-weight: normal; }
318   ul.domTree .t3 code, .domTree .t4 code, .domTree .t5 code { color: gray; }
319   ul.domTree .t7 code, .domTree .t8 code { color: green; }
320   ul.domTree .t10 code { color: teal; }
321
322   :target {
323      background:         #ffa;
324      -moz-box-shadow:    0 0 25px #ffa;
325      -webkit-box-shadow: 0 0 150px #ffa;
326      box-shadow:         0 0 25px #ffa;
327   }
328
329   /*body:not(.statusEnabled) .head, body:not(.dfnEnabled) .head { background: bottom right url(http://hixie.ch/resources/images/spinner) no-repeat; }*/
330
331   </style>
332   <!-- END WEBKIT EDITS -->
333   <link href=/images/icon rel=icon><style>
334    .proposal { border: blue solid; padding: 1em; }
335    .bad, .bad *:not(.XXX) { color: gray; border-color: gray; background: transparent; }
336    #updatesStatus { display: none; }
337    #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; }
338    div.head .logo { width: 11em; margin-bottom: 20em; }
339    #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; }
340    #configUI p { margin: 0.75em 0; padding: 0.3em; }
341    #configUI p label { display: block; }
342    #configUI #updateUI, #configUI .loginUI { text-align: center; }
343    #configUI input[type=button] { display: block; margin: auto; }
344    #configUI :link, #configUI :visited { color: white; }
345    #configUI :link:hover, #configUI :visited:hover { background: transparent; }
346    #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%; }
347    #reviewer input { max-width: 50%; }
348    #reviewer * { font-size: small; }
349    #reviewer.off > :not(:first-child) { display: none; }
350    #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; }
351    #alert.closed { opacity: 0; }
352    #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; }
353    #alert :link, #alert :visited { color: white; }
354    #alert :link:hover, #alert :visited:hover { background: transparent; }
355    @media print { #configUI { display: none; } }
356    .rfc2119 { font-variant: small-caps; text-shadow: 0 0 0.5em yellow; position: static; }
357    .rfc2119::after { position: absolute; left: 0; width: 25px; text-align: center; color: yellow; text-shadow: 0.075em 0.075em 0.2em black; }
358    .rfc2119.m\ust::after { content: '\2605'; }
359    .rfc2119.s\hould::after { content: '\2606'; }
360    [hidden] { display: none; }
361   </style><style type=text/css>
362
363    .applies thead th > * { display: block; }
364    .applies thead code { display: block; }
365    .applies tbody th { whitespace: nowrap; }
366    .applies td { text-align: center; }
367    .applies .yes { background: yellow; }
368
369    .matrix, .matrix td { border: hidden; text-align: right; }
370    .matrix { margin-left: 2em; }
371
372    .dice-example { border-collapse: collapse; border-style: hidden solid solid hidden; border-width: thin; margin-left: 3em; }
373    .dice-example caption { width: 30em; font-size: smaller; font-style: italic; padding: 0.75em 0; text-align: left; }
374    .dice-example td, .dice-example th { border: solid thin; width: 1.35em; height: 1.05em; text-align: center; padding: 0; }
375
376    td.eg { border-width: thin; text-align: center; }
377
378    #table-example-1 { border: solid thin; border-collapse: collapse; margin-left: 3em; }
379    #table-example-1 * { font-family: "Essays1743", serif; line-height: 1.01em; }
380    #table-example-1 caption { padding-bottom: 0.5em; }
381    #table-example-1 thead, #table-example-1 tbody { border: none; }
382    #table-example-1 th, #table-example-1 td { border: solid thin; }
383    #table-example-1 th { font-weight: normal; }
384    #table-example-1 td { border-style: none solid; vertical-align: top; }
385    #table-example-1 th { padding: 0.5em; vertical-align: middle; text-align: center; }
386    #table-example-1 tbody tr:first-child td { padding-top: 0.5em; }
387    #table-example-1 tbody tr:last-child td { padding-bottom: 1.5em; }
388    #table-example-1 tbody td:first-child { padding-left: 2.5em; padding-right: 0; width: 9em; }
389    #table-example-1 tbody td:first-child::after { content: leader(". "); }
390    #table-example-1 tbody td { padding-left: 2em; padding-right: 2em; }
391    #table-example-1 tbody td:first-child + td { width: 10em; }
392    #table-example-1 tbody td:first-child + td ~ td { width: 2.5em; }
393    #table-example-1 tbody td:first-child + td + td + td ~ td { width: 1.25em; }
394
395    .apple-table-examples { border: none; border-collapse: separate; border-spacing: 1.5em 0em; width: 40em; margin-left: 3em; }
396    .apple-table-examples * { font-family: "Times", serif; }
397    .apple-table-examples td, .apple-table-examples th { border: none; white-space: nowrap; padding-top: 0; padding-bottom: 0; }
398    .apple-table-examples tbody th:first-child { border-left: none; width: 100%; }
399    .apple-table-examples thead th:first-child ~ th { font-size: smaller; font-weight: bolder; border-bottom: solid 2px; text-align: center; }
400    .apple-table-examples tbody th::after, .apple-table-examples tfoot th::after { content: leader(". ") }
401    .apple-table-examples tbody th, .apple-table-examples tfoot th { font: inherit; text-align: left; }
402    .apple-table-examples td { text-align: right; vertical-align: top; }
403    .apple-table-examples.e1 tbody tr:last-child td { border-bottom: solid 1px; }
404    .apple-table-examples.e1 tbody + tbody tr:last-child td { border-bottom: double 3px; }
405    .apple-table-examples.e2 th[scope=row] { padding-left: 1em; }
406    .apple-table-examples sup { line-height: 0; }
407
408    .details-example img { vertical-align: top; }
409
410    #base64-table {
411      white-space: nowrap;
412      font-size: 0.6em;
413      column-width: 6em;
414      column-count: 5;
415      column-gap: 1em;
416      -moz-column-width: 6em;
417      -moz-column-count: 5;
418      -moz-column-gap: 1em;
419      -webkit-column-width: 6em;
420      -webkit-column-count: 5;
421      -webkit-column-gap: 1em;
422    }
423    #base64-table thead { display: none; }
424    #base64-table * { border: none; }
425    #base64-table tbody td:first-child:after { content: ':'; }
426    #base64-table tbody td:last-child { text-align: right; }
427
428    #named-character-references-table {
429      white-space: nowrap;
430      font-size: 0.6em;
431      column-width: 30em;
432      column-gap: 1em;
433      -moz-column-width: 30em;
434      -moz-column-gap: 1em;
435      -webkit-column-width: 30em;
436      -webkit-column-gap: 1em;
437    }
438    #named-character-references-table > table > tbody > tr > td:first-child + td,
439    #named-character-references-table > table > tbody > tr > td:last-child { text-align: center; }
440    #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; }
441    #named-character-references-table > table > tbody > tr#entity-CounterClockwiseContourIntegral > td:first-child { font-size: 0.5em; }
442
443    .glyph.control { color: red; }
444
445    @font-face {
446      font-family: 'Essays1743';
447      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743.ttf');
448    }
449    @font-face {
450      font-family: 'Essays1743';
451      font-weight: bold;
452      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Bold.ttf');
453    }
454    @font-face {
455      font-family: 'Essays1743';
456      font-style: italic;
457      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Italic.ttf');
458    }
459    @font-face {
460      font-family: 'Essays1743';
461      font-style: italic;
462      font-weight: bold;
463      src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-BoldItalic.ttf');
464    }
465
466   </style>
467   <!-- BEGIN WEBKIT EDITS -->
468   <!-- Note we inline the stylesheets to help make html5-full-render.html show more consistent results. -->
469   <!-- Inlining status.css -->
470   <style>
471   .status { border: solid thin; font: 1em sans-serif; width: 7.2em; padding: 0.3em; position: absolute; z-index: 8; left: 0.3em; background: white; color: black; display: none; }
472   .status > * { font-size: 0.6em; }
473   .status.current { position: fixed; z-index: 7; top: 20px; -o-transition: 1s; -webkit-transition: 1s; } /* 20px is in the js file too */
474   .status[hidden] { display: block; opacity: 0.0; -o-transition: 0.25s; -webkit-transition: 0.25s; }
475   .status strong { display: block; border-bottom: thin solid black; margin: -0.5em -0.5em 0.2em; padding: 0.2em 0.5em 0.1em; background: black; color: white; }
476   .status p:first-child + p > a { display: block; margin: 0.1em 0 0.2em; font-weight: bold; color: black; }
477   .status.UNKNOWN strong { background: gray; color: white; }
478   .status.TBW strong { background: red; color: white; }
479   .status.WIP strong { background: red; color: white; }
480   .status.FD strong { background: orange; color: black; }
481   .status.WD strong { background: orange; color: black; }
482   .status.CWD strong { background: red; color: yellow; }
483   .status.ATRISK strong { background: red; color: yellow; }
484   .status.LC strong { background: yellow; color: black; }
485   .status.CR strong { background: lime; color: black; }
486   .status.REC strong { background: green; color: white; }
487   .status.SPLITFD strong { background: navy; color: white; }
488   .status.SPLIT/*CR*/ strong { background: navy; color: white; }
489   .status.SPLITREC strong { background: navy; color: white; }
490   .status:after { position: absolute; top: 0; left: 100%; content: '\25B6'; }
491   .status p { margin: 0; clear: both; }
492   .status p + p { overflow: hidden; }
493   .status div.implementations { height: 22px; }
494   .status div.implementations:before { display: block; content: "Implementation status:"; }
495   .status div.implementations p { font-size: 16px; float: left; margin: 0; border: 2px solid transparent; padding: 1px; text-indent: -10000px; /* well that's just silly */ width: 1em; height: 1em; background: no-repeat center center; /*background-size: 1em 1em;*/ clear: none; }
496   .status div.implementations p.IE { background-image: url(http://www.w3.org/TR/2006/WD-i18n-html-tech-lang-20060721/images/iewin.gif); background-position: center left; }
497   .status div.implementations p.Firefox { background-image: url(http://www.mozilla.org/favicon.ico); }
498   .status div.implementations p.Safari { background-image: url(http://www.webkit.org/favicon.ico); }
499   .status div.implementations p.Opera { background-image: url(http://www.opera.com/favicon.ico); }
500   .status div.implementations p.Shims { background-image: url(http://upload.wikimedia.org/wikipedia/commons/b/b7/Plugin.png); }
501   .status div.implementations p.PASS { }
502   .status div.implementations p.PARTIAL { opacity: 0.4; }
503   .status div.implementations p.NA,
504   .status div.implementations p.NONE { opacity: 0.05; }
505   .status div.implementations p.BUG { border-bottom-color: red; }
506   .status div.implementations p.CRASH { border-style: dotted; border-color: black; background-color: yellow; }
507   .status .edit-link, .status .idref { max-height: 0; opacity: 0; overflow: hidden; -o-transition: 0.25s; -webkit-transition: 0.25s; }
508   .status:hover .idref, .status:hover .edit-link { max-height: 200em; opacity: 1.0; }
509   .status .last-edit { color: silver; }
510   .status:hover { z-index: 10; }
511
512   .progress { text-decoration: blink; }
513
514   .panel { position: fixed; z-index: 9; top: 10%; left: 0; margin: auto; right: 0; width: 35em; border: double thick; background: #EEEEEE; color: black; padding: 1em; font: 1em sans-serif; max-height: 70%; overflow: auto; }
515   .panel h2 { margin: 0; text-align: center; }
516   .panel ul { min-height: 6em; }
517   .panel p { text-align: right; margin: 0; }
518   .panel form { background: transparent; color: black; margin: 0.5em -0.5em 1em; padding: 0.5em; }
519   .panel form.changed { background: yellow; color: black; }
520   .panel form p { text-align: left; margin: 1em 0 0; }
521   .panel form p:first-child { margin-top: 0; }
522   .panel form p:last-child { margin-bottom: 0; }
523   .panel form p textarea { width: 100% /* need the keyword that makes it fit to the parent here XXX */; min-height: 4em; display: block; }
524   .panel form dl { line-height: 1.5em; }
525   .panel form dt { display: inline-block; width: 20em; white-space: nowrap; text-align: right; font-weight: normal; margin: 0; padding: 0; }
526   .panel form dd { display: inline; margin: 0 0 0 1em; padding: 0; }
527   .panel form dd:after { display: block; }
528
529   body.statusEnabled .status { display: block; }
530   </style>
531   <!-- END WEBKIT EDITS -->
532   <script>
533    var startedInit = 0;
534    function init() {
535      startedInit = 1;
536      if (location.search == '?slow-browser')
537        return;
538      var configUI = document.createElement('div');
539      configUI.id = 'configUI';
540      document.body.appendChild(configUI);
541      load('reviewer.js');
542      if (document.documentElement.className == "" || document.documentElement.className == "split index")
543        load('toc.js');
544      load('updater.js');
545      load('dfn.js');
546      load('status.js');
547      if (getCookie('profile') == '1')
548        document.getElementsByTagName('h2')[0].textContent += '; load: ' + (new Date() - loadTimer) + 'ms';
549    }
550    if (document.documentElement.className == "")
551      setTimeout(function () {
552        if (!startedInit)
553          showAlert("Too slow? Try reading the multipage copy of the spec instead:", "http://whatwg.org/html");
554      }, 6000);
555   </script><body onload=init()>
556
557   <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>
558    <hgroup><h1 class=allcaps>HTML</h1>
559     <h2 class="no-num no-toc">Living Standard &mdash; Last Updated 4 October 2011</h2>
560    </hgroup><dl><dt><strong>Web developer edition:</strong></dt>
561     <dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
562     <dt>Multiple-page version:</dt>
563     <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/multipage/>http://whatwg.org/html</a></dd>
564     <dt>One-page version:</dt>
565     <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/>http://whatwg.org/c</a></dd>
566     <dt>Participate:</dt>
567     <dd><a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
568     <dd><a href=http://forums.whatwg.org/>http://forums.whatwg.org/</a></dd>
569     <dd><a href=http://wiki.whatwg.org/wiki/IRC>IRC: #whatwg on Freenode</a></dd>
570     <dt>FAQ:</dt>
571     <dd><a href=http://wiki.whatwg.org/wiki/FAQ>http://wiki.whatwg.org/wiki/FAQ</a></dd>
572     <dt>Version history:</dt>
573     <dd>Twitter updates: <a href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></dd>
574     <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>
575     <dd>Interactive Web interface: <a href=http://html5.org/tools/web-apps-tracker>http://html5.org/tools/web-apps-tracker</a></dd>
576     <dd>Subversion interface: <a href=http://svn.whatwg.org/>http://svn.whatwg.org/</a></dd>
577     <dt>Issues:</dt>
578     <dd>To view the open bugs: <a href="http://www.w3.org/Bugs/Public/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr&amp;long_desc=&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;emailassigned_to1=1&amp;emailtype1=exact&amp;email1=ian%40hixie.ch&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&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>
579     <dd>To file bugs, use the "submit review comments" feature at the bottom of the window</dd>
580     <dd>To send feedback by e-mail: <a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
581     <dd>To view and vote on e-mail feedback: <a href=http://www.whatwg.org/issues/>http://www.whatwg.org/issues/</a></dd>
582     <dt>Editor:</dt>
583     <dd>Ian Hickson, Google, ian@hixie.ch</dd>
584    </dl><p class=copyright>&copy; Copyright 2004-2011 Apple Computer, Inc.,
585    Mozilla Foundation, and Opera Software ASA.</p>
586    <p class=copyright>You are granted a license to use, reproduce
587    and create derivative works of this document.</p>
588   </header><hr><h2 class="no-num no-toc" id=contents>Table of contents</h2>
589   
590 <!--begin-toc-->
591 <ol class=toc>
592  <li><a href=#introduction><span class=secno>1 </span>Introduction</a>
593   <ol>
594    <li><a href=#abstract><span class=secno>1.1 </span>Where does this specification fit?</a></li>
595    <li><a href=#is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</a></li>
596    <li><a href=#background><span class=secno>1.3 </span>Background</a></li>
597    <li><a href=#audience><span class=secno>1.4 </span>Audience</a></li>
598    <li><a href=#scope><span class=secno>1.5 </span>Scope</a></li>
599    <li><a href=#history-1><span class=secno>1.6 </span>History</a></li>
600    <li><a href=#design-notes><span class=secno>1.7 </span>Design notes</a>
601     <ol>
602      <li><a href=#serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</a></li>
603      <li><a href=#compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</a></ol></li>
604    <li><a href=#html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</a></li>
605    <li><a href=#structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</a>
606     <ol>
607      <li><a href=#how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</a></li>
608      <li><a href=#typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</a></ol></li>
609    <li><a href=#a-quick-introduction-to-html><span class=secno>1.10 </span>A quick introduction to HTML</a>
610     <ol>
611      <li><a href=#writing-secure-applications-with-html><span class=secno>1.10.1 </span>Writing secure applications with HTML</a></li>
612      <li><a href=#common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.10.2 </span>Common pitfalls to avoid when using the scripting APIs</a></ol></li>
613    <li><a href=#conformance-requirements-for-authors><span class=secno>1.11 </span>Conformance requirements for authors</a>
614     <ol>
615      <li><a href=#presentational-markup><span class=secno>1.11.1 </span>Presentational markup</a></li>
616      <li><a href=#syntax-errors><span class=secno>1.11.2 </span>Syntax errors</a></li>
617      <li><a href=#restrictions-on-content-models-and-on-attribute-values><span class=secno>1.11.3 </span>Restrictions on content models and on attribute values</a></ol></li>
618    <li><a href=#recommended-reading><span class=secno>1.12 </span>Recommended reading</a></ol></li>
619  <li><a href=#infrastructure><span class=secno>2 </span>Common infrastructure</a>
620   <ol>
621    <li><a href=#terminology><span class=secno>2.1 </span>Terminology</a>
622     <ol>
623      <li><a href=#resources><span class=secno>2.1.1 </span>Resources</a></li>
624      <li><a href=#xml><span class=secno>2.1.2 </span>XML</a></li>
625      <li><a href=#dom-trees><span class=secno>2.1.3 </span>DOM trees</a></li>
626      <li><a href=#scripting-0><span class=secno>2.1.4 </span>Scripting</a></li>
627      <li><a href=#plugins><span class=secno>2.1.5 </span>Plugins</a></li>
628      <li><a href=#character-encodings><span class=secno>2.1.6 </span>Character encodings</a></ol></li>
629    <li><a href=#conformance-requirements><span class=secno>2.2 </span>Conformance requirements</a>
630     <ol>
631      <li><a href=#conformance-classes><span class=secno>2.2.1 </span>Conformance classes</a></li>
632      <li><a href=#dependencies><span class=secno>2.2.2 </span>Dependencies</a></li>
633      <li><a href=#extensibility><span class=secno>2.2.3 </span>Extensibility</a></ol></li>
634    <li><a href=#case-sensitivity-and-string-comparison><span class=secno>2.3 </span>Case-sensitivity and string comparison</a></li>
635    <li><a href=#utf-8><span class=secno>2.4 </span>UTF-8</a></li>
636    <li><a href=#common-microsyntaxes><span class=secno>2.5 </span>Common microsyntaxes</a>
637     <ol>
638      <li><a href=#common-parser-idioms><span class=secno>2.5.1 </span>Common parser idioms</a></li>
639      <li><a href=#boolean-attributes><span class=secno>2.5.2 </span>Boolean attributes</a></li>
640      <li><a href=#keywords-and-enumerated-attributes><span class=secno>2.5.3 </span>Keywords and enumerated attributes</a></li>
641      <li><a href=#numbers><span class=secno>2.5.4 </span>Numbers</a>
642       <ol>
643        <li><a href=#non-negative-integers><span class=secno>2.5.4.1 </span>Non-negative integers</a></li>
644        <li><a href=#signed-integers><span class=secno>2.5.4.2 </span>Signed integers</a></li>
645        <li><a href=#floating-point-numbers><span class=secno>2.5.4.3 </span>Floating-point numbers</a></li>
646        <li><a href=#percentages-and-dimensions><span class=secno>2.5.4.4 </span>Percentages and lengths</a></li>
647        <li><a href=#lists-of-integers><span class=secno>2.5.4.5 </span>Lists of integers</a></li>
648        <li><a href=#lists-of-dimensions><span class=secno>2.5.4.6 </span>Lists of dimensions</a></ol></li>
649      <li><a href=#dates-and-times><span class=secno>2.5.5 </span>Dates and times</a>
650       <ol>
651        <li><a href=#months><span class=secno>2.5.5.1 </span>Months</a></li>
652        <li><a href=#dates><span class=secno>2.5.5.2 </span>Dates</a></li>
653        <li><a href=#times><span class=secno>2.5.5.3 </span>Times</a></li>
654        <li><a href=#local-dates-and-times><span class=secno>2.5.5.4 </span>Local dates and times</a></li>
655        <li><a href=#global-dates-and-times><span class=secno>2.5.5.5 </span>Global dates and times</a></li>
656        <li><a href=#weeks><span class=secno>2.5.5.6 </span>Weeks</a></li>
657        <li><a href=#vaguer-moments-in-time><span class=secno>2.5.5.7 </span>Vaguer moments in time</a></ol></li>
658      <li><a href=#colors><span class=secno>2.5.6 </span>Colors</a></li>
659      <li><a href=#space-separated-tokens><span class=secno>2.5.7 </span>Space-separated tokens</a></li>
660      <li><a href=#comma-separated-tokens><span class=secno>2.5.8 </span>Comma-separated tokens</a></li>
661      <li><a href=#syntax-references><span class=secno>2.5.9 </span>References</a></li>
662      <li><a href=#mq><span class=secno>2.5.10 </span>Media queries</a></ol></li>
663    <li><a href=#urls><span class=secno>2.6 </span>URLs</a>
664     <ol>
665      <li><a href=#terminology-0><span class=secno>2.6.1 </span>Terminology</a></li>
666      <li><a href=#parsing-urls><span class=secno>2.6.2 </span>Parsing URLs</a></li>
667      <li><a href=#resolving-urls><span class=secno>2.6.3 </span>Resolving URLs</a></li>
668      <li><a href=#url-manipulation-and-creation><span class=secno>2.6.4 </span>URL manipulation and creation</a></li>
669      <li><a href=#dynamic-changes-to-base-urls><span class=secno>2.6.5 </span>Dynamic changes to base URLs</a></li>
670      <li><a href=#interfaces-for-url-manipulation><span class=secno>2.6.6 </span>Interfaces for URL manipulation</a></ol></li>
671    <li><a href=#fetching-resources><span class=secno>2.7 </span>Fetching resources</a>
672     <ol>
673      <li><a href=#concept-http-equivalent><span class=secno>2.7.1 </span>Protocol concepts</a></li>
674      <li><a href=#encrypted-http-and-related-security-concerns><span class=secno>2.7.2 </span>Encrypted HTTP and related security concerns</a></li>
675      <li><a href=#content-type-sniffing><span class=secno>2.7.3 </span>Determining the type of a resource</a></li>
676      <li><a href=#extracting-encodings-from-meta-elements><span class=secno>2.7.4 </span>Extracting encodings from <code>meta</code> elements</a></li>
677      <li><a href=#cors-settings-attributes><span class=secno>2.7.5 </span>CORS settings attributes</a></li>
678      <li><a href=#cors-enabled-fetch><span class=secno>2.7.6 </span>CORS-enabled fetch</a></ol></li>
679    <li><a href=#common-dom-interfaces><span class=secno>2.8 </span>Common DOM interfaces</a>
680     <ol>
681      <li><a href=#reflecting-content-attributes-in-idl-attributes><span class=secno>2.8.1 </span>Reflecting content attributes in IDL attributes</a></li>
682      <li><a href=#collections-0><span class=secno>2.8.2 </span>Collections</a>
683       <ol>
684        <li><a href=#htmlallcollection-0><span class=secno>2.8.2.1 </span>HTMLAllCollection</a></li>
685        <li><a href=#htmlformcontrolscollection-0><span class=secno>2.8.2.2 </span>HTMLFormControlsCollection</a></li>
686        <li><a href=#htmloptionscollection-0><span class=secno>2.8.2.3 </span>HTMLOptionsCollection</a></li>
687        <li><a href=#htmlpropertiescollection-0><span class=secno>2.8.2.4 </span>HTMLPropertiesCollection</a></ol></li>
688      <li><a href=#domstringmap-0><span class=secno>2.8.3 </span>DOMStringMap</a></li>
689      <li><a href=#domelementmap-0><span class=secno>2.8.4 </span>DOMElementMap</a></li>
690      <li><a href=#transferable-objects><span class=secno>2.8.5 </span>Transferable objects</a></li>
691      <li><a href=#safe-passing-of-structured-data><span class=secno>2.8.6 </span>Safe passing of structured data</a></li>
692      <li><a href=#dom-feature-strings><span class=secno>2.8.7 </span>DOM feature strings</a></li>
693      <li><a href=#garbage-collection><span class=secno>2.8.8 </span>Garbage collection</a></ol></li>
694    <li><a href=#namespaces><span class=secno>2.9 </span>Namespaces</a></ol></li>
695  <li><a href=#dom><span class=secno>3 </span>Semantics, structure, and APIs of HTML documents</a>
696   <ol>
697    <li><a href=#documents><span class=secno>3.1 </span>Documents</a>
698     <ol>
699      <li><a href=#documents-in-the-dom><span class=secno>3.1.1 </span>Documents in the DOM</a></li>
700      <li><a href=#security-document><span class=secno>3.1.2 </span>Security</a></li>
701      <li><a href=#resource-metadata-management><span class=secno>3.1.3 </span>Resource metadata management</a></li>
702      <li><a href=#dom-tree-accessors><span class=secno>3.1.4 </span>DOM tree accessors</a></li>
703      <li><a href=#loading-xml-documents><span class=secno>3.1.5 </span>Loading XML documents</a></ol></li>
704    <li><a href=#elements><span class=secno>3.2 </span>Elements</a>
705     <ol>
706      <li><a href=#semantics-0><span class=secno>3.2.1 </span>Semantics</a></li>
707      <li><a href=#elements-in-the-dom><span class=secno>3.2.2 </span>Elements in the DOM</a></li>
708      <li><a href=#global-attributes><span class=secno>3.2.3 </span>Global attributes</a>
709       <ol>
710        <li><a href=#the-id-attribute><span class=secno>3.2.3.1 </span>The <code>id</code> attribute</a></li>
711        <li><a href=#the-title-attribute><span class=secno>3.2.3.2 </span>The <code>title</code> attribute</a></li>
712        <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>
713        <li><a href=#the-xml:base-attribute-(xml-only)><span class=secno>3.2.3.4 </span>The <code>xml:base</code>
714   attribute (XML only)</a></li>
715        <li><a href=#the-dir-attribute><span class=secno>3.2.3.5 </span>The <code>dir</code> attribute</a></li>
716        <li><a href=#classes><span class=secno>3.2.3.6 </span>The <code>class</code> attribute</a></li>
717        <li><a href=#the-style-attribute><span class=secno>3.2.3.7 </span>The <code>style</code> attribute</a></li>
718        <li><a href=#embedding-custom-non-visible-data-with-the-data-*-attributes><span class=secno>3.2.3.8 </span>Embedding custom non-visible data with the <code title=attr-data-*>data-*</code> attributes</a></ol></li>
719      <li><a href=#element-definitions><span class=secno>3.2.4 </span>Element definitions</a>
720       <ol>
721        <li><a href=#attributes><span class=secno>3.2.4.1 </span>Attributes</a></ol></li>
722      <li><a href=#content-models><span class=secno>3.2.5 </span>Content models</a>
723       <ol>
724        <li><a href=#kinds-of-content><span class=secno>3.2.5.1 </span>Kinds of content</a>
725         <ol>
726          <li><a href=#metadata-content-0><span class=secno>3.2.5.1.1 </span>Metadata content</a></li>
727          <li><a href=#flow-content-0><span class=secno>3.2.5.1.2 </span>Flow content</a></li>
728          <li><a href=#sectioning-content-0><span class=secno>3.2.5.1.3 </span>Sectioning content</a></li>
729          <li><a href=#heading-content-0><span class=secno>3.2.5.1.4 </span>Heading content</a></li>
730          <li><a href=#phrasing-content-0><span class=secno>3.2.5.1.5 </span>Phrasing content</a></li>
731          <li><a href=#embedded-content-0><span class=secno>3.2.5.1.6 </span>Embedded content</a></li>
732          <li><a href=#interactive-content-0><span class=secno>3.2.5.1.7 </span>Interactive content</a></ol></li>
733        <li><a href=#transparent-content-models><span class=secno>3.2.5.2 </span>Transparent content models</a></li>
734        <li><a href=#paragraphs><span class=secno>3.2.5.3 </span>Paragraphs</a></ol></li>
735      <li><a href=#requirements-relating-to-bidirectional-algorithm-formatting-characters><span class=secno>3.2.6 </span>Requirements relating to bidirectional-algorithm formatting
736   characters</a></li>
737      <li><a href=#wai-aria><span class=secno>3.2.7 </span>WAI-ARIA</a></ol></li>
738    <li><a href=#interactions-with-xpath-and-xslt><span class=secno>3.3 </span>Interactions with XPath and XSLT</a></li>
739    <li><a href=#dynamic-markup-insertion><span class=secno>3.4 </span>Dynamic markup insertion</a>
740     <ol>
741      <li><a href=#opening-the-input-stream><span class=secno>3.4.1 </span>Opening the input stream</a></li>
742      <li><a href=#closing-the-input-stream><span class=secno>3.4.2 </span>Closing the input stream</a></li>
743      <li><a href=#document.write()><span class=secno>3.4.3 </span><code title=dom-document-write>document.write()</code></a></li>
744      <li><a href=#document.writeln()><span class=secno>3.4.4 </span><code title=dom-document-writeln>document.writeln()</code></a></ol></ol></li>
745  <li><a href=#semantics><span class=secno>4 </span>The elements of HTML</a>
746   <ol>
747    <li><a href=#the-root-element><span class=secno>4.1 </span>The root element</a>
748     <ol>
749      <li><a href=#the-html-element><span class=secno>4.1.1 </span>The <code>html</code> element</a></ol></li>
750    <li><a href=#document-metadata><span class=secno>4.2 </span>Document metadata</a>
751     <ol>
752      <li><a href=#the-head-element><span class=secno>4.2.1 </span>The <code>head</code> element</a></li>
753      <li><a href=#the-title-element><span class=secno>4.2.2 </span>The <code>title</code> element</a></li>
754      <li><a href=#the-base-element><span class=secno>4.2.3 </span>The <code>base</code> element</a></li>
755      <li><a href=#the-link-element><span class=secno>4.2.4 </span>The <code>link</code> element</a></li>
756      <li><a href=#the-meta-element><span class=secno>4.2.5 </span>The <code>meta</code> element</a>
757       <ol>
758        <li><a href=#standard-metadata-names><span class=secno>4.2.5.1 </span>Standard metadata names</a></li>
759        <li><a href=#other-metadata-names><span class=secno>4.2.5.2 </span>Other metadata names</a></li>
760        <li><a href=#pragma-directives><span class=secno>4.2.5.3 </span>Pragma directives</a></li>
761        <li><a href=#other-pragma-directives><span class=secno>4.2.5.4 </span>Other pragma directives</a></li>
762        <li><a href=#charset><span class=secno>4.2.5.5 </span>Specifying the document's character encoding</a></ol></li>
763      <li><a href=#the-style-element><span class=secno>4.2.6 </span>The <code>style</code> element</a></li>
764      <li><a href=#styling><span class=secno>4.2.7 </span>Styling</a></ol></li>
765    <li><a href=#scripting-1><span class=secno>4.3 </span>Scripting</a>
766     <ol>
767      <li><a href=#the-script-element><span class=secno>4.3.1 </span>The <code>script</code> element</a>
768       <ol>
769        <li><a href=#scriptingLanguages><span class=secno>4.3.1.1 </span>Scripting languages</a></li>
770        <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>
771        <li><a href=#inline-documentation-for-external-scripts><span class=secno>4.3.1.3 </span>Inline documentation for external scripts</a></li>
772        <li><a href=#scriptTagXSLT><span class=secno>4.3.1.4 </span>Interaction of <code>script</code> elements and XSLT</a></ol></li>
773      <li><a href=#the-noscript-element><span class=secno>4.3.2 </span>The <code>noscript</code> element</a></ol></li>
774    <li><a href=#sections><span class=secno>4.4 </span>Sections</a>
775     <ol>
776      <li><a href=#the-body-element><span class=secno>4.4.1 </span>The <code>body</code> element</a></li>
777      <li><a href=#the-section-element><span class=secno>4.4.2 </span>The <code>section</code> element</a></li>
778      <li><a href=#the-nav-element><span class=secno>4.4.3 </span>The <code>nav</code> element</a></li>
779      <li><a href=#the-article-element><span class=secno>4.4.4 </span>The <code>article</code> element</a></li>
780      <li><a href=#the-aside-element><span class=secno>4.4.5 </span>The <code>aside</code> element</a></li>
781      <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>
782      <li><a href=#the-hgroup-element><span class=secno>4.4.7 </span>The <code>hgroup</code> element</a></li>
783      <li><a href=#the-header-element><span class=secno>4.4.8 </span>The <code>header</code> element</a></li>
784      <li><a href=#the-footer-element><span class=secno>4.4.9 </span>The <code>footer</code> element</a></li>
785      <li><a href=#the-address-element><span class=secno>4.4.10 </span>The <code>address</code> element</a></li>
786      <li><a href=#headings-and-sections><span class=secno>4.4.11 </span>Headings and sections</a>
787       <ol>
788        <li><a href=#outlines><span class=secno>4.4.11.1 </span>Creating an outline</a></ol></ol></li>
789    <li><a href=#grouping-content><span class=secno>4.5 </span>Grouping content</a>
790     <ol>
791      <li><a href=#the-p-element><span class=secno>4.5.1 </span>The <code>p</code> element</a></li>
792      <li><a href=#the-hr-element><span class=secno>4.5.2 </span>The <code>hr</code> element</a></li>
793      <li><a href=#the-pre-element><span class=secno>4.5.3 </span>The <code>pre</code> element</a></li>
794      <li><a href=#the-blockquote-element><span class=secno>4.5.4 </span>The <code>blockquote</code> element</a></li>
795      <li><a href=#the-ol-element><span class=secno>4.5.5 </span>The <code>ol</code> element</a></li>
796      <li><a href=#the-ul-element><span class=secno>4.5.6 </span>The <code>ul</code> element</a></li>
797      <li><a href=#the-li-element><span class=secno>4.5.7 </span>The <code>li</code> element</a></li>
798      <li><a href=#the-dl-element><span class=secno>4.5.8 </span>The <code>dl</code> element</a></li>
799      <li><a href=#the-dt-element><span class=secno>4.5.9 </span>The <code>dt</code> element</a></li>
800      <li><a href=#the-dd-element><span class=secno>4.5.10 </span>The <code>dd</code> element</a></li>
801      <li><a href=#the-figure-element><span class=secno>4.5.11 </span>The <code>figure</code> element</a></li>
802      <li><a href=#the-figcaption-element><span class=secno>4.5.12 </span>The <code>figcaption</code> element</a></li>
803      <li><a href=#the-div-element><span class=secno>4.5.13 </span>The <code>div</code> element</a></ol></li>
804    <li><a href=#text-level-semantics><span class=secno>4.6 </span>Text-level semantics</a>
805     <ol>
806      <li><a href=#the-a-element><span class=secno>4.6.1 </span>The <code>a</code> element</a></li>
807      <li><a href=#the-em-element><span class=secno>4.6.2 </span>The <code>em</code> element</a></li>
808      <li><a href=#the-strong-element><span class=secno>4.6.3 </span>The <code>strong</code> element</a></li>
809      <li><a href=#the-small-element><span class=secno>4.6.4 </span>The <code>small</code> element</a></li>
810      <li><a href=#the-s-element><span class=secno>4.6.5 </span>The <code>s</code> element</a></li>
811      <li><a href=#the-cite-element><span class=secno>4.6.6 </span>The <code>cite</code> element</a></li>
812      <li><a href=#the-q-element><span class=secno>4.6.7 </span>The <code>q</code> element</a></li>
813      <li><a href=#the-dfn-element><span class=secno>4.6.8 </span>The <code>dfn</code> element</a></li>
814      <li><a href=#the-abbr-element><span class=secno>4.6.9 </span>The <code>abbr</code> element</a></li>
815      <li><a href=#the-time-element><span class=secno>4.6.10 </span>The <code>time</code> element</a></li>
816      <li><a href=#the-code-element><span class=secno>4.6.11 </span>The <code>code</code> element</a></li>
817      <li><a href=#the-var-element><span class=secno>4.6.12 </span>The <code>var</code> element</a></li>
818      <li><a href=#the-samp-element><span class=secno>4.6.13 </span>The <code>samp</code> element</a></li>
819      <li><a href=#the-kbd-element><span class=secno>4.6.14 </span>The <code>kbd</code> element</a></li>
820      <li><a href=#the-sub-and-sup-elements><span class=secno>4.6.15 </span>The <code>sub</code> and <code>sup</code> elements</a></li>
821      <li><a href=#the-i-element><span class=secno>4.6.16 </span>The <code>i</code> element</a></li>
822      <li><a href=#the-b-element><span class=secno>4.6.17 </span>The <code>b</code> element</a></li>
823      <li><a href=#the-u-element><span class=secno>4.6.18 </span>The <code>u</code> element</a></li>
824      <li><a href=#the-mark-element><span class=secno>4.6.19 </span>The <code>mark</code> element</a></li>
825      <li><a href=#the-ruby-element><span class=secno>4.6.20 </span>The <code>ruby</code> element</a></li>
826      <li><a href=#the-rt-element><span class=secno>4.6.21 </span>The <code>rt</code> element</a></li>
827      <li><a href=#the-rp-element><span class=secno>4.6.22 </span>The <code>rp</code> element</a></li>
828      <li><a href=#the-bdi-element><span class=secno>4.6.23 </span>The <code>bdi</code> element</a></li>
829      <li><a href=#the-bdo-element><span class=secno>4.6.24 </span>The <code>bdo</code> element</a></li>
830      <li><a href=#the-span-element><span class=secno>4.6.25 </span>The <code>span</code> element</a></li>
831      <li><a href=#the-br-element><span class=secno>4.6.26 </span>The <code>br</code> element</a></li>
832      <li><a href=#the-wbr-element><span class=secno>4.6.27 </span>The <code>wbr</code> element</a></li>
833      <li><a href=#usage-summary><span class=secno>4.6.28 </span>Usage summary</a></ol></li>
834    <li><a href=#edits><span class=secno>4.7 </span>Edits</a>
835     <ol>
836      <li><a href=#the-ins-element><span class=secno>4.7.1 </span>The <code>ins</code> element</a></li>
837      <li><a href=#the-del-element><span class=secno>4.7.2 </span>The <code>del</code> element</a></li>
838      <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>
839      <li><a href=#edits-and-paragraphs><span class=secno>4.7.4 </span>Edits and paragraphs</a></li>
840      <li><a href=#edits-and-lists><span class=secno>4.7.5 </span>Edits and lists</a></li>
841      <li><a href=#edits-and-tables><span class=secno>4.7.6 </span>Edits and tables</a></ol></li>
842    <li><a href=#embedded-content-1><span class=secno>4.8 </span>Embedded content</a>
843     <ol>
844      <li><a href=#the-img-element><span class=secno>4.8.1 </span>The <code>img</code> element</a>
845       <ol>
846        <li><a href=#alt><span class=secno>4.8.1.1 </span>Requirements for providing text to act as an alternative for images</a>
847         <ol>
848          <li><a href=#general-guidelines><span class=secno>4.8.1.1.1 </span>General guidelines</a></li>
849          <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>
850          <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>
851          <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>
852          <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>
853          <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>
854          <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>
855          <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>
856          <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>
857          <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>
858          <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>
859          <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>
860          <li><a href=#guidance-for-markup-generators><span class=secno>4.8.1.1.13 </span>Guidance for markup generators</a></li>
861          <li><a href=#guidance-for-conformance-checkers><span class=secno>4.8.1.1.14 </span>Guidance for conformance checkers</a></ol></ol></li>
862      <li><a href=#the-iframe-element><span class=secno>4.8.2 </span>The <code>iframe</code> element</a></li>
863      <li><a href=#the-embed-element><span class=secno>4.8.3 </span>The <code>embed</code> element</a></li>
864      <li><a href=#the-object-element><span class=secno>4.8.4 </span>The <code>object</code> element</a></li>
865      <li><a href=#the-param-element><span class=secno>4.8.5 </span>The <code>param</code> element</a></li>
866      <li><a href=#the-video-element><span class=secno>4.8.6 </span>The <code>video</code> element</a></li>
867      <li><a href=#the-audio-element><span class=secno>4.8.7 </span>The <code>audio</code> element</a></li>
868      <li><a href=#the-source-element><span class=secno>4.8.8 </span>The <code>source</code> element</a></li>
869      <li><a href=#the-track-element><span class=secno>4.8.9 </span>The <code>track</code> element</a></li>
870      <li><a href=#media-elements><span class=secno>4.8.10 </span>Media elements</a>
871       <ol>
872        <li><a href=#error-codes><span class=secno>4.8.10.1 </span>Error codes</a></li>
873        <li><a href=#location-of-the-media-resource><span class=secno>4.8.10.2 </span>Location of the media resource</a></li>
874        <li><a href=#mime-types><span class=secno>4.8.10.3 </span>MIME types</a></li>
875        <li><a href=#network-states><span class=secno>4.8.10.4 </span>Network states</a></li>
876        <li><a href=#loading-the-media-resource><span class=secno>4.8.10.5 </span>Loading the media resource</a></li>
877        <li><a href=#offsets-into-the-media-resource><span class=secno>4.8.10.6 </span>Offsets into the media resource</a></li>
878        <li><a href=#ready-states><span class=secno>4.8.10.7 </span>Ready states</a></li>
879        <li><a href=#playing-the-media-resource><span class=secno>4.8.10.8 </span>Playing the media resource</a></li>
880        <li><a href=#seeking><span class=secno>4.8.10.9 </span>Seeking</a></li>
881        <li><a href=#media-resources-with-multiple-media-tracks><span class=secno>4.8.10.10 </span>Media resources with multiple media tracks</a>
882         <ol>
883          <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>
884          <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>
885        <li><a href=#synchronising-multiple-media-elements><span class=secno>4.8.10.11 </span>Synchronising multiple media elements</a>
886         <ol>
887          <li><a href=#introduction-0><span class=secno>4.8.10.11.1 </span>Introduction</a></li>
888          <li><a href=#media-controllers><span class=secno>4.8.10.11.2 </span>Media controllers</a></li>
889          <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>
890        <li><a href=#timed-text-tracks><span class=secno>4.8.10.12 </span>Timed text tracks</a>
891         <ol>
892          <li><a href=#text-track-model><span class=secno>4.8.10.12.1 </span>Text track model</a></li>
893          <li><a href=#sourcing-in-band-text-tracks><span class=secno>4.8.10.12.2 </span>Sourcing in-band text tracks</a></li>
894          <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>
895          <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
896   text track cues</a></li>
897          <li><a href=#text-track-api><span class=secno>4.8.10.12.5 </span>Text track API</a></li>
898          <li><a href=#text-tracks-describing-chapters><span class=secno>4.8.10.12.6 </span>Text tracks describing chapters</a></li>
899          <li><a href=#cue-events><span class=secno>4.8.10.12.7 </span>Event definitions</a></ol></li>
900        <li><a href=#webvtt-0><span class=secno>4.8.10.13 </span>WebVTT</a>
901         <ol>
902          <li><a href=#introduction-1><span class=secno>4.8.10.13.1 </span>Introduction</a></li>
903          <li><a href=#syntax-0><span class=secno>4.8.10.13.2 </span>Syntax</a></li>
904          <li><a href=#parsing-0><span class=secno>4.8.10.13.3 </span>Parsing</a></li>
905          <li><a href=#webvtt-cue-text-parsing-rules><span class=secno>4.8.10.13.4 </span>WebVTT cue text parsing rules</a></li>
906          <li><a href=#webvtt-cue-text-dom-construction-rules><span class=secno>4.8.10.13.5 </span>WebVTT cue text DOM construction rules</a></ol></li>
907        <li><a href=#user-interface><span class=secno>4.8.10.14 </span>User interface</a></li>
908        <li><a href=#time-ranges><span class=secno>4.8.10.15 </span>Time ranges</a></li>
909        <li><a href=#event-definitions><span class=secno>4.8.10.16 </span>Event definitions</a></li>
910        <li><a href=#mediaevents><span class=secno>4.8.10.17 </span>Event summary</a></li>
911        <li><a href=#security-and-privacy-considerations><span class=secno>4.8.10.18 </span>Security and privacy considerations</a></li>
912        <li><a href=#best-practices-for-authors-using-media-elements><span class=secno>4.8.10.19 </span>Best practices for authors using media elements</a></li>
913        <li><a href=#best-practices-for-implementors-of-media-elements><span class=secno>4.8.10.20 </span>Best practices for implementors of media elements</a></ol></li>
914      <li><a href=#the-canvas-element><span class=secno>4.8.11 </span>The <code>canvas</code> element</a>
915       <ol>
916        <li><a href=#2dcontext><span class=secno>4.8.11.1 </span>The 2D context</a>
917         <ol>
918          <li><a href=#the-canvas-state><span class=secno>4.8.11.1.1 </span>The canvas state</a></li>
919          <li><a href=#transformations><span class=secno>4.8.11.1.2 </span>Transformations</a></li>
920          <li><a href=#compositing><span class=secno>4.8.11.1.3 </span>Compositing</a></li>
921          <li><a href=#colors-and-styles><span class=secno>4.8.11.1.4 </span>Colors and styles</a></li>
922          <li><a href=#line-styles><span class=secno>4.8.11.1.5 </span>Line styles</a></li>
923          <li><a href=#shadows><span class=secno>4.8.11.1.6 </span>Shadows</a></li>
924          <li><a href=#simple-shapes-(rectangles)><span class=secno>4.8.11.1.7 </span>Simple shapes (rectangles)</a></li>
925          <li><a href=#complex-shapes-(paths)><span class=secno>4.8.11.1.8 </span>Complex shapes (paths)</a></li>
926          <li><a href=#text-0><span class=secno>4.8.11.1.9 </span>Text</a></li>
927          <li><a href=#images><span class=secno>4.8.11.1.10 </span>Images</a></li>
928          <li><a href=#pixel-manipulation><span class=secno>4.8.11.1.11 </span>Pixel manipulation</a></li>
929          <li><a href=#drawing-model><span class=secno>4.8.11.1.12 </span>Drawing model</a></li>
930          <li><a href=#best-practices><span class=secno>4.8.11.1.13 </span>Best practices</a></li>
931          <li><a href=#examples><span class=secno>4.8.11.1.14 </span>Examples</a></ol></li>
932        <li><a href=#color-spaces-and-color-correction><span class=secno>4.8.11.2 </span>Color spaces and color correction</a></li>
933        <li><a href=#security-with-canvas-elements><span class=secno>4.8.11.3 </span>Security with <code>canvas</code> elements</a></ol></li>
934      <li><a href=#the-map-element><span class=secno>4.8.12 </span>The <code>map</code> element</a></li>
935      <li><a href=#the-area-element><span class=secno>4.8.13 </span>The <code>area</code> element</a></li>
936      <li><a href=#image-maps><span class=secno>4.8.14 </span>Image maps</a>
937       <ol>
938        <li><a href=#authoring><span class=secno>4.8.14.1 </span>Authoring</a></li>
939        <li><a href=#processing-model><span class=secno>4.8.14.2 </span>Processing model</a></ol></li>
940      <li><a href=#mathml><span class=secno>4.8.15 </span>MathML</a></li>
941      <li><a href=#svg-0><span class=secno>4.8.16 </span>SVG</a></li>
942      <li><a href=#dimension-attributes><span class=secno>4.8.17 </span>Dimension attributes</a></ol></li>
943    <li><a href=#tabular-data><span class=secno>4.9 </span>Tabular data</a>
944     <ol>
945      <li><a href=#the-table-element><span class=secno>4.9.1 </span>The <code>table</code> element</a>
946       <ol>
947        <li><a href=#table-descriptions-techniques><span class=secno>4.9.1.1 </span>Techniques for describing tables</a></li>
948        <li><a href=#table-layout-techniques><span class=secno>4.9.1.2 </span>Techniques for table layout</a></ol></li>
949      <li><a href=#the-caption-element><span class=secno>4.9.2 </span>The <code>caption</code> element</a></li>
950      <li><a href=#the-colgroup-element><span class=secno>4.9.3 </span>The <code>colgroup</code> element</a></li>
951      <li><a href=#the-col-element><span class=secno>4.9.4 </span>The <code>col</code> element</a></li>
952      <li><a href=#the-tbody-element><span class=secno>4.9.5 </span>The <code>tbody</code> element</a></li>
953      <li><a href=#the-thead-element><span class=secno>4.9.6 </span>The <code>thead</code> element</a></li>
954      <li><a href=#the-tfoot-element><span class=secno>4.9.7 </span>The <code>tfoot</code> element</a></li>
955      <li><a href=#the-tr-element><span class=secno>4.9.8 </span>The <code>tr</code> element</a></li>
956      <li><a href=#the-td-element><span class=secno>4.9.9 </span>The <code>td</code> element</a></li>
957      <li><a href=#the-th-element><span class=secno>4.9.10 </span>The <code>th</code> element</a></li>
958      <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>
959      <li><a href=#processing-model-0><span class=secno>4.9.12 </span>Processing model</a>
960       <ol>
961        <li><a href=#forming-a-table><span class=secno>4.9.12.1 </span>Forming a table</a></li>
962        <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>
963      <li><a href=#examples-0><span class=secno>4.9.13 </span>Examples</a></ol></li>
964    <li><a href=#forms><span class=secno>4.10 </span>Forms</a>
965     <ol>
966      <li><a href=#introduction-2><span class=secno>4.10.1 </span>Introduction</a>
967       <ol>
968        <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>
969        <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>
970        <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>
971        <li><a href=#client-side-form-validation><span class=secno>4.10.1.4 </span>Client-side form validation</a></ol></li>
972      <li><a href=#categories><span class=secno>4.10.2 </span>Categories</a></li>
973      <li><a href=#the-form-element><span class=secno>4.10.3 </span>The <code>form</code> element</a></li>
974      <li><a href=#the-fieldset-element><span class=secno>4.10.4 </span>The <code>fieldset</code> element</a></li>
975      <li><a href=#the-legend-element><span class=secno>4.10.5 </span>The <code>legend</code> element</a></li>
976      <li><a href=#the-label-element><span class=secno>4.10.6 </span>The <code>label</code> element</a></li>
977      <li><a href=#the-input-element><span class=secno>4.10.7 </span>The <code>input</code> element</a>
978       <ol>
979        <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>
980         <ol>
981          <li><a href=#hidden-state><span class=secno>4.10.7.1.1 </span>Hidden state</a></li>
982          <li><a href=#text-state-and-search-state><span class=secno>4.10.7.1.2 </span>Text state and Search state</a></li>
983          <li><a href=#telephone-state><span class=secno>4.10.7.1.3 </span>Telephone state</a></li>
984          <li><a href=#url-state><span class=secno>4.10.7.1.4 </span>URL state</a></li>
985          <li><a href=#e-mail-state><span class=secno>4.10.7.1.5 </span>E-mail state</a></li>
986          <li><a href=#password-state><span class=secno>4.10.7.1.6 </span>Password state</a></li>
987          <li><a href=#date-and-time-state><span class=secno>4.10.7.1.7 </span>Date and Time state</a></li>
988          <li><a href=#date-state><span class=secno>4.10.7.1.8 </span>Date state</a></li>
989          <li><a href=#month-state><span class=secno>4.10.7.1.9 </span>Month state</a></li>
990          <li><a href=#week-state><span class=secno>4.10.7.1.10 </span>Week state</a></li>
991          <li><a href=#time-state><span class=secno>4.10.7.1.11 </span>Time state</a></li>
992          <li><a href=#local-date-and-time-state><span class=secno>4.10.7.1.12 </span>Local Date and Time state</a></li>
993          <li><a href=#number-state><span class=secno>4.10.7.1.13 </span>Number state</a></li>
994          <li><a href=#range-state><span class=secno>4.10.7.1.14 </span>Range state</a></li>
995          <li><a href=#color-state><span class=secno>4.10.7.1.15 </span>Color state</a></li>
996          <li><a href=#checkbox-state><span class=secno>4.10.7.1.16 </span>Checkbox state</a></li>
997          <li><a href=#radio-button-state><span class=secno>4.10.7.1.17 </span>Radio Button state</a></li>
998          <li><a href=#file-upload-state><span class=secno>4.10.7.1.18 </span>File Upload state</a></li>
999          <li><a href=#submit-button-state><span class=secno>4.10.7.1.19 </span>Submit Button state</a></li>
1000          <li><a href=#image-button-state><span class=secno>4.10.7.1.20 </span>Image Button state</a></li>
1001          <li><a href=#reset-button-state><span class=secno>4.10.7.1.21 </span>Reset Button state</a></li>
1002          <li><a href=#button-state><span class=secno>4.10.7.1.22 </span>Button state</a></ol></li>
1003        <li><a href=#common-input-element-attributes><span class=secno>4.10.7.2 </span>Common <code>input</code> element attributes</a>
1004         <ol>
1005          <li><a href=#the-autocomplete-attribute><span class=secno>4.10.7.2.1 </span>The <code title=attr-input-autocomplete>autocomplete</code> attribute</a></li>
1006          <li><a href=#the-dirname-attribute><span class=secno>4.10.7.2.2 </span>The <code title=attr-input-dirname>dirname</code> attribute</a></li>
1007          <li><a href=#the-list-attribute><span class=secno>4.10.7.2.3 </span>The <code title=attr-input-list>list</code> attribute</a></li>
1008          <li><a href=#the-readonly-attribute><span class=secno>4.10.7.2.4 </span>The <code title=attr-input-readonly>readonly</code> attribute</a></li>
1009          <li><a href=#the-size-attribute><span class=secno>4.10.7.2.5 </span>The <code title=attr-input-size>size</code> attribute</a></li>
1010          <li><a href=#the-required-attribute><span class=secno>4.10.7.2.6 </span>The <code title=attr-input-required>required</code> attribute</a></li>
1011          <li><a href=#the-multiple-attribute><span class=secno>4.10.7.2.7 </span>The <code title=attr-input-multiple>multiple</code> attribute</a></li>
1012          <li><a href=#the-maxlength-attribute><span class=secno>4.10.7.2.8 </span>The <code title=attr-input-maxlength>maxlength</code> attribute</a></li>
1013          <li><a href=#the-pattern-attribute><span class=secno>4.10.7.2.9 </span>The <code title=attr-input-pattern>pattern</code> attribute</a></li>
1014          <li><a href=#the-min-and-max-attributes><span class=secno>4.10.7.2.10 </span>The <code title=attr-input-min>min</code> and <code title=attr-input-max>max</code> attributes</a></li>
1015          <li><a href=#the-step-attribute><span class=secno>4.10.7.2.11 </span>The <code title=attr-input-step>step</code> attribute</a></li>
1016          <li><a href=#the-placeholder-attribute><span class=secno>4.10.7.2.12 </span>The <code title=attr-input-placeholder>placeholder</code> attribute</a></ol></li>
1017        <li><a href=#common-input-element-apis><span class=secno>4.10.7.3 </span>Common <code>input</code> element APIs</a></li>
1018        <li><a href=#common-event-behaviors><span class=secno>4.10.7.4 </span>Common event behaviors</a></ol></li>
1019      <li><a href=#the-button-element><span class=secno>4.10.8 </span>The <code>button</code> element</a></li>
1020      <li><a href=#the-select-element><span class=secno>4.10.9 </span>The <code>select</code> element</a></li>
1021      <li><a href=#the-datalist-element><span class=secno>4.10.10 </span>The <code>datalist</code> element</a></li>
1022      <li><a href=#the-optgroup-element><span class=secno>4.10.11 </span>The <code>optgroup</code> element</a></li>
1023      <li><a href=#the-option-element><span class=secno>4.10.12 </span>The <code>option</code> element</a></li>
1024      <li><a href=#the-textarea-element><span class=secno>4.10.13 </span>The <code>textarea</code> element</a></li>
1025      <li><a href=#the-keygen-element><span class=secno>4.10.14 </span>The <code>keygen</code> element</a></li>
1026      <li><a href=#the-output-element><span class=secno>4.10.15 </span>The <code>output</code> element</a></li>
1027      <li><a href=#the-progress-element><span class=secno>4.10.16 </span>The <code>progress</code> element</a></li>
1028      <li><a href=#the-meter-element><span class=secno>4.10.17 </span>The <code>meter</code> element</a></li>
1029      <li><a href=#association-of-controls-and-forms><span class=secno>4.10.18 </span>Association of controls and forms</a></li>
1030      <li><a href=#attributes-common-to-form-controls><span class=secno>4.10.19 </span>Attributes common to form controls</a>
1031       <ol>
1032        <li><a href=#naming-form-controls><span class=secno>4.10.19.1 </span>Naming form controls</a></li>
1033        <li><a href=#enabling-and-disabling-form-controls><span class=secno>4.10.19.2 </span>Enabling and disabling form controls</a></li>
1034        <li><a href="#a-form-control's-value"><span class=secno>4.10.19.3 </span>A form control's value</a></li>
1035        <li><a href=#autofocusing-a-form-control><span class=secno>4.10.19.4 </span>Autofocusing a form control</a></li>
1036        <li><a href=#limiting-user-input-length><span class=secno>4.10.19.5 </span>Limiting user input length</a></li>
1037        <li><a href=#form-submission-0><span class=secno>4.10.19.6 </span>Form submission</a></li>
1038        <li><a href=#submitting-element-directionality><span class=secno>4.10.19.7 </span>Submitting element directionality</a></ol></li>
1039      <li><a href=#textFieldSelection><span class=secno>4.10.20 </span>APIs for the text field selections</a></li>
1040      <li><a href=#constraints><span class=secno>4.10.21 </span>Constraints</a>
1041       <ol>
1042        <li><a href=#definitions><span class=secno>4.10.21.1 </span>Definitions</a></li>
1043        <li><a href=#constraint-validation><span class=secno>4.10.21.2 </span>Constraint validation</a></li>
1044        <li><a href=#the-constraint-validation-api><span class=secno>4.10.21.3 </span>The constraint validation API</a></li>
1045        <li><a href=#security-forms><span class=secno>4.10.21.4 </span>Security</a></ol></li>
1046      <li><a href=#form-submission><span class=secno>4.10.22 </span>Form submission</a>
1047       <ol>
1048        <li><a href=#introduction-3><span class=secno>4.10.22.1 </span>Introduction</a></li>
1049        <li><a href=#implicit-submission><span class=secno>4.10.22.2 </span>Implicit submission</a></li>
1050        <li><a href=#form-submission-algorithm><span class=secno>4.10.22.3 </span>Form submission algorithm</a></li>
1051        <li><a href=#constructing-form-data-set><span class=secno>4.10.22.4 </span>Constructing the form data set</a></li>
1052        <li><a href=#url-encoded-form-data><span class=secno>4.10.22.5 </span>URL-encoded form data</a></li>
1053        <li><a href=#multipart-form-data><span class=secno>4.10.22.6 </span>Multipart form data</a></li>
1054        <li><a href=#plain-text-form-data><span class=secno>4.10.22.7 </span>Plain text form data</a></ol></li>
1055      <li><a href=#resetting-a-form><span class=secno>4.10.23 </span>Resetting a form</a></ol></li>
1056    <li><a href=#interactive-elements><span class=secno>4.11 </span>Interactive elements</a>
1057     <ol>
1058      <li><a href=#the-details-element><span class=secno>4.11.1 </span>The <code>details</code> element</a></li>
1059      <li><a href=#the-summary-element><span class=secno>4.11.2 </span>The <code>summary</code> element</a></li>
1060      <li><a href=#the-command-element><span class=secno>4.11.3 </span>The <code>command</code> element</a></li>
1061      <li><a href=#the-menu-element><span class=secno>4.11.4 </span>The <code>menu</code> element</a>
1062       <ol>
1063        <li><a href=#menus-intro><span class=secno>4.11.4.1 </span>Introduction</a></li>
1064        <li><a href=#building-menus-and-toolbars><span class=secno>4.11.4.2 </span>Building menus and toolbars</a></li>
1065        <li><a href=#context-menus><span class=secno>4.11.4.3 </span>Context menus</a></li>
1066        <li><a href=#toolbars><span class=secno>4.11.4.4 </span>Toolbars</a></ol></li>
1067      <li><a href=#commands><span class=secno>4.11.5 </span>Commands</a>
1068       <ol>
1069        <li><a href=#using-the-a-element-to-define-a-command><span class=secno>4.11.5.1 </span>Using the <code>a</code> element to define a command</a></li>
1070        <li><a href=#using-the-button-element-to-define-a-command><span class=secno>4.11.5.2 </span>Using the <code>button</code> element to define a command</a></li>
1071        <li><a href=#using-the-input-element-to-define-a-command><span class=secno>4.11.5.3 </span>Using the <code>input</code> element to define a command</a></li>
1072        <li><a href=#using-the-option-element-to-define-a-command><span class=secno>4.11.5.4 </span>Using the <code>option</code> element to define a command</a></li>
1073        <li><a href=#using-the-command-element-to-define-a-command><span class=secno>4.11.5.5 </span>Using the <code>command</code> element to define
1074   a command</a></li>
1075        <li><a href=#using-the-accesskey-attribute-on-a-label-element-to-define-a-command><span class=secno>4.11.5.6 </span>Using the <code title=attr-accesskey>accesskey</code> attribute on a <code>label</code> element to define a command</a></li>
1076        <li><a href=#using-the-accesskey-attribute-on-a-legend-element-to-define-a-command><span class=secno>4.11.5.7 </span>Using the <code title=attr-accesskey>accesskey</code> attribute on a <code>legend</code> element to define a command</a></li>
1077        <li><a href=#using-the-accesskey-attribute-to-define-a-command-on-other-elements><span class=secno>4.11.5.8 </span>Using the <code title=attr-accesskey>accesskey</code> attribute to define a command on other elements</a></ol></ol></li>
1078    <li><a href=#links><span class=secno>4.12 </span>Links</a>
1079     <ol>
1080      <li><a href=#introduction-4><span class=secno>4.12.1 </span>Introduction</a></li>
1081      <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>
1082      <li><a href=#following-hyperlinks-0><span class=secno>4.12.3 </span>Following hyperlinks</a></li>
1083      <li><a href=#downloading-resources><span class=secno>4.12.4 </span>Downloading resources</a>
1084       <ol>
1085        <li><a href=#hyperlink-auditing><span class=secno>4.12.4.1 </span>Hyperlink auditing</a></ol></li>
1086      <li><a href=#linkTypes><span class=secno>4.12.5 </span>Link types</a>
1087       <ol>
1088        <li><a href=#rel-alternate><span class=secno>4.12.5.1 </span>Link type "<code>alternate</code>"</a></li>
1089        <li><a href=#link-type-author><span class=secno>4.12.5.2 </span>Link type "<code>author</code>"</a></li>
1090        <li><a href=#link-type-bookmark><span class=secno>4.12.5.3 </span>Link type "<code>bookmark</code>"</a></li>
1091        <li><a href=#link-type-help><span class=secno>4.12.5.4 </span>Link type "<code>help</code>"</a></li>
1092        <li><a href=#rel-icon><span class=secno>4.12.5.5 </span>Link type "<code>icon</code>"</a></li>
1093        <li><a href=#link-type-license><span class=secno>4.12.5.6 </span>Link type "<code>license</code>"</a></li>
1094        <li><a href=#link-type-nofollow><span class=secno>4.12.5.7 </span>Link type "<code>nofollow</code>"</a></li>
1095        <li><a href=#link-type-noreferrer><span class=secno>4.12.5.8 </span>Link type "<code>noreferrer</code>"</a></li>
1096        <li><a href=#link-type-prefetch><span class=secno>4.12.5.9 </span>Link type "<code>prefetch</code>"</a></li>
1097        <li><a href=#link-type-search><span class=secno>4.12.5.10 </span>Link type "<code>search</code>"</a></li>
1098        <li><a href=#link-type-stylesheet><span class=secno>4.12.5.11 </span>Link type "<code>stylesheet</code>"</a></li>
1099        <li><a href=#link-type-tag><span class=secno>4.12.5.12 </span>Link type "<code>tag</code>"</a></li>
1100        <li><a href=#sequential-link-types><span class=secno>4.12.5.13 </span>Sequential link types</a>
1101         <ol>
1102          <li><a href=#link-type-next><span class=secno>4.12.5.13.1 </span>Link type "<code>next</code>"</a></li>
1103          <li><a href=#link-type-prev><span class=secno>4.12.5.13.2 </span>Link type "<code>prev</code>"</a></ol></li>
1104        <li><a href=#other-link-types><span class=secno>4.12.5.14 </span>Other link types</a></ol></ol></li>
1105    <li><a href=#common-idioms-without-dedicated-elements><span class=secno>4.13 </span>Common idioms without dedicated elements</a>
1106     <ol>
1107      <li><a href=#the-main-part-of-the-content><span class=secno>4.13.1 </span>The main part of the content</a></li>
1108      <li><a href=#rel-up><span class=secno>4.13.2 </span>Bread crumb navigation</a></li>
1109      <li><a href=#tag-clouds><span class=secno>4.13.3 </span>Tag clouds</a></li>
1110      <li><a href=#conversations><span class=secno>4.13.4 </span>Conversations</a></li>
1111      <li><a href=#footnotes><span class=secno>4.13.5 </span>Footnotes</a></ol></li>
1112    <li><a href=#matching-html-elements-using-selectors><span class=secno>4.14 </span>Matching HTML elements using selectors</a>
1113     <ol>
1114      <li><a href=#selectors><span class=secno>4.14.1 </span>Case-sensitivity</a></li>
1115      <li><a href=#pseudo-classes><span class=secno>4.14.2 </span>Pseudo-classes</a></ol></ol></li>
1116  <li><a href=#microdata><span class=secno>5 </span>Microdata</a>
1117   <ol>
1118    <li><a href=#introduction-5><span class=secno>5.1 </span>Introduction</a>
1119     <ol>
1120      <li><a href=#overview><span class=secno>5.1.1 </span>Overview</a></li>
1121      <li><a href=#the-basic-syntax><span class=secno>5.1.2 </span>The basic syntax</a></li>
1122      <li><a href=#typed-items><span class=secno>5.1.3 </span>Typed items</a></li>
1123      <li><a href=#global-identifiers-for-items><span class=secno>5.1.4 </span>Global identifiers for items</a></li>
1124      <li><a href=#selecting-names-when-defining-vocabularies><span class=secno>5.1.5 </span>Selecting names when defining vocabularies</a></li>
1125      <li><a href=#using-the-microdata-dom-api><span class=secno>5.1.6 </span>Using the microdata DOM API</a></ol></li>
1126    <li><a href=#encoding-microdata><span class=secno>5.2 </span>Encoding microdata</a>
1127     <ol>
1128      <li><a href=#the-microdata-model><span class=secno>5.2.1 </span>The microdata model</a></li>
1129      <li><a href=#items><span class=secno>5.2.2 </span>Items</a></li>
1130      <li><a href=#names:-the-itemprop-attribute><span class=secno>5.2.3 </span>Names: the <code>itemprop</code> attribute</a></li>
1131      <li><a href=#values><span class=secno>5.2.4 </span>Values</a></li>
1132      <li><a href=#associating-names-with-items><span class=secno>5.2.5 </span>Associating names with items</a></ol></li>
1133    <li><a href=#microdata-dom-api><span class=secno>5.3 </span>Microdata DOM API</a></li>
1134    <li><a href=#mdvocabs><span class=secno>5.4 </span>Microdata vocabularies</a>
1135     <ol>
1136      <li><a href=#vcard><span class=secno>5.4.1 </span>vCard</a>
1137       <ol>
1138        <li><a href=#conversion-to-vcard><span class=secno>5.4.1.1 </span>Conversion to vCard</a></li>
1139        <li><a href=#examples-1><span class=secno>5.4.1.2 </span>Examples</a></ol></li>
1140      <li><a href=#vevent><span class=secno>5.4.2 </span>vEvent</a>
1141       <ol>
1142        <li><a href=#conversion-to-icalendar><span class=secno>5.4.2.1 </span>Conversion to iCalendar</a></li>
1143        <li><a href=#examples-2><span class=secno>5.4.2.2 </span>Examples</a></ol></li>
1144      <li><a href=#licensing-works><span class=secno>5.4.3 </span>Licensing works</a>
1145       <ol>
1146        <li><a href=#examples-3><span class=secno>5.4.3.1 </span>Examples</a></ol></ol></li>
1147    <li><a href=#converting-html-to-other-formats><span class=secno>5.5 </span>Converting HTML to other formats</a>
1148     <ol>
1149      <li><a href=#json><span class=secno>5.5.1 </span>JSON</a></li>
1150      <li><a href=#atom><span class=secno>5.5.2 </span>Atom</a></ol></ol></li>
1151  <li><a href=#browsers><span class=secno>6 </span>Loading Web pages</a>
1152   <ol>
1153    <li><a href=#windows><span class=secno>6.1 </span>Browsing contexts</a>
1154     <ol>
1155      <li><a href=#nested-browsing-contexts><span class=secno>6.1.1 </span>Nested browsing contexts</a>
1156       <ol>
1157        <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>
1158      <li><a href=#auxiliary-browsing-contexts><span class=secno>6.1.2 </span>Auxiliary browsing contexts</a>
1159       <ol>
1160        <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>
1161      <li><a href=#secondary-browsing-contexts><span class=secno>6.1.3 </span>Secondary browsing contexts</a></li>
1162      <li><a href=#security-nav><span class=secno>6.1.4 </span>Security</a></li>
1163      <li><a href=#groupings-of-browsing-contexts><span class=secno>6.1.5 </span>Groupings of browsing contexts</a></li>
1164      <li><a href=#browsing-context-names><span class=secno>6.1.6 </span>Browsing context names</a></ol></li>
1165    <li><a href=#the-window-object><span class=secno>6.2 </span>The <code>Window</code> object</a>
1166     <ol>
1167      <li><a href=#security-window><span class=secno>6.2.1 </span>Security</a></li>
1168      <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>
1169      <li><a href=#accessing-other-browsing-contexts><span class=secno>6.2.3 </span>Accessing other browsing contexts</a></li>
1170      <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>
1171      <li><a href=#garbage-collection-and-browsing-contexts><span class=secno>6.2.5 </span>Garbage collection and browsing contexts</a></li>
1172      <li><a href=#browser-interface-elements><span class=secno>6.2.6 </span>Browser interface elements</a></li>
1173      <li><a href=#the-windowproxy-object><span class=secno>6.2.7 </span>The <code>WindowProxy</code> object</a></ol></li>
1174    <li><a href=#origin-0><span class=secno>6.3 </span>Origin</a>
1175     <ol>
1176      <li><a href=#relaxing-the-same-origin-restriction><span class=secno>6.3.1 </span>Relaxing the same-origin restriction</a></ol></li>
1177    <li><a href=#history><span class=secno>6.4 </span>Session history and navigation</a>
1178     <ol>
1179      <li><a href=#the-session-history-of-browsing-contexts><span class=secno>6.4.1 </span>The session history of browsing contexts</a></li>
1180      <li><a href=#the-history-interface><span class=secno>6.4.2 </span>The <code>History</code> interface</a></li>
1181      <li><a href=#the-location-interface><span class=secno>6.4.3 </span>The <code>Location</code> interface</a>
1182       <ol>
1183        <li><a href=#security-location><span class=secno>6.4.3.1 </span>Security</a></ol></li>
1184      <li><a href=#history-notes><span class=secno>6.4.4 </span>Implementation notes for session history</a></ol></li>
1185    <li><a href=#browsing-the-web><span class=secno>6.5 </span>Browsing the Web</a>
1186     <ol>
1187      <li><a href=#navigating-across-documents><span class=secno>6.5.1 </span>Navigating across documents</a></li>
1188      <li><a href=#read-html><span class=secno>6.5.2 </span>Page load processing model for HTML files</a></li>
1189      <li><a href=#read-xml><span class=secno>6.5.3 </span>Page load processing model for XML files</a></li>
1190      <li><a href=#read-text><span class=secno>6.5.4 </span>Page load processing model for text files</a></li>
1191      <li><a href=#read-multipart-x-mixed-replace><span class=secno>6.5.5 </span>Page load processing model for <code>multipart/x-mixed-replaced</code> resources</a></li>
1192      <li><a href=#read-image><span class=secno>6.5.6 </span>Page load processing model for images</a></li>
1193      <li><a href=#read-plugin><span class=secno>6.5.7 </span>Page load processing model for content that uses plugins</a></li>
1194      <li><a href=#read-ua-inline><span class=secno>6.5.8 </span>Page load processing model for inline content that doesn't have a DOM</a></li>
1195      <li><a href=#scroll-to-fragid><span class=secno>6.5.9 </span>Navigating to a fragment identifier</a></li>
1196      <li><a href=#history-traversal><span class=secno>6.5.10 </span>History traversal</a>
1197       <ol>
1198        <li><a href=#event-definitions-0><span class=secno>6.5.10.1 </span>Event definitions</a></ol></li>
1199      <li><a href=#unloading-documents><span class=secno>6.5.11 </span>Unloading documents</a>
1200       <ol>
1201        <li><a href=#event-definition><span class=secno>6.5.11.1 </span>Event definition</a></ol></li>
1202      <li><a href=#aborting-a-document-load><span class=secno>6.5.12 </span>Aborting a document load</a></ol></li>
1203    <li><a href=#offline><span class=secno>6.6 </span>Offline Web applications</a>
1204     <ol>
1205      <li><a href=#introduction-6><span class=secno>6.6.1 </span>Introduction</a>
1206       <ol>
1207        <li><a href=#appcacheevents><span class=secno>6.6.1.1 </span>Event summary</a></ol></li>
1208      <li><a href=#appcache><span class=secno>6.6.2 </span>Application caches</a></li>
1209      <li><a href=#manifests><span class=secno>6.6.3 </span>The cache manifest syntax</a>
1210       <ol>
1211        <li><a href=#some-sample-manifests><span class=secno>6.6.3.1 </span>Some sample manifests</a></li>
1212        <li><a href=#writing-cache-manifests><span class=secno>6.6.3.2 </span>Writing cache manifests</a></li>
1213        <li><a href=#parsing-cache-manifests><span class=secno>6.6.3.3 </span>Parsing cache manifests</a></ol></li>
1214      <li><a href=#downloading-or-updating-an-application-cache><span class=secno>6.6.4 </span>Downloading or updating an application cache</a></li>
1215      <li><a href=#the-application-cache-selection-algorithm><span class=secno>6.6.5 </span>The application cache selection algorithm</a></li>
1216      <li><a href=#changesToNetworkingModel><span class=secno>6.6.6 </span>Changes to the networking model</a></li>
1217      <li><a href=#expiring-application-caches><span class=secno>6.6.7 </span>Expiring application caches</a></li>
1218      <li><a href=#disk-space><span class=secno>6.6.8 </span>Disk space</a></li>
1219      <li><a href=#application-cache-api><span class=secno>6.6.9 </span>Application cache API</a></li>
1220      <li><a href=#browser-state><span class=secno>6.6.10 </span>Browser state</a></ol></ol></li>
1221  <li><a href=#webappapis><span class=secno>7 </span>Web application APIs</a>
1222   <ol>
1223    <li><a href=#scripting><span class=secno>7.1 </span>Scripting</a>
1224     <ol>
1225      <li><a href=#introduction-7><span class=secno>7.1.1 </span>Introduction</a></li>
1226      <li><a href=#enabling-and-disabling-scripting><span class=secno>7.1.2 </span>Enabling and disabling scripting</a></li>
1227      <li><a href=#processing-model-1><span class=secno>7.1.3 </span>Processing model</a>
1228       <ol>
1229        <li><a href=#definitions-0><span class=secno>7.1.3.1 </span>Definitions</a></li>
1230        <li><a href=#calling-scripts><span class=secno>7.1.3.2 </span>Calling scripts</a></li>
1231        <li><a href=#creating-scripts><span class=secno>7.1.3.3 </span>Creating scripts</a></li>
1232        <li><a href=#killing-scripts><span class=secno>7.1.3.4 </span>Killing scripts</a></li>
1233        <li><a href=#runtime-script-errors><span class=secno>7.1.3.5 </span>Runtime script errors</a>
1234         <ol>
1235          <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>
1236      <li><a href=#event-loops><span class=secno>7.1.4 </span>Event loops</a>
1237       <ol>
1238        <li><a href=#definitions-1><span class=secno>7.1.4.1 </span>Definitions</a></li>
1239        <li><a href=#processing-model-2><span class=secno>7.1.4.2 </span>Processing model</a></li>
1240        <li><a href=#generic-task-sources><span class=secno>7.1.4.3 </span>Generic task sources</a></ol></li>
1241      <li><a href=#javascript-protocol><span class=secno>7.1.5 </span>The <code title="">javascript:</code> URL scheme</a></li>
1242      <li><a href=#events><span class=secno>7.1.6 </span>Events</a>
1243       <ol>
1244        <li><a href=#event-handler-attributes><span class=secno>7.1.6.1 </span>Event handlers</a></li>
1245        <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></li>
1246        <li><a href=#event-firing><span class=secno>7.1.6.3 </span>Event firing</a></li>
1247        <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>
1248    <li><a href=#atob><span class=secno>7.2 </span>Base64 utility methods</a></li>
1249    <li><a href=#timers><span class=secno>7.3 </span>Timers</a></li>
1250    <li><a href=#user-prompts><span class=secno>7.4 </span>User prompts</a>
1251     <ol>
1252      <li><a href=#simple-dialogs><span class=secno>7.4.1 </span>Simple dialogs</a></li>
1253      <li><a href=#printing><span class=secno>7.4.2 </span>Printing</a></li>
1254      <li><a href=#dialogs-implemented-using-separate-documents><span class=secno>7.4.3 </span>Dialogs implemented using separate documents</a></ol></li>
1255    <li><a href=#system-state-and-capabilities><span class=secno>7.5 </span>System state and capabilities</a>
1256     <ol>
1257      <li><a href=#the-navigator-object><span class=secno>7.5.1 </span>The <code>Navigator</code> object</a>
1258       <ol>
1259        <li><a href=#client-identification><span class=secno>7.5.1.1 </span>Client identification</a></li>
1260        <li><a href=#custom-handlers><span class=secno>7.5.1.2 </span>Custom scheme and content handlers</a></li>
1261        <li><a href=#security-and-privacy><span class=secno>7.5.1.3 </span>Security and privacy</a></li>
1262        <li><a href=#sample-handler-impl><span class=secno>7.5.1.4 </span>Sample user interface</a></li>
1263        <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.5 </span>Manually releasing the storage mutex</a></ol></li>
1264      <li><a href=#the-external-interface><span class=secno>7.5.2 </span>The <code>External</code> interface</a></ol></ol></li>
1265  <li><a href=#editing><span class=secno>8 </span>User interaction</a>
1266   <ol>
1267    <li><a href=#the-hidden-attribute><span class=secno>8.1 </span>The <code>hidden</code> attribute</a></li>
1268    <li><a href=#activation><span class=secno>8.2 </span>Activation</a></li>
1269    <li><a href=#focus><span class=secno>8.3 </span>Focus</a>
1270     <ol>
1271      <li><a href=#sequential-focus-navigation-and-the-tabindex-attribute><span class=secno>8.3.1 </span>Sequential focus navigation and the <code title=attr-tabindex>tabindex</code> attribute</a></li>
1272      <li><a href=#focus-management><span class=secno>8.3.2 </span>Focus management</a></li>
1273      <li><a href=#document-level-focus-apis><span class=secno>8.3.3 </span>Document-level focus APIs</a></li>
1274      <li><a href=#element-level-focus-apis><span class=secno>8.3.4 </span>Element-level focus APIs</a></ol></li>
1275    <li><a href=#assigning-keyboard-shortcuts><span class=secno>8.4 </span>Assigning keyboard shortcuts</a>
1276     <ol>
1277      <li><a href=#introduction-8><span class=secno>8.4.1 </span>Introduction</a></li>
1278      <li><a href=#the-accesskey-attribute><span class=secno>8.4.2 </span>The <code>accesskey</code> attribute</a></li>
1279      <li><a href=#processing-model-3><span class=secno>8.4.3 </span>Processing model</a></ol></li>
1280    <li><a href=#editing-0><span class=secno>8.5 </span>Editing</a>
1281     <ol>
1282      <li><a href=#contenteditable><span class=secno>8.5.1 </span>Making document regions editable: The <code title=attr-contenteditable>contenteditable</code> content
1283   attribute</a></li>
1284      <li><a href=#making-entire-documents-editable:-the-designmode-idl-attribute><span class=secno>8.5.2 </span>Making entire documents editable: The <code title=dom-document-designMode>designMode</code> IDL attribute</a></li>
1285      <li><a href=#best-practices-for-in-page-editors><span class=secno>8.5.3 </span>Best practices for in-page editors</a></li>
1286      <li><a href=#editing-apis><span class=secno>8.5.4 </span>Editing APIs</a></li>
1287      <li><a href=#spelling-and-grammar-checking><span class=secno>8.5.5 </span>Spelling and grammar checking</a></ol></li>
1288    <li><a href=#dnd><span class=secno>8.6 </span>Drag and drop</a>
1289     <ol>
1290      <li><a href=#introduction-9><span class=secno>8.6.1 </span>Introduction</a></li>
1291      <li><a href=#the-drag-data-store><span class=secno>8.6.2 </span>The drag data store</a></li>
1292      <li><a href=#the-datatransfer-interface><span class=secno>8.6.3 </span>The <code>DataTransfer</code> interface</a>
1293       <ol>
1294        <li><a href=#the-datatransferitemlist-interface><span class=secno>8.6.3.1 </span>The <code>DataTransferItemList</code> interface</a></li>
1295        <li><a href=#the-datatransferitem-interface><span class=secno>8.6.3.2 </span>The <code>DataTransferItem</code> interface</a></ol></li>
1296      <li><a href=#the-dragevent-interface><span class=secno>8.6.4 </span>The <code>DragEvent</code> interface</a></li>
1297      <li><a href=#drag-and-drop-processing-model><span class=secno>8.6.5 </span>Drag-and-drop processing model</a></li>
1298      <li><a href=#dndevents><span class=secno>8.6.6 </span>Events summary</a></li>
1299      <li><a href=#the-draggable-attribute><span class=secno>8.6.7 </span>The <code>draggable</code> attribute</a></li>
1300      <li><a href=#the-dropzone-attribute><span class=secno>8.6.8 </span>The <code>dropzone</code> attribute</a></li>
1301      <li><a href=#security-risks-in-the-drag-and-drop-model><span class=secno>8.6.9 </span>Security risks in the drag-and-drop model</a></ol></li>
1302    <li><a href=#text-search-apis><span class=secno>8.7 </span>Text search APIs</a></ol></li>
1303  <li><a href=#video-conferencing-and-peer-to-peer-communication><span class=secno>9 </span>Video conferencing and peer-to-peer communication</a>
1304   <ol>
1305    <li><a href=#introduction-10><span class=secno>9.1 </span>Introduction</a></li>
1306    <li><a href=#obtaining-local-multimedia-content><span class=secno>9.2 </span>Obtaining local multimedia content</a></li>
1307    <li><a href=#stream-api><span class=secno>9.3 </span>Stream API</a>
1308     <ol>
1309      <li><a href=#introduction-11><span class=secno>9.3.1 </span>Introduction</a></li>
1310      <li><a href=#interface-definitions><span class=secno>9.3.2 </span>Interface definitions</a></ol></li>
1311    <li><a href=#peer-to-peer-connections><span class=secno>9.4 </span>Peer-to-peer connections</a>
1312     <ol>
1313      <li><a href=#introduction-12><span class=secno>9.4.1 </span>Introduction</a></li>
1314      <li><a href=#interface-definitions-0><span class=secno>9.4.2 </span>Interface definitions</a></ol></li>
1315    <li><a href=#the-data-stream><span class=secno>9.5 </span>The data stream</a>
1316     <ol>
1317      <li><a href=#security-considerations><span class=secno>9.5.1 </span>Security considerations</a></ol></li>
1318    <li><a href=#garbage-collection-0><span class=secno>9.6 </span>Garbage collection</a></li>
1319    <li><a href=#event-definitions-1><span class=secno>9.7 </span>Event definitions</a></li>
1320    <li><a href=#mediastreamevents><span class=secno>9.8 </span>Event Summary</a></ol></li>
1321  <li><a href=#workers><span class=secno>10 </span>Web workers</a>
1322   <ol>
1323    <li><a href=#introduction-13><span class=secno>10.1 </span>Introduction</a>
1324     <ol>
1325      <li><a href=#scope-0><span class=secno>10.1.1 </span>Scope</a></li>
1326      <li><a href=#examples-4><span class=secno>10.1.2 </span>Examples</a>
1327       <ol>
1328        <li><a href=#a-background-number-crunching-worker><span class=secno>10.1.2.1 </span>A background number-crunching worker</a></li>
1329        <li><a href=#a-worker-for-updating-a-client-side-database><span class=secno>10.1.2.2 </span>A worker for updating a client-side database</a></li>
1330        <li><a href=#worker-used-for-background-i/o><span class=secno>10.1.2.3 </span>Worker used for background I/O</a></li>
1331        <li><a href=#shared-workers-introduction><span class=secno>10.1.2.4 </span>Shared workers introduction</a></li>
1332        <li><a href=#shared-state-using-a-shared-worker><span class=secno>10.1.2.5 </span>Shared state using a shared worker</a></li>
1333        <li><a href=#delegation><span class=secno>10.1.2.6 </span>Delegation</a></ol></li>
1334      <li><a href=#tutorials><span class=secno>10.1.3 </span>Tutorials</a>
1335       <ol>
1336        <li><a href=#creating-a-dedicated-worker><span class=secno>10.1.3.1 </span>Creating a dedicated worker</a></li>
1337        <li><a href=#communicating-with-a-dedicated-worker><span class=secno>10.1.3.2 </span>Communicating with a dedicated worker</a></li>
1338        <li><a href=#shared-workers><span class=secno>10.1.3.3 </span>Shared workers</a></ol></ol></li>
1339    <li><a href=#infrastructure-0><span class=secno>10.2 </span>Infrastructure</a>
1340     <ol>
1341      <li><a href=#the-global-scope><span class=secno>10.2.1 </span>The global scope</a>
1342       <ol>
1343        <li><a href=#the-workerglobalscope-abstract-interface><span class=secno>10.2.1.1 </span>The <code>WorkerGlobalScope</code> abstract interface</a></li>
1344        <li><a href=#dedicated-workers-and-the-dedicatedworkerglobalscope-interface><span class=secno>10.2.1.2 </span>Dedicated workers and the <code>DedicatedWorkerGlobalScope</code> interface</a></li>
1345        <li><a href=#shared-workers-and-the-sharedworkerglobalscope-interface><span class=secno>10.2.1.3 </span>Shared workers and the <code>SharedWorkerGlobalScope</code> interface</a></ol></li>
1346      <li><a href=#origins-of-workers><span class=secno>10.2.2 </span>Origins of workers</a></li>
1347      <li><a href=#the-event-loop><span class=secno>10.2.3 </span>The event loop</a></li>
1348      <li><a href="#the-worker's-lifetime"><span class=secno>10.2.4 </span>The worker's lifetime</a></li>
1349      <li><a href=#processing-model-4><span class=secno>10.2.5 </span>Processing model</a></li>
1350      <li><a href=#runtime-script-errors-0><span class=secno>10.2.6 </span>Runtime script errors</a></li>
1351      <li><a href=#creating-workers><span class=secno>10.2.7 </span>Creating workers</a>
1352       <ol>
1353        <li><a href=#the-abstractworker-abstract-interface><span class=secno>10.2.7.1 </span>The <code>AbstractWorker</code> abstract interface</a></li>
1354        <li><a href=#dedicated-workers-and-the-worker-interface><span class=secno>10.2.7.2 </span>Dedicated workers and the <code>Worker</code> interface</a></li>
1355        <li><a href=#shared-workers-and-the-sharedworker-interface><span class=secno>10.2.7.3 </span>Shared workers and the <code>SharedWorker</code> interface</a></ol></ol></li>
1356    <li><a href=#apis-available-to-workers><span class=secno>10.3 </span>APIs available to workers</a>
1357     <ol>
1358      <li><a href=#importing-scripts-and-libraries><span class=secno>10.3.1 </span>Importing scripts and libraries</a></li>
1359      <li><a href=#the-workernavigator-object><span class=secno>10.3.2 </span>The <code>WorkerNavigator</code> object</a></li>
1360      <li><a href=#interface-objects-and-constructors><span class=secno>10.3.3 </span>Interface objects and constructors</a></li>
1361      <li><a href=#worker-locations><span class=secno>10.3.4 </span>Worker locations</a></ol></ol></li>
1362  <li><a href=#comms><span class=secno>11 </span>Communication</a>
1363   <ol>
1364    <li><a href=#event-definitions-2><span class=secno>11.1 </span>Event definitions</a></li>
1365    <li><a href=#server-sent-events><span class=secno>11.2 </span>Server-sent events</a>
1366     <ol>
1367      <li><a href=#server-sent-events-intro><span class=secno>11.2.1 </span>Introduction</a></li>
1368      <li><a href=#the-eventsource-interface><span class=secno>11.2.2 </span>The <code>EventSource</code> interface</a></li>
1369      <li><a href=#processing-model-5><span class=secno>11.2.3 </span>Processing model</a></li>
1370      <li><a href=#parsing-an-event-stream><span class=secno>11.2.4 </span>Parsing an event stream</a></li>
1371      <li><a href=#event-stream-interpretation><span class=secno>11.2.5 </span>Interpreting an event stream</a></li>
1372      <li><a href=#notes><span class=secno>11.2.6 </span>Notes</a></li>
1373      <li><a href=#eventsource-push><span class=secno>11.2.7 </span>Connectionless push and other features</a></li>
1374      <li><a href=#garbage-collection-1><span class=secno>11.2.8 </span>Garbage collection</a></li>
1375      <li><a href=#iana-considerations><span class=secno>11.2.9 </span>IANA considerations</a>
1376       <ol>
1377        <li><a href=#text/event-stream><span class=secno>11.2.9.1 </span><code>text/event-stream</code></a></li>
1378        <li><a href=#last-event-id><span class=secno>11.2.9.2 </span><code>Last-Event-ID</code></a></ol></ol></li>
1379    <li><a href=#network><span class=secno>11.3 </span>Web sockets</a>
1380     <ol>
1381      <li><a href=#network-intro><span class=secno>11.3.1 </span>Introduction</a></li>
1382      <li><a href=#the-websocket-interface><span class=secno>11.3.2 </span>The <code>WebSocket</code> interface</a></li>
1383      <li><a href=#feedback-from-the-protocol><span class=secno>11.3.3 </span>Feedback from the protocol</a>
1384       <ol>
1385        <li><a href=#event-definitions-3><span class=secno>11.3.3.1 </span>Event definitions</a></li>
1386        <li><a href=#garbage-collection-2><span class=secno>11.3.3.2 </span>Garbage collection</a></ol></ol></li>
1387    <li><a href=#web-messaging><span class=secno>11.4 </span>Cross-document messaging</a>
1388     <ol>
1389      <li><a href=#introduction-14><span class=secno>11.4.1 </span>Introduction</a></li>
1390      <li><a href=#security-postmsg><span class=secno>11.4.2 </span>Security</a>
1391       <ol>
1392        <li><a href=#authors><span class=secno>11.4.2.1 </span>Authors</a></li>
1393        <li><a href=#user-agents><span class=secno>11.4.2.2 </span>User agents</a></ol></li>
1394      <li><a href=#posting-messages><span class=secno>11.4.3 </span>Posting messages</a></ol></li>
1395    <li><a href=#channel-messaging><span class=secno>11.5 </span>Channel messaging</a>
1396     <ol>
1397      <li><a href=#introduction-15><span class=secno>11.5.1 </span>Introduction</a></li>
1398      <li><a href=#message-channels><span class=secno>11.5.2 </span>Message channels</a></li>
1399      <li><a href=#message-ports><span class=secno>11.5.3 </span>Message ports</a>
1400       <ol>
1401        <li><a href=#ports-and-garbage-collection><span class=secno>11.5.3.1 </span>Ports and garbage collection</a></ol></ol></ol></li>
1402  <li><a href=#webstorage><span class=secno>12 </span>Web storage</a>
1403   <ol>
1404    <li><a href=#introduction-16><span class=secno>12.1 </span>Introduction</a></li>
1405    <li><a href=#storage><span class=secno>12.2 </span>The API</a>
1406     <ol>
1407      <li><a href=#the-storage-interface><span class=secno>12.2.1 </span>The <code>Storage</code> interface</a></li>
1408      <li><a href=#the-sessionstorage-attribute><span class=secno>12.2.2 </span>The <code title=dom-sessionStorage>sessionStorage</code> attribute</a></li>
1409      <li><a href=#the-localstorage-attribute><span class=secno>12.2.3 </span>The <code title=dom-localStorage>localStorage</code> attribute</a>
1410       <ol>
1411        <li><a href=#security-localStorage><span class=secno>12.2.3.1 </span>Security</a></ol></li>
1412      <li><a href=#the-storage-event><span class=secno>12.2.4 </span>The <code title=event-storage>storage</code> event</a>
1413       <ol>
1414        <li><a href=#event-definition-0><span class=secno>12.2.4.1 </span>Event definition</a></ol></li>
1415      <li><a href=#threads><span class=secno>12.2.5 </span>Threads</a></ol></li>
1416    <li><a href=#disk-space-0><span class=secno>12.3 </span>Disk space</a></li>
1417    <li><a href=#privacy><span class=secno>12.4 </span>Privacy</a>
1418     <ol>
1419      <li><a href=#user-tracking><span class=secno>12.4.1 </span>User tracking</a></li>
1420      <li><a href=#sensitivity-of-data><span class=secno>12.4.2 </span>Sensitivity of data</a></ol></li>
1421    <li><a href=#security-storage><span class=secno>12.5 </span>Security</a>
1422     <ol>
1423      <li><a href=#dns-spoofing-attacks><span class=secno>12.5.1 </span>DNS spoofing attacks</a></li>
1424      <li><a href=#cross-directory-attacks><span class=secno>12.5.2 </span>Cross-directory attacks</a></li>
1425      <li><a href=#implementation-risks><span class=secno>12.5.3 </span>Implementation risks</a></ol></ol></li>
1426  <li><a href=#syntax><span class=secno>13 </span>The HTML syntax</a>
1427   <ol>
1428    <li><a href=#writing><span class=secno>13.1 </span>Writing HTML documents</a>
1429     <ol>
1430      <li><a href=#the-doctype><span class=secno>13.1.1 </span>The DOCTYPE</a></li>
1431      <li><a href=#elements-0><span class=secno>13.1.2 </span>Elements</a>
1432       <ol>
1433        <li><a href=#start-tags><span class=secno>13.1.2.1 </span>Start tags</a></li>
1434        <li><a href=#end-tags><span class=secno>13.1.2.2 </span>End tags</a></li>
1435        <li><a href=#attributes-0><span class=secno>13.1.2.3 </span>Attributes</a></li>
1436        <li><a href=#optional-tags><span class=secno>13.1.2.4 </span>Optional tags</a></li>
1437        <li><a href=#element-restrictions><span class=secno>13.1.2.5 </span>Restrictions on content models</a></li>
1438        <li><a href=#cdata-rcdata-restrictions><span class=secno>13.1.2.6 </span>Restrictions on the contents of raw text and RCDATA elements</a></ol></li>
1439      <li><a href=#text-1><span class=secno>13.1.3 </span>Text</a>
1440       <ol>
1441        <li><a href=#newlines><span class=secno>13.1.3.1 </span>Newlines</a></ol></li>
1442      <li><a href=#character-references><span class=secno>13.1.4 </span>Character references</a></li>
1443      <li><a href=#cdata-sections><span class=secno>13.1.5 </span>CDATA sections</a></li>
1444      <li><a href=#comments><span class=secno>13.1.6 </span>Comments</a></ol></li>
1445    <li><a href=#parsing><span class=secno>13.2 </span>Parsing HTML documents</a>
1446     <ol>
1447      <li><a href=#overview-of-the-parsing-model><span class=secno>13.2.1 </span>Overview of the parsing model</a></li>
1448      <li><a href=#the-input-stream><span class=secno>13.2.2 </span>The input stream</a>
1449       <ol>
1450        <li><a href=#determining-the-character-encoding><span class=secno>13.2.2.1 </span>Determining the character encoding</a></li>
1451        <li><a href=#character-encodings-0><span class=secno>13.2.2.2 </span>Character encodings</a></li>
1452        <li><a href=#preprocessing-the-input-stream><span class=secno>13.2.2.3 </span>Preprocessing the input stream</a></li>
1453        <li><a href=#changing-the-encoding-while-parsing><span class=secno>13.2.2.4 </span>Changing the encoding while parsing</a></ol></li>
1454      <li><a href=#parse-state><span class=secno>13.2.3 </span>Parse state</a>
1455       <ol>
1456        <li><a href=#the-insertion-mode><span class=secno>13.2.3.1 </span>The insertion mode</a></li>
1457        <li><a href=#the-stack-of-open-elements><span class=secno>13.2.3.2 </span>The stack of open elements</a></li>
1458        <li><a href=#the-list-of-active-formatting-elements><span class=secno>13.2.3.3 </span>The list of active formatting elements</a></li>
1459        <li><a href=#the-element-pointers><span class=secno>13.2.3.4 </span>The element pointers</a></li>
1460        <li><a href=#other-parsing-state-flags><span class=secno>13.2.3.5 </span>Other parsing state flags</a></ol></li>
1461      <li><a href=#tokenization><span class=secno>13.2.4 </span>Tokenization</a>
1462       <ol>
1463        <li><a href=#data-state><span class=secno>13.2.4.1 </span>Data state</a></li>
1464        <li><a href=#character-reference-in-data-state><span class=secno>13.2.4.2 </span>Character reference in data state</a></li>
1465        <li><a href=#rcdata-state><span class=secno>13.2.4.3 </span>RCDATA state</a></li>
1466        <li><a href=#character-reference-in-rcdata-state><span class=secno>13.2.4.4 </span>Character reference in RCDATA state</a></li>
1467        <li><a href=#rawtext-state><span class=secno>13.2.4.5 </span>RAWTEXT state</a></li>
1468        <li><a href=#script-data-state><span class=secno>13.2.4.6 </span>Script data state</a></li>
1469        <li><a href=#plaintext-state><span class=secno>13.2.4.7 </span>PLAINTEXT state</a></li>
1470        <li><a href=#tag-open-state><span class=secno>13.2.4.8 </span>Tag open state</a></li>
1471        <li><a href=#end-tag-open-state><span class=secno>13.2.4.9 </span>End tag open state</a></li>
1472        <li><a href=#tag-name-state><span class=secno>13.2.4.10 </span>Tag name state</a></li>
1473        <li><a href=#rcdata-less-than-sign-state><span class=secno>13.2.4.11 </span>RCDATA less-than sign state</a></li>
1474        <li><a href=#rcdata-end-tag-open-state><span class=secno>13.2.4.12 </span>RCDATA end tag open state</a></li>
1475        <li><a href=#rcdata-end-tag-name-state><span class=secno>13.2.4.13 </span>RCDATA end tag name state</a></li>
1476        <li><a href=#rawtext-less-than-sign-state><span class=secno>13.2.4.14 </span>RAWTEXT less-than sign state</a></li>
1477        <li><a href=#rawtext-end-tag-open-state><span class=secno>13.2.4.15 </span>RAWTEXT end tag open state</a></li>
1478        <li><a href=#rawtext-end-tag-name-state><span class=secno>13.2.4.16 </span>RAWTEXT end tag name state</a></li>
1479        <li><a href=#script-data-less-than-sign-state><span class=secno>13.2.4.17 </span>Script data less-than sign state</a></li>
1480        <li><a href=#script-data-end-tag-open-state><span class=secno>13.2.4.18 </span>Script data end tag open state</a></li>
1481        <li><a href=#script-data-end-tag-name-state><span class=secno>13.2.4.19 </span>Script data end tag name state</a></li>
1482        <li><a href=#script-data-escape-start-state><span class=secno>13.2.4.20 </span>Script data escape start state</a></li>
1483        <li><a href=#script-data-escape-start-dash-state><span class=secno>13.2.4.21 </span>Script data escape start dash state</a></li>
1484        <li><a href=#script-data-escaped-state><span class=secno>13.2.4.22 </span>Script data escaped state</a></li>
1485        <li><a href=#script-data-escaped-dash-state><span class=secno>13.2.4.23 </span>Script data escaped dash state</a></li>
1486        <li><a href=#script-data-escaped-dash-dash-state><span class=secno>13.2.4.24 </span>Script data escaped dash dash state</a></li>
1487        <li><a href=#script-data-escaped-less-than-sign-state><span class=secno>13.2.4.25 </span>Script data escaped less-than sign state</a></li>
1488        <li><a href=#script-data-escaped-end-tag-open-state><span class=secno>13.2.4.26 </span>Script data escaped end tag open state</a></li>
1489        <li><a href=#script-data-escaped-end-tag-name-state><span class=secno>13.2.4.27 </span>Script data escaped end tag name state</a></li>
1490        <li><a href=#script-data-double-escape-start-state><span class=secno>13.2.4.28 </span>Script data double escape start state</a></li>
1491        <li><a href=#script-data-double-escaped-state><span class=secno>13.2.4.29 </span>Script data double escaped state</a></li>
1492        <li><a href=#script-data-double-escaped-dash-state><span class=secno>13.2.4.30 </span>Script data double escaped dash state</a></li>
1493        <li><a href=#script-data-double-escaped-dash-dash-state><span class=secno>13.2.4.31 </span>Script data double escaped dash dash state</a></li>
1494        <li><a href=#script-data-double-escaped-less-than-sign-state><span class=secno>13.2.4.32 </span>Script data double escaped less-than sign state</a></li>
1495        <li><a href=#script-data-double-escape-end-state><span class=secno>13.2.4.33 </span>Script data double escape end state</a></li>
1496        <li><a href=#before-attribute-name-state><span class=secno>13.2.4.34 </span>Before attribute name state</a></li>
1497        <li><a href=#attribute-name-state><span class=secno>13.2.4.35 </span>Attribute name state</a></li>
1498        <li><a href=#after-attribute-name-state><span class=secno>13.2.4.36 </span>After attribute name state</a></li>
1499        <li><a href=#before-attribute-value-state><span class=secno>13.2.4.37 </span>Before attribute value state</a></li>
1500        <li><a href=#attribute-value-(double-quoted)-state><span class=secno>13.2.4.38 </span>Attribute value (double-quoted) state</a></li>
1501        <li><a href=#attribute-value-(single-quoted)-state><span class=secno>13.2.4.39 </span>Attribute value (single-quoted) state</a></li>
1502        <li><a href=#attribute-value-(unquoted)-state><span class=secno>13.2.4.40 </span>Attribute value (unquoted) state</a></li>
1503        <li><a href=#character-reference-in-attribute-value-state><span class=secno>13.2.4.41 </span>Character reference in attribute value state</a></li>
1504        <li><a href=#after-attribute-value-(quoted)-state><span class=secno>13.2.4.42 </span>After attribute value (quoted) state</a></li>
1505        <li><a href=#self-closing-start-tag-state><span class=secno>13.2.4.43 </span>Self-closing start tag state</a></li>
1506        <li><a href=#bogus-comment-state><span class=secno>13.2.4.44 </span>Bogus comment state</a></li>
1507        <li><a href=#markup-declaration-open-state><span class=secno>13.2.4.45 </span>Markup declaration open state</a></li>
1508        <li><a href=#comment-start-state><span class=secno>13.2.4.46 </span>Comment start state</a></li>
1509        <li><a href=#comment-start-dash-state><span class=secno>13.2.4.47 </span>Comment start dash state</a></li>
1510        <li><a href=#comment-state><span class=secno>13.2.4.48 </span>Comment state</a></li>
1511        <li><a href=#comment-end-dash-state><span class=secno>13.2.4.49 </span>Comment end dash state</a></li>
1512        <li><a href=#comment-end-state><span class=secno>13.2.4.50 </span>Comment end state</a></li>
1513        <li><a href=#comment-end-bang-state><span class=secno>13.2.4.51 </span>Comment end bang state</a></li>
1514        <li><a href=#doctype-state><span class=secno>13.2.4.52 </span>DOCTYPE state</a></li>
1515        <li><a href=#before-doctype-name-state><span class=secno>13.2.4.53 </span>Before DOCTYPE name state</a></li>
1516        <li><a href=#doctype-name-state><span class=secno>13.2.4.54 </span>DOCTYPE name state</a></li>
1517        <li><a href=#after-doctype-name-state><span class=secno>13.2.4.55 </span>After DOCTYPE name state</a></li>
1518        <li><a href=#after-doctype-public-keyword-state><span class=secno>13.2.4.56 </span>After DOCTYPE public keyword state</a></li>
1519        <li><a href=#before-doctype-public-identifier-state><span class=secno>13.2.4.57 </span>Before DOCTYPE public identifier state</a></li>
1520        <li><a href=#doctype-public-identifier-(double-quoted)-state><span class=secno>13.2.4.58 </span>DOCTYPE public identifier (double-quoted) state</a></li>
1521        <li><a href=#doctype-public-identifier-(single-quoted)-state><span class=secno>13.2.4.59 </span>DOCTYPE public identifier (single-quoted) state</a></li>
1522        <li><a href=#after-doctype-public-identifier-state><span class=secno>13.2.4.60 </span>After DOCTYPE public identifier state</a></li>
1523        <li><a href=#between-doctype-public-and-system-identifiers-state><span class=secno>13.2.4.61 </span>Between DOCTYPE public and system identifiers state</a></li>
1524        <li><a href=#after-doctype-system-keyword-state><span class=secno>13.2.4.62 </span>After DOCTYPE system keyword state</a></li>
1525        <li><a href=#before-doctype-system-identifier-state><span class=secno>13.2.4.63 </span>Before DOCTYPE system identifier state</a></li>
1526        <li><a href=#doctype-system-identifier-(double-quoted)-state><span class=secno>13.2.4.64 </span>DOCTYPE system identifier (double-quoted) state</a></li>
1527        <li><a href=#doctype-system-identifier-(single-quoted)-state><span class=secno>13.2.4.65 </span>DOCTYPE system identifier (single-quoted) state</a></li>
1528        <li><a href=#after-doctype-system-identifier-state><span class=secno>13.2.4.66 </span>After DOCTYPE system identifier state</a></li>
1529        <li><a href=#bogus-doctype-state><span class=secno>13.2.4.67 </span>Bogus DOCTYPE state</a></li>
1530        <li><a href=#cdata-section-state><span class=secno>13.2.4.68 </span>CDATA section state</a></li>
1531        <li><a href=#tokenizing-character-references><span class=secno>13.2.4.69 </span>Tokenizing character references</a></ol></li>
1532      <li><a href=#tree-construction><span class=secno>13.2.5 </span>Tree construction</a>
1533       <ol>
1534        <li><a href=#creating-and-inserting-elements><span class=secno>13.2.5.1 </span>Creating and inserting elements</a></li>
1535        <li><a href=#closing-elements-that-have-implied-end-tags><span class=secno>13.2.5.2 </span>Closing elements that have implied end tags</a></li>
1536        <li><a href=#foster-parenting><span class=secno>13.2.5.3 </span>Foster parenting</a></li>
1537        <li><a href=#parsing-main-inhtml><span class=secno>13.2.5.4 </span>The rules for parsing tokens in HTML content</a>
1538         <ol>
1539          <li><a href=#the-initial-insertion-mode><span class=secno>13.2.5.4.1 </span>The "initial" insertion mode</a></li>
1540          <li><a href=#the-before-html-insertion-mode><span class=secno>13.2.5.4.2 </span>The "before html" insertion mode</a></li>
1541          <li><a href=#the-before-head-insertion-mode><span class=secno>13.2.5.4.3 </span>The "before head" insertion mode</a></li>
1542          <li><a href=#parsing-main-inhead><span class=secno>13.2.5.4.4 </span>The "in head" insertion mode</a></li>
1543          <li><a href=#parsing-main-inheadnoscript><span class=secno>13.2.5.4.5 </span>The "in head noscript" insertion mode</a></li>
1544          <li><a href=#the-after-head-insertion-mode><span class=secno>13.2.5.4.6 </span>The "after head" insertion mode</a></li>
1545          <li><a href=#parsing-main-inbody><span class=secno>13.2.5.4.7 </span>The "in body" insertion mode</a></li>
1546          <li><a href=#parsing-main-incdata><span class=secno>13.2.5.4.8 </span>The "text" insertion mode</a></li>
1547          <li><a href=#parsing-main-intable><span class=secno>13.2.5.4.9 </span>The "in table" insertion mode</a></li>
1548          <li><a href=#parsing-main-intabletext><span class=secno>13.2.5.4.10 </span>The "in table text" insertion mode</a></li>
1549          <li><a href=#parsing-main-incaption><span class=secno>13.2.5.4.11 </span>The "in caption" insertion mode</a></li>
1550          <li><a href=#parsing-main-incolgroup><span class=secno>13.2.5.4.12 </span>The "in column group" insertion mode</a></li>
1551          <li><a href=#parsing-main-intbody><span class=secno>13.2.5.4.13 </span>The "in table body" insertion mode</a></li>
1552          <li><a href=#parsing-main-intr><span class=secno>13.2.5.4.14 </span>The "in row" insertion mode</a></li>
1553          <li><a href=#parsing-main-intd><span class=secno>13.2.5.4.15 </span>The "in cell" insertion mode</a></li>
1554          <li><a href=#parsing-main-inselect><span class=secno>13.2.5.4.16 </span>The "in select" insertion mode</a></li>
1555          <li><a href=#parsing-main-inselectintable><span class=secno>13.2.5.4.17 </span>The "in select in table" insertion mode</a></li>
1556          <li><a href=#parsing-main-afterbody><span class=secno>13.2.5.4.18 </span>The "after body" insertion mode</a></li>
1557          <li><a href=#parsing-main-inframeset><span class=secno>13.2.5.4.19 </span>The "in frameset" insertion mode</a></li>
1558          <li><a href=#parsing-main-afterframeset><span class=secno>13.2.5.4.20 </span>The "after frameset" insertion mode</a></li>
1559          <li><a href=#the-after-after-body-insertion-mode><span class=secno>13.2.5.4.21 </span>The "after after body" insertion mode</a></li>
1560          <li><a href=#the-after-after-frameset-insertion-mode><span class=secno>13.2.5.4.22 </span>The "after after frameset" insertion mode</a></ol></li>
1561        <li><a href=#parsing-main-inforeign><span class=secno>13.2.5.5 </span>The rules for parsing tokens in foreign content</a></ol></li>
1562      <li><a href=#the-end><span class=secno>13.2.6 </span>The end</a></li>
1563      <li><a href=#coercing-an-html-dom-into-an-infoset><span class=secno>13.2.7 </span>Coercing an HTML DOM into an infoset</a></li>
1564      <li><a href=#an-introduction-to-error-handling-and-strange-cases-in-the-parser><span class=secno>13.2.8 </span>An introduction to error handling and strange cases in the parser</a>
1565       <ol>
1566        <li><a href=#misnested-tags:-b-i-/b-/i><span class=secno>13.2.8.1 </span>Misnested tags: &lt;b&gt;&lt;i&gt;&lt;/b&gt;&lt;/i&gt;</a></li>
1567        <li><a href=#misnested-tags:-b-p-/b-/p><span class=secno>13.2.8.2 </span>Misnested tags: &lt;b&gt;&lt;p&gt;&lt;/b&gt;&lt;/p&gt;</a></li>
1568        <li><a href=#unexpected-markup-in-tables><span class=secno>13.2.8.3 </span>Unexpected markup in tables</a></li>
1569        <li><a href=#scripts-that-modify-the-page-as-it-is-being-parsed><span class=secno>13.2.8.4 </span>Scripts that modify the page as it is being parsed</a></li>
1570        <li><a href=#the-execution-of-scripts-that-are-moving-across-multiple-documents><span class=secno>13.2.8.5 </span>The execution of scripts that are moving across multiple documents</a></li>
1571        <li><a href=#unclosed-formatting-elements><span class=secno>13.2.8.6 </span>Unclosed formatting elements</a></ol></ol></li>
1572    <li><a href=#serializing-html-fragments><span class=secno>13.3 </span>Serializing HTML fragments</a></li>
1573    <li><a href=#parsing-html-fragments><span class=secno>13.4 </span>Parsing HTML fragments</a></li>
1574    <li><a href=#named-character-references><span class=secno>13.5 </span>Named character references</a></ol></li>
1575  <li><a href=#the-xhtml-syntax><span class=secno>14 </span>The XHTML syntax</a>
1576   <ol>
1577    <li><a href=#writing-xhtml-documents><span class=secno>14.1 </span>Writing XHTML documents</a></li>
1578    <li><a href=#parsing-xhtml-documents><span class=secno>14.2 </span>Parsing XHTML documents</a></li>
1579    <li><a href=#serializing-xhtml-fragments><span class=secno>14.3 </span>Serializing XHTML fragments</a></li>
1580    <li><a href=#parsing-xhtml-fragments><span class=secno>14.4 </span>Parsing XHTML fragments</a></ol></li>
1581  <li><a href=#rendering><span class=secno>15 </span>Rendering</a>
1582   <ol>
1583    <li><a href=#introduction-17><span class=secno>15.1 </span>Introduction</a></li>
1584    <li><a href=#the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>15.2 </span>The CSS user agent style sheet and presentational hints</a></li>
1585    <li><a href=#non-replaced-elements><span class=secno>15.3 </span>Non-replaced elements</a>
1586     <ol>
1587      <li><a href=#hidden-elements><span class=secno>15.3.1 </span>Hidden elements</a></li>
1588      <li><a href=#the-page><span class=secno>15.3.2 </span>The page</a></li>
1589      <li><a href=#flow-content-1><span class=secno>15.3.3 </span>Flow content</a></li>
1590      <li><a href=#phrasing-content-1><span class=secno>15.3.4 </span>Phrasing content</a></li>
1591      <li><a href=#bidirectional-text><span class=secno>15.3.5 </span>Bidirectional text</a></li>
1592      <li><a href=#sections-and-headings><span class=secno>15.3.6 </span>Sections and headings</a></li>
1593      <li><a href=#lists><span class=secno>15.3.7 </span>Lists</a></li>
1594      <li><a href=#tables><span class=secno>15.3.8 </span>Tables</a></li>
1595      <li><a href=#form-controls><span class=secno>15.3.9 </span>Form controls</a></li>
1596      <li><a href=#the-hr-element-0><span class=secno>15.3.10 </span>The <code>hr</code> element</a></li>
1597      <li><a href=#the-fieldset-element-0><span class=secno>15.3.11 </span>The <code>fieldset</code> element</a></ol></li>
1598    <li><a href=#replaced-elements><span class=secno>15.4 </span>Replaced elements</a>
1599     <ol>
1600      <li><a href=#embedded-content-2><span class=secno>15.4.1 </span>Embedded content</a></li>
1601      <li><a href=#timed-text-tracks-0><span class=secno>15.4.2 </span>Timed text tracks</a>
1602       <ol>
1603        <li><a href=#webvtt-cue-text-rendering-rules><span class=secno>15.4.2.1 </span>WebVTT cue text rendering rules</a></li>
1604        <li><a href=#applying-css-properties-to-webvtt-node-objects><span class=secno>15.4.2.2 </span>Applying CSS properties to WebVTT Node Objects</a></li>
1605        <li><a href=#css-extensions><span class=secno>15.4.2.3 </span>CSS extensions</a>
1606         <ol>
1607          <li><a href="#the-'::cue'-pseudo-element"><span class=secno>15.4.2.3.1 </span>The '::cue' pseudo-element</a></li>
1608          <li><a href="#the-':past'-and-':future'-pseudo-classes"><span class=secno>15.4.2.3.2 </span>The ':past' and ':future' pseudo-classes</a></ol></ol></li>
1609      <li><a href=#images-0><span class=secno>15.4.3 </span>Images</a></li>
1610      <li><a href=#attributes-for-embedded-content-and-images><span class=secno>15.4.4 </span>Attributes for embedded content and images</a></li>
1611      <li><a href=#image-maps-0><span class=secno>15.4.5 </span>Image maps</a></li>
1612      <li><a href=#toolbars-0><span class=secno>15.4.6 </span>Toolbars</a></ol></li>
1613    <li><a href=#bindings><span class=secno>15.5 </span>Bindings</a>
1614     <ol>
1615      <li><a href=#introduction-18><span class=secno>15.5.1 </span>Introduction</a></li>
1616      <li><a href=#the-button-element-0><span class=secno>15.5.2 </span>The <code>button</code> element</a></li>
1617      <li><a href=#the-details-element-0><span class=secno>15.5.3 </span>The <code>details</code> element</a></li>
1618      <li><a href=#the-input-element-as-a-text-entry-widget><span class=secno>15.5.4 </span>The <code>input</code> element as a text entry widget</a></li>
1619      <li><a href=#the-input-element-as-domain-specific-widgets><span class=secno>15.5.5 </span>The <code>input</code> element as domain-specific widgets</a></li>
1620      <li><a href=#the-input-element-as-a-range-control><span class=secno>15.5.6 </span>The <code>input</code> element as a range control</a></li>
1621      <li><a href=#the-input-element-as-a-color-well><span class=secno>15.5.7 </span>The <code>input</code> element as a color well</a></li>
1622      <li><a href=#the-input-element-as-a-checkbox-and-radio-button-widgets><span class=secno>15.5.8 </span>The <code>input</code> element as a checkbox and radio button widgets</a></li>
1623      <li><a href=#the-input-element-as-a-file-upload-control><span class=secno>15.5.9 </span>The <code>input</code> element as a file upload control</a></li>
1624      <li><a href=#the-input-element-as-a-button><span class=secno>15.5.10 </span>The <code>input</code> element as a button</a></li>
1625      <li><a href=#the-marquee-element-0><span class=secno>15.5.11 </span>The <code>marquee</code> element</a></li>
1626      <li><a href=#the-meter-element-0><span class=secno>15.5.12 </span>The <code>meter</code> element</a></li>
1627      <li><a href=#the-progress-element-0><span class=secno>15.5.13 </span>The <code>progress</code> element</a></li>
1628      <li><a href=#the-select-element-0><span class=secno>15.5.14 </span>The <code>select</code> element</a></li>
1629      <li><a href=#the-textarea-element-0><span class=secno>15.5.15 </span>The <code>textarea</code> element</a></li>
1630      <li><a href=#the-keygen-element-0><span class=secno>15.5.16 </span>The <code>keygen</code> element</a></li>
1631      <li><a href=#the-time-element-0><span class=secno>15.5.17 </span>The <code>time</code> element</a></ol></li>
1632    <li><a href=#frames-and-framesets><span class=secno>15.6 </span>Frames and framesets</a></li>
1633    <li><a href=#interactive-media><span class=secno>15.7 </span>Interactive media</a>
1634     <ol>
1635      <li><a href=#links,-forms,-and-navigation><span class=secno>15.7.1 </span>Links, forms, and navigation</a></li>
1636      <li><a href=#the-title-attribute-0><span class=secno>15.7.2 </span>The <code title=attr-title>title</code> attribute</a></li>
1637      <li><a href=#editing-hosts><span class=secno>15.7.3 </span>Editing hosts</a></li>
1638      <li><a href=#text-rendered-in-native-user-interfaces><span class=secno>15.7.4 </span>Text rendered in native user interfaces</a></ol></li>
1639    <li><a href=#print-media><span class=secno>15.8 </span>Print media</a></ol></li>
1640  <li><a href=#obsolete><span class=secno>16 </span>Obsolete features</a>
1641   <ol>
1642    <li><a href=#obsolete-but-conforming-features><span class=secno>16.1 </span>Obsolete but conforming features</a>
1643     <ol>
1644      <li><a href=#warnings-for-obsolete-but-conforming-features><span class=secno>16.1.1 </span>Warnings for obsolete but conforming features</a></ol></li>
1645    <li><a href=#non-conforming-features><span class=secno>16.2 </span>Non-conforming features</a></li>
1646    <li><a href=#requirements-for-implementations><span class=secno>16.3 </span>Requirements for implementations</a>
1647     <ol>
1648      <li><a href=#the-applet-element><span class=secno>16.3.1 </span>The <code>applet</code> element</a></li>
1649      <li><a href=#the-marquee-element><span class=secno>16.3.2 </span>The <code>marquee</code> element</a></li>
1650      <li><a href=#frames><span class=secno>16.3.3 </span>Frames</a></li>
1651      <li><a href=#other-elements,-attributes-and-apis><span class=secno>16.3.4 </span>Other elements, attributes and APIs</a></ol></ol></li>
1652  <li><a href=#iana><span class=secno>17 </span>IANA considerations</a>
1653   <ol>
1654    <li><a href=#text/html><span class=secno>17.1 </span><code>text/html</code></a></li>
1655    <li><a href=#text/html-sandboxed><span class=secno>17.2 </span><code>text/html-sandboxed</code></a></li>
1656    <li><a href=#multipart/x-mixed-replace><span class=secno>17.3 </span><code>multipart/x-mixed-replace</code></a></li>
1657    <li><a href=#application/xhtml+xml><span class=secno>17.4 </span><code>application/xhtml+xml</code></a></li>
1658    <li><a href=#application/x-www-form-urlencoded><span class=secno>17.5 </span><code>application/x-www-form-urlencoded</code></a></li>
1659    <li><a href=#text/cache-manifest><span class=secno>17.6 </span><code>text/cache-manifest</code></a></li>
1660    <li><a href=#text/ping><span class=secno>17.7 </span><code>text/ping</code></a></li>
1661    <li><a href=#text/vtt><span class=secno>17.8 </span><code>text/vtt</code></a></li>
1662    <li><a href=#application/microdata+json><span class=secno>17.9 </span><code>application/microdata+json</code></a></li>
1663    <li><a href=#application/html-peer-connection-data><span class=secno>17.10 </span><code>application/html-peer-connection-data</code></a></li>
1664    <li><a href=#ping-from><span class=secno>17.11 </span><code>Ping-From</code></a></li>
1665    <li><a href=#ping-to><span class=secno>17.12 </span><code>Ping-To</code></a></li>
1666    <li><a href=#web+-scheme-prefix><span class=secno>17.13 </span><code>web+</code> scheme prefix</a></ol></li>
1667  <li><a class=no-num href=#index>Index</a>
1668   <ol>
1669    <li><a class=no-num href=#elements-1>Elements</a></li>
1670    <li><a class=no-num href=#element-content-categories>Element content categories</a></li>
1671    <li><a class=no-num href=#attributes-1>Attributes</a></li>
1672    <li><a class=no-num href=#interfaces>Interfaces</a></ol></li>
1673  <li><a class=no-num href=#references>References</a></li>
1674  <li><a class=no-num href=#acknowledgements>Acknowledgements</a></ol>
1675 <!--end-toc-->
1676   <hr><!-- An advisory for those reading this source. --><!-- In this specification, there are a number of comments (like
1677         this one) that have three consecutive Xs. These indicate known
1678         problems that are expected to be resolved in the future. --><!-- There are also comments with the string "v2", "v3", "v4", or
1679         higher numbers. These indicate ideas for future versions of
1680         the specification that have not yet been included, usually
1681         because it's too early (one has to move slowly lest the
1682         browser vendors get overwhelmed with changes). --><!-- Finally, there may also be some known issues in this
1683         specification marked with the following punctuation: --><!--!--><!-- These are issues that are known to the editor but cannot be
1684         currently fixed because they were introduced by W3C decisions.
1685         In theory we could fork the WHATWG copy of the spec, but doing
1686         so would introduce normative differences between the W3C and
1687         WHATWG specs and these issues are not worth the hassle that
1688         this would cause. We'll probably be able to fix them some day,
1689         but for now we are living with them. --><h2 id=introduction><span class=secno>1 </span>Introduction</h2>
1690
1691
1692
1693
1694   <h3 id=abstract><span class=secno>1.1 </span>Where does this specification fit?</h3>
1695
1696   <p>This specification defines a big part of the Web platform, in
1697   lots of detail. Its place in the Web platform specification stack
1698   relative to other specifications can be best summed up as
1699   follows:</p>
1700
1701   <p><img alt="It consists of everything else, above such core technologies as HTTP, URI/IRIs, DOM Core, 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=greenbox.png width=398></p>
1702
1703
1704
1705   <h3 id=is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</h3><!--VERSION-->
1706
1707   <p><i>This section is non-normative.</i></p>
1708
1709   <p>In short: Yes.</p>
1710
1711   <p>In more length: The term "HTML5" is widely used as a buzzword to
1712   refer to modern Web technologies, many of which (though by no means
1713   all) are developed at the WHATWG, in some cases in conjunction with
1714   the W3C and IETF.</p>
1715
1716   <p>The WHATWG work is all published in one specification
1717
1718   (the one you are reading right now),
1719
1720
1721   parts of which are republished in a variety of other forms,
1722   including an edition optimized for Web developers
1723
1724   (known as <a href=http://developers.whatwg.org/>HTML5</a>).
1725
1726
1727   <!-- and one which focuses mainly on the core HTML language -->
1728
1729   <!-- (known as the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">HTML Living Standard</a>). -->
1730
1731
1732   In addition, two subparts of the specification are republished as
1733   separate documents, for ease of reference:
1734   <a href=http://www.whatwg.org/specs/web-apps/current-work/webvtt.html>WebVTT</a>
1735   and
1736   <a href=http://www.whatwg.org/specs/web-apps/current-work/webrtc.html>WebRTC</a>.
1737   </p>
1738
1739   <p>The W3C also publishes parts of this specification as separate
1740   documents. One of these parts is called "HTML5"; it is a subset of
1741
1742   this specification (the HTML Living Standard).
1743
1744   </p>
1745
1746 <!--
1747   <p>The WHATWG specification is a continuously maintained living
1748   standard, with maturity managed at a very granular per-section
1749   scale, indicated by markers in the left margin; this is intended to
1750   model the way in which specifications are approached in practice by
1751   implementors and authors alike. The W3C specifications follow a more
1752   traditional style, with versioned releases of the specification, and
1753   with maturity management being done only at the document level; this
1754   means that the W3C specifications have version numbers (e.g.
1755   "HTML5") and necessarily go through periods of "feature freeze"
1756   where new features are not added, so that the specifications can as
1757   a whole reach a more mature state.</p>
1758 -->
1759
1760
1761   <h6 class=no-toc id=how-do-the-whatwg-and-w3c-specifications-differ?><span class=secno>1.2.1 </span>How do the WHATWG and W3C specifications differ?</h6>
1762
1763   <p>The features present in both the WHATWG and W3C specifications
1764   are specified using identical text, except for the following (mostly
1765   editorial) differences:</p><!--FORK-->
1766
1767   <ul><!--
1768    <li>Instead of this section, the W3C HTML specification has a
1769    different paragraph explaining the difference between the W3C and
1770    WHATWG versions of HTML.</li>
1771 --><!-- in the status section --><li>The W3C HTML specification refers to the technology as HTML5,
1772    rather than just HTML.</li><!--VERSION-->
1773
1774    <li>Examples that use features from HTML5 are not present in the
1775    W3C specifications since the W3C specifications are published as
1776    HTML4 due to <a href="http://www.w3.org/2005/07/pubrules?uimode=filter&amp;uri=#format">W3C
1777    publication policies</a>.</li><!--HTML4POLICE-->
1778
1779    <li>The W3C HTML specification defines conformance for documents in
1780    a more traditional (version-orientated) way, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0574.html>a
1781    working group decision from March 2011</a>. This specification, in
1782    part driven by its versionless development model, instead uses a
1783    conformance definition that more closely models how specifications
1784    are used in practice.</li><!--CONFORMANCE-->
1785
1786    <li>The W3C HTML specification omits a paragraph of implementation
1787    advice because of <a href=http://lists.w3.org/Archives/Public/public-html/2010Jun/0001.html>a
1788    working group decision from June 2010</a>.</li>
1789
1790    <li>The W3C HTML specification includes a paragraph of advice
1791    redundant with the ARIA specifications because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0244.html>a
1792    working group decision from March 2011</a>.</li>
1793
1794    <li>The W3C HTML specification gives incomplete advice regarding
1795    the <code title=attr-img-alt><a href=#attr-img-alt>alt</a></code> attribute and instead
1796    references other documents on the matter because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0691.html>a
1797    working group decision from March 2011</a>.</li>
1798
1799    <li>The W3C HTML specification includes a link to an incomplete
1800    document that contradicts this specification because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Feb/0407.html>a
1801    working group decision from February 2011</a>.</li><!--HPAAIG-->
1802
1803    <li>The W3C HTML specification has different prose regarding the
1804    use of tables for layout purposes because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0245.html>a
1805    working group decision from March 2011</a>. In contrast, this
1806    specification unambiguously disallows the use of <code><a href=#the-table-element>table</a></code>
1807    elements for layout purposes.</li>
1808
1809    <li>The W3C HTML specification requires authors who are writing
1810    HTML e-mails with images to people they know can see the images
1811    (e.g. a wife sending her husband photos of their child) to
1812    nonetheless include textual alternatives to those images, because
1813    of <a href=http://lists.w3.org/Archives/Public/public-html/2011Apr/0451.html>a
1814    working group decision from April 2011</a>.</li>
1815
1816    <li>The W3C HTML specification does not state that the
1817    <code><a href=#the-img-element>img</a></code> element's <code title=attr-img-alt><a href=#attr-img-alt>alt</a></code>
1818    attribute is its <a href=#fallback-content>fallback content</a>, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Apr/0452.html>a
1819    working group decision from April 2011</a>.</li>
1820
1821    <li>The W3C HTML specification is missing a clause that requires
1822    conformance checkers to discourage cargo-cult accessibility
1823    authoring because of <a href=http://lists.w3.org/Archives/Public/public-html/2011May/0018.html>a
1824    working group chair decision from May 2011</a>.</li><!--bug
1825    11557-->
1826
1827    <li>The W3C HTML specification is missing some conformance
1828    constraints that would make documents misusing <code><a href=#the-canvas-element>canvas</a></code>
1829    invalid, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Jun/0083.html>a
1830    working group chair decision from June 2011</a>.</li><!--bug
1831    12906-->
1832
1833    <li>The W3C 2D Context specification has a different API for
1834    handling focus and selection in the 2D canvas API, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011May/0138.html>a
1835    working group chair decision from May 2011</a>.</li>
1836
1837   </ul><p>The following sections are only published in the WHATWG
1838   specifications and are not currently available anywhere else:</p>
1839
1840   <ul><li>The <code><a href=#peerconnection>PeerConnection</a></code> API and related video-conferencing features.</li> <!--PEERCONNECTION-->
1841    <li>New hyperlink features: the <code title=attr-hyperlink-download><a href=#attr-hyperlink-download>download</a></code> attribute to make download links and the <code title=attr-hyperlink-ping><a href=#ping>ping</a></code> attribute for <a href=#hyperlink-auditing>hyperlink auditing</a>.</li> <!--DOWNLOAD--><!--PING-->
1842    <li>The <a href=#webvtt>WebVTT</a> format and some <a href=#text-track>text track</a> API features.</li> <!--TTVTT-->
1843    <li>Rules for <a href=#atom>converting HTML to Atom</a>.</li> <!--MD-->
1844    <li>The <code title=dom-document-cssElementMap><a href=#dom-document-csselementmap>cssElementMap</a></code> feature for defining <a href=#css-element-reference-identifier title="CSS element reference identifier">CSS element reference identifiers</a>.</li> <!--CSSREF-->
1845    <li>An experimental specification of the legacy <code title=dom-find><a href=#dom-find>window.find()</a></code> API.</li><!--FIND-->
1846    <li>Some predefined <a href=#mdvocabs>Microdata vocabularies</a>.</li>
1847   </ul><!--
1848   <p>Features that are part of the WHATWG HTML Living Standard
1849   specification but that are currently published as separate
1850   specifications as well, and are not included in the W3C HTML5
1851   specification, consist of:</p>
1852
1853   <ul>
1854    <li><a href="#2dcontext">Canvas 2D Graphics Context</a>--><!--2DCONTEXT--><!--
1855    <li><a href="#microdata">Microdata</a>--><!--MD--><!--
1856    <li><a href="#crossDocumentMessages">Cross-document messaging</a> (also known as Communications)--><!--POSTMSG--><!--
1857    <li><a href="#channel-messaging">Channel messaging</a> (also known as Communications)--><!--POSTMSG--><!--
1858   </ul>
1859 --><!--
1860   <h6 class="no-toc">What else is HTML5?</h6>
1861
1862   <p>Features that are not currently published or maintained by the
1863   WHATWG but that are sometimes considered to be informally part of
1864   "HTML5" include:</p>
1865
1866   <ul>
1867    <li><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol">WebSocket protocol</a>
1868    <li><a href="http://tools.ietf.org/html/draft-abarth-mime-sniff">Media Type Sniffing</a>
1869    <li><a href="http://tools.ietf.org/html/draft-abarth-origin">The Web Origin Concept</a>
1870    <li><a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation API</a>
1871    <li><a href="http://www.w3.org/TR/SVG/">SVG</a>
1872    <li><a href="http://www.w3.org/TR/MathML/">MathML</a>
1873    <li><a href="http://dev.w3.org/2006/webapi/XMLHttpRequest-2/">XMLHttpRequest</a>
1874    <li>Parts of <a href="http://www.w3.org/Style/CSS/current-work">CSS</a>.</li>
1875   </ul>
1876 --><!--
1877   <p>The <a href="#forms">forms</a> part of this specification was
1878   previously published separately in a specification known as Web
1879   Forms 2. The <a href="#workers">Web Workers</a> section was also
1880   previously published as a separate document.</p>
1881 --><!--
1882   <p>See also <a
1883   href="http://wiki.whatwg.org/wiki/FAQ#What_are_the_various_versions_of_the_spec.3F">the
1884   relevant FAQ entry</a>.</p>
1885 --><!--VERSION--><h3 id=background><span class=secno>1.3 </span>Background</h3>
1886
1887   <p><i>This section is non-normative.</i></p>
1888
1889   <p>The World Wide Web's markup language has always been HTML. HTML
1890   was primarily designed as a language for semantically describing
1891   scientific documents, although its general design and adaptations
1892   over the years have enabled it to be used to describe a number of
1893   other types of documents.</p>
1894
1895   <p>The main area that has not been adequately addressed by HTML is a
1896   vague subject referred to as Web Applications. This specification
1897   attempts to rectify this, while at the same time updating the HTML
1898   specifications to address issues raised in the past few years.</p>
1899
1900
1901   <h3 id=audience><span class=secno>1.4 </span>Audience</h3>
1902
1903   <p><i>This section is non-normative.</i></p>
1904
1905   <p>This specification is intended for authors of documents and
1906   scripts that use the features defined in this specification<span class=impl>, implementors of tools that operate on pages that use
1907   the features defined in this specification, and individuals wishing
1908   to establish the correctness of documents or implementations with
1909   respect to the requirements of this specification</span>.</p>
1910
1911   <p>This document is probably not suited to readers who do not
1912   already have at least a passing familiarity with Web technologies,
1913   as in places it sacrifices clarity for precision, and brevity for
1914   completeness. More approachable tutorials and authoring guides can
1915   provide a gentler introduction to the topic.</p>
1916
1917   <p>In particular, familiarity with the basics of DOM Core and DOM
1918   Events is necessary for a complete understanding of some of the more
1919   technical parts of this specification. An understanding of Web IDL,
1920   HTTP, XML, Unicode, character encodings, JavaScript, and CSS will
1921   also be helpful in places but is not essential.</p>
1922
1923
1924   <h3 id=scope><span class=secno>1.5 </span>Scope</h3>
1925
1926   <p><i>This section is non-normative.</i></p>
1927
1928   <p>This specification is limited to providing a semantic-level
1929   markup language and associated semantic-level scripting APIs for
1930   authoring accessible pages on the Web ranging from static documents
1931   to dynamic applications.</p>
1932
1933   <p>The scope of this specification does not include providing
1934   mechanisms for media-specific customization of presentation
1935   (although default rendering rules for Web browsers are included at
1936   the end of this specification, and several mechanisms for hooking
1937   into CSS are provided as part of the language).</p>
1938
1939   <p>The scope of this specification is not to describe an entire
1940   operating system. In particular, hardware configuration software,
1941   image manipulation tools, and applications that users would be
1942   expected to use with high-end workstations on a daily basis are out
1943   of scope. In terms of applications, this specification is targeted
1944   specifically at applications that would be expected to be used by
1945   users on an occasional basis, or regularly but from disparate
1946   locations, with low CPU requirements. For instance online purchasing
1947   systems, searching systems, games (especially multiplayer online
1948   games), public telephone books or address books, communications
1949   software (e-mail clients, instant messaging clients, discussion
1950   software), document editing software, etc.</p>
1951
1952
1953   <h3 id=history-1><span class=secno>1.6 </span>History</h3>
1954
1955   <p><i>This section is non-normative.</i></p>
1956
1957   <p>For its first five years (1990-1995), HTML went through a number
1958   of revisions and experienced a number of extensions, primarily
1959   hosted first at CERN, and then at the IETF.</p>
1960
1961   <p>With the creation of the W3C, HTML's development changed venue
1962   again. A first abortive attempt at extending HTML in 1995 known as
1963   HTML 3.0 then made way to a more pragmatic approach known as HTML
1964   3.2, which was completed in 1997. HTML4 quicky followed later that
1965   same year.</p>
1966
1967   <p>The following year, the W3C membership decided to stop evolving
1968   HTML and instead begin work on an XML-based equivalent, called
1969   XHTML. <!-- http://www.w3.org/MarkUp/future/#summary --> This effort
1970   started with a reformulation of HTML4 in XML, known as XHTML 1.0,
1971   which added no new features except the new serialization, and which
1972   was completed in 2000. After XHTML 1.0, the W3C's focus turned to
1973   making it easier for other working groups to extend XHTML, under the
1974   banner of XHTML Modularization. In parallel with this, the W3C also
1975   worked on a new language that was not compatible with the earlier
1976   HTML and XHTML languages, calling it XHTML2.</p>
1977
1978   <p>Around the time that HTML's evolution was stopped in 1998, parts
1979   of the API for HTML developed by browser vendors were specified and
1980   published under the name DOM Level 1 (in 1998) and DOM Level 2 Core
1981   and DOM Level 2 HTML (starting in 2000 and culminating in
1982   2003). These efforts then petered out, with some DOM Level 3
1983   specifications published in 2004 but the working group being closed
1984   before all the Level 3 drafts were completed.</p>
1985
1986   <p>In 2003, the publication of XForms, a technology which was
1987   positioned as the next generation of Web forms, sparked a renewed
1988   interest in evolving HTML itself, rather than finding replacements
1989   for it. This interest was borne from the realization that XML's
1990   deployment as a Web technology was limited to entirely new
1991   technologies (like RSS and later Atom), rather than as a replacement
1992   for existing deployed technologies (like HTML).</p>
1993
1994   <p>A proof of concept to show that it was possible to extend HTML4's
1995   forms to provide many of the features that XForms 1.0 introduced,
1996   without requiring browsers to implement rendering engines that were
1997   incompatible with existing HTML Web pages, was the first result of
1998   this renewed interest. At this early stage, while the draft was
1999   already publicly available, and input was already being solicited
2000   from all sources, the specification was only under Opera Software's
2001   copyright.</p>
2002
2003   <p>The idea that HTML's evolution should be reopened was tested at a
2004   W3C workshop in 2004, where some of the principles that underlie the
2005   HTML5 work (described below), as well as the aforementioned early
2006   draft proposal covering just forms-related features, were presented
2007   to the W3C jointly by Mozilla and Opera. The proposal was rejected
2008   on the grounds that the proposal conflicted with the previously
2009   chosen direction for the Web's evolution; the W3C staff and
2010   membership voted to continue developing XML-based replacements
2011   instead.</p>
2012
2013   <p>Shortly thereafter, Apple, Mozilla, and Opera jointly announced
2014   their intent to continue working on the effort under the umbrella of
2015   a new venue called the WHATWG. A public mailing list was created,
2016   and the draft was moved to the WHATWG site. The copyright was
2017   subsequently amended to be jointly owned by all three vendors, and
2018   to allow reuse of the specification.</p>
2019
2020   <p>The WHATWG was based on several core principles, in particular
2021   that technologies need to be backwards compatible, that
2022   specifications and implementations need to match even if this means
2023   changing the specification rather than the implementations, and that
2024   specifications need to be detailed enough that implementations can
2025   achieve complete interoperability without reverse-engineering each
2026   other.</p>
2027
2028   <p>The latter requirement in particular required that the scope of
2029   the HTML5 specification include what had previously been specified
2030   in three separate documents: HTML4, XHTML1, and DOM2 HTML. It also
2031   meant including significantly more detail than had previously been
2032   considered the norm.</p>
2033
2034   <p>In 2006, the W3C indicated an interest to participate in the
2035   development of HTML5 after all, and in 2007 formed a working group
2036   chartered to work with the WHATWG on the development of the HTML5
2037   specification. Apple, Mozilla, and Opera allowed the W3C to publish
2038   the specification under the W3C copyright, while keeping a version
2039   with the less restrictive license on the WHATWG site.</p>
2040
2041   <p>Since then, both groups have been working together.</p>
2042
2043
2044   <p>A separate document has been published by the W3C HTML working
2045   group to document the differences between the HTML specified in this
2046   document and the language described in the HTML4 specification. <a href=#refsHTMLDIFF>[HTMLDIFF]</a></p>
2047
2048
2049
2050
2051   <h3 id=design-notes><span class=secno>1.7 </span>Design notes</h3>
2052
2053   <p><i>This section is non-normative.</i></p>
2054
2055   <p>It must be admitted that many aspects of HTML appear at first
2056   glance to be nonsensical and inconsistent.</p>
2057
2058   <p>HTML, its supporting DOM APIs, as well as many of its supporting
2059   technologies, have been developed over a period of several decades
2060   by a wide array of people with different priorities who, in many
2061   cases, did not know of each other's existence.</p>
2062
2063   <p>Features have thus arisen from many sources, and have not always
2064   been designed in especially consistent ways. Furthermore, because of
2065   the unique characteristics of the Web, implementation bugs have
2066   often become de-facto, and now de-jure, standards, as content is
2067   often unintentionally written in ways that rely on them before they
2068   can be fixed.</p>
2069
2070   <p>Despite all this, efforts have been made to adhere to certain
2071   design goals. These are described in the next few subsections.</p>
2072
2073
2074   <h4 id=serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</h4>
2075
2076   <p><i>This section is non-normative.</i></p>
2077
2078   <p>To avoid exposing Web authors to the complexities of
2079   multithreading, the HTML and DOM APIs are designed such that no
2080   script can ever detect the simultaneous execution of other
2081   scripts. Even with <a href=#worker title=Worker>workers</a>, the intent
2082   is that the behavior of implementations can be thought of as
2083   completely serializing the execution of all scripts in all <a href=#browsing-context title="browsing context">browsing contexts</a>.</p>
2084
2085   <p class=note>The <code title=dom-navigator-yieldForStorageUpdates><a href=#dom-navigator-yieldforstorageupdates>navigator.yieldForStorageUpdates()</a></code>
2086   method, in this model, is equivalent to allowing other scripts to
2087   run while the calling script is blocked.</p>
2088
2089
2090   <h4 id=compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</h4>
2091
2092   <p><i>This section is non-normative.</i></p>
2093
2094   <p>This specification interacts with and relies on a wide variety of
2095   other specifications. In certain circumstances, unfortunately,
2096   conflicting needs have led to this specification violating the
2097   requirements of these other specifications. Whenever this has
2098   occurred, the transgressions have each been noted as a "<dfn id=willful-violation>willful
2099   violation</dfn>", and the reason for the violation has been
2100   noted.</p>
2101
2102
2103
2104
2105   <h3 id=html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</h3>
2106
2107   <p><i>This section is non-normative.</i></p>
2108
2109   <p>This specification defines an abstract language for describing
2110   documents and applications, and some APIs for interacting with
2111   in-memory representations of resources that use this language.</p>
2112
2113   <p>The in-memory representation is known as "DOM HTML", or "the DOM"
2114   for short.</p>
2115
2116   <p>There are various concrete syntaxes that can be used to transmit
2117   resources that use this abstract language, two of which are defined
2118   in this specification.</p>
2119
2120   <p>The first such concrete syntax is the HTML syntax. This is the
2121   format suggested for most authors. It is compatible with most legacy
2122   Web browsers. If a document is transmitted with an <a href=#html-mime-type>HTML MIME
2123   type</a>, such as <code><a href=#text/html>text/html</a></code>, then it will be
2124   processed as an HTML document by Web browsers.
2125
2126   This specification defines the latest HTML syntax, known simply as
2127   "HTML".
2128   <!--VERSION-->
2129
2130   </p>
2131
2132   <p>The second concrete syntax is the XHTML syntax, which is an
2133   application of XML. When a document is transmitted with an <a href=#xml-mime-type>XML
2134   MIME type</a>, such as <code><a href=#application/xhtml+xml>application/xhtml+xml</a></code>, then
2135   it is treated as an XML document by Web browsers, to be parsed by an
2136   XML processor. Authors are reminded that the processing for XML and
2137   HTML differs; in particular, even minor syntax errors will prevent a
2138   document labeled as XML from being rendered fully, whereas they
2139   would be ignored in the HTML syntax.
2140
2141   This specification defines the latest XHTML syntax, known simply as
2142   "XHTML".
2143   <!--VERSION-->
2144
2145   </p>
2146
2147   <p>The DOM, the HTML syntax, and XML cannot all represent the same
2148   content. For example, namespaces cannot be represented using the
2149   HTML syntax, but they are supported in the DOM and in XML.
2150   Similarly, documents that use the <code><a href=#the-noscript-element>noscript</a></code> feature can
2151   be represented using the HTML syntax, but cannot be represented with
2152   the DOM or in XML. Comments that contain the string "<code title="">--&gt;</code>" can only be represented in the DOM, not in
2153   the HTML and XML syntaxes.</p>
2154
2155
2156   <h3 id=structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</h3>
2157
2158   <p><i>This section is non-normative.</i></p>
2159
2160   <p>This specification is divided into the following major
2161   sections:</p>
2162
2163   <dl><dt><a href=#infrastructure>Common infrastructure</a></dt>
2164
2165    <dd>The conformance classes, algorithms, definitions, and the
2166    common underpinnings of the rest of the specification.</dd>
2167
2168
2169    <dt><a href=#dom>Semantics, structure, and APIs of HTML documents</a></dt>
2170
2171    <dd>Documents are built from elements. These elements form a tree
2172    using the DOM. This section defines the features of this DOM, as
2173    well as introducing the features common to all elements, and the
2174    concepts used in defining elements.</dd>
2175
2176
2177    <dt><a href=#semantics>The elements of HTML</a></dt>
2178
2179    <dd>Each element has a predefined meaning, which is explained in
2180    this section. Rules for authors on how to use the element<span class=impl>, along with user agent requirements for how to handle
2181    each element,</span> are also given.</dd>
2182
2183 <!--MD-->
2184    <dt><a href=#microdata>Microdata</a></dt>
2185
2186    <dd>This specification introduces a mechanism for adding
2187    machine-readable annotations to documents, so that tools can
2188    extract trees of name-value pairs from the document. This section
2189    describes this mechanism<span class=impl> and some algorithms
2190    that can be used to convert HTML documents into other
2191    formats</span>.
2192
2193    This section also defines some Microdata vocabularies for contact
2194    information, calendar events, and licensing works.
2195
2196    </dd>
2197 <!--MD-->
2198
2199    <dt><a href=#browsers>Loading Web pages</a></dt>
2200
2201    <dd>HTML documents do not exist in a vacuum &mdash; this section
2202    defines many of the features that affect environments that deal
2203    with multiple pages.</dd>
2204
2205    <dt><a href=#webappapis>Web application APIs</a></dt>
2206
2207    <dd>This section introduces basic features for scripting of
2208    applications in HTML.</dd>
2209
2210    <dt><a href=#editing>User interaction</a></dt>
2211
2212    <dd>HTML documents can provide a number of mechanisms for users to
2213    interact with and modify content, which are described in this
2214    section.</dd>
2215
2216
2217    <dt><a href=#workers>Web workers</a></dt>
2218
2219    <dd>This specification defines an API for background threads in
2220    JavaScript.</dd>
2221
2222
2223
2224    <dt><a href=#webstorage>Web storage</a></dt>
2225
2226    <dd>This specification defines a client-side storage mechanism
2227    based on name-value pairs.</dd>
2228
2229
2230 <!--POSTMSG-->
2231    <dt><a href=#comms>The communication APIs</a></dt>
2232
2233    <dd>This section describes some mechanisms that applications
2234    written in HTML can use to communicate with other applications from
2235    different domains running on the same client.
2236
2237    It also introduces a server-push event stream mechanism, and a
2238    two-way full-duplex socket protocol for scripts.
2239
2240    </dd>
2241 <!--POSTMSG-->
2242
2243
2244    <dt><a href=#syntax>The HTML syntax</a></dt>
2245    <dt><a href=#xhtml>The XHTML syntax</a></dt>
2246
2247    <dd>All of these features would be for naught if they couldn't be
2248    represented in a serialized form and sent to other people, and so
2249    these sections define the syntaxes of HTML, along with rules for
2250    how to parse content using those syntaxes.</dd>
2251
2252
2253   </dl><p>There are also some appendices, defining <a href=#rendering>rendering rules</a> for Web browsers and listing
2254   <a href=#obsolete>obsolete features</a> and <a href=#iana>IANA
2255   considerations</a>.</p>
2256
2257
2258
2259   <h4 id=how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</h4>
2260
2261   <p>This specification should be read like all other specifications.
2262   First, it should be read cover-to-cover, multiple times. Then, it
2263   should be read backwards at least once. Then it should be read by
2264   picking random sections from the contents list and following all the
2265   cross-references.</p>
2266
2267   <p>As described in the conformance requirements section below, this
2268   specification describes conformance criteria for a variety of
2269   conformance classes. In particular, there are conformance
2270   requirements that apply to <em>producers</em>, for example authors
2271   and the documents they create, and there are conformance
2272   requirements that apply to <em>consumers</em>, for example Web
2273   browsers. They can be distinguished by what they are requiring: a
2274   requirement on a producer states what is allowed, while a
2275   requirement on a consumer states how software is to act.</p>
2276
2277   <div class=example>
2278
2279    <p>For example, "the <code title="">foo</code> attribute's value
2280    must be a <a href=#valid-integer>valid integer</a>" is a requirement on
2281    producers, as it lays out the allowed values; in contrast, the
2282    requirement "the <code title="">foo</code> attribute's value must
2283    be parsed using the <a href=#rules-for-parsing-integers>rules for parsing integers</a>" is a
2284    requirement on consumers, as it describes how to process the
2285    content.</p>
2286
2287   </div>
2288
2289   <p><strong>Requirements on producers have no bearing whatsoever on
2290   consumers.</strong></p>
2291
2292   <div class=example>
2293
2294    <p>Continuing the above example, a requirement stating that a
2295    particular attribute's value is constrained to being a <a href=#valid-integer>valid
2296    integer</a> emphatically does <em>not</em> imply anything about
2297    the requirements on consumers. It might be that the consumers are
2298    in fact required to treat the attribute as an opaque string,
2299    completely unaffected by whether the value conforms to the
2300    requirements or not. It might be (as in the previous example) that
2301    the consumers are required to parse the value using specific rules
2302    that define how invalid (non-numeric in this case) values are to be
2303    processed.</p>
2304
2305   </div>
2306
2307
2308
2309   <h4 id=typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</h4>
2310
2311   <p>This is a definition, requirement, or explanation.</p>
2312
2313   <p class=note>This is a note.</p>
2314
2315   <p class=example>This is an example.</p>
2316
2317   <p class=XXX>This is an open issue.</p>
2318
2319   <p class=warning>This is a warning.</p>
2320
2321   <pre class="idl extract">interface <dfn title="">Example</dfn> {
2322   // this is an IDL definition
2323 };</pre>
2324
2325   <dl class=domintro><dt><var title="">variable</var> = <var title="">object</var> . <code title="">method</code>( [ <var title="">optionalArgument</var> ] )</dt>
2326
2327    <dd>
2328
2329     <p>This is a note to authors describing the usage of an interface.</p>
2330
2331    </dd>
2332
2333   </dl><pre class=css>/* this is a CSS fragment */</pre>
2334
2335   <p>The defining instance of a term is marked up like <dfn id=x-this title=x-this>this</dfn>. Uses of that term are marked up like
2336   <a href=#x-this title=x-this>this</a> or like <i title=x-this><a href=#x-this>this</a></i>.</p>
2337
2338   <p>The defining instance of an element, attribute, or API is marked
2339   up like <dfn id=x-that title=x-that><code>this</code></dfn>. References to
2340   that element, attribute, or API are marked up like <code title=x-that><a href=#x-that>this</a></code>.</p>
2341
2342   <p>Other code fragments are marked up <code title="">like
2343   this</code>.</p>
2344
2345   <p>Variables are marked up like <var title="">this</var>.</p>
2346
2347   <p class=impl>This is an implementation requirement.</p>
2348
2349
2350
2351   <h3 id=a-quick-introduction-to-html><span class=secno>1.10 </span>A quick introduction to HTML</h3>
2352
2353   <p><i>This section is non-normative.</i></p>
2354
2355   <p>A basic HTML document looks like this:</p>
2356
2357   <pre id=intro-early-example>&lt;!DOCTYPE html&gt;
2358 &lt;html&gt;
2359  &lt;head&gt;
2360   &lt;title&gt;Sample page&lt;/title&gt;
2361  &lt;/head&gt;
2362  &lt;body&gt;
2363   &lt;h1&gt;Sample page&lt;/h1&gt;
2364   &lt;p&gt;This is a &lt;a href="demo.html"&gt;simple&lt;/a&gt; sample.&lt;/p&gt;
2365   &lt;!-- this is a comment --&gt;
2366  &lt;/body&gt;
2367 &lt;/html&gt;</pre>
2368
2369   <p>HTML documents consist of a tree of elements and text. Each
2370   element is denoted in the source by a <a href=#syntax-start-tag title=syntax-start-tag>start tag</a>, such as "<code title="">&lt;body&gt;</code>", and an <a href=#syntax-end-tag title=syntax-end-tag>end
2371   tag</a>, such as "<code title="">&lt;/body&gt;</code>". (Certain
2372   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
2373   tags.)</p>
2374
2375   <p>Tags have to be nested such that elements are all completely
2376   within each other, without overlapping:</p>
2377
2378   <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>
2379   <pre>&lt;p&gt;This &lt;em&gt;is &lt;strong&gt;correct&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;</pre>
2380
2381   <p>This specification defines a set of elements that can be used in
2382   HTML, along with rules about the ways in which the elements can be
2383   nested.</p>
2384
2385   <p>Elements can have attributes, which control how the elements
2386   work. In the example below, there is a <a href=#hyperlink>hyperlink</a>,
2387   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>
2388
2389   <pre>&lt;a href="demo.html"&gt;simple&lt;/a&gt;</pre>
2390
2391   <p><a href=#syntax-attributes title=syntax-attributes>Attributes</a> are placed
2392   inside the start tag, and consist 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. 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>
2393   <code title="">=</code> <code title="">&lt;</code> or <code title="">&gt;</code>. Otherwise, it has to be quoted using either
2394   single or double quotes. The value, along with the "<code title="">=</code>" character, can be omitted altogether if the value
2395   is the empty string.</p>
2396
2397   <pre>&lt;!-- empty attributes --&gt;
2398 &lt;input name=address disabled&gt;
2399 &lt;input name=address disabled=""&gt;
2400
2401 &lt;!-- attributes with a value --&gt;
2402 &lt;input name=address maxlength=200&gt;
2403 &lt;input name=address maxlength='200'&gt;
2404 &lt;input name=address maxlength="200"&gt;</pre>
2405
2406   <p>HTML user agents (e.g. Web browsers) then <i>parse</i> this
2407   markup, turning it into a DOM (Document Object Model) tree. A DOM
2408   tree is an in-memory representation of a document.</p>
2409
2410   <p>DOM trees contain several kinds of nodes, in particular a DOCTYPE
2411   node, elements, text nodes, and comment nodes.</p>
2412
2413   <p>The <a href=#intro-early-example>markup snippet at the top of
2414   this section</a> would be turned into the following DOM tree:</p>
2415
2416   <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 </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
2417   <code><a href=#the-html-element>html</a></code> element, which is the element always found at the
2418   root of HTML documents. It contains two elements, <code><a href=#the-head-element>head</a></code>
2419   and <code><a href=#the-body-element>body</a></code>, as well as a text node between them.</p>
2420
2421   <p>There are many more text nodes in the DOM tree than one would
2422   initially expect, because the source contains a number of spaces
2423   (represented here by "&#9251;") and line breaks ("&#9166;") that
2424   all end up as text nodes in the DOM. However, for historical reasons
2425   not all of the spaces and line breaks in the original markup appear
2426   in the DOM. In particular, all the whitespace before
2427   <code><a href=#the-head-element>head</a></code> start tag ends up being dropped silently, and all
2428   the whitespace after the <code><a href=#the-body-element>body</a></code> end tag ends up placed at
2429   the end of the <code><a href=#the-body-element>body</a></code>.</p>
2430
2431   <p>The <code><a href=#the-head-element>head</a></code> element contains a <code><a href=#the-title-element>title</a></code>
2432   element, which itself contains a text node with the text "Sample
2433   page". Similarly, the <code><a href=#the-body-element>body</a></code> element contains an
2434   <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
2435   comment.</p>
2436
2437   <hr><p>This DOM tree can be manipulated from scripts in the
2438   page. Scripts (typically in JavaScript) are small programs that can
2439   be embedded using the <code><a href=#the-script-element>script</a></code> element or using
2440   <a href=#event-handler-content-attributes>event handler content attributes</a>. For example, here is
2441   a form with a script that sets the value of the form's
2442   <code><a href=#the-output-element>output</a></code> element to say "Hello World":</p>
2443
2444   <pre>&lt;<a href=#the-form-element>form</a> <a href=#attr-form-name title=attr-form-name>name</a>="main"&gt;
2445  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;
2446  &lt;<a href=#the-script-element>script</a>&gt;
2447   <a href=#htmldocument title=HTMLDocument>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';
2448  &lt;/script&gt;
2449 &lt;/form&gt;</pre>
2450
2451   <p>Each element in the DOM tree is represented by an object, and
2452   these objects have APIs so that they can be manipulated. For
2453   instance, a link (e.g. the <code><a href=#the-a-element>a</a></code> element in the tree above)
2454   can have its "<code title=attr-hyperlink-href><a href=#attr-hyperlink-href>href</a></code>"
2455   attribute changed in several ways:</p>
2456
2457   <pre>var a = <a href=#htmldocument title=HTMLDocument>document</a>.<a href=#dom-document-links title=dom-document-links>links</a>[0]; // obtain the first link in the document
2458 a.<a href=#dom-a-href title=dom-a-href>href</a> = 'sample.html'; // change the destination URL of the link
2459 a.<a href=#dom-uda-protocol title=dom-uda-protocol>protocol</a> = 'https'; // change just the scheme part of the URL
2460 a.setAttribute('href', 'http://example.com/'); // change the content attribute directly</pre>
2461
2462   <p>Since DOM trees are used as the way to represent HTML documents
2463   when they are processed and presented by implementations (especially
2464   interactive implementations like Web browsers), this specification
2465   is mostly phrased in terms of DOM trees, instead of the markup
2466   described above.</p>
2467
2468   <hr><p>HTML documents represent a media-independent description of
2469   interactive content. HTML documents might be rendered to a screen,
2470   or through a speech synthesizer, or on a braille display. To
2471   influence exactly how such rendering takes place, authors can use a
2472   styling language such as CSS.</p>
2473
2474   <p>In the following example, the page has been made yellow-on-blue
2475   using CSS.</p>
2476
2477   <pre>&lt;!DOCTYPE html&gt;
2478 &lt;html&gt;
2479  &lt;head&gt;
2480   &lt;title&gt;Sample styled page&lt;/title&gt;
2481   &lt;style&gt;
2482    body { background: navy; color: yellow; }
2483   &lt;/style&gt;
2484  &lt;/head&gt;
2485  &lt;body&gt;
2486   &lt;h1&gt;Sample styled page&lt;/h1&gt;
2487   &lt;p&gt;This page is just a demo.&lt;/p&gt;
2488  &lt;/body&gt;
2489 &lt;/html&gt;</pre>
2490
2491   <p>For more details on how to use HTML, authors are encouraged to
2492   consult tutorials and guides. Some of the examples included in this
2493   specification might also be of use, but the novice author is
2494   cautioned that this specification, by necessity, defines the
2495   language with a level of detail that might be difficult to
2496   understand at first.</p>
2497
2498
2499   <h4 id=writing-secure-applications-with-html><span class=secno>1.10.1 </span>Writing secure applications with HTML</h4>
2500
2501   <p><i>This section is non-normative.</i></p>
2502
2503   <p>When HTML is used to create interactive sites, care needs to be
2504   taken to avoid introducing vulnerabilities through which attackers
2505   can compromise the integrity of the site itself or of the site's
2506   users.</p>
2507
2508   <p>A comprehensive study of this matter is beyond the scope of this
2509   document, and authors are strongly encouraged to study the matter in
2510   more detail. However, this section attempts to provide a quick
2511   introduction to some common pitfalls in HTML application
2512   development.</p>
2513
2514   <p>The security model of the Web is based on the concept of
2515   "origins", and correspondingly many of the potential attacks on the
2516   Web involve cross-origin actions. <a href=#refsORIGIN>[ORIGIN]</a></p>
2517
2518   <dl><dt>Not validating user input</dt>
2519    <dt>Cross-site scripting (XSS)</dt>
2520    <dt>SQL injection</dt>
2521
2522    <dd>
2523
2524     <p>When accepting untrusted input, e.g. user-generated content
2525     such as text comments, values in URL parameters, messages from
2526     third-party sites, etc, it is imperative that the data be
2527     validated before use, and properly escaped when displayed. Failing
2528     to do this can allow a hostile user to perform a variety of
2529     attacks, ranging from the potentially benign, such as providing
2530     bogus user information like a negative age, to the serious, such
2531     as running scripts every time a user looks at a page that includes
2532     the information, potentially propagating the attack in the
2533     process, to the catastrophic, such as deleting all data in the
2534     server.</p>
2535
2536     <p>When writing filters to validate user input, it is imperative
2537     that filters always be whitelist-based, allowing known-safe
2538     constructs and disallowing all other input. Blacklist-based
2539     filters that disallow known-bad inputs and allow everything else
2540     are not secure, as not everything that is bad is yet known (for
2541     example, because it might be invented in the future).</p>
2542
2543     <div class=example>
2544
2545      <p>For example, suppose a page looked at its URL's query string
2546      to determine what to display, and the site then redirected the
2547      user to that page to display a message, as in:</p>
2548
2549      <pre>&lt;ul&gt;
2550  &lt;li&gt;&lt;a href="message.cgi?say=Hello"&gt;Say Hello&lt;/a&gt;
2551  &lt;li&gt;&lt;a href="message.cgi?say=Welcome"&gt;Say Welcome&lt;/a&gt;
2552  &lt;li&gt;&lt;a href="message.cgi?say=Kittens"&gt;Say Kittens&lt;/a&gt;
2553 &lt;/ul&gt;</pre>
2554
2555      <p>If the message was just displayed to the user without
2556      escaping, a hostile attacker could then craft a URL that
2557      contained a script element:</p>
2558
2559      <pre>http://example.com/message.cgi?say=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E</pre>
2560
2561      <p>If the attacker then convinced a victim user to visit this
2562      page, a script of the attacker's choosing would run on the page.
2563      Such a script could do any number of hostile actions, limited
2564      only by what the site offers: if the site is an e-commerce shop,
2565      for instance, such a script could cause the user to unknowingly
2566      make arbitrarily many unwanted purchases.</p>
2567
2568      <p>This is called a cross-site scripting attack.</p>
2569
2570     </div>
2571
2572    </dd>
2573
2574
2575    <dt>Cross-site request forgery (CSRF)</dt>
2576
2577    <dd>
2578
2579     <p>If a site allows a user to make form submissions with
2580     user-specific side-effects, for example posting messages on a
2581     forum under the user's name, making purchases, or applying for a
2582     passport, it is important to verify that the request was made by
2583     the user intentionally, rather than by another site tricking the
2584     user into making the request unknowingly.</p>
2585
2586     <p>This problem exists because HTML forms can be submitted to
2587     other origins.</p>
2588
2589     <p>Sites can prevent such attacks by populating forms with
2590     user-specific hidden tokens, or by checking <code title=http-origin>Origin</code> headers on all requests.</p>
2591
2592    </dd>
2593
2594
2595
2596    <dt>Clickjacking</dt>
2597
2598    <dd>
2599
2600     <p>A page that provides users with an interface to perform actions
2601     that the user might not wish to perform needs to be designed so as
2602     to avoid the possibility that users can be tricked into activating
2603     the interface.</p>
2604
2605     <p>One way that a user could be so tricked is if a hostile site
2606     places the victim site in a small <code><a href=#the-iframe-element>iframe</a></code> and then
2607     convinces the user to click, for instance by having the user play
2608     a reaction game. Once the user is playing the game, the hostile
2609     site can quickly position the iframe under the mouse cursor just
2610     as the user is about to click, thus tricking the user into
2611     clicking the victim site's interface.</p>
2612
2613     <p>To avoid this, sites that do not expect to be used in frames
2614     are encouraged to only enable their interface if they detect that
2615     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> attribute).</p>
2616
2617    </dd>
2618
2619   </dl><h4 id=common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.10.2 </span>Common pitfalls to avoid when using the scripting APIs</h4>
2620
2621   <p><i>This section is non-normative.</i></p>
2622
2623   <p>Scripts in HTML have "run-to-completion" semantics, meaning that
2624   the browser will generally run the script uninterrupted before doing
2625   anything else, such as firing further events or continuing to parse
2626   the document.</p>
2627
2628   <p>On the other hand, parsing of HTML files happens asynchronously
2629   and incrementally, meaning that the parser can pause at any point to
2630   let scripts run. This is generally a good thing, but it does mean
2631   that authors need to be careful to avoid hooking event handlers
2632   after the events could have possibly fired.</p>
2633
2634   <p>There are two techniques for doing this reliably: use <a href=#event-handler-content-attributes>event
2635   handler content attributes</a>, or create the element and add the
2636   event handlers in the same script. The latter is safe because, as
2637   mentioned earlier, scripts are run to completion before further
2638   events can fire.</p>
2639
2640   <div class=example>
2641
2642    <p>One way this could manifest itself is with <code><a href=#the-img-element>img</a></code>
2643    elements and the <code title=event-load>load</code> event. The
2644    event could fire as soon as the element has been parsed, especially
2645    if the image has already been cached (which is common).</p>
2646
2647    <p>Here, the author uses the <code title=handler-onload><a href=#handler-onload>onload</a></code> handler on an <code><a href=#the-img-element>img</a></code>
2648    element to catch the <code title=event-load>load</code> event:</p>
2649
2650    <pre>&lt;img src="games.png" alt="Games" onload="gamesLogoHasLoaded(event)"&gt;</pre>
2651
2652    <p>If the element is being added by script, then so long as the
2653    event handlers are added in the same script, the event will still
2654    not be missed:</p>
2655
2656    <pre>&lt;script&gt;
2657  var img = new Image();
2658  img.src = 'games.png';
2659  img.alt = 'Games';
2660  img.onload = gamesLogoHasLoaded;
2661  // img.addEventListener('load', gamesLogoHasLoaded, false); // would work also
2662 &lt;/script&gt;</pre>
2663
2664    <p>However, if the author first created the <code><a href=#the-img-element>img</a></code>
2665    element and then in a separate script added the event listeners,
2666    there's a chance that the <code title=event-load>load</code>
2667    event would be fired in between, leading it to be missed:</p>
2668
2669    <pre class=bad>&lt;!-- Do not use this style, it has a race condition! --&gt;
2670  &lt;img id="games" src="games.png" alt="Games"&gt;
2671  &lt;!-- the 'load' event might fire here while the parser is taking a
2672       break, in which case you will not see it! --&gt;
2673  &lt;script&gt;
2674   var img = document.getElementById('games');
2675   img.onload = gamesLogoHasLoaded; // might never fire!
2676  &lt;/script&gt;</pre>
2677
2678   </div>
2679
2680
2681
2682   <h3 id=conformance-requirements-for-authors><span class=secno>1.11 </span>Conformance requirements for authors</h3>
2683
2684   <p><i>This section is non-normative.</i></p>
2685
2686   <p>Unlike previous versions of the HTML specification, this
2687   specification defines in some detail the required processing for
2688   invalid documents as well as valid documents.</p> <!-- This has led
2689   to some questioning the purpose of conformance criteria: if there is
2690   no ambiguity in how something will be processed, why disallow it? -->
2691
2692   <p>However, even though the processing of invalid content is in most
2693   cases well-defined, conformance requirements for documents are still
2694   important: in practice, interoperability (the situation in which all
2695   implementations process particular content in a reliable and
2696   identical or equivalent way) is not the only goal of document
2697   conformance requirements. This section details some of the more
2698   common reasons for still distinguishing between a conforming
2699   document and one with errors.</p>
2700
2701
2702   <h4 id=presentational-markup><span class=secno>1.11.1 </span>Presentational markup</h4>
2703
2704   <p><i>This section is non-normative.</i></p>
2705
2706   <p>The majority of presentational features from previous versions of
2707   HTML are no longer allowed. Presentational markup in general has
2708   been found to have a number of problems:</p>
2709
2710   <dl><dt>The use of presentational elements leads to poorer accessibility</dt>
2711
2712    <dd>
2713
2714     <p>While it is possible to use presentational markup in a way that
2715     provides users of assistive technologies (ATs) with an acceptable
2716     experience (e.g. using ARIA), doing so is significantly more
2717     difficult than doing so when using semantically-appropriate
2718     markup. Furthermore, even using such techniques doesn't help make
2719     pages accessible for non-AT non-graphical users, such as users of
2720     text-mode browsers.</p>
2721
2722     <p>Using media-independent markup, on the other hand, provides an
2723     easy way for documents to be authored in such a way that they work
2724     for more users (e.g. text browsers).</p>
2725
2726    </dd>
2727
2728
2729    <dt>Higher cost of maintenance</dt>
2730
2731    <dd>
2732
2733     <p>It is significantly easier to maintain a site written in such a
2734     way that the markup is style-independent. For example, changing
2735     the color of a site that uses <code>&lt;font&nbsp;color=""&gt;</code>
2736     throughout requires changes across the entire site, whereas a
2737     similar change to a site based on CSS can be done by changing a
2738     single file.</p>
2739
2740    </dd>
2741
2742
2743    <dt>Larger document sizes</dt>
2744
2745    <dd>
2746
2747     <p>Presentational markup tends to be much more redundant, and thus
2748     results in larger document sizes.</p>
2749
2750    </dd>
2751
2752   </dl><p>For those reasons, presentational markup has been removed from
2753   HTML in this version. This change should not come as a surprise;
2754   HTML4 deprecated presentational markup many years ago and provided a
2755   mode (HTML4 Transitional) to help authors move away from
2756   presentational markup; later, XHTML 1.1 went further and obsoleted
2757   those features altogether.</p>
2758
2759   <p>The only remaining presentational markup features in HTML are the
2760   <code title=attr-style><a href=#the-style-attribute>style</a></code> attribute and the
2761   <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
2762   production environments, but it can be useful for rapid prototyping
2763   (where its rules can be directly moved into a separate style sheet
2764   later) and for providing specific styles in unusual cases where a
2765   separate style sheet would be inconvenient. Similarly, the
2766   <code><a href=#the-style-element>style</a></code> element can be useful in syndication or for
2767   page-specific styles, but in general an external style sheet is
2768   likely to be more convenient when the styles apply to multiple
2769   pages.</p>
2770
2771   <p>It is also worth noting that some elements that were previously
2772   presentational have been redefined in this specification to be
2773   media-independent: <code><a href=#the-b-element>b</a></code>, <code><a href=#the-i-element>i</a></code>, <code><a href=#the-hr-element>hr</a></code>,
2774   <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>
2775
2776
2777   <h4 id=syntax-errors><span class=secno>1.11.2 </span>Syntax errors</h4>
2778
2779   <p><i>This section is non-normative.</i></p>
2780
2781   <p>The syntax of HTML is constrained to avoid a wide variety of
2782   problems.</p>
2783
2784   <dl><dt>Unintuitive error-handling behavior</dt>
2785
2786    <dd>
2787
2788     <p>Certain invalid syntax constructs, when parsed, result in DOM
2789     trees that are highly unintuitive.</p>
2790
2791     <div class=example>
2792
2793      <p>For example, the following markup fragment results in a DOM
2794      with an <code><a href=#the-hr-element>hr</a></code> element that is an <em>earlier</em>
2795      sibling of the corresponding <code><a href=#the-table-element>table</a></code> element:</p>
2796
2797      <pre class=bad>&lt;table&gt;&lt;hr&gt;...</pre>
2798
2799     </div>
2800
2801    </dd>
2802
2803
2804    <dt>Errors with optional error recovery</dt>
2805
2806    <dd>
2807
2808     <p>To allow user agents to be used in controlled environments
2809     without having to implement the more bizarre and convoluted error
2810     handling rules, user agents are permitted to fail whenever
2811     encountering a <a href=#parse-error>parse error</a>.</p>
2812
2813    </dd>
2814
2815
2816    <dt>Errors where the error-handling behavior is not compatible with streaming user agents</dt>
2817
2818    <dd>
2819
2820     <p>Some error-handling behavior, such as the behavior for the
2821     <code title="">&lt;table&gt;&lt;hr&gt;...</code> example mentioned
2822     above, are incompatible with streaming user agents (user agents
2823     that process HTML files in one pass, without storing state). To
2824     avoid interoperability problems with such user agents, any syntax
2825     resulting in such behavior is considered invalid.</p>
2826
2827    </dd>
2828
2829
2830    <dt>Errors that can result in infoset coercion</dt>
2831
2832    <dd>
2833
2834     <p>When a user agent based on XML is connected to an HTML parser,
2835     it is possible that certain invariants that XML enforces, such as
2836     comments never containing two consecutive hyphens, will be
2837     violated by an HTML file. Handling this can require that the
2838     parser coerce the HTML DOM into an XML-compatible infoset. Most
2839     syntax constructs that require such handling are considered
2840     invalid.</p>
2841
2842    </dd>
2843
2844
2845    <dt>Errors that result in disproportionally poor performance</dt>
2846
2847    <dd>
2848
2849     <p>Certain syntax constructs can result in disproportionally poor
2850     performance. To discourage the use of such constructs, they are
2851     typically made non-conforming.</p>
2852
2853     <div class=example>
2854
2855      <p>For example, the following markup results in poor performance,
2856      since all the unclosed <code><a href=#the-i-element>i</a></code> elements have to be
2857      reconstructed in each paragraph, resulting in progressively more
2858      elements in each paragraph:</p>
2859
2860      <pre class=bad>&lt;p&gt;&lt;i&gt;He dreamt.
2861 &lt;p&gt;&lt;i&gt;He dreamt that he ate breakfast.
2862 &lt;p&gt;&lt;i&gt;Then lunch.
2863 &lt;p&gt;&lt;i&gt;And finally dinner.</pre>
2864
2865      <p>The resulting DOM for this fragment would be:</p>
2866
2867      <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>
2868
2869    </dd>
2870
2871
2872    <dt>Errors involving fragile syntax constructs</dt>
2873
2874    <dd>
2875
2876     <p>There are syntax constructs that, for historical reasons, are
2877     relatively fragile. To help reduce the number of users who
2878     accidentally run into such problems, they are made
2879     non-conforming.</p>
2880