The link
and style
elements can provide
styling information for the user agent to use when rendering the
document. The CSS and CSSOM specifications specify what styling
information is to be used by the user agent and how it is to be
used. [CSS] [CSSOM]
The style
and link
elements implement
the LinkStyle
interface. [CSSOM]
For style
elements, if the user agent does not
support the specified styling language, then the sheet
attribute of the element's
LinkStyle
interface must return null. Similarly,
link
elements that do not represent external resource links that contribute to
the styling processing model (i.e. that do not have a stylesheet
keyword in their rel
attribute), or for which the
link is an alternative stylesheet but whose title
content attribute is absent or empty,
must have their LinkStyle
interface's sheet
attribute return null.
Otherwise, the LinkStyle
interface's sheet
attribute must return a
StyleSheet
object with the following properties: [CSSOM]
The style sheet type must be the same as the style's specified
type. For style
elements, this is the same as the
type
content attribute's
value, or text/css
if that is omitted. For
link
elements, this is the Content-Type metadata of the specified
resource.
For link
elements, the location must be the
result of resolving the
URL given by the element's href
content attribute, relative to
the element, or the empty string if that fails. For
style
elements, there is no location.
The media must be the same as the value of the element's
media
content attribute, or the empty string,
if the attribute is omitted.
The title must be the same as the value of the element's
title
content attribute, if the
attribute is present and has a non-empty value. If the attribute is
absent or its value is the empty string, then the style sheet does
not have a title (it is the empty string). The title is used for
defining alternative style sheet sets.
For link
elements, true if the link is an
alternative stylesheet. In all other cases, false.
The same object must be returned each time.
The disabled
IDL
attribute on link
and style
elements must
return false and do nothing on setting, if the sheet
attribute of their
LinkStyle
interface is null. Otherwise, it must return
the value of the StyleSheet
interface's disabled
attribute on
getting, and forward the new value to that same attribute on
setting.
The rules for handling alternative style sheets are defined in the CSS object model specification. [CSSOM]
Style sheets, whether added by a link
element, a
style
element, an <?xml-stylesheet>
PI,
an HTTP Link:
header, or some other
mechanism, have a style sheet ready flag, which is
initially unset.
When a style sheet is ready to be applied, its style sheet
ready flag must be set. If the style sheet referenced no
other resources (e.g. it was an internal style sheet given by a
style
element with no @import
rules), then the style rules must be synchronously made available to
script; otherwise, the style rules must only be made available to
script once the event loop reaches its "update the
rendering" step.
A style sheet in the context of the Document
of an
HTML parser or XML parser is said to be
a style sheet that is blocking scripts if the element was
created by that Document
's parser, and the element is
either a style
element or a link
element
that was an external resource link that
contributes to the styling processing model when the element
was created by the parser, and the element's style sheet was enabled
when the element was created by the parser, and the element's
style sheet ready flag is not yet set, and, the last
time the event loop reached step 1, the element was
in that Document
,
and the user agent hasn't given up on that particular style sheet
yet. A user agent may give up on a style sheet at any time.
Giving up on a style sheet before the style sheet loads, if the style sheet eventually does still load, means that the script might end up operating with incorrect information. For example, if a style sheet sets the color of an element to green, but a script that inspects the resulting style is executed before the sheet is loaded, the script will find that the element is black (or whatever the default color is), and might thus make poor choices (e.g. deciding to use black as the color elsewhere on the page, instead of green). Implementors have to balance the likelihood of a script using incorrect information with the performance impact of doing nothing while waiting for a slow network request to finish.
A Document
has a style sheet that is blocking
scripts if there is either a style sheet that is
blocking scripts in the context of that
Document
, or if that Document
is in a
browsing context that has a parent browsing
context, and the active document of that
parent browsing context itself has a style sheet
that is blocking scripts.
A Document
has no style sheet that is blocking
scripts if it does not have a style sheet that is blocking scripts
as defined in the previous paragraph.