This section only describes the rules for XML
resources. Rules for text/html
resources are
discussed in the section above entitled "The HTML
syntax".
The syntax for using HTML with XML, whether in XHTML documents or embedded in other XML documents, is defined in the XML and Namespaces in XML specifications. [XML] [XMLNS]
This specification does not define any syntax-level requirements beyond those defined for XML proper.
XML documents may contain a DOCTYPE
if desired, but
this is not required to conform to this specification. This
specification does not define a public or system identifier, nor
provide a format DTD.
According to the XML specification, XML processors
are not guaranteed to process the external DTD subset referenced in
the DOCTYPE. This means, for example, that using entity references
for characters in XHTML documents is unsafe if they are defined in
an external file (except for <
, >
, &
, "
and '
).
This section describes the relationship between XML and the DOM, with a particular emphasis on how this interacts with HTML.
An XML parser, for the purposes of this specification,
is a construct that follows the rules given in the XML specification
to map a string of bytes or characters into a Document
object.
An XML parser is either associated with a
Document
object when it is created, or creates one
implicitly.
This Document
must then be populated with DOM nodes
that represent the tree structure of the input passed to the parser,
as defined by the XML specification, the Namespaces in XML
specification, and the DOM Core specification. DOM mutation events
must not fire for the operations that the XML parser
performs on the Document
's tree, but the user agent
must act as if elements and attributes were individually appended
and set respectively so as to trigger rules in this specification
regarding what happens when an element in inserted into a document
or has its attributes set. [XML] [XMLNS] [DOMCORE]
[DOMEVENTS]
Certain algorithms in this specification spoon-feed the parser characters one string at a time. In such cases, the XML parser must act as it would have if faced with a single string consisting of the concatenation of all those characters.
When an XML parser creates a script
element, it must be marked as being "parser-inserted".
If the parser was originally created for the XML fragment
parsing algorithm, then the element must be marked as
"already executed" also. When the element's end tag is
parsed, the user agent must run the script
element. If this causes
there to be a pending external script, then the user
agent must pause until that script has completed
loading, and then execute it.
Since the document.write()
API is not
available for XML documents, much of the complexity in
the HTML parser is not needed in the XML
parser.
When an XML parser reaches the end of its input, it must stop parsing, following the same rules as the HTML parser.
The XML fragment serialization algorithm for a
Document
or Element
node either returns a
fragment of XML that represents that node or raises an
exception.
For Document
s, the algorithm must return a string in
the form of a document
entity, if none of the error cases below apply.
For Element
s, the algorithm must return a string in
the form of an internal general parsed
entity, if none of the error cases below apply.
In both cases, the string returned must be XML namespace-well-formed and must be an isomorphic serialization of all of that node's child nodes, in tree order. User agents may adjust prefixes and namespace declarations in the serialization (and indeed might be forced to do so in some cases to obtain namespace-well-formed XML).
For Element
s, if any of the elements in the
serialization are in no namespace, the default namespace in scope
for those elements must be explicitly declared as the empty
string. (This doesn't
apply in the Document
case.) [XML] [XMLNS]
If any of the following error cases are found in the DOM subtree
being serialized, then the algorithm raises an
INVALID_STATE_ERR
exception instead of returning a
string:
Document
node with no child element nodes.DocumentType
node that has an external subset
public identifier that contains characters that are not matched by
the XML PubidChar
production. [XML]DocumentType
node that has an external subset
system identifier that contains both a U+0022 QUOTATION MARK ('"')
and a U+0027 APOSTROPHE ("'").Attr
node, Text
node,
CDATASection
node, Comment
node, or
ProcessingInstruction
node whose data contains
characters that are not matched by the XML Char
production. [XML]CDATASection
node whose data contains the string
"]]>
".Comment
node whose data contains two adjacent
U+002D HYPHEN-MINUS (-) characters or ends with such a
character.ProcessingInstruction
node whose target name is
an ASCII case-insensitive match for the string "xml
".ProcessingInstruction
node whose target name
contains a U+003A COLON (":").ProcessingInstruction
node whose data contains
the string "?>
".These are the only ways to make a DOM
unserializable. The DOM enforces all the other XML constraints; for
example, trying to set an attribute with a name that contains an
equals sign (=) will raised an INVALID_CHARACTER_ERR
exception.
The XML fragment parsing algorithm for either returns
a Document
or raises a SYNTAX_ERR
exception. Given a string input and an optional
context element context, the algorithm is as
follows:
Create a new XML parser.
If there is a context element, feed the parser just created the string corresponding to the start tag of that element, declaring all the namespace prefixes that are in scope on that element in the DOM, as well as declaring the default namespace (if any) that is in scope on that element in the DOM.
A namespace prefix is in scope if the DOM Core lookupNamespaceURI()
method on the element would
return a non-null value for that prefix.
The default namespace is the namespace for which the DOM Core
isDefaultNamespace()
method on the element
would return true.
Feed the parser just created the string input.
If there is a context element, feed the parser just created the string corresponding to the end tag of that element.
If there is an XML well-formedness or XML namespace
well-formedness error, then raise a SYNTAX_ERR
exception and abort these steps.
If there is a context element, then return
the child nodes of the root element of the resulting
Document
, in tree order.
Otherwise, return the children of the Document
object, in tree order.
User agents are not required present HTML documents in any particular way. However, this section provides a set of suggestions for rendering HTML documents that, if followed, are likely to lead to a user experience that closely resembles the experience intended by the documents' authors. So as to avoid confusion regarding the normativity of this section, RFC2119 terms have not been used. Instead, the term "expected" is used to indicate behavior that will lead to this experience.
In general, user agents are expected to support CSS, and many of the suggestions in this section are expressed in CSS terms. User agents that use other presentation mechanisms can derive their expected behavior by translating from the CSS rules given in this section.
In the absence of style-layer rules to the contrary (e.g. author style sheets), user agents are expected to render an element so that it conveys to the user the meaning that the element represents, as described by this specification.
The suggestions in this section generally assume a visual output medium with a resolution of 96dpi or greater, but HTML is intended to apply to multiple media (it is a media-independent language). User agents are encouraged to adapt the suggestions in this section to their target media.
The CSS rules given in these subsections are, unless otherwise specified, expected to be used as part of the user-agent level style sheet defaults for all documents that contain HTML elements.
Some rules are intended for the author-level zero-specificity presentational hints part of the CSS cascade; these are explicitly called out as presentational hints.
Some of the rules regarding left and right margins are given here as appropriate for elements whose 'direction' property is 'ltr', and are expected to be flipped around on elements whose 'direction' property is 'rtl'. These are marked "LTR-specific".
When the text below says that an attribute attribute on an element element maps to the pixel length property (or properties) properties, it means that if element has an attribute attribute set, and parsing that attribute's value using the rules for parsing non-negative integers doesn't generate an error, then the user agent is expected to use the parsed value as a pixel length for a presentational hint for properties.
When the text below says that an attribute attribute on an element element maps to the dimension property (or properties) properties, it means that if element has an attribute attribute set, and parsing that attribute's value using the rules for parsing dimension values doesn't generate an error, then the user agent is expected to use the parsed dimension as the value for a presentational hint for properties, with the value given as a pixel length if the dimension was an integer, and with the value given as a percentage if the dimension was a percentage.
@namespace url(http://www.w3.org/1999/xhtml); [hidden], area, audio:not([controls]), base, basefont, command, datalist, head, input[type=hidden], link, menu[type=context], meta, noembed, noframes, param, script, source, style, title { display: none; } address, article, aside, blockquote, body, center, dd, dialog, dir, div, dl, dt, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hr, html, legend, listing, menu, nav, ol, p, plaintext, pre, rp, section, ul, xmp { display: block; } table { display: table; } caption { display: table-caption; } colgroup { display: table-column-group; } col { display: table-column; } thead { display: table-header-group; } tbody { display: table-row-group; } tfoot { display: table-footer-group; } tr { display: table-row; } td, th { display: table-cell; } li { display: list-item; } ruby { display: ruby; } rt { display: ruby-text; }
For the purposes of the CSS table model, the col
element is to be treated as if it was present as many times as its
span
attribute specifies.
For the purposes of the CSS table model, the
colgroup
element, if it contains no col
element, is to be treated as if it had as many such children as its
span
attribute specifies.
For the purposes of the CSS table model, the colspan
and rowspan
attributes on
td
and th
elements are expected to provide the
special knowledge regarding cells spanning rows and
columns.
For the purposes of the CSS ruby model, runs of descendants of
ruby
elements that are not rt
or
rp
elements are expected to be wrapped in anonymous
boxes whose 'display' property has the value 'ruby-base'.
User agents that do not support correct ruby rendering are
expected to render parentheses around the text of rt
elements in the absence of rp
elements.
The br
element is expected to render as if its
contents were a single U+000A LINE FEED (LF) character and its
'white-space' property was 'pre'. User agents are expected to
support the 'clear' property on inline elements (in order to render
br
elements with clear
attributes) in the manner
described in the non-normative note to this effect in CSS2.1.
The user agent is expected to hide noscript
elements
for whom scripting is enabled,
irrespective of CSS rules.
@namespace url(http://www.w3.org/1999/xhtml); article, aside, blockquote, dir, dl, figure, listing, menu, nav, ol, p, plaintext, pre, section, ul, xmp { margin-top: 1em; margin-bottom: 1em; } dir dir, dir dl, dir menu, dir ol, dir ul, dl dir, dl dl, dl menu, dl ol, dl ul, menu dir, menu dl, menu menu, menu ol, menu ul, ol dir, ol dl, ol menu, ol ol, ol ul, ul dir, ul dl, ul menu, ul ol, ul ul { margin-top: 0; margin-bottom: 0; } h1 { margin-top: 0.67em; margin-bottom; 0.67em; } h2 { margin-top: 0.83em; margin-bottom; 0.83em; } h3 { margin-top: 1.00em; margin-bottom; 1.00em; } h4 { margin-top: 1.33em; margin-bottom; 1.33em; } h5 { margin-top: 1.67em; margin-bottom; 1.67em; } h6 { margin-top: 2.33em; margin-bottom; 2.33em; } dd { margin-left: 40px; } /* LTR-specific: use 'margin-right' for rtl elements */ dir, menu, ol, ul { padding-left: 40px; } /* LTR-specific: use 'padding-right' for rtl elements */ blockquote, figure { margin-left: 40px; margin-right: 40px; } table { border-spacing: 2px; border-collapse: separate; } td, th { padding: 1px; }
For each property in the table below, given a body
element, the first attribute that exists maps to the pixel
length property on the body
element. If none of
the attributes for a property are found, or if the value of the
attribute that was found cannot be parsed successfully, then a
default value of 8px is expected to be used for that property
instead.
Property | Source |
---|---|
'margin-top' | body element's marginheight attribute
|
The body element's container frame element's marginheight attribute
| |
body element's topmargin attribute
| |
'margin-right' | body element's marginwidth attribute
|
The body element's container frame element's marginwidth attribute
| |
body element's rightmargin attribute
| |
'margin-bottom' | body element's marginheight attribute
|
The body element's container frame element's marginheight attribute
| |
body element's topmargin attribute
| |
'margin-left' | body element's marginwidth attribute
|
The body element's container frame element's marginwidth attribute
| |
body element's rightmargin attribute
|
If the body
element's Document
's
browsing context is a nested browsing
context, and the browsing context container of
that nested browsing context is a frame
or
iframe
element, then the container frame
element of the body
element is that
frame
or iframe
element. Otherwise, there
is no container frame element.
If the Document
has a root element, and
the Document
's browsing context is a
nested browsing context, and the browsing context
container of that nested browsing context is a
frame
or iframe
element, and that element
has a scrolling
attribute, then the user agent is expected to compare the value of
the attribute in an ASCII case-insensitive manner to
the values in the first column of the following table, and if one of
them matches, then the user agent is expected to treat that
attribute as a presentational
hint for the aforementioned root element's 'overflow'
property, setting it to the value given in the corresponding cell on
the same row in the second column:
Attribute value | 'overflow' value |
---|---|
on
| 'scroll' |
scroll
| 'scroll' |
yes
| 'scroll' |
off
| 'hidden' |
noscroll
| 'hidden' |
no
| 'hidden' |
auto
| 'auto' |
The table
element's cellspacing
attribute
maps to the pixel length property 'border-spacing' on the
element.
The table
element's cellpadding
attribute maps to the pixel length
properties 'padding-top', 'padding-right', 'padding-bottom',
and 'padding-left' of any td
and th
elements that have corresponding cells in the table corresponding to the
table
element.
The table
element's hspace
attribute maps to the dimension properties
'margin-left' and 'margin-right' on the table
element.
The table
element's vspace
attribute maps to the dimension properties
'margin-top' and 'margin-bottom' on the table
element.
The table
element's height
attribute maps to the
dimension property 'height' on the table
element.
The table
element's width
attribute maps to the
dimension property 'width' on the table
element.
The col
element's width
attribute maps to the
dimension property 'width' on the col
element.
The tr
element's height
attribute maps to the
dimension property 'height' on the tr
element.
The td
and th
elements' height
attributes map to the dimension property 'height'
on the element.
The td
and th
elements' width
attributes map to the dimension property 'width'
on the element.
In quirks mode, the following rules are also expected to apply:
@namespace url(http://www.w3.org/1999/xhtml); form { margin-bottom: 1em; }
When a Document
is in quirks mode,
margins on HTML elements at the top or bottom of the
initial containing block, or the top of bottom of td
or
th
elements, are expected to be collapsed to zero.
@namespace url(http://www.w3.org/1999/xhtml); thead, tbody, tfoot, table > tr { vertical-align: middle; } tr, td, th { vertical-align: inherit; } sub { vertical-align: sub; } sup { vertical-align: super; } th { text-align: center; }
The following rules are also expected to apply, as presentational hints:
@namespace url(http://www.w3.org/1999/xhtml); table[align=left] { float: left; } table[align=right] { float: right; } table[align=center], table[align=abscenter], table[align=abdmiddle], table[align=middle] { margin-left: auto; margin-right: auto; } caption[align=bottom] { caption-side: bottom; } p[align=left], h1[align=left], h2[align=left], h3[align=left], h4[align=left], h5[align=left], h6[align=left] { text-align: left; } p[align=right], h1[align=right], h2[align=right], h3[align=right], h4[align=right], h5[align=right], h6[align=right] { text-align: right; } p[align=center], h1[align=center], h2[align=center], h3[align=center], h4[align=center], h5[align=center], h6[align=center] { text-align: center; } p[align=justify], h1[align=justify], h2[align=justify], h3[align=justify], h4[align=justify], h5[align=justify], h6[align=justify] { text-align: justify; } col[valign=top], thead[valign=top], tbody[valign=top], tfoot[valign=top], tr[valign=top], td[valign=top], th[valign=top] { vertical-align: top; } col[valign=middle], thead[valign=middle], tbody[valign=middle], tfoot[valign=middle], tr[valign=middle], td[valign=middle], th[valign=middle] { vertical-align: middle; } col[valign=bottom], thead[valign=bottom], tbody[valign=bottom], tfoot[valign=bottom], tr[valign=bottom], td[valign=bottom], th[valign=bottom] { vertical-align: bottom; } col[valign=baseline], thead[valign=baseline], tbody[valign=baseline], tfoot[valign=baseline], tr[valign=baseline], td[valign=baseline], th[valign=baseline] { vertical-align: baseline; }
The center
element, the caption
element
unless specified otherwise below, and the div
element
when its align
attribute's value
is an ASCII case-insensitive match for the string
"center
", are expected to center text within
themselves, as if they had their 'text-align' property set to
'center' in a presentational
hint, and to align descendants to the center.
The div
, caption
, thead
,
tbody
, tfoot
, tr
,
td
, and th
elements, when they have an
align
attribute whose value is an
ASCII case-insensitive match for the string "left
", are expected to left-align text within
themselves, as if they had their 'text-align' property set to 'left'
in a presentational hint,
and to align descendants to the left.
The div
, caption
, thead
,
tbody
, tfoot
, tr
,
td
, and th
elements, when they have an
align
attribute whose value is an
ASCII case-insensitive match for the string "right
", are expected to right-align text within
themselves, as if they had their 'text-align' property set to
'right' in a presentational
hint, and to align descendants to the right.
The div
, caption
, thead
,
tbody
, tfoot
, tr
,
td
, and th
elements, when they have an
align
attribute whose value is an
ASCII case-insensitive match for the string "justify
", are expected to full-justify text within
themselves, as if they had their 'text-align' property set to
'justify' in a presentational
hint, and to align descendants to the left.
When a user agent is to align descendants of a node,
the user agent is expected to align only those descendants that have
both their 'margin-left' and 'margin-right' properties computing to
a value other than 'auto', that are over-constrained and that have
one of those two margins with a used value forced to a greater
value, and that do not themselves have an applicable align
attribute.
@namespace url(http://www.w3.org/1999/xhtml); address, cite, dfn, em, i, var { font-style: italic; } b, strong, th { font-weight: bold; } code, kbd, listing, plaintext, pre, samp, tt, xmp { font-family: monospace; } h1 { font-size: 2.00em; font-weight: bold; } h2 { font-size: 1.50em; font-weight: bold; } h3 { font-size: 1.17em; font-weight: bold; } h4 { font-size: 1.00em; font-weight: bold; } h5 { font-size: 0.83em; font-weight: bold; } h6 { font-size: 0.67em; font-weight: bold; } big { font-size: larger; } small, sub, sup { font-size: smaller; } sub, sup { line-height: normal; } :link { color: blue; } :visited { color: purple; } mark { background: yellow; color: black; } table, td, th { border-color: gray; } thead, tbody, tfoot, tr { border-color: inherit; } table[rules=none], table[rules=groups], table[rules=rows], table[rules=cols], table[rules=all], table[frames=void], table[frames=above], table[frames=below], table[frames=hsides], table[frames=lhs], table[frames=rhs], table[frames=vsides], table[frames=box], table[frames=border], table[rules=none] > tr > td, table[rules=none] > tr > th, table[rules=groups] > tr > td, table[rules=groups] > tr > th, table[rules=rows] > tr > td, table[rules=rows] > tr > th, table[rules=cols] > tr > td, table[rules=cols] > tr > th, table[rules=all] > tr > td, table[rules=all] > tr > th, table[frames=void] > tr > td, table[frames=void] > tr > th, table[frames=above] > tr > td, table[frames=above] > tr > th, table[frames=below] td, table[frames=below] > tr > th, table[frames=hsides] > tr > td, table[frames=hsides] > tr > th, table[frames=lhs] > tr > td, table[frames=lhs] > tr > th, table[frames=rhs] > tr > td, table[frames=rhs] > tr > th, table[frames=vsides] > tr > td, table[frames=vsides] > tr > th, table[frames=box] > tr > td, table[frames=box] > tr > th, table[frames=border] > tr > td, table[frames=border] > tr > th, table[rules=none] > thead > tr > td, table[rules=none] > thead > tr > th, table[rules=groups] > thead > tr > td, table[rules=groups] > thead > tr > th, table[rules=rows] > thead > tr > td, table[rules=rows] > thead > tr > th, table[rules=cols] > thead > tr > td, table[rules=cols] > thead > tr > th, table[rules=all] > thead > tr > td, table[rules=all] > thead > tr > th, table[frames=void] > thead > tr > td, table[frames=void] > thead > tr > th, table[frames=above] > thead > tr > td, table[frames=above] > thead > tr > th, table[frames=below] td, table[frames=below] > thead > tr > th, table[frames=hsides] > thead > tr > td, table[frames=hsides] > thead > tr > th, table[frames=lhs] > thead > tr > td, table[frames=lhs] > thead > tr > th, table[frames=rhs] > thead > tr > td, table[frames=rhs] > thead > tr > th, table[frames=vsides] > thead > tr > td, table[frames=vsides] > thead > tr > th, table[frames=box] > thead > tr > td, table[frames=box] > thead > tr > th, table[frames=border] > thead > tr > td, table[frames=border] > thead > tr > th, table[rules=none] > tbody > tr > td, table[rules=none] > tbody > tr > th, table[rules=groups] > tbody > tr > td, table[rules=groups] > tbody > tr > th, table[rules=rows] > tbody > tr > td, table[rules=rows] > tbody > tr > th, table[rules=cols] > tbody > tr > td, table[rules=cols] > tbody > tr > th, table[rules=all] > tbody > tr > td, table[rules=all] > tbody > tr > th, table[frames=void] > tbody > tr > td, table[frames=void] > tbody > tr > th, table[frames=above] > tbody > tr > td, table[frames=above] > tbody > tr > th, table[frames=below] td, table[frames=below] > tbody > tr > th, table[frames=hsides] > tbody > tr > td, table[frames=hsides] > tbody > tr > th, table[frames=lhs] > tbody > tr > td, table[frames=lhs] > tbody > tr > th, table[frames=rhs] > tbody > tr > td, table[frames=rhs] > tbody > tr > th, table[frames=vsides] > tbody > tr > td, table[frames=vsides] > tbody > tr > th, table[frames=box] > tbody > tr > td, table[frames=box] > tbody > tr > th, table[frames=border] > tbody > tr > td, table[frames=border] > tbody > tr > th, table[rules=none] > tfoot > tr > td, table[rules=none] > tfoot > tr > th, table[rules=groups] > tfoot > tr > td, table[rules=groups] > tfoot > tr > th, table[rules=rows] > tfoot > tr > td, table[rules=rows] > tfoot > tr > th, table[rules=cols] > tfoot > tr > td, table[rules=cols] > tfoot > tr > th, table[rules=all] > tfoot > tr > td, table[rules=all] > tfoot > tr > th, table[frames=void] > tfoot > tr > td, table[frames=void] > tfoot > tr > th, table[frames=above] > tfoot > tr > td, table[frames=above] > tfoot > tr > th, table[frames=below] td, table[frames=below] > tfoot > tr > th, table[frames=hsides] > tfoot > tr > td, table[frames=hsides] > tfoot > tr > th, table[frames=lhs] > tfoot > tr > td, table[frames=lhs] > tfoot > tr > th, table[frames=rhs] > tfoot > tr > td, table[frames=rhs] > tfoot > tr > th, table[frames=vsides] > tfoot > tr > td, table[frames=vsides] > tfoot > tr > th, table[frames=box] > tfoot > tr > td, table[frames=box] > tfoot > tr > th, table[frames=border] > tfoot > tr > td, table[frames=border] > tfoot > tr > th { border-color: black; }
The initial value for the 'color' property is expected to be black. The initial value for the 'background-color' property is expected to be 'transparent'. The canvas's background is expected to be white.
The article
, aside
, nav
,
and section
elements are expected to affect the styling
of h1
elements, based on the nesting depth. If x is a selector that matches elements that are either
article
, aside
, nav
, or
section
elements, then the following rules capture what
is expected:
@namespace url(http://www.w3.org/1999/xhtml); x h1 { font-size: 1.50em; } x x h1 { font-size: 1.17em; } x x x h1 { font-size: 1.00em; } x x x x h1 { font-size: 0.83em; } x x x x x h1 { font-size: 0.67em; }
When a body
, table
, thead
,
tbody
, tfoot
, tr
,
td
, or th
element has a background
attribute set to a
non-empty value, the new value is expected to be resolved relative to the element, and
if this is successful, the user agent is expected to treat the
attribute as a presentational
hint setting the element's 'background-image' property to the
resulting absolute URL.
When a body
, table
, thead
,
tbody
, tfoot
, tr
,
td
, or th
element has a bgcolor
attribute set, the new value is
expected to be parsed using the rules for parsing a legacy
color value, and if that does not return an error, the user
agent is expected to treat the attribute as a presentational hint setting the
element's 'background-color' property to the resulting color.
When a body
element has a text
attribute, its value is expected
to be parsed using the rules for parsing a legacy color
value, and if that does not return an error, the user
agent is expected to treat the attribute as a presentational hint setting the
element's 'color' property to the resulting color.
When a body
element has a link
attribute, its value is expected
to be parsed using the rules for parsing a legacy color
value, and if that does not return an error, the user agent
is expected to treat the attribute as a presentational hint setting the 'color' property of
any element in the Document
matching the ':link'
pseudo-class to the resulting color.
When a body
element has a vlink
attribute, its value is
expected to be parsed using the rules for parsing a legacy
color value, and if that does not return an error, the user
agent is expected to treat the attribute as a presentational hint setting the
'color' property of any element in the Document
matching the ':visited' pseudo-class to the resulting color.
When a body
element has a alink
attribute, its value is
expected to be parsed using the rules for parsing a legacy
color value, and if that does not return an error, the user
agent is expected to treat the attribute as a presentational hint setting the
'color' property of any element in the Document
matching the ':active' pseudo-class and either the ':link'
pseudo-class or the ':visited' pseudo-class to the resulting
color.
When a table
element has a bordercolor
attribute, its
value is expected to be parsed using the rules for parsing a
legacy color value, and if that does not return an error, the
user agent is expected to treat the attribute as a presentational hint setting the
element's 'border-top-color', 'border-right-color',
'border-bottom-color', and 'border-right-color' properties to the
resulting color.
When a font
element has a color
attribute, its value is
expected to be parsed using the rules for parsing a legacy
color value, and if that does not return an error, the user
agent is expected to treat the attribute as a presentational hint setting the
element's 'color' property to the resulting color.
When a font
element has a face
attribute, the user agent is
expected to treat the attribute as a presentational hint setting the element's
'font-family' property to the attribute's value.
When a font
element has a pointsize
attribute, the user
agent is expected to parse that attribute's value using the
rules for parsing non-negative integers, and if this
doesn't generate an error, then the user agent is expected to use
the parsed value as a point length for a presentational hint for the
'font-size' property on the element.
When a font
element has a size
attribute, the user agent is
expected to use the following steps to treat the attribute as a
presentational hint
setting the element's 'font-size' property:
Let input be the attribute's value.
Let position be a pointer into input, initially pointing at the start of the string.
If position is past the end of input, there is no presentational hint. Abort these steps.
If the character at position is a U+002B PLUS SIGN character (+), then let mode be relative-plus, and advance position to the next character. Otherwise, if the character at position is a U+002D HYPHEN-MINUS character (-), then let mode be relative-minus, and advance position to the next character. Otherwise, let mode be absolute.
Collect a sequence of characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let the resulting sequence be digits.
If digits is the empty string, there is no presentational hint. Abort these steps.
Interpret digits as a base-ten integer. Let size be the resulting number.
If mode is relative-plus, then increment value by 3. If mode is relative-minus, then decrement value by 3.
If value is greater than 7, let it be 7.
If value is less than 1, let it be 1.
Set 'font-size' to the keyword corresponding to the value of value according to the following table:
value | 'font-size' keyword | Notes |
---|---|---|
1 | xx-small | |
2 | small | |
3 | medium | |
4 | large | |
5 | x-large | |
6 | xx-large | |
7 | xxx-large | see below |
The 'xxx-large' value is a non-CSS value used here to indicate a font size one "step" larger than 'xx-large'.
@namespace url(http://www.w3.org/1999/xhtml); :link, :visited, ins, u { text-decoration: underline; } abbr[title], acronym[title] { text-decoration: dotted underline; } del, s, strike { text-decoration: line-through; } blink { text-decoration: blink; } q:before { content: open-quote; } q:after { content: close-quote; } nobr { white-space: nowrap; } listing, plaintext, pre, xmp { white-space: pre; } ol { list-style-type: decimal; } dir, menu, ul { list-style-type: disc; } dir dl, dir menu, dir ul, menu dl, menu menu, menu ul, ol dl, ol menu, ol ul, ul dl, ul menu, ul ul { list-style-type: circle; } dir dir dl, dir dir menu, dir dir ul, dir menu dl, dir menu menu, dir menu ul, dir ol dl, dir ol menu, dir ol ul, dir ul dl, dir ul menu, dir ul ul, menu dir dl, menu dir menu, menu dir ul, menu menu dl, menu menu menu, menu menu ul, menu ol dl, menu ol menu, menu ol ul, menu ul dl, menu ul menu, menu ul ul, ol dir dl, ol dir menu, ol dir ul, ol menu dl, ol menu menu, ol menu ul, ol ol dl, ol ol menu, ol ol ul, ol ul dl, ol ul menu, ol ul ul, ul dir dl, ul dir menu, ul dir ul, ul menu dl, ul menu menu, ul menu ul, ul ol dl, ul ol menu, ul ol ul, ul ul dl, ul ul menu, ul ul ul { list-style-type: square; } table { border-style: outset; } td, th { border-style: inset; } [dir=ltr] { direction: ltr; unicode-bidi: embed; } [dir=rtl] { direction: rtl; unicode-bidi: embed; } bdo[dir=ltr], bdo[dir=rtl] { unicode-bidi: bidi-override; }
In addition, rules setting the 'quotes' property appropriately for the locales and languages understood by the user are expected to be present.
The following rules are also expected to apply, as presentational hints:
@namespace url(http://www.w3.org/1999/xhtml); td[nowrap], th[nowrap] { white-space: nowrap; } pre[wrap] { white-space: pre-wrap; } br[clear=left] { clear: left; } br[clear=right] { clear: right; } br[clear=all], br[clear=both] { clear: both; } ol[type=1], li[type=1] { list-style-type: decimal; } ol[type=a], li[type=a] { list-style-type: lower-alpha; } ol[type=A], li[type=A] { list-style-type: upper-alpha; } ol[type=i], li[type=i] { list-style-type: lower-roman; } ol[type=I], li[type=I] { list-style-type: upper-roman; } ul[type=disc], li[type=disc] { list-style-type: disc; } ul[type=circle], li[type=circle] { list-style-type: circle; } ul[type=square], li[type=square] { list-style-type: square; } table[rules=none], table[rules=groups], table[rules=rows], table[rules=cols], table[rules=all] { border-style: none; border-collapse: collapse; } table[frames=void] { border-style: hidden hidden hidden hidden; } table[frames=above] { border-style: solid hidden hidden hidden; } table[frames=below] { border-style: hidden hidden solid hidden; } table[frames=hsides] { border-style: solid hidden solid hidden; } table[frames=lhs] { border-style: hidden hidden hidden solid; } table[frames=rhs] { border-style: hidden solid hidden hidden; } table[frames=vsides] { border-style: hidden solid hidden solid; } table[frames=box], table[frames=border] { border-style: solid solid solid solid; } table[frames=void] > tr > td, table[frames=void] > tr > th, table[frames=above] > tr > td, table[frames=above] > tr > th, table[frames=below] > tr > td, table[frames=below] > tr > th, table[frames=hsides] > tr > td, table[frames=hsides] > tr > th, table[frames=lhs] > tr > td, table[frames=lhs] > tr > th, table[frames=rhs] > tr > td, table[frames=rhs] > tr > th, table[frames=vsides] > tr > td, table[frames=vsides] > tr > th, table[frames=box] > tr > td, table[frames=box] > tr > th, table[frames=border] > tr > td, table[frames=border] > tr > th, table[frames=void] > thead > tr > td, table[frames=void] > thead > tr > th, table[frames=above] > thead > tr > td, table[frames=above] > thead > tr > th, table[frames=below] > thead > tr > td, table[frames=below] > thead > tr > th, table[frames=hsides] > thead > tr > td, table[frames=hsides] > thead > tr > th, table[frames=lhs] > thead > tr > td, table[frames=lhs] > thead > tr > th, table[frames=rhs] > thead > tr > td, table[frames=rhs] > thead > tr > th, table[frames=vsides] > thead > tr > td, table[frames=vsides] > thead > tr > th, table[frames=box] > thead > tr > td, table[frames=box] > thead > tr > th, table[frames=border] > thead > tr > td, table[frames=border] > thead > tr > th, table[frames=void] > tbody > tr > td, table[frames=void] > tbody > tr > th, table[frames=above] > tbody > tr > td, table[frames=above] > tbody > tr > th, table[frames=below] > tbody > tr > td, table[frames=below] > tbody > tr > th, table[frames=hsides] > tbody > tr > td, table[frames=hsides] > tbody > tr > th, table[frames=lhs] > tbody > tr > td, table[frames=lhs] > tbody > tr > th, table[frames=rhs] > tbody > tr > td, table[frames=rhs] > tbody > tr > th, table[frames=vsides] > tbody > tr > td, table[frames=vsides] > tbody > tr > th, table[frames=box] > tbody > tr > td, table[frames=box] > tbody > tr > th, table[frames=border] > tbody > tr > td, table[frames=border] > tbody > tr > th, table[frames=void] > tfoot > tr > td, table[frames=void] > tfoot > tr > th, table[frames=above] > tfoot > tr > td, table[frames=above] > tfoot > tr > th, table[frames=below] > tfoot > tr > td, table[frames=below] > tfoot > tr > th, table[frames=hsides] > tfoot > tr > td, table[frames=hsides] > tfoot > tr > th, table[frames=lhs] > tfoot > tr > td, table[frames=lhs] > tfoot > tr > th, table[frames=rhs] > tfoot > tr > td, table[frames=rhs] > tfoot > tr > th, table[frames=vsides] > tfoot > tr > td, table[frames=vsides] > tfoot > tr > th, table[frames=box] > tfoot > tr > td, table[frames=box] > tfoot > tr > th, table[frames=border] > tfoot > tr > td, table[frames=border] > tfoot > tr > th { border-style: solid; } table[rules=none] > tr > td, table[rules=none] > tr > th, table[rules=none] > thead > tr > td, table[rules=none] > thead > tr > th, table[rules=none] > tbody > tr > td, table[rules=none] > tbody > tr > th, table[rules=none] > tfoot > tr > td, table[rules=none] > tfoot > tr > th, table[rules=groups] > tr > td, table[rules=groups] > tr > th, table[rules=groups] > thead > tr > td, table[rules=groups] > thead > tr > th, table[rules=groups] > tbody > tr > td, table[rules=groups] > tbody > tr > th, table[rules=groups] > tfoot > tr > td, table[rules=groups] > tfoot > tr > th, table[rules=rows] > tr > td, table[rules=rows] > tr > th, table[rules=rows] > thead > tr > td, table[rules=rows] > thead > tr > th, table[rules=rows] > tbody > tr > td, table[rules=rows] > tbody > tr > th, table[rules=rows] > tfoot > tr > td, table[rules=rows] > tfoot > tr > th { border-style: none; } table[rules=groups] > colgroup, table[rules=groups] > thead, table[rules=groups] > tbody, table[rules=groups] > tfoot { border-style: solid; } table[rules=rows] > tr, table[rules=rows] > thead > tr, table[rules=rows] > tbody > tr, table[rules=rows] > tfoot > tr { border-style: solid; } table[rules=cols] > tr > td, table[rules=cols] > tr > th, table[rules=cols] > thead > tr > td, table[rules=cols] > thead > tr > th, table[rules=cols] > tbody > tr > td, table[rules=cols] > tbody > tr > th, table[rules=cols] > tfoot > tr > td, table[rules=cols] > tfoot > tr > th { border-style: none solid none solid; } table[rules=all] > tr > td, table[rules=all] > tr > th, table[rules=all] > thead > tr > td, table[rules=all] > thead > tr > th, table[rules=all] > tbody > tr > td, table[rules=all] > tbody > tr > th, table[rules=all] > tfoot > tr > td, table[rules=all] > tfoot > tr > th { border-style: solid; }
When rendering li
elements, user agents are expected
to use the ordinal value of the li
element to render
the counter in the list item marker.
The table
element's border
attribute maps to the pixel length
properties 'border-top-width', 'border-right-width',
'border-bottom-width', 'border-left-width' on the element. If the
attribute is present but its value cannot be parsed successfully, a
default value of 1px is expected to be used for that property
instead.
The following rules are also expected to be in play, resetting certain properties to block inheritance by default.
@namespace url(http://www.w3.org/1999/xhtml); table, input, select, option, optgroup, button, textarea, keygen { text-indent: initial; }
In quirks mode, the following rules are also expected to apply:
@namespace url(http://www.w3.org/1999/xhtml); table { font-weight: initial; font-style: initial; font-variant: initial; font-size: initial; line-height: initial; white-space: initial; text-align: initial; } input { box-sizing: border-box; }
hr
element@namespace url(http://www.w3.org/1999/xhtml); hr { color: gray; border-style: inset; border-width: 1px; }
The following rules are also expected to apply, as presentational hints:
@namespace url(http://www.w3.org/1999/xhtml); hr[align=left] { margin-left: 0; margin-right: auto; } hr[align=right] { margin-left: auto; margin-right: 0; } hr[align=center] { margin-left: auto; margin-right: auto; } hr[color], hr[noshade] { border-style: solid; }
If an hr
element has either a color
attribute or a noshade
attribute, and furthermore
also has a size
attribute, and
parsing that attribute's value using the rules for parsing
non-negative integers doesn't generate an error, then the
user agent is expected to use the parsed value divided by two as a
pixel length for presentational hints for the properties
'border-top-width', 'border-right-width', 'border-bottom-width', and
'border-left-width' on the element.
Otherwise, if an hr
element has neither a color
attribute nor a noshade
attribute, but does have a
size
attribute, and parsing that
attribute's value using the rules for parsing non-negative
integers doesn't generate an error, then: if the parsed value
is one, then the user agent is expected to use the attribute as a
presentational hint
setting the element's 'border-bottom-width' to 0; otherwise, if the
parsed value is greater than one, then the user agent is expected to
use the parsed value minus two as a pixel length for
presentational hints for the 'height' property on the
element.
The width
attribute on an
hr
element maps to the dimension property
'width' on the element.
When an hr
element has a color
attribute, its value is expected
to be parsed using the rules for parsing a legacy color
value, and if that does not return an error, the user agent
is expected to treat the attribute as a presentational hint setting the element's 'color'
property to the resulting color.
fieldset
element@namespace url(http://www.w3.org/1999/xhtml); fieldset { margin-left: 2px; margin-right: 2px; border: groove 2px ThreeDFace; padding: 0.35em 0.625em 0.75em; }
The fieldset
element is expected to establish a new
block formatting context.
The first legend
element child of a
fieldset
element, if any, is expected to be rendered
over the top border edge of the fieldset
element. If
the legend
element in question has an align
attribute, and its value is
an ASCII case-insensitive match for one of the strings
in the first column of the following table, then the
legend
is expected to be rendered horizontally aligned
over the border edge in the position given in the corresponding cell
on the same row in the second column. If the attribute is absent or
has a value that doesn't match any of the cases in the table, then
the position is expected to be on the right if the 'direction'
property on this element has a computed value of 'rtl', and on the
left otherwise.
Attribute value | Alignment position |
---|---|
left
| On the left |
right
| On the right |
center
| In the middle |
The applet
, canvas
, embed
,
iframe
, and video
elements are expected to
be treated as replaced elements.
An object
element that represents an
image, plugin, or nested browsing context is expected
to be treated as a replaced element. Other object
elements are expected to be treated as ordinary elements in the
rendering model.
The audio
element, when it has a controls
attribute, is expected
to be treated as a replaced element about one line high, as wide as
is necessary to expose the user agent's user interface features.
The video
element's controls
attribute is not
expected to affect the size of the rendering; controls are expected
to be overlaid with the page content without causing any layout
changes, and are expected to disappear when the user does not need
them.
Resizing video
and canvas
elements does not interrupt video playback or clear the canvas.
The following CSS rules are expected to apply:
@namespace url(http://www.w3.org/1999/xhtml); iframe { border: 2px inset; }
When an img
element or an input
element
when its type
attribute is in
the Image Button state
represents an image, it is expected to be treated as a
replaced element.
When an img
element or an input
element
when its type
attribute is in
the Image Button state
does not represent an image, but the
element already has intrinsic dimensions (e.g. from the
dimension attributes or CSS rules), and either the user
agent has reason to believe that the image will become
available and be rendered in due course or the
Document
is in quirks mode, the element is
expected to be treated as a replaced element whose content is the
text that the element represents, if any, optionally alongside an
icon indicating that the image is being obtained. For
input
elements, the text is expected to appear
button-like to indicate that the element is a button.
When an img
element represents some
text and the user agent does not expect this to change, the element
is expected to be treated as an inline element whose content is the
text, optionally with an icon indicating that an image is
missing.
When an img
element represents nothing
and the user agent does not expect this to change, the element is
expected to not be rendered at all.
When an img
element might be a key part of the
content, but neither the image nor any kind of alternative text is
available, and the user agent does not expect this to change, the
element is expected to be treated as an inline element whose content
is an icon indicating that an image is missing.
When an input
element whose type
attribute is in the Image Button state does not
represent an image and the user
agent does not expect this to change, the element is expected to be
treated as a replaced element consisting of a button whose content
is the element's alternative text. The intrinsic dimensions of the
button are expected to be about one line in height and whatever
width is necessary to render the text on one line.
The icons mentioned above are expected to be relatively small so as not to disrupt most text but be easily clickable. In a visual environment, for instance, icons could be 16 pixels by 16 pixels square, or 1em by 1em if the images are scalable. In an audio environment, the icon could be a short bleep. The icons are intended to indicate to the user that they can be used to get to whatever options the UA provides for images, and, where appropriate, are expected to provide access to the context menu that would have come up if the user interacted with the actual image.
The following CSS rules are expected to apply when the
Document
is in quirks mode:
@namespace url(http://www.w3.org/1999/xhtml); img[align=left] { margin-right: 3px; } img[align=right] { margin-left: 3px; }
The following CSS rules are expected to apply as presentational hints:
@namespace url(http://www.w3.org/1999/xhtml); iframe[frameborder=0], iframe[frameborder=no] { border: none; } applet[align=left], embed[align=left], iframe[align=left], img[align=left], input[type=image][align=left], object[align=left] { float: left; } applet[align=right], embed[align=right], iframe[align=right], img[align=right], input[type=image][align=right], object[align=right] { float: right; } applet[align=top], embed[align=top], iframe[align=top], img[align=top], input[type=image][align=top], object[align=top] { vertical-align: top; } applet[align=bottom], embed[align=bottom], iframe[align=bottom], img[align=bottom], input[type=image][align=bottom], object[align=bottom], applet[align=baseline], embed[align=baseline], iframe[align=baseline], img[align=baseline], input[type=image][align=baseline], object[align=baseline] { vertical-align: baseline; } applet[align=texttop], embed[align=texttop], iframe[align=texttop], img[align=texttop], input[type=image][align=texttop], object[align=texttop] { vertical-align: text-top; } applet[align=absmiddle], embed[align=absmiddle], iframe[align=absmiddle], img[align=absmiddle], input[type=image][align=absmiddle], object[align=absmiddle], applet[align=abscenter], embed[align=abscenter], iframe[align=abscenter], img[align=abscenter], input[type=image][align=abscenter], object[align=abscenter] { vertical-align: middle; } applet[align=bottom], embed[align=bottom], iframe[align=bottom], img[align=bottom], input[type=image][align=bottom], object[align=bottom] { vertical-align: bottom; }
When an applet
, embed
,
iframe
, img
, or object
element, or an input
element whose type
attribute is in the Image Button state, has an
align
attribute whose value is
an ASCII case-insensitive match for the string "center
" or the string "middle
", the user agent is expected to act as if the
element's 'vertical-align' property was set to a value that aligns
the vertical middle of the element with the parent element's
baseline.
The hspace
attribute of
applet
, embed
, iframe
,
img
, or object
elements, and
input
elements with a type
attribute in the Image Button state, maps to the dimension
properties 'margin-left' and 'margin-right' on the
element.
The vspace
attribute of
applet
, embed
, iframe
,
img
, or object
elements, and
input
elements with a type
attribute in the Image Button state, maps to the dimension
properties 'margin-top' and 'margin-bottom' on the
element.
When an img
element, object
element, or
input
element with a type
attribute in the Image Button state is contained
within a hyperlink and has a border
attribute whose value, when
parsed using the rules for parsing non-negative
integers, is found to be a number greater than zero, the user
agent is expected to use the parsed value for eight
presentational hints: four setting the parsed value as
a pixel length for the element's 'border-top-width',
'border-right-width', 'border-bottom-width', and 'border-left-width'
properties, and four setting the element's 'border-top-style',
'border-right-style', 'border-bottom-style', and 'border-left-style'
properties to the value 'solid'.
The width
and height
attributes on
applet
, embed
, iframe
,
img
, object
or video
elements, and input
elements with a type
attribute in the Image Button state, map to the dimension
properties 'width' and 'height' on the element
respectively.
Shapes on an image map are expected to act, for the
purpose of the CSS cascade, as elements independent of the original
area
element that happen to match the same style rules
but inherit from the img
or object
element.
For the purposes of the rendering, only the 'cursor' property is expected to have any effect on the shape.
Thus, for example, if an area
element has a style
attribute that
sets the 'cursor' property to 'help', then when the user designates
that shape, the cursor would change to a Help cursor.
Similarly, if an area
element had a
CSS rule that set its 'cursor' property to 'inherit' (or if no rule
setting the 'cursor' property matched the element at all), the
shape's cursor would be inherited from the img
or
object
element of the image map, not from
the parent of the area
element.
When a menu
element's type
attribute is in the tool bar state, the element is
expected to be treated as a replaced element with a height about two
lines high and a width derived from the contents of the element.
The element is expected to have, by default, the appearance of a tool bar on the user agent's platform. It is expected to contain the menu that is built from the element.
...example with screenshot...
A number of elements have their rendering defined in terms of the 'binding' property. [BECSS]
The CSS snippets below set the 'binding' property to a
user-agent-defined value, represented below by keywords like bb
. The rules then described for
these bindings are only expected to apply if the element's 'binding'
property has not been overridden (e.g. by the author) to have
another value.
Exactly how the bindings are implemented is not specified by this specification. User agents are encouraged to make their bindings set the 'appearance' CSS property appropriately to achieve platform-native appearances for widgets, and are expected to implement any relevant animations, etc, that are appropriate for the platform. [CSSUI]
The converting a character width to pixels algorithm, used by some of the bindings below, returns (size-1)×avg + max, where size is the character width to convert, avg is the average character width of the primary font for the element for which the algorithm is being run, in pixels, and max is the maximum character width of that same font, also in pixels. (The element's 'letter-spacing' property does not affect the result.)
bb
element@namespace url(http://www.w3.org/1999/xhtml); bb:empty { binding: bb; }
When the bb binding applies to a bb
element, the element is expected to render as an 'inline-block' box
rendered as a button, about one line high, containing text derived
from the element's type
attribute
in a user-agent-defined (and probably locale-specific) fashion.
button
element@namespace url(http://www.w3.org/1999/xhtml); button { binding: button; }
When the button binding applies to a
button
element, the element is expected to render as an
'inline-block' box rendered as a button whose contents are the
contents of the element.
datagrid
elementThis section will probably include details on how to render DATAGRID (including its pseudo-elements), drag-and-drop, etc, in a visual medium, in concert with CSS. Implementation experience is desired before this section is filled in.
details
element@namespace url(http://www.w3.org/1999/xhtml); details { binding: details; }
When the details binding applies to a
details
element, the element is expected to render as a
'block' box with its 'padding-left' property set to '40px'. The
element's shadow tree is expected to take a child element that
matches the selector :bound-element > legend:first-child
and
place it in a first 'block' box container, and then take the
remaining child nodes and place them in a later 'block' box
container.
The first container is expected to contain at least one line box,
and that line box is expected to contain a triangle widget,
horizontally positioned within the left padding of the
details
element. That widget is expected to allow the
user to request that the details be shown or hidden.
The later container is expected to have its 'overflow' property
set to 'hidden'. When the details
element has an open
attribute, the later container
is expected to have its 'height' set to 'auto'; when it does not,
the later container is expected to have its 'height' set to 0.
input
element as a text entry widget@namespace url(http://www.w3.org/1999/xhtml); input { binding: input-textfield; } input[type=password] { binding: input-password; } /* later rules override this for other values of type="" */
When the input-textfield binding applies to an
input
element whose type
attribute is in the Text, Search, URL, or E-mail state, the element is
expected to render as an 'inline-block' box rendered as a text
field.
When the input-password binding applies, to an
input
element whose type
attribute is in the Password state, the element
is expected to render as an 'inline-block' box rendered as a text
field whose contents are obscured.
If an input
element whose type
attribute is in one of the above
states has a size
attribute,
and parsing that attribute's value using the rules for parsing
non-negative integers doesn't generate an error, then the
user agent is expected to use the attribute as a presentational hint for the
'width' property on the element, with the value obtained from
applying the converting a character width to pixels
algorithm to the value of the attribute.
If an input
element whose type
attribute is in one of the above
states does not have a size
attribute, then the user agent
is expected to act as if it had a user-agent-level style sheet rule
setting the 'width' property on the element to the value obtained
from applying the converting a character width to
pixels algorithm to the number 20.
input
element as domain-specific widgets@namespace url(http://www.w3.org/1999/xhtml); input[type=datetime] { binding: input-datetime; } input[type=date] { binding: input-date; } input[type=month] { binding: input-month; } input[type=week] { binding: input-week; } input[type=time] { binding: input-time; } input[type=datetime-local] { binding: input-datetime-local; } input[type=number] { binding: input-number; }
When the input-datetime binding applies to an
input
element whose type
attribute is in the Date and Time state, the
element is expected to render as an 'inline-block' box depicting a
Date and Time control.
When the input-date binding applies to an
input
element whose type
attribute is in the Date state, the element is
expected to render as an 'inline-block' box depicting a Date
control.
When the input-month binding applies to an
input
element whose type
attribute is in the Month state, the element is
expected to render as an 'inline-block' box depicting a Month
control.
When the input-week binding applies to an
input
element whose type
attribute is in the Week state, the element is
expected to render as an 'inline-block' box depicting a Week
control.
When the input-time binding applies to an
input
element whose type
attribute is in the Time state, the element is
expected to render as an 'inline-block' box depicting a Time
control.
When the input-datetime-local binding applies to an
input
element whose type
attribute is in the Local Date and Time
state, the element is expected to render as an 'inline-block' box
depicting a Local Date and Time control.
When the input-number binding applies to an
input
element whose type
attribute is in the Number state, the element is
expected to render as an 'inline-block' box depicting a Number
control.
These controls are all expected to be about one line high, and about as wide as necessary to show the widest possible value.
input
element as a range control@namespace url(http://www.w3.org/1999/xhtml); input[type=range] { binding: input-range; }
When the input-range binding applies to an
input
element whose type
attribute is in the Range state, the element is
expected to render as an 'inline-block' box depicting a slider
control.
When the control is wider than it is tall (or square), the control is expected to be a horizontal slider, with the lowest value on the right if the 'direction' property on this element has a computed value of 'rtl', and on the left otherwise. When the control is taller than it is wide, it is expected to be a vertical slider, with the lowest value on the bottom.
Predefined suggested values (provided by the list
attribute) are expected to be
shown as tick marks on the slider, which the slider can snap to.
input
element as a color well@namespace url(http://www.w3.org/1999/xhtml); input[type=color] { binding: input-color; }
When the input-color binding applies to an
input
element whose type
attribute is in the Color state, the element is
expected to render as an 'inline-block' box depicting a color well,
which, when activated, provides the user with a color picker (e.g. a
color wheel or color palette) from which the color can be
changed.
Predefined suggested values (provided by the list
attribute) are expected to be
shown in the color picker interface, not on the color well
itself.
input
element as a check box and radio button widgets@namespace url(http://www.w3.org/1999/xhtml); input[type=checkbox] { binding: input-checkbox; } input[type=radio] { binding: input-radio; }
When the input-checkbox binding applies to an
input
element whose type
attribute is in the Checkbox state, the element
is expected to render as an 'inline-block' box containing a single
check box control, with no label.
When the input-radio binding applies to an
input
element whose type
attribute is in the Radio Button state, the element
is expected to render as an 'inline-block' box containing a single
radio button control, with no label.
input
element as a file upload control@namespace url(http://www.w3.org/1999/xhtml); input[type=file] { binding: input-file; }
When the input-file binding applies to an
input
element whose type
attribute is in the File Upload state, the element
is expected to render as an 'inline-block' box containing a span of
text giving the filename(s) of the selected files, if
any, followed by a button that, when activated, provides the user
with a file picker from which the selection can be changed.
input
element as a button@namespace url(http://www.w3.org/1999/xhtml); input[type=submit], input[type=reset], input[type=button] { binding: input-button; }
When the input-button binding applies to an
input
element whose type
attribute is in the Submit Button, Reset Button, or Button state, the element is
expected to render as an 'inline-block' box rendered as a button,
about one line high, containing the contents of the element's value
attribute, if any, or text
derived from the element's type
attribute in a user-agent-defined (and probably locale-specific)
fashion, if not.
marquee
element...(Waiting til I've specced the DOM side of this)...
meter
element@namespace url(http://www.w3.org/1999/xhtml); meter { binding: meter; }
When the meter binding applies to a
meter
element, the element is expected to render as an
'inline-block' box with a 'height' of '1em' and a 'width' of '5em',
a 'vertical-align' of '-0.2em', and with its contents depicting a
gauge.
When the element is wider than it is tall (or square), the depiction is expected to be of a horizontal gauge, with the minimum value on the right if the 'direction' property on this element has a computed value of 'rtl', and on the left otherwise. When the element is taller than it is wide, it is expected to depict a vertical gauge, with the minimum value on the bottom.
User agents are expected to use a presentation consistent with platform conventions for gauges, if any.
Requirements for what must be depicted in the gauge
are included in the definition of the meter
element.
progress
element@namespace url(http://www.w3.org/1999/xhtml); progress { binding: progress; }
When the progress binding applies to a
progress
element, the element is expected to render as
an 'inline-block' box with a 'height' of '1em' and a 'width' of
'10em', a 'vertical-align' of '-0.2em', and with its contents
depicting a horizontal progress bar, with the start on the right and
the end on the left if the 'direction' property on this element has
a computed value of 'rtl', and with the start on the left and the
end on the right otherwise.
User agents are expected to use a presentation consistent with platform conventions for progress bars. In particular, user agents are expected to use different presentations for determinate and indeterminate progress bars. User agents are also expected to vary the presentation based on the dimensions of the element.
For example, on some platforms for showing indeterminate progress there is an asynchronous progress indicator with square dimensions, which could be used when the element is square, and an indeterminate progress bar, which could be used when the element is wide.
Requirements for how to determine if the progress
bar is determinate or indeterminate, and what progress a determinate
progress bar is to show, are included in the definition of the
progress
element.
select
element@namespace url(http://www.w3.org/1999/xhtml); select { binding: select; }
When the select binding applies to a
select
element whose multiple
attribute is present,
the element is expected to render as a multi-select list box.
When the select binding applies to a
select
element whose multiple
attribute is absent,
and the element's size
attribute specifies a value greater than 1, the element is
expected to render as a single-select list box.
When the element renders as a list box, it is expected to render
as an 'inline-block' box whose 'height' is the height necessary to
contain as many rows for items as specified by the element's size
attribute, or four rows if the
attribute is absent, and whose 'width' is the width of the
select
's labels plus the width of a
scrollbar.
When the select binding applies to a
select
element whose multiple
attribute is absent,
and the element's size
attribute is either absent or specifies either no value (an error),
or a value less than or equal to 1, the element is expected to
render as a one-line drop down box whose width is the width of
the select
's labels.
In either case (list box or drop-down box), the element's items
are expected to be the element's list of options, with the
element's optgroup
element children providing headers
for groups of options where applicable.
The width of the select
's labels is the
wider of the width necessary to render the widest
optgroup
, and the width necessary to render the widest
option
element in the element's list of options (including
its indent, if any).
An optgroup
element is expected to be rendered by
displaying the element's label
attribute.
An option
element is expected to be rendered by
displaying the element's label
, indented under its
optgroup
element if it has one.
textarea
element@namespace url(http://www.w3.org/1999/xhtml); textarea { binding: textarea; }
When the textarea binding applies to a
textarea
element, the element is expected to render as
an 'inline-block' box rendered as a multiline text field.
If the element has a cols
attribute, and parsing that attribute's value using the rules
for parsing non-negative integers doesn't generate an error,
then the user agent is expected to use the attribute as a presentational hint for the
'width' property on the element, with the value obtained from
applying the converting a character width to pixels
algorithm to the value of the attribute and then adding the width of
a scroll bar.
If the element has a rows
attribute, and parsing that attribute's value using the rules
for parsing non-negative integers doesn't generate an error,
then the user agent is expected to use the attribute as a presentational hint for the
'height' property on the element, with the value being the specified
number of lines, plus the height of a scrollbar.
For historical reasons, if the element has a wrap
attribute whose value is an
ASCII case-insensitive match for the string "off
", then the user agent is
expected to not wrap the rendered value; otherwise, the value of the
control is expected to be wrapped to the width of the control.
keygen
element@namespace url(http://www.w3.org/1999/xhtml); keygen { binding: keygen; }
When the keygen binding applies to a
keygen
element, the element is expected to render as an
'inline-block' box containing a user interface to configure the key
pair to be generated.
When an html
element's second child element is a
frameset
element, the user agent is expected to render
the frameset
element as described below across the
surface of the view, instead of applying the usual CSS
rendering rules.
When rendering a frameset
on a surface, the user
agent is expected to use the following layout algorithm:
The cols and rows variables are lists of zero or more pairs consisting of a number and a unit, the unit being one of percentage, relative, and absolute.
Use the rules for parsing a list of dimensions to
parse the value of the element's cols
attribute, if there is
one. Let cols be the result, or an empty list
if there is no such attribute.
Use the rules for parsing a list of dimensions to
parse the value of the element's rows
attribute, if there is
one. Let rows be the result, or an empty list
if there is no such attribute.
For any of the entries in cols or rows that have the number zero and the unit relative, change the entry's number to one.
If cols has no entries, then add a single entry consisting of the value 1 and the unit relative to cols.
If rows has no entries, then add a single entry consisting of the value 1 and the unit relative to rows.
Invoke the algorithm defined below to convert a list of
dimensions to a list of pixel values using cols as the input list, and the width of the
surface that the frameset
is being rendered into, in
CSS pixels, as the input dimension. Let sized
cols be the resulting list.
Invoke the algorithm defined below to convert a list of
dimensions to a list of pixel values using rows as the input list, and the height of the
surface that the frameset
is being rendered into, in
CSS pixels, as the input dimension. Let sized
rows be the resulting list.
Split the surface into a grid of w×h rectangles, where w is the number of entries in sized cols and h is the number of entries in sized rows.
Size the columns so that each column in the grid is as many CSS pixels wide as the corresponding entry in the sized cols list.
Size the rows so that each row in the grid is as many CSS pixels high as the corresponding entry in the sized rows list.
Let children be the list of
frame
and frameset
elements that are
children of the frameset
element for which the
algorithm was invoked.
For each row of the grid of rectangles created in the previous step, from top to bottom, run these substeps:
For each rectangle in the row, from left to right, run these substeps:
If there are any elements left in children, take the first element in the list, and assign it to the rectangle.
If this is a frameset
element, then recurse
the entire frameset
layout algorithm for that
frameset
element, with the rectangle as the
surface.
Otherwise, it is a frame
element; create a
nested browsing context sized to fit the
rectangle.
If there are any elements left in children, remove the first element from children.
If the frameset
element has a border,
draw an outer set of borders around the rectangles, using the
element's frame border color.
For each rectangle, if there is an element assigned to that rectangle, and that element has a border, draw an inner set of borders around that rectangle, using the element's frame border color.
For each (visible) border that does not abut a rectangle that
is assigned a frame
element with a noresize
attribute (including
rectangles in further nested frameset
elements), the
user agent is expected to allow the user to move the border,
resizing the rectangles within, keeping the proportions of any
nested frameset
grids.
A frameset
or frame
element has
a border if the following algorithm returns true:
If the element has a frameborder
attribute
whose value is not the empty string and whose first character is
either a U+0031 DIGIT ONE (1), a U+0079 LATIN SMALL LETTER Y, or
a U+0059 LATIN CAPITAL LETTER Y, then return true.
Otherwise, if the element has a frameborder
attribute,
return false.
Otherwise, if the element has a parent element that is a
frameset
element, then return true if that
element has a border, and false if it does
not.
Otherwise, return true.
The frame border color of a frameset
or
frame
element is the color obtained from the
following algorithm:
If the element has a bordercolor
attribute, and
applying the rules for parsing a legacy color value
to that attribute's value does not result in an error, then
return the color so obtained.
Otherwise, if the element has a parent element that is a
frameset
element, then the frame border
color of that element.
Otherwise, return gray.
The algorithm to convert a list of dimensions to a list of pixel values consists of the following steps:
Let input list be the list of numbers and units passed to the algorithm.
Let output list be a list of numbers the same length as input list, all zero.
Entries in output list correspond to the entries in input list that have the same position.
Let input dimension be the size passed to the algorithm.
Let count percentage be the number of entries in input list whose unit is percentage.
Let total percentage be the sum of all the numbers in input list whose unit is percentage.
Let count relative be the number of entries in input list whose unit is relative.
Let total relative be the sum of all the numbers in input list whose unit is relative.
Let count absolute be the number of entries in input list whose unit is absolute.
Let total absolute be the sum of all the numbers in input list whose unit is absolute.
Let remaining space be the value of input dimension.
If total absolute is greater than remaining space, then for each entry in input list whose unit is absolute, set the corresponding value in output list to the number of the entry in input list multiplied by remaining space and divided by total absolute. Then, set remaining space to zero.
Otherwise, for each entry in input list whose unit is absolute, set the corresponding value in output list to the number of the entry in input list. Then, decrement remaining space by total absolute.
If total percentage multiplied by the input dimension and divided by 100 is greater than remaining space, then for each entry in input list whose unit is percentage, set the corresponding value in output list to the number of the entry in input list multiplied by remaining space and divided by total percentage. Then, set remaining space to zero.
Otherwise, for each entry in input list whose unit is percentage, set the corresponding value in output list to the number of the entry in input list multiplied by the input dimension and divided by 100. Then, decrement remaining space by total percentage multiplied by the input dimension and divided by 100.
For each entry in input list whose unit is relative, set the corresponding value in output list to the number of the entry in input list multiplied by remaining space and divided by total relative.
Return output list.
User agents working with integer values for frame widths (as opposed to user agents that can lay frames out with subpixel accuracy) are expected to distribute the remainder first the last entry whose unit is relative, then equally (not proportionally) to each entry whose unit is percentage, then equally (not proportionally) to each entry whose unit is absolute, and finally, failing all else, to the last entry.
User agents are expected to allow the user to control aspects of hyperlink activation and form submission, such as which browsing context is to be used for the subsequent navigation.
User agents are expected to allow users to discover the destination of hyperlinks and of forms before triggering their navigation.
User agents are expected to inform the user of whether a hyperlink includes hyperlink auditing, and to let them know at a minimum which domains will be contacted as part of such auditing.
User agents are expected to allow users to navigate
browsing contexts to the
resources indicated by the cite
attributes on q
,
blockquote
, ins
, and del
elements.
User agents are expected to surface hyperlinks created by link
elements in their user interface.
While link
elements that create hyperlinks will match the ':link' or
':visited' pseudo-classes, will react to clicks if visible, and so
forth, this does not extend to any browser interface constructs that
expose those same links. Activating a link through the browser's
interface, rather than in the page itself, does not trigger click
events and the like.
mark
elementUser agents are expected to allow the user to cycle through all
the mark
elements in a Document
. User
agents are also expected to bring their existence to the user's
attention, even when they are off-screen, e.g. by highlighting
portions of the scroll bar that represent portions of the document
that contain mark
elements.
title
attributeGiven an element (e.g. the element designated by the mouse
cursor), if the element, or one of its ancestors, has a title
attribute, and the nearest such
attribute has a value that is not the empty string, it is expected
that the user agent will expose the contents of that attribute as a
tooltip.
U+000A LINE FEED (LF) characters are expected to cause line breaks in the tooltip.
User agents are expected to allow the user to request the
opportunity to obtain a physical form (or a
representation of a physical form) of a Document
. For
example, selecting the option to print a page or convert it to PDF
format.
When the user actually obtains a physical form (or a representation of a
physical form) of a Document
, the user agent is
expected to create a new view with the print media, render the
result, and the discard the view.
Must define that in CSS, tag and attribute names in HTML documents, and class names in quirks mode documents, are case-insensitive, as well as saying which attribute values must be compared case-insensitively.
Authors and documents must not use the features listed in this section. They are documented to enable user agents to support legacy content in an interoperable fashion.
applet
elementThe applet
element is a Java-specific variant of the
embed
element. In HTML5 the applet
element
is obsoleted so that all extension frameworks (Java, .NET, Flash,
etc) are handled in a consistent manner.
When the sandboxed plugins
browsing context flag is set on the browsing
context for which the applet
element's document
is the active document, and when the element has an
ancestor object
element that is not showing
its fallback content, the element must be ignored (it
represents nothing).
Otherwise, define how the element works, if supported.
[XXX] interface HTMLDocument { readonly attribute HTMLCollection applets; };
The applets
attribute must return an HTMLCollection
rooted at the
Document
node, whose filter matches only
applet
elements.
marquee
element...
The following elements are obsolete and either have no meaning whatsoever or have no requirements beyond those described elsewhere in this specification:
center
The following attributes are obsolete and either have no meaning whatsoever or have no requirements beyond those described elsewhere in this specification:
name
on a
elementsalink
on body
elementsbgcolor
on body
elementslink
on body
elementstext
on body
elementsvlink
on body
elementsThese APIs expose obsolete content attributes.
The [XXX] below is for some annotation meaning "this is just another part of the named interface, and should be treated as if it had been part of the main interface definition".
[XXX] interface HTMLBodyElement { attribute DOMString text; attribute DOMString bgColor; attribute DOMString background; attribute DOMString link; attribute DOMString vLink; attribute DOMString aLink; };
The text
DOM
attribute of the body
element must reflect
the element's text
content
attribute.
The bgColor
DOM
attribute of the body
element must reflect
the element's bgcolor
content
attribute.
The background
DOM
attribute of the body
element must reflect
the element's background
content
attribute.
The link
DOM
attribute of the body
element must reflect
the element's link
content
attribute.
The aLink
DOM
attribute of the body
element must reflect
the element's alink
content
attribute.
The vLink
DOM
attribute of the body
element must reflect
the element's vlink
content
attribute.
[XXX] interface HTMLDocument { attribute DOMString fgColor; attribute DOMString bgColor; attribute DOMString linkColor; attribute DOMString vlinkColor; attribute DOMString alinkColor; };
The fgColor
attribute on the Document
object must
reflect the text
attribute on the body element.
The bgColor
attribute on the Document
object must
reflect the bgcolor
attribute on the body element.
The linkColor
attribute on the Document
object must
reflect the link
attribute on the body element.
The vLinkColor
attribute on the Document
object must
reflect the vlink
attribute on the body element.
The aLinkColor
attribute on the Document
object must
reflect the alink
attribute on the body element.
To ease the transition from HTML4 Transitional documents to the language defined in this specification, conformance checkers are encouraged to categorize errors that represent usage of old obsolete features that generally have no effect (as defined below) into a separate part of their report, to allow authors to distinguish between likely mistakes and mere vestigial markup.
The following errors may be categorized as described above:
The DOCTYPE parse error, if the DOCTYPE token's
name
is an ASCII
case-insensitive match for the string "HTML
", and either:
-//W3C//DTD HTML 4.0//EN
" and the
token's system identifier is either missing or the
case-sensitive string "http://www.w3.org/TR/REC-html40/strict.dtd
", or-//W3C//DTD HTML 4.01//EN
" and the
token's system identifier is either missing or the
case-sensitive string "http://www.w3.org/TR/html4/strict.dtd
", or-//W3C//DTD XHTML 1.0 Strict//EN
"
and the token's system identifier is the
case-sensitive string "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
",
or-//W3C//DTD XHTML 1.1//EN
"
and the token's system identifier is the
case-sensitive string "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
".The presence of a profile
attribute on the
head
element, if its value is an unordered set
of unique space-separated tokens where the words are all
valid URLs.
The presence of a meta
element with an http-equiv
attribute in the
Content
Language state.
The presence of a border
attribute on an
img
element if its value is the string "0
".
The presence of a longdesc
attribute on an
img
element, if its value is a valid
URL.
The presence of a language
attribute on a
script
element if its value is an ASCII
case-insensitive match for the string "JavaScript
".
The presence of a name
attribute on an a
element, if its value is not the
empty string.
The presence of a summary
attribute on a
table
element.