Living Standard — Last Updated 1 October 2025
button elementdetails and summary elementsinput element as a text entry widgetinput element as domain-specific widgetsinput element as a range controlinput element as a color
wellinput element as a checkbox and radio button widgetsinput element as a file upload controlinput element as a buttonmarquee elementmeter elementprogress elementselect elementtextarea elementUser agents are not required to 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, "must" has not been used. Instead, the term "expected" is used to indicate behavior that will lead to this experience. For the purposes of conformance for user agents designated as supporting the suggested default rendering, the term "expected" in this section has the same conformance implications as "must".
The suggestions in this section are generally expressed in CSS terms. User agents are expected to either support CSS, or translate from the CSS rules given in this section to approximations for other presentation mechanisms.
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 agent implementers are encouraged to adapt the suggestions in this section to their target media.
An element is being rendered if it has any associated CSS layout boxes, SVG layout boxes, or some equivalent in other styling languages.
Just being off-screen does not mean the element is not being rendered. The presence of the attribute normally means the element is not being rendered, though this might be overridden by the style sheets.
The fully active state does not affect whether an element is being rendered or not. Even if a document is not fully active and not shown at all to the user, elements within it can still qualify as "being rendered".
An element is said to intersect the viewport when it is being rendered and its associated CSS layout box intersects the viewport.
Similar to the being rendered state, elements in non-fully active documents can still intersect the viewport. The viewport is not shared between documents and might not always be shown to the user, so an element in a non-fully active document can still intersect the viewport associated with its document.
This specification does not define the precise timing for when the intersection is tested, but it is suggested that the timing match that of the Intersection Observer API. [INTERSECTIONOBSERVER]
An element is delegating its rendering to its children if it is not being rendered but its children (if any) could be rendered, as a result of CSS 'display: contents', or some equivalent in other styling languages. [CSSDISPLAY]
User agents that do not honor author-level CSS style sheets are nonetheless expected to act as if they applied the CSS rules given in these sections in a manner consistent with this specification and the relevant CSS and Unicode specifications. [CSS] [UNICODE] [BIDI]
This is especially important for issues relating to the 'display', 'unicode-bidi', and 'direction' properties.
The CSS rules given in these subsections are, except where 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.
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 a length, and with the value given as a percentage if the dimension was a percentage.
When the text below says that an attribute attribute on an element element maps to the dimension property (ignoring zero) (or properties) properties, it means that if element has an attribute attribute set, and parsing that attribute's value using the rules for parsing nonzero 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 a length, and with the value given as a percentage if the dimension was a percentage.
When the text below says that a pair of attributes w and h on an
element element map to the aspect-ratio property, it means that if
element has both attributes w and h, and parsing those
attributes' values using the rules for parsing non-negative integers doesn't
generate an error for either, then the user agent is expected to use the parsed
integers as a presentational hint for the
'aspect-ratio' property of the form auto w /
h.
When the text below says that a pair of attributes w and h on an
element element map to the aspect-ratio property (using dimension rules), it
means that if element has both attributes w and h, and parsing
those attributes' values using the rules for parsing dimension values doesn't
generate an error or return a percentage for either, then the user agent is expected
to use the parsed dimensions as a presentational hint
for the 'aspect-ratio' property of the form auto w /
h.
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-inline-start' and 'margin-inline-end' 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. When multiple elements are to align a particular descendant, the most deeply nested such element is
expected to override the others. Aligned elements are expected to be
aligned by having the used values of their margins on the
line-left and line-right sides be set accordingly.
[CSSLOGICAL] [CSSWM]
@namespace "http://www.w3.org/1999/xhtml";
area, base, basefont, datalist, head, link, meta, noembed,
noframes, param, rp, script, style, template, title {
display: none;
}
{
display: none;
}
[hidden=until-found i]:not(embed) {
content-visibility: hidden;
}
embed[hidden] { display: inline; height: 0; width: 0; }
input[type=hidden i] { display: none !important; }
@media (scripting) {
noscript { display: none !important; }
}
@namespace "http://www.w3.org/1999/xhtml";
html, body { display: block; }
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' | The body element's marginheight attribute
|
The body element's topmargin attribute
| |
The body element's container frame element's marginheight attribute
| |
| 'margin-right' | The body element's marginwidth attribute
|
The body element's rightmargin attribute
| |
The body element's container frame element's marginwidth attribute
| |
| 'margin-bottom' | The body element's marginheight attribute
|
The body element's bottommargin attribute
| |
The body element's container frame element's marginheight attribute
| |
| 'margin-left' | The body element's marginwidth attribute
|
The body element's leftmargin attribute
| |
The body element's container frame element's marginwidth attribute
|
If the body element's node document's node navigable is
a child navigable, and the container of that
navigable 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.
The above requirements imply that a page can change the margins of another page
(including one from another origin) using, for example, an iframe. This
is potentially a security risk, as it might in some cases allow an attack to contrive a situation
in which a page is rendered not as the author intended, possibly for the purposes of phishing or
otherwise misleading the user.
If a Document's node navigable is a child navigable,
then it is expected to be positioned and sized to fit inside the content
box of the container of that navigable.
If the container is not being rendered, the
navigable is expected to have a viewport with zero width
and zero height.
If a Document's node navigable is a child navigable,
the container of that navigable is a
frame or iframe element, that element has a scrolling attribute, and that attribute's value is an ASCII
case-insensitive match for the string "off", "noscroll", or "no", then the user agent is
expected to prevent any scrollbars from being shown for the viewport of
the Document's node navigable, regardless of the
'overflow' property that applies to that viewport.
When a body element has a background
attribute set to a non-empty value, the new value is expected to be encoding-parsed-and-serialized relative to
the element's node document, and if that does not return failure, the user agent is
expected to treat the attribute as a presentational hint setting the element's 'background-image' property
to the return value.
When a body 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 failure, 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 failure, 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 failure, 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 failure, 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 an alink attribute,
its value is expected to be parsed using the rules for parsing a legacy color
value, and if that does not return failure, 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.
@namespace "http://www.w3.org/1999/xhtml";
address, blockquote, center, dialog, div, figure, figcaption, footer, form,
header, hr, legend, listing, main, p, plaintext, pre, search, xmp {
display: block;
}
blockquote, figure, listing, p, plaintext, pre, xmp {
margin-block: 1em;
}
blockquote, figure { margin-inline: 40px; }
address { font-style: italic; }
listing, plaintext, pre, xmp {
font-family: monospace; white-space: pre;
}
dialog:not([open]) { display: none; }
dialog {
position: absolute;
justify-self: dialog;
border: solid;
padding: 1em;
background-color: Canvas;
color: CanvasText;
}
dialog:modal {
position: fixed;
place-self: dialog;
overflow: auto;
max-width: calc(100% - 6px - 2em);
max-height: calc(100% - 6px - 2em);
}
dialog::backdrop {
background: rgba(0,0,0,0.1);
}
[popover]:not(:popover-open):not(dialog[open]) {
display:none;
}
dialog:popover-open {
display:block;
}
[popover] {
position: fixed;
place-self: dialog;
border: solid;
padding: 0.25em;
overflow: auto;
color: CanvasText;
background-color: Canvas;
}
:popover-open::backdrop {
position: fixed;
inset: 0;
pointer-events: none !important;
background-color: transparent;
}
slot {
display: contents;
}
The following rules are also expected to apply, as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
pre[wrap] { white-space: pre-wrap; }
In quirks mode, the following rules are also expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
form { margin-block-end: 1em; }
The center element, and the div element when it has an align attribute whose value is an ASCII
case-insensitive match for either the string "center" or the string
"middle", 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 element, when it has an align
attribute whose value is an ASCII case-insensitive match for the string "left", is expected to left-align text within itself, as if it had
its 'text-align' property set to 'left' in a presentational hint, and to align descendants to the left.
The div element, when it has an align
attribute whose value is an ASCII case-insensitive match for the string "right", is expected to right-align text within itself, as if it had
its 'text-align' property set to 'right' in a presentational hint, and to align descendants to the right.
The div element, when it has an align
attribute whose value is an ASCII case-insensitive match for the string "justify", is expected to full-justify text within itself, as if it
had its 'text-align' property set to 'justify' in a presentational hint, and to align descendants to the left.
@namespace "http://www.w3.org/1999/xhtml";
cite, dfn, em, i, var { font-style: italic; }
b, strong { font-weight: bolder; }
code, kbd, samp, tt { font-family: monospace; }
big { font-size: larger; }
small { font-size: smaller; }
sub { vertical-align: sub; }
sup { vertical-align: super; }
sub, sup { line-height: normal; font-size: smaller; }
ruby { display: ruby; }
rt { display: ruby-text; }
:link { color: #0000EE; }
:visited { color: #551A8B; }
:link:active, :visited:active { color: #FF0000; }
:link, :visited { text-decoration: underline; cursor: pointer; }
:focus-visible { outline: auto; }
mark { background: yellow; color: black; } /* this color is just a suggestion and can be changed based on implementation feedback */
abbr[title], acronym[title] { text-decoration: dotted underline; }
ins, u { text-decoration: underline; }
del, s, strike { text-decoration: line-through; }
q::before { content: open-quote; }
q::after { content: close-quote; }
br { display-outside: newline; } /* this also has bidi implications */
nobr { white-space: nowrap; }
wbr { display-outside: break-opportunity; } /* this also has bidi implications */
nobr wbr { white-space: normal; }
The following rules are also expected to apply, as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
br[clear=left i] { clear: left; }
br[clear=right i] { clear: right; }
br[clear=all i], br[clear=both i] { clear: both; }
For the purposes of the CSS ruby model, runs of children 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'.
[CSSRUBY]
When a particular part of a ruby has more than one annotation, the annotations should be distributed on both sides of the base text so as to minimize the stacking of ruby annotations on one side.
When it becomes possible to do so, the preceding requirement will be updated to be
expressed in terms of CSS ruby. (Currently, CSS ruby does not handle nested ruby
elements or multiple sequential rt elements, which is how this semantic is
expressed.)
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.
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 CSS.
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.
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 failure, 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 size
attribute, the user agent is expected to use the following steps, known as the
rules for parsing a legacy font size, 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.
Skip ASCII whitespace within input given position.
If position is past the end of input, there is no presentational hint. Return.
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 code points that are ASCII digits from input given position, and let digits be the resulting sequence.
If digits is the empty string, there is no presentational hint. Return.
Interpret digits as a base-ten integer. Let value be the resulting number.
If mode is relative-plus, then increment value by 3. If mode is relative-minus, then let value be the result of subtracting value from 3.
If value is greater than 7, let it be 7.
If value is less than 1, let it be 1.
Set the 'font-size' property to the keyword corresponding to the value of value according to the following table:
| value | 'font-size' keyword |
|---|---|
| 1 | 'x-small' |
| 2 | 'small' |
| 3 | 'medium' |
| 4 | 'large' |
| 5 | 'x-large' |
| 6 | 'xx-large' |
| 7 | 'xxx-large' |
@namespace "http://www.w3.org/1999/xhtml";
[dir]:dir(ltr), bdi:dir(ltr), input[type=tel i]:dir(ltr) { direction: ltr; }
[dir]:dir(rtl), bdi:dir(rtl) { direction: rtl; }
address, blockquote, center, div, figure, figcaption, footer, form, header, hr,
legend, listing, main, p, plaintext, pre, summary, xmp, article, aside,
:heading, hgroup, nav, section, search, table, caption, colgroup, col, thead,
tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, bdi, output,
[dir=ltr i], [dir=rtl i], [dir=auto i] {
unicode-bidi: isolate;
}
bdo, bdo[dir] { unicode-bidi: isolate-override; }
input[dir=auto i]:is([type=search i], [type=tel i], [type=url i],
[type=email i]), textarea[dir=auto i], pre[dir=auto i] {
unicode-bidi: plaintext;
}
/* see prose for input elements whose type attribute is in the Text state */
/* the rules setting the 'content' property on br and wbr elements also has bidi implications */
When an input element's dir attribute is in the
auto state and its type
attribute is in the Text state, then the user agent is
expected to act as if it had a user-agent-level style sheet rule setting the
'unicode-bidi' property to 'plaintext'.
Input fields (i.e. textarea elements, and input elements when their
type attribute is in the Text, Search,
Telephone, URL,
or Email state) are expected to present
an editing user interface with a directionality that matches the element's
'direction' property.
When the document's character encoding is ISO-8859-8, the following rules are additionally expected to apply, following those above: [ENCODING]
@namespace "http://www.w3.org/1999/xhtml";
address, blockquote, center, div, figure, figcaption, footer, form, header, hr,
legend, listing, main, p, plaintext, pre, summary, xmp, article, aside,
:heading, hgroup, nav, section, search, table, caption, colgroup, col, thead,
tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, [dir=ltr i],
[dir=rtl i], [dir=auto i], *|* {
unicode-bidi: bidi-override;
}
input:not([type=submit i]):not([type=reset i]):not([type=button i]),
textarea {
unicode-bidi: normal;
}
@namespace "http://www.w3.org/1999/xhtml";
article, aside, :heading, hgroup, nav, section {
display: block;
}
:heading { font-weight: bold; }
:heading(1) { margin-block: 0.67em; font-size: 2.00em; }
:heading(2) { margin-block: 0.83em; font-size: 1.50em; }
:heading(3) { margin-block: 1.00em; font-size: 1.17em; }
:heading(4) { margin-block: 1.33em; font-size: 1.00em; }
:heading(5) { margin-block: 1.67em; font-size: 0.83em; }
:heading(6, 7, 8, 9) {
font-size: 0.67em;
margin-block: 2.33em;
}
@namespace "http://www.w3.org/1999/xhtml";
dir, dd, dl, dt, menu, ol, ul { display: block; }
li { display: list-item; text-align: match-parent; }
dir, dl, menu, ol, ul { margin-block: 1em; }
:is(dir, dl, menu, ol, ul) :is(dir, dl, menu, ol, ul) {
margin-block: 0;
}
dd { margin-inline-start: 40px; }
dir, menu, ol, ul { padding-inline-start: 40px; }
ol, ul, menu { counter-reset: list-item; }
ol { list-style-type: decimal; }
dir, menu, ul {
list-style-type: disc;
}
:is(dir, menu, ol, ul) :is(dir, menu, ul) {
list-style-type: circle;
}
:is(dir, menu, ol, ul) :is(dir, menu, ol, ul) :is(dir, menu, ul) {
list-style-type: square;
}
The following rules are also expected to apply, as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
ol[type="1"], li[type="1"] { list-style-type: decimal; }
ol[type=a s], li[type=a s] { list-style-type: lower-alpha; }
ol[type=A s], li[type=A s] { list-style-type: upper-alpha; }
ol[type=i s], li[type=i s] { list-style-type: lower-roman; }
ol[type=I s], li[type=I s] { list-style-type: upper-roman; }
ul[type=none i], li[type=none i] { list-style-type: none; }
ul[type=disc i], li[type=disc i] { list-style-type: disc; }
ul[type=circle i], li[type=circle i] { list-style-type: circle; }
ul[type=square i], li[type=square i] { list-style-type: square; }
In quirks mode, the following rules are also expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
li { list-style-position: inside; }
li :is(dir, menu, ol, ul) { list-style-position: outside; }
:is(dir, menu, ol, ul) :is(dir, menu, ol, ul, li) { list-style-position: unset; }
When rendering li elements, non-CSS user agents are expected to use
the ordinal value of the li element to render the counter in the list
item marker.
For CSS user agents, some aspects of rendering list items are defined by the CSS Lists specification. Additionally, the following attribute mappings are expected to apply: [CSSLISTS]
When an li element has a value attribute, and parsing that attribute's value using the
rules for parsing integers doesn't generate an error, the user agent is
expected to use the parsed value value as a presentational hint for the 'counter-set' property of the form list-item value.
When an ol element has a start
attribute or a reversed attribute, or both, the user agent
is expected to use the following steps to treat the attributes as a presentational hint for the 'counter-reset'
property:
Let value be null.
If the element has a start attribute, then set
value to the result of parsing the attribute's value using the rules for
parsing integers.
If the element has a reversed attribute, then:
If value is an integer, then increment value by 1 and return
reversed(list-item) value.
Otherwise, return reversed(list-item).
Either the start attribute was absent, or
parsing its value resulted in an error.
Otherwise:
If value is an integer, then decrement value by 1 and return
list-item value.
Otherwise, there is no presentational hint.
@namespace "http://www.w3.org/1999/xhtml";
table { display: table; }
caption { display: table-caption; }
colgroup, colgroup[hidden] { display: table-column-group; }
col, col[hidden] { display: table-column; }
thead, thead[hidden] { display: table-header-group; }
tbody, tbody[hidden] { display: table-row-group; }
tfoot, tfoot[hidden] { display: table-footer-group; }
tr, tr[hidden] { display: table-row; }
td, th { display: table-cell; }
colgroup[hidden], col[hidden], thead[hidden], tbody[hidden],
tfoot[hidden], tr[hidden] {
visibility: collapse;
}
table {
box-sizing: border-box;
border-spacing: 2px;
border-collapse: separate;
text-indent: initial;
}
td, th { padding: 1px; }
th { font-weight: bold; }
caption { text-align: center; }
thead, tbody, tfoot, table > tr { vertical-align: middle; }
tr, td, th { vertical-align: inherit; }
thead, tbody, tfoot, tr { border-color: inherit; }
table[rules=none i], table[rules=groups i], table[rules=rows i],
table[rules=cols i], table[rules=all i], table[frame=void i],
table[frame=above i], table[frame=below i], table[frame=hsides i],
table[frame=lhs i], table[frame=rhs i], table[frame=vsides i],
table[frame=box i], table[frame=border i],
table[rules=none i] > tr > td, table[rules=none i] > tr > th,
table[rules=groups i] > tr > td, table[rules=groups i] > tr > th,
table[rules=rows i] > tr > td, table[rules=rows i] > tr > th,
table[rules=cols i] > tr > td, table[rules=cols i] > tr > th,
table[rules=all i] > tr > td, table[rules=all i] > tr > th,
table[rules=none i] > thead > tr > td, table[rules=none i] > thead > tr > th,
table[rules=groups i] > thead > tr > td, table[rules=groups i] > thead > tr > th,
table[rules=rows i] > thead > tr > td, table[rules=rows i] > thead > tr > th,
table[rules=cols i] > thead > tr > td, table[rules=cols i] > thead > tr > th,
table[rules=all i] > thead > tr > td, table[rules=all i] > thead > tr > th,
table[rules=none i] > tbody > tr > td, table[rules=none i] > tbody > tr > th,
table[rules=groups i] > tbody > tr > td, table[rules=groups i] > tbody > tr > th,
table[rules=rows i] > tbody > tr > td, table[rules=rows i] > tbody > tr > th,
table[rules=cols i] > tbody > tr > td, table[rules=cols i] > tbody > tr > th,
table[rules=all i] > tbody > tr > td, table[rules=all i] > tbody > tr > th,
table[rules=none i] > tfoot > tr > td, table[rules=none i] > tfoot > tr > th,
table[rules=groups i] > tfoot > tr > td, table[rules=groups i] > tfoot > tr > th,
table[rules=rows i] > tfoot > tr > td, table[rules=rows i] > tfoot > tr > th,
table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th,
table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th {
border-color: black;
}
The following rules are also expected to apply, as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
table[align=left i] { float: left; }
table[align=right i] { float: right; }
table[align=center i] { margin-inline: auto; }
thead[align=absmiddle i], tbody[align=absmiddle i], tfoot[align=absmiddle i],
tr[align=absmiddle i], td[align=absmiddle i], th[align=absmiddle i] {
text-align: center;
}
caption[align=bottom i] { caption-side: bottom; }
p[align=left i], h1[align=left i], h2[align=left i], h3[align=left i],
h4[align=left i], h5[align=left i], h6[align=left i] {
text-align: left;
}
p[align=right i], h1[align=right i], h2[align=right i], h3[align=right i],
h4[align=right i], h5[align=right i], h6[align=right i] {
text-align: right;
}
p[align=center i], h1[align=center i], h2[align=center i], h3[align=center i],
h4[align=center i], h5[align=center i], h6[align=center i] {
text-align: center;
}
p[align=justify i], h1[align=justify i], h2[align=justify i], h3[align=justify i],
h4[align=justify i], h5[align=justify i], h6[align=justify i] {
text-align: justify;
}
thead[valign=top i], tbody[valign=top i], tfoot[valign=top i],
tr[valign=top i], td[valign=top i], th[valign=top i] {
vertical-align: top;
}
thead[valign=middle i], tbody[valign=middle i], tfoot[valign=middle i],
tr[valign=middle i], td[valign=middle i], th[valign=middle i] {
vertical-align: middle;
}
thead[valign=bottom i], tbody[valign=bottom i], tfoot[valign=bottom i],
tr[valign=bottom i], td[valign=bottom i], th[valign=bottom i] {
vertical-align: bottom;
}
thead[valign=baseline i], tbody[valign=baseline i], tfoot[valign=baseline i],
tr[valign=baseline i], td[valign=baseline i], th[valign=baseline i] {
vertical-align: baseline;
}
td[nowrap], th[nowrap] { white-space: nowrap; }
table[rules=none i], table[rules=groups i], table[rules=rows i],
table[rules=cols i], table[rules=all i] {
border-style: hidden;
border-collapse: collapse;
}
table[border] { border-style: outset; } /* only if border is not equivalent to zero */
table[frame=void i] { border-style: hidden; }
table[frame=above i] { border-style: outset hidden hidden hidden; }
table[frame=below i] { border-style: hidden hidden outset hidden; }
table[frame=hsides i] { border-style: outset hidden outset hidden; }
table[frame=lhs i] { border-style: hidden hidden hidden outset; }
table[frame=rhs i] { border-style: hidden outset hidden hidden; }
table[frame=vsides i] { border-style: hidden outset; }
table[frame=box i], table[frame=border i] { border-style: outset; }
table[border] > tr > td, table[border] > tr > th,
table[border] > thead > tr > td, table[border] > thead > tr > th,
table[border] > tbody > tr > td, table[border] > tbody > tr > th,
table[border] > tfoot > tr > td, table[border] > tfoot > tr > th {
/* only if border is not equivalent to zero */
border-width: 1px;
border-style: inset;
}
table[rules=none i] > tr > td, table[rules=none i] > tr > th,
table[rules=none i] > thead > tr > td, table[rules=none i] > thead > tr > th,
table[rules=none i] > tbody > tr > td, table[rules=none i] > tbody > tr > th,
table[rules=none i] > tfoot > tr > td, table[rules=none i] > tfoot > tr > th,
table[rules=groups i] > tr > td, table[rules=groups i] > tr > th,
table[rules=groups i] > thead > tr > td, table[rules=groups i] > thead > tr > th,
table[rules=groups i] > tbody > tr > td, table[rules=groups i] > tbody > tr > th,
table[rules=groups i] > tfoot > tr > td, table[rules=groups i] > tfoot > tr > th,
table[rules=rows i] > tr > td, table[rules=rows i] > tr > th,
table[rules=rows i] > thead > tr > td, table[rules=rows i] > thead > tr > th,
table[rules=rows i] > tbody > tr > td, table[rules=rows i] > tbody > tr > th,
table[rules=rows i] > tfoot > tr > td, table[rules=rows i] > tfoot > tr > th {
border-width: 1px;
border-style: none;
}
table[rules=cols i] > tr > td, table[rules=cols i] > tr > th,
table[rules=cols i] > thead > tr > td, table[rules=cols i] > thead > tr > th,
table[rules=cols i] > tbody > tr > td, table[rules=cols i] > tbody > tr > th,
table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th {
border-width: 1px;
border-block-style: none;
border-inline-style: solid;
}
table[rules=all i] > tr > td, table[rules=all i] > tr > th,
table[rules=all i] > thead > tr > td, table[rules=all i] > thead > tr > th,
table[rules=all i] > tbody > tr > td, table[rules=all i] > tbody > tr > th,
table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th {
border-width: 1px;
border-style: solid;
}
table[rules=groups i] > colgroup {
border-inline-width: 1px;
border-inline-style: solid;
}
table[rules=groups i] > thead,
table[rules=groups i] > tbody,
table[rules=groups i] > tfoot {
border-block-width: 1px;
border-block-style: solid;
}
table[rules=rows i] > tr, table[rules=rows i] > thead > tr,
table[rules=rows i] > tbody > tr, table[rules=rows i] > tfoot > tr {
border-block-width: 1px;
border-block-style: solid;
}
In quirks mode, the following rules are also expected to apply:
@namespace "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;
}
For the purposes of the CSS table model, the col element is expected
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 expected 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.
In HTML documents, the following rules are also expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
:is(table, thead, tbody, tfoot, tr) > form { display: none !important; }
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 height attribute
maps to the dimension property 'height' on the table
element.
The table element's width attribute
maps to the dimension property (ignoring zero) 'width' on the
table element.
The col element's width attribute maps
to the dimension property 'width' on the col
element.
The thead, tbody, and tfoot elements' height attribute maps to the dimension property
'height' on the 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 (ignoring zero) 'height' on the element.
The td and th elements' width
attributes map to the dimension
property (ignoring zero) 'width' on the element.
The thead, tbody, tfoot, tr,
td, and th elements, when they have an align
attribute whose value is an ASCII case-insensitive match for either the string "center" or the string "middle", 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 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 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 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.
User agents are expected to have a rule in their user agent style sheet that
matches th elements that have a parent node whose computed value for
the 'text-align' property is its initial value, whose declaration block consists of
just a single declaration that sets the 'text-align' property to the value
'center'.
When a 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 encoding-parsed-and-serialized relative to the element's node document,
and if that does not return failure, the user agent is expected to treat the
attribute as a presentational hint setting the
element's 'background-image' property to the return value.
When a 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 failure, 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 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 failure, 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-left-color' properties to the resulting color.
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 parsing the attribute's value using the rules for parsing
non-negative integers generates an error, a default value of 1px is expected
to be used for that property instead.
Rules marked "only if border is not equivalent to zero"
in the CSS block above is expected to only be applied if the border attribute mentioned in the selectors for the rule is not
only present but, when parsed using the rules for parsing non-negative integers, is
also found to have a value other than zero or to generate an error.
In quirks mode, a td element or a th element that has a
nowrap attribute but also has a width attribute whose value, when parsed using the rules for
parsing nonzero dimension values, is found to be a length (not an error or a number
classified as a percentage), is expected to have a presentational hint setting the element's 'white-space' property to
'normal', overriding the rule in the CSS block above that sets it to 'nowrap'.
A node is substantial if it is a text node that is not inter-element whitespace, or if it is an element node.
A node is blank if it is an element that contains no substantial nodes.
The elements with default margins
are the following elements: blockquote, dir, dl,
h1, h2, h3, h4, h5,
h6, listing, menu, ol,
p, plaintext, pre, ul, xmp.
In quirks mode, any element
with default margins that is the child of a
body, td, or th element and has no substantial previous siblings is
expected to have a user-agent level style sheet rule that sets its
'margin-block-start' property to zero.
In quirks mode, any element
with default margins that is the child of a
body, td, or th element, has no substantial previous siblings, and is blank, is expected to have a user-agent
level style sheet rule that sets its 'margin-block-end' property to zero also.
In quirks mode, any element
with default margins that is the child of a
td or th element, has no substantial following siblings, and is blank, is expected to have a user-agent
level style sheet rule that sets its 'margin-block-start' property to zero.
In quirks mode, any p element that is the child of a td or th element and has
no substantial following siblings, is
expected to have a user-agent level style sheet rule that sets its
'margin-block-end' property to zero.
@namespace "http://www.w3.org/1999/xhtml";
input, select, button, textarea {
letter-spacing: initial;
word-spacing: initial;
line-height: initial;
text-transform: initial;
text-indent: initial;
text-shadow: initial;
appearance: auto;
}
input:not([type=image i], [type=range i], [type=checkbox i], [type=radio i]) {
overflow: clip !important;
overflow-clip-margin: 0 !important;
}
input, select, textarea {
text-align: initial;
}
:autofill {
field-sizing: fixed !important;
}
input:is([type=reset i], [type=button i], [type=submit i]), button {
text-align: center;
}
input, button {
display: inline-block;
}
input[type=hidden i], input[type=file i], input[type=image i] {
appearance: none;
}
input:is([type=radio i], [type=checkbox i], [type=reset i], [type=button i],
[type=submit i], [type=color i], [type=search i]), select, button {
box-sizing: border-box;
}
textarea { white-space: pre-wrap; }
In quirks mode, the following rules are also expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
input:not([type=image i]), textarea { box-sizing: border-box; }
Each kind of form control is also described in the Widgets section, which describes the look and feel of the control.
For input elements where the type attribute
is not in the state or the Image Button state, and that are being
rendered, are expected to act as follows:
The inner display type is always 'flow-root'.
hr element@namespace "http://www.w3.org/1999/xhtml";
hr {
color: gray;
border-style: inset;
border-width: 1px;
margin-block: 0.5em;
margin-inline: auto;
overflow: hidden;
}
The following rules are also expected to apply, as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
hr[align=left i] { margin-left: 0; margin-right: auto; }
hr[align=right i] { margin-left: auto; margin-right: 0; }
hr[align=center i] { 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 failure, the user agent is expected to
treat the attribute as a presentational hint setting
the element's 'color' property to the resulting color.
fieldset and legend elements@namespace "http://www.w3.org/1999/xhtml";
fieldset {
display: block;
margin-inline: 2px;
border: groove 2px ThreeDFace;
padding-block: 0.35em 0.625em;
padding-inline: 0.75em;
min-inline-size: min-content;
}
legend {
padding-inline: 2px;
}
legend[align=left i] {
justify-self: left;
}
legend[align=center i] {
justify-self: center;
}
legend[align=right i] {
justify-self: right;
}
The fieldset element, when it generates a CSS box, is
expected to act as follows:
The element is expected to establish a new block formatting context.
The 'display' property is expected to act as follows:
If the computed value of 'display' is a value such that the outer display type is 'inline', then behave as 'inline-block'.
Otherwise, behave as 'flow-root'.
This does not change the computed value.
If the element's box has a child box that matches the conditions in the list below, then the first such child box is the 'fieldset' element's rendered legend:
legend element.If the element has a rendered legend, then the border is expected to not be painted behind the rectangle defined as follows, using the writing mode of the fieldset:
The block-start edge of the rectangle is the smaller of the block-start edge of the
rendered legend's margin rectangle at its static position (ignoring transforms),
and the block-start outer edge of the fieldset's border.
The block-end edge of the rectangle is the larger of the block-end edge of the
rendered legend's margin rectangle at its static position (ignoring transforms),
and the block-end outer edge of the fieldset's border.
The inline-start edge of the rectangle is the smaller of the inline-start edge of the
rendered legend's border rectangle at its static position (ignoring transforms),
and the inline-start outer edge of the fieldset's border.
The inline-end edge of the rectangle is the larger of the inline-end edge of the
rendered legend's border rectangle at its static position (ignoring transforms),
and the inline-end outer edge of the fieldset's border.
The space allocated for the element's border on the block-start side is
expected to be the element's 'border-block-start-width' or the
rendered legend's margin box size in the fieldset's block-flow
direction, whichever is greater.
For the purpose of calculating the used 'block-size', if the computed 'block-size' is not 'auto', the space allocated for the rendered legend's margin box that spills out past the border, if any, is expected to be subtracted from the 'block-size'. If the content box's block-size would be negative, then let the content box's block-size be 0 instead.
If the element has a rendered legend, then that element is expected to be the first child box.
The anonymous fieldset content box is expected to appear after
the rendered legend and is expected to contain the content (including
the '::before' and '::after' pseudo-elements) of the fieldset element except for
the rendered legend, if there is one.
The used value of the 'padding-top', 'padding-right', 'padding-bottom', and 'padding-left' properties are expected to be zero.
For the purpose of calculating the min-content inline size, use the greater of the min-content inline size of the rendered legend and the min-content inline size of the anonymous fieldset content box.
For the purpose of calculating the max-content inline size, use the greater of the max-content inline size of the rendered legend and the max-content inline size of the anonymous fieldset content box.
A fieldset element's rendered legend, if any, is
expected to act as follows:
The element is expected to establish a new formatting context for its contents. The type of this formatting context is determined by its 'display' value, as usual.
The 'display' property is expected to behave as if its computed value was blockified.
This does not change the computed value.
If the computed value of 'inline-size' is 'auto', then the used value is the fit-content inline size.
The element is expected to be positioned in the inline direction as is normal for blocks (e.g., taking into account margins and the 'justify-self' property).
The element's box is expected to be constrained in the inline direction by the
inline content size of the fieldset as if it had used its computed inline
padding.
For example, if the fieldset has a specified padding of 50px, then the
rendered legend will be positioned 50px in from the fieldset's
border. The padding will further apply to the anonymous fieldset content box
instead of the fieldset element itself.
The element is expected to be positioned in the block-flow direction such
that its border box is centered over the border on the block-start side of the
fieldset element.
A fieldset element's anonymous fieldset content box is
expected to act as follows:
The following properties are expected to inherit from the fieldset
element:
The 'block-size' property is expected to be set to '100%'.
For the purpose of calculating percentage padding, act as if the padding was calculated
for the fieldset element.
The following elements can be replaced
elements: audio, canvas, embed, iframe,
img, input, object, and video.
The embed, iframe, and video elements are
expected to be treated as replaced
elements.
A canvas element that represents embedded content is
expected to be treated as a replaced element; the contents of such
elements are the element's bitmap, if any, or else a transparent black bitmap with
the same natural dimensions as the element. Other canvas elements are
expected to be treated as ordinary elements in the rendering model.
An object element that represents an image, plugin, or its
content navigable 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 is exposing a user interface, 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. When an audio element is not exposing a user interface, the user agent is
expected to force its 'display' property to compute to 'none',
irrespective of CSS rules.
Whether a video element is exposing a user interface is not expected to affect the size of the
rendering; controls are expected to be overlaid above the page content without
causing any layout changes, and are expected to disappear when the user does not
need them.
When a video element represents a poster frame or frame of video, the poster frame
or frame of video is expected to be rendered at the largest size that maintains the
aspect ratio of that poster frame or frame of video without being taller or wider than the
video element itself, and is expected to be centered in the
video element.
Any subtitles or captions are expected to be overlaid directly on top of their
video element, as defined by the relevant rendering rules; for WebVTT, those are the
rules for updating the display of WebVTT text tracks. [WEBVTT]
When the user agent starts exposing a user
interface for a video element, the user agent should run the rules for
updating the text track rendering of each of the text
tracks in the video element's list of text tracks that are showing and whose text track kind is one of subtitles or captions (e.g., for text
tracks based on WebVTT, the rules for updating the display of WebVTT text
tracks). [WEBVTT]
Resizing video and canvas elements does not interrupt
video playback or clear the canvas.
The following CSS rules are expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
iframe { border: 2px inset; }
video { object-fit: contain; }
User agents are expected to render img elements and
input elements whose type attributes are in
the Image Button state, according to the first
applicable rules from the following list:
alt attribute, or
Document is in quirks mode, and the element already has
natural dimensions (e.g., from the dimension attributes or CSS
rules)
input elements, the element is expected to appear button-like to
indicate that the element is a button.img element that represents some text and the
user agent does not expect this to changeimg element that represents nothing and the
user agent does not expect this to changeinput element that does not represent an image and the user agent does not expect this to changeThe 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.
All animated images with the same absolute URL and the same image data are expected to be rendered synchronized to the same timeline as a group, with the timeline starting at the time of the least recent addition to the group.
In other words, when a second image with the same absolute URL and animated image data is inserted into a document, it jumps to the point in the animation cycle that is currently being displayed by the first image.
When a user agent is to restart the animation for an img element
showing an animated image, all animated images with the same absolute URL and the
same image data in that img element's node document are
expected to restart their animation from the beginning.
The following CSS rules are expected to apply:
@namespace "http://www.w3.org/1999/xhtml";
img:is([sizes="auto" i], [sizes^="auto," i]) {
contain: size !important;
contain-intrinsic-size: 300px 150px;
}
The following CSS rules are expected to apply when the Document is
in quirks mode:
@namespace "http://www.w3.org/1999/xhtml";
img[align=left i] { margin-right: 3px; }
img[align=right i] { margin-left: 3px; }
The following CSS rules are expected to apply as presentational hints:
@namespace "http://www.w3.org/1999/xhtml";
embed[align=left i], iframe[align=left i], img[align=left i],
input[type=image i][align=left i], object[align=left i] {
float: left;
}
embed[align=right i], iframe[align=right i], img[align=right i],
input[type=image i][align=right i], object[align=right i] {
float: right;
}
embed[align=top i], iframe[align=top i], img[align=top i],
input[type=image i][align=top i], object[align=top i] {
vertical-align: top;
}
embed[align=baseline i], iframe[align=baseline i], img[align=baseline i],
input[type=image i][align=baseline i], object[align=baseline i] {
vertical-align: baseline;
}
embed[align=texttop i], iframe[align=texttop i], img[align=texttop i],
input[type=image i][align=texttop i], object[align=texttop i] {
vertical-align: text-top;
}
embed[align=absmiddle i], iframe[align=absmiddle i], img[align=absmiddle i],
input[type=image i][align=absmiddle i], object[align=absmiddle i],
embed[align=abscenter i], iframe[align=abscenter i], img[align=abscenter i],
input[type=image i][align=abscenter i], object[align=abscenter i] {
vertical-align: middle;
}
embed[align=bottom i], iframe[align=bottom i], img[align=bottom i],
input[type=image i][align=bottom i], object[align=bottom i] {
vertical-align: bottom;
}
When an 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 embed,
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 embed,
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 iframe element has a frameborder attribute whose value, when parsed using the
rules for parsing integers, is zero or an error, the user agent is
expected to have presentational hints setting the element's
'border-top-width', 'border-right-width',
'border-bottom-width', and 'border-left-width' properties to zero.
When an img element, object element, or input element
with a type attribute in the Image Button state 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 an img element's dimension attribute source map to the dimension properties
'width' and 'height' on the img element respectively. They
similarly map to the aspect-ratio property (using dimension rules) of the
img element.
The width and height
attributes on embed, iframe, object, and video
elements, and input elements with a type
attribute in the Image Button state and that either
represents an image or that the user expects will eventually represent an image, map to the dimension properties
'width' and 'height' on the element respectively.
The width and height
attributes map to the aspect-ratio property (using dimension rules) on
img and video elements, and input elements with a type attribute in the Image
Button state.
The width and height attributes map to the aspect-ratio property
on canvas elements.
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.
The CSS Basic User Interface specification calls elements that can have a native appearance widgets, and defines whether to use that native appearance depending on the 'appearance' property. That logic, in turn, depends on whether each the element is classified as a devolvable widget or non-devolvable widget. This section defines which elements match these concepts for HTML, what their native appearance is, and any particularity of their devolved state or primitive appearance. [CSSUI]
The following elements can have a native appearance for the purpose of the CSS 'appearance' property.
Several widgets have their rendering controlled by the 'writing-mode' CSS property. For the purposes of those widgets, we have the following definitions.
A horizontal writing mode is when resolving the 'writing-mode' property of the control results in a computed value of 'horizontal-tb'.
A vertical writing mode is when resolving the 'writing-mode' property of the control results in a computed value of either 'vertical-rl', 'vertical-lr', 'sideways-rl' or 'sideways-lr'.
When an element uses button layout, it is a devolvable widget, and its native appearance is that of a button.
Button layout is as follows:
If the element is a button element, then the 'display' property is
expected to act as follows:
If the computed value of 'display' is 'inline-grid', 'grid', 'inline-flex', 'flex', 'none', or 'contents', then behave as the computed value.
Otherwise, if the computed value of 'display' is a value such that the outer display type is 'inline', then behave as 'inline-block'.
Otherwise, behave as 'flow-root'.
The element is expected to establish a new formatting context for its contents. The type of this formatting context is determined by its 'display' value, as usual.
If the element is absolutely-positioned, then for the purpose of the CSS visual formatting model, act as if the element is a replaced element. [CSS]
If the computed value of 'inline-size' is 'auto', then the used value is the fit-content inline size.
For the purpose of the 'normal' keyword of the 'align-self' property, act as if the element is a replaced element.
If the element is an input element, or if it is a button element
and its computed value for 'display' is not 'inline-grid', 'grid', 'inline-flex',
or 'flex', then the element's box has a child anonymous button content box with the
following behaviors:
The box is a block-level block container that establishes a new block formatting context (i.e., 'display' is 'flow-root').
If the box does not overflow in the horizontal axis, then it is centered horizontally.
If the box does not overflow in the vertical axis, then it is centered vertically.
Otherwise, there is no anonymous button content box.
Need to define the primitive appearance.
button elementThe button element, when it generates a CSS box, is
expected to depict a button and to use button layout whose
anonymous button content box's contents (if there is an anonymous button
content box) are the child boxes the element's box would otherwise have.
details and summary elements@namespace "http://www.w3.org/1999/xhtml";
details, summary {
display: block;
}
details > summary:first-of-type {
display: list-item;
counter-increment: list-item 0;
list-style: disclosure-closed inside;
}
details[open] > summary:first-of-type {
list-style-type: disclosure-open;
}
The details element is expected to have an internal shadow
tree with three child elements:
The first child element is a slot that is expected to take the
details element's first summary element child, if any. This element
has a single child summary element called the default summary which has
text content that is implementation-defined (and probably locale-specific).
The summary element that this slot represents is
expected to allow the user to request the details be shown or hidden.
The second child element is a slot that is expected to take the
details element's remaining descendants, if any. This element has no contents.
This element is expected to match the '::details-content' pseudo-element.
This element is expected to have its style
attribute set to "display: block; content-visibility: hidden;" when the
details element does not have an open
attribute. When it does have the open attribute, the
style attribute is expected to be set to
"display: block;".
Because the slots are hidden inside a shadow tree, this style attribute is not directly visible to author code. Its impacts,
however, are visible. Notably, the choice of content-visibility: hidden
instead of, e.g., display: none, impacts the results of various APIs that
query layout information.
The third child element is either a link or style
element with the following styles for the default summary:
:host summary {
display: list-item;
counter-increment: list-item 0;
list-style: disclosure-closed inside;
}
:host([open]) summary {
list-style-type: disclosure-open;
}
The position of this child element relative to the other two is not observable. This means that implementations might have it in a different order relative to its siblings. Implementations might even associate the style with the shadow tree using a mechanism that is not an element.
The structure of this shadow tree is observable through the ways that the children
of the details element and the '::details-content' pseudo-element
respond to CSS styles.
input element as a text entry widget