337238bb6cf4515706cade28c3318123dba9a6ee
[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
2881     <div class=example>
2882
2883      <p>For example, the parsing of certain named character references
2884      in attributes happens even with the closing semicolon being
2885      omitted. It is safe to include an ampersand followed by letters
2886      that do not form a named character reference, but if the letters
2887      are changed to a string that <em>does</em> form a named character
2888      reference, they will be interpreted as that character instead.</p>
2889
2890      <p>In this fragment, the attribute's value is "<code title="">?bill&amp;ted</code>":</p>
2891
2892      <pre class=bad>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt;</pre>
2893
2894      <p>In the following fragment, however, the attribute's value is
2895      actually "<code title="">?art&copy;</code>", <em>not</em> the
2896      intended "<code title="">?art&amp;copy</code>", because even
2897      without the final semicolon, "<code title="">&amp;copy</code>" is
2898      handled the same as "<code title="">&amp;copy;</code>" and thus
2899      gets interpreted as "<code title="">&copy;</code>":</p>
2900
2901      <pre class=bad>&lt;a href="?art&amp;copy"&gt;Art and Copy&lt;/a&gt;</pre>
2902
2903      <p>To avoid this problem, all named character references are
2904      required to end with a semicolon, and uses of named character
2905      references without a semicolon are flagged as errors.</p>
2906
2907      <p>Thus, the correct way to express the above cases is as
2908      follows:</p>
2909
2910      <pre>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt; &lt;!-- &amp;ted is ok, since it's not a named character reference --&gt;</pre>
2911      <pre>&lt;a href="?art&amp;amp;copy"&gt;Art and Copy&lt;/a&gt; &lt;!-- the &amp; has to be escaped, since &amp;copy <em>is</em> a named character reference --&gt;</pre>
2912
2913     </div>
2914
2915    </dd>
2916
2917
2918    <dt>Errors involving known interoperability problems in legacy user agents</dt>
2919
2920    <dd>
2921
2922     <p>Certain syntax constructs are known to cause especially subtle
2923     or serious problems in legacy user agents, and are therefore
2924     marked as non-conforming to help authors avoid them.</p>
2925
2926     <div class=example>
2927
2928      <p>For example, this is why the U+0060 GRAVE ACCENT character (`)
2929      is not allowed in unquoted attributes. In certain legacy user
2930      agents, <!-- namely IE --> it is sometimes treated as a quote
2931      character.</p>
2932
2933     </div>
2934
2935     <div class=example>
2936
2937      <p>Another example of this is the DOCTYPE, which is required to
2938      trigger <a href=#no-quirks-mode>no-quirks mode</a>, because the behavior of
2939      legacy user agents in <a href=#quirks-mode>quirks mode</a> is often largely
2940      undocumented.</p>
2941
2942     </div>
2943
2944    </dd>
2945
2946
2947    <dt>Errors that risk exposing authors to security attacks</dt>
2948
2949    <dd>
2950
2951     <p>Certain restrictions exist purely to avoid known security
2952     problems.</p>
2953
2954     <div class=example>
2955
2956      <p>For example, the restriction on using UTF-7 exists purely to
2957      avoid authors falling prey to a known cross-site-scripting attack
2958      using UTF-7.</p>
2959
2960     </div>
2961
2962    </dd>
2963
2964
2965    <dt>Cases where the author's intent is unclear</dt>
2966
2967    <dd>
2968
2969     <p>Markup where the author's intent is very unclear is often made
2970     non-conforming. Correcting these errors early makes later
2971     maintenance easier.</p>
2972
2973     <div class=example>
2974
2975      <p>For example, it is unclear whether the author intended the
2976      following to be an <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code> heading or an <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h2</a></code>
2977      heading:</p>
2978
2979      <pre class=bad>&lt;h1&gt;Contact details&lt;/h2&gt;</pre>
2980
2981     </div>
2982
2983    </dd>
2984
2985
2986    <dt>Cases that are likely to be typos</dt>
2987
2988    <dd>
2989
2990     <p>When a user makes a simple typo, it is helpful if the error can
2991     be caught early, as this can save the author a lot of debugging
2992     time. This specification therefore usually considers it an error
2993     to use element names, attribute names, and so forth, that do not
2994     match the names defined in this specification.</p>
2995
2996     <div class=example>
2997
2998      <p>For example, if the author typed <code>&lt;capton&gt;</code>
2999      instead of <code>&lt;caption&gt;</code>, this would be flagged as an
3000      error and the author could correct the typo immediately.</p>
3001
3002     </div>
3003
3004    </dd>
3005
3006
3007    <dt>Errors that could interfere with new syntax in the future</dt>
3008
3009    <dd>
3010
3011     <p>In order to allow the language syntax to be extended in the
3012     future, certain otherwise harmless features are disallowed.</p>
3013
3014     <div class=example>
3015
3016      <p>For example, "attributes" in end tags are ignored currently,
3017      but they are invalid, in case a future change to the language
3018      makes use of that syntax feature without conflicting with
3019      already-deployed (and valid!) content.</p>
3020
3021     </div>
3022
3023    </dd>
3024
3025
3026   </dl><p>Some authors find it helpful to be in the practice of always
3027   quoting all attributes and always including all optional tags,
3028   preferring the consistency derived from such custom over the minor
3029   benefits of terseness afforded by making use of the flexibility of
3030   the HTML syntax. To aid such authors, conformance checkers can
3031   provide modes of operation wherein such conventions are
3032   enforced.</p>
3033
3034
3035
3036   <h4 id=restrictions-on-content-models-and-on-attribute-values><span class=secno>1.11.3 </span>Restrictions on content models and on attribute values</h4>
3037
3038   <p><i>This section is non-normative.</i></p>
3039
3040   <p>Beyond the syntax of the language, this specification also places
3041   restrictions on how elements and attributes can be specified. These
3042   restrictions are present for similar reasons:</p>
3043
3044   <dl><dt>Errors involving content with dubious semantics</dt>
3045
3046    <dd>
3047
3048     <p>To avoid misuse of elements with defined meanings, content
3049     models are defined that restrict how elements can be nested when
3050     such nestings would be of dubious value.</p>
3051
3052     <p class=example>For example, this specification disallows
3053     nesting a <code><a href=#the-section-element>section</a></code> element inside a <code><a href=#the-kbd-element>kbd</a></code>
3054     element, since it is highly unlikely for an author to indicate
3055     that an entire section should be keyed in.</p>
3056
3057    </dd>
3058
3059
3060    <dt>Errors that involve a conflict in expressed semantics</dt>
3061
3062    <dd>
3063
3064     <p>Similarly, to draw the author's attention to mistakes in the
3065     use of elements, clear contradictions in the semantics expressed
3066     are also considered conformance errors.</p>
3067
3068     <div class=example>
3069
3070      <p>In the fragments below, for example, the semantics are
3071      nonsensical: a separator cannot simultaneously be a cell, nor can
3072      a radio button be a progress bar.</p>
3073
3074      <pre class=bad>&lt;hr role="cell"&gt;</pre>
3075      <pre class=bad>&lt;input type=radio role=progressbar&gt;</pre>
3076
3077     </div>
3078
3079     <p class=example>Another example is the restrictions on the
3080     content models of the <code><a href=#the-ul-element>ul</a></code> element, which only allows
3081     <code><a href=#the-li-element>li</a></code> element children. Lists by definition consist just
3082     of zero or more list items, so if a <code><a href=#the-ul-element>ul</a></code> element
3083     contains something other than an <code><a href=#the-li-element>li</a></code> element, it's not
3084     clear what was meant.</p>
3085
3086    </dd>
3087
3088
3089    <dt>Cases where the default styles are likely to lead to confusion</dt>
3090
3091    <dd>
3092
3093     <p>Certain elements have default styles or behaviors that make
3094     certain combinations likely to lead to confusion. Where these have
3095     equivalent alternatives without this problem, the confusing
3096     combinations are disallowed.</p>
3097
3098     <p class=example>For example, <code><a href=#the-div-element>div</a></code> elements are
3099     rendered as block boxes, and <code><a href=#the-span-element>span</a></code> elements as inline
3100     boxes. Putting a block box in an inline box is unnecessarily
3101     confusing; since either nesting just <code><a href=#the-div-element>div</a></code> elements, or
3102     nesting just <code><a href=#the-span-element>span</a></code> elements, or nesting
3103     <code><a href=#the-span-element>span</a></code> elements inside <code><a href=#the-div-element>div</a></code> elements all
3104     serve the same purpose as nesting a <code><a href=#the-div-element>div</a></code> element in a
3105     <code><a href=#the-span-element>span</a></code> element, but only the latter involves a block
3106     box in an inline box, the latter combination is disallowed.</p>
3107
3108     <p class=example>Another example would be the way
3109     <a href=#interactive-content>interactive content</a> cannot be nested. For example, a
3110     <code><a href=#the-button-element>button</a></code> element cannot contain a <code><a href=#the-textarea-element>textarea</a></code>
3111     element. This is because the default behavior of such nesting
3112     interactive elements would be highly confusing to users. Instead
3113     of nesting these elements, they can be placed side by side.</p>
3114
3115    </dd>
3116
3117
3118    <dt>Errors that indicate a likely misunderstanding of the specification</dt>
3119
3120    <dd>
3121
3122     <p>Sometimes, something is disallowed because allowing it would
3123     likely cause author confusion.</p>
3124
3125     <p class=example>For example, setting the <code title=attr-fe-disabled><a href=#attr-fe-disabled>disabled</a></code> attribute to the value
3126     "<code title="">false</code>" is disallowed, because despite the
3127     appearance of meaning that the element is enabled, it in fact
3128     means that the element is <em>disabled</em> (what matters for
3129     implementations is the presence of the attribute, not its
3130     value).</p>
3131
3132    </dd>
3133
3134
3135    <dt>Errors involving limits that have been imposed merely to simplify the language</dt>
3136
3137    <dd>
3138
3139     <p>Some conformance errors simplify the language that authors need
3140     to learn.</p>
3141
3142     <p class=example>For example, the <code><a href=#the-area-element>area</a></code> element's
3143     <code title=attr-area-shape><a href=#attr-area-shape>shape</a></code> attribute, despite
3144     accepting both <code title=attr-area-shape-keyword-circ><a href=#attr-area-shape-keyword-circ>circ</a></code> and <code title=attr-area-shape-keyword-circle><a href=#attr-area-shape-keyword-circle>circle</a></code> values in
3145     practice as synonyms, disallows the use of the <code title=attr-area-shape-keyword-circ><a href=#attr-area-shape-keyword-circ>circ</a></code> value, so as to
3146     simplify tutorials and other learning aids. There would be no
3147     benefit to allowing both, but it would cause extra confusion when
3148     teaching the language.</p>
3149
3150    </dd>
3151
3152
3153    <dt>Errors that involve peculiarities of the parser</dt>
3154
3155    <dd>
3156
3157     <p>Certain elements are parsed in somewhat eccentric ways
3158     (typically for historical reasons), and their content model
3159     restrictions are intended to avoid exposing the author to these
3160     issues.</p>
3161
3162     <div class=example>
3163
3164      <p>For example, a <code><a href=#the-form-element>form</a></code> element isn't allowed inside
3165      <a href=#phrasing-content>phrasing content</a>, because when parsed as HTML, a
3166      <code><a href=#the-form-element>form</a></code> element's start tag will imply a <code><a href=#the-p-element>p</a></code>
3167      element's end tag. Thus, the following markup results in two
3168      <a href=#paragraph title=paragraph>paragraphs</a>, not one:</p>
3169
3170      <pre>&lt;p&gt;Welcome. &lt;form&gt;&lt;label&gt;Name:&lt;/label&gt; &lt;input&gt;&lt;/form&gt;</pre>
3171
3172      <p>It is parsed exactly like the following:</p>
3173
3174      <pre>&lt;p&gt;Welcome. &lt;/p&gt;&lt;form&gt;&lt;label&gt;Name:&lt;/label&gt; &lt;input&gt;&lt;/form&gt;</pre>
3175
3176     </div>
3177
3178    </dd>
3179
3180
3181    <dt>Errors that would likely result in scripts failing in hard-to-debug ways</dt>
3182
3183    <dd>
3184
3185     <p>Some errors are intended to help prevent script problems that
3186     would be hard to debug.</p>
3187
3188     <p class=example>This is why, for instance, it is non-conforming
3189     to have two <code title=attr-id><a href=#the-id-attribute>id</a></code> attributes with the
3190     same value. Duplicate IDs lead to the wrong element being
3191     selected, with sometimes disastrous effects whose cause is hard to
3192     determine.</p>
3193
3194    </dd>
3195
3196
3197    <dt>Errors that waste authoring time</dt>
3198
3199    <dd>
3200
3201     <p>Some constructs are disallowed because historically they have
3202     been the cause of a lot of wasted authoring time, and by
3203     encouraging authors to avoid making them, authors can save time in
3204     future efforts.</p>
3205
3206     <p class=example>For example, a <code><a href=#the-script-element>script</a></code> element's
3207     <code title=attr-script-src><a href=#attr-script-src>src</a></code> attribute causes the
3208     element's contents to be ignored. However, this isn't obvious,
3209     especially if the element's contents appear to be executable
3210     script &mdash; which can lead to authors spending a lot of time
3211     trying to debug the inline script without realizing that it is not
3212     executing. To reduce this problem, this specification makes it
3213     non-conforming to have executable script in a <code><a href=#the-script-element>script</a></code>
3214     element when the <code title=attr-script-src><a href=#attr-script-src>src</a></code>
3215     attribute is present. This means that authors who are validating
3216     their documents are less likely to waste time with this kind of
3217     mistake.</p>
3218
3219    </dd>
3220
3221
3222    <dt>Errors that involve areas that affect authors migrating to and from XHTML</dt>
3223
3224    <dd>
3225
3226     <p>Some authors like to write files that can be interpreted as
3227     both XML and HTML with similar results. Though this practice is
3228     discouraged in general due to the myriad of subtle complications
3229     involved (especially when involving scripting, styling, or any
3230     kind of automated serialization), this specification has a few
3231     restrictions intended to at least somewhat mitigate the
3232     difficulties. This makes it easier for authors to use this as a
3233     transitionary step when migrating between HTML and XHTML.</p>
3234
3235     <p class=example>For example, there are somewhat complicated
3236     rules surrounding the <code title=attr-lang><a href=#attr-lang>lang</a></code> and
3237     <code title=attr-xml-lang><a href=#attr-xml-lang>xml:lang</a></code> attributes intended
3238     to keep the two synchronized.</p>
3239
3240     <p class=example>Another example would be the restrictions on
3241     the values of <code title="">xmlns</code> attributes in the HTML
3242     serialization, which are intended to ensure that elements in
3243     conforming documents end up in the same namespaces whether
3244     processed as HTML or XML.</p>
3245
3246    </dd>
3247
3248
3249    <dt>Errors that involve areas reserved for future expansion</dt>
3250
3251    <dd>
3252
3253     <p>As with the restrictions on the syntax intended to allow for
3254     new syntax in future revisions of the language, some restrictions
3255     on the content models of elements and values of attributes are
3256     intended to allow for future expansion of the HTML vocabulary.</p>
3257
3258     <p class=example>For example, limiting the values of the <code title=attr-hyperlink-target><a href=#attr-hyperlink-target>target</a></code> attribute that start
3259     with an U+005F LOW LINE character (_) to only specific predefined
3260     values allows new predefined values to be introduced at a future
3261     time without conflicting with author-defined values.</p>
3262
3263    </dd>
3264
3265
3266    <dt>Errors that indicate a mis-use of other specifications</dt>
3267
3268    <dd>
3269
3270     <p>Certain restrictions are intended to support the restrictions
3271     made by other specifications.</p>
3272
3273     <p class=example>For example, requiring that attributes that
3274     take media queries use only <em>valid</em> media queries
3275     reinforces the importance of following the conformance rules of
3276     that specification.</p>
3277
3278    </dd>
3279
3280   </dl><h3 id=recommended-reading><span class=secno>1.12 </span>Recommended reading</h3>
3281
3282   <p><i>This section is non-normative.</i></p>
3283
3284   <p>The following documents might be of interest to readers of this
3285   specification.</p>
3286
3287   <dl><dt><cite>Character Model for the World Wide Web 1.0: Fundamentals</cite> <a href=#refsCHARMOD>[CHARMOD]</a></dt>
3288
3289    <dd><blockquote><p>This Architectural Specification provides
3290    authors of specifications, software developers, and content
3291    developers with a common reference for interoperable text
3292    manipulation on the World Wide Web, building on the Universal
3293    Character Set, defined jointly by the Unicode Standard and ISO/IEC
3294    10646. Topics addressed include use of the terms 'character',
3295    'encoding' and 'string', a reference processing model, choice and
3296    identification of character encodings, character escaping, and
3297    string indexing.</blockquote></dd>
3298
3299    <dt><cite>Unicode Security Considerations</cite> <a href=#refsUTR36>[UTR36]</a></dt>
3300
3301    <dd><blockquote><p>Because Unicode contains such a large number of
3302    characters and incorporates the varied writing systems of the
3303    world, incorrect usage can expose programs or systems to possible
3304    security attacks. This is especially important as more and more
3305    products are internationalized. This document describes some of the
3306    security considerations that programmers, system analysts,
3307    standards developers, and users should take into account, and
3308    provides specific recommendations to reduce the risk of
3309    problems.</blockquote></dd>
3310
3311    <dt><cite>Web Content Accessibility Guidelines (WCAG) 2.0</cite> <a href=#refsWCAG>[WCAG]</a></dt>
3312
3313    <dd><blockquote><p>Web Content Accessibility Guidelines (WCAG) 2.0
3314    covers a wide range of recommendations for making Web content more
3315    accessible. Following these guidelines will make content accessible
3316    to a wider range of people with disabilities, including blindness
3317    and low vision, deafness and hearing loss, learning disabilities,
3318    cognitive limitations, limited movement, speech disabilities,
3319    photosensitivity and combinations of these. Following these
3320    guidelines will also often make your Web content more usable to
3321    users in general.</blockquote></dd>
3322
3323    <dt class=impl><cite>Authoring Tool Accessibility Guidelines (ATAG) 2.0</cite> <a href=#refsATAG>[ATAG]</a></dt>
3324
3325    <dd class=impl><blockquote><p>This specification provides
3326    guidelines for designing Web content authoring tools that are more
3327    accessible for people with disabilities. An authoring tool that
3328    conforms to these guidelines will promote accessibility by
3329    providing an accessible user interface to authors with disabilities
3330    as well as by enabling, supporting, and promoting the production of
3331    accessible Web content by all authors.</blockquote></dd>
3332
3333    <dt class=impl><cite>User Agent Accessibility Guidelines (UAAG) 2.0</cite> <a href=#refsUAAG>[UAAG]</a></dt>
3334
3335    <dd class=impl><blockquote><p>This document provides guidelines
3336    for designing user agents that lower barriers to Web accessibility
3337    for people with disabilities. User agents include browsers and
3338    other types of software that retrieve and render Web content. A
3339    user agent that conforms to these guidelines will promote
3340    accessibility through its own user interface and through other
3341    internal facilities, including its ability to communicate with
3342    other technologies (especially assistive
3343    technologies). Furthermore, all users, not just users with
3344    disabilities, should find conforming user agents to be more
3345    usable.</blockquote></dd>
3346
3347    <dt><cite>Polyglot Markup: HTML-Compatible XHTML Documents</cite> <a href=#refsPOLYGLOT>[POLYGLOT]</a></dt>
3348
3349    <dd><blockquote><p>A document that uses polyglot markup is a document