4.15. Matching HTML elements using selectors
4.15.1. Case-sensitivity
The Selectors specification leaves the case-sensitivity of element names, attribute names, and attribute values to be defined by the host language. [CSS3-SELECTORS]
Selectors defines that ID and class selectors, when matched against elements in documents that are in quirks mode, will be matched in an ASCII case-insensitive manner.
When comparing a CSS element type selector to the names of html elements in HTML documents, the CSS element type selector must first be converted to ASCII lowercase. The same selector when compared to other elements must be compared according to its original case. In both cases, the comparison is case-sensitive.
When comparing the name part of a CSS attribute selector to the names of namespace-less attributes on html elements in HTML documents, the name part of the CSS attribute selector must first be converted to ASCII lowercase. The same selector when compared to other attributes must be compared according to its original case. In both cases, the comparison is case-sensitive.
Attribute selectors on an HTML element in an HTML document must treat the values of attributes with the following names as ASCII case-insensitive, with one exception as noted in §10 Rendering:
accept
accept-charset
align
alink
axis
bgcolor
charset
checked
clear
codetype
color
compact
declare
defer
dir
direction
disabled
enctype
face
frame
hreflang
http-equiv
lang
language
link
media
method
multiple
nohref
noresize
noshade
nowrap
readonly
rel
rev
rules
scope
scrolling
selected
shape
target
text
type
(except as specified in §10 Rendering)valign
valuetype
vlink
All other attribute values and everything else must be treated as entirely case-sensitive for the purposes of selector matching. This includes:
- IDs and classes in no-quirks mode and limited-quirks mode
- the names of elements not in the HTML namespace
- the names of html elements in XML documents
- the names of attributes of elements not in the HTML namespace
- the names of attributes of html elements in XML documents
- the names of attributes that themselves have namespaces
4.15.2. Pseudo-classes
There is only one known native implementation of :dir(ltr)
pseudo-class matching (Firefox/Gecko). Therefore this feature should not be relied upon.
There are a number of dynamic selectors that can be used with HTML. This section defines when these selectors match HTML elements. [CSS3-SELECTORS] [CSS-UI-3]
:link
:visited
-
All
a
elements that have anhref
attribute, allarea
elements that have anhref
attribute, and alllink
elements that have anhref
attribute, must match one of:link
and:visited
.Other specifications might apply more specific rules regarding how these elements are to match these pseudo-classes, to mitigate some privacy concerns that apply with straightforward implementations of this requirement.
:active
-
The
:active
pseudo-class is defined to match an elementwhile an element is being activated by the user
.To determine whether a particular element is being activated for the purposes of defining the
:active
pseudo-class only, an HTML user agent must use the first relevant entry in the following list.- If the element has a descendant that is currently matching the
:active
pseudo-class - The element is being activated.
- If the element is the labeled control of a
label
element that is currently matching :active - The element is being activated.
- If the element is a
button
element - If the element is an
input
element whosetype
attribute is in the submit button, image button, Reset Button, or Button state -
The element is being activated if it is in a formal activation state and it is not disabled.
For example, if the user is using a keyboard to push a
button
element by pressing the space bar, the element would match this pseudo-class in between the time that the element received thekeydown
event and the time the element received thekeyup
event. - If the element is a
menuitem
element - The element is being activated if it is in a formal activation state and it does not have a
disabled
attribute. - If the element is an
a
element that has anhref
attribute - If the element is an
area
element that has anhref
attribute - If the element is a
link
element that has anhref
attribute - If the element has its tabindex focus flag set
- The element is being activated if it is in a formal activation state.
- If the element is being actively pointed at
- The element is being activated.
An element is said to be in a formal activation state between the time the user begins to indicate an intent to trigger the element’s activation behavior and either the time the user stops indicating an intent to trigger the element’s activation behavior, or the time the element’s activation behavior has finished running, which ever comes first.
An element is said to be being actively pointed at while the user indicates the element using a pointing device while that pointing device is in the "down" state (e.g., for a mouse, between the time the mouse button is pressed and the time it is depressed; for a remote control on a television, the time during which the remote control is pointing at the element).
- If the element has a descendant that is currently matching the
:hover
-
The
:hover
pseudo-class is defined to match an elementwhile the user designates an element with a pointing device
. For the purposes of defining the:hover
pseudo-class only, an HTML user agent must consider an element as being one that the user designates if it is:-
An element that the user indicates using a pointing device.
-
An element that has a descendant that the user indicates using a pointing device.
-
An element that is the labeled control of a
label
element that is currently matching :hover.
Consider in particular a fragment such as:<p> <label for=c> <input id=a> </label> <span id=b> <input id=c> </span> </p>
If the user designates the element with ID "
a
" with their pointing device, then thep
element (and all its ancestors not shown in the snippet above), thelabel
element, the element with ID "a
", and the element with ID "c
" will match the :hover pseudo-class. The element with ID "a
" matches it from condition 1, thelabel
andp
elements match it because of condition 2 (one of their descendants is designated), and the element with ID "c
" matches it through condition 3 (itslabel
element matches :hover). However, the element with ID "b
" does not match :hover: its descendant is not designated, even though it matches :hover. -
:focus
-
For the purposes of the CSS ':focus' pseudo-class, an element has the focus when its top-level browsing context has the system focus, it is not itself a browsing context container, and it is one of the elements listed in the focus chain of the currently focused area of the top-level browsing context.
:enabled
-
The
:enabled
pseudo-class must match any element that is one of the following:- a
button
element that is not disabled - an
input
element that is not disabled - a
select
element that is not disabled - a
textarea
element that is not disabled - an
optgroup
element that does not have adisabled
attribute - an
option
element that is not disabled - a
menuitem
element that does not have adisabled
attribute - a
fieldset
element that is not a disabled fieldset
- a
:disabled
-
The
:disabled
pseudo-class must match any element that is actually disabled. :checked
-
The
:checked
pseudo-class must match any element falling into one of the following categories:input
elements whosetype
attribute is in the Checkbox state and whose checkedness state is trueinput
elements whosetype
attribute is in the Radio Button state and whose checkedness state is trueoption
elements whose selectedness is truemenuitem
elements whosetype
attribute is in the Checkbox state and that have achecked
attributemenuitem
elements whosetype
attribute is in the Radio state and that have achecked
attribute
:indeterminate
-
The
:indeterminate
pseudo-class must match any element falling into one of the following categories:input
elements whosetype
attribute is in the Checkbox state and whoseindeterminate
IDL attribute is set to trueinput
elements whosetype
attribute is in the Radio Button state and whose radio button group contains noinput
elements whose checkedness state is true.progress
elements with novalue
content attribute
:default
-
The
:default
pseudo-class must match any element falling into one of the following categories:button
elements that are their form’s default buttoninput
elements whosetype
attribute is in the submit button or image button state, and that are their form’s default buttoninput
elements to which thechecked
attribute applies and that have achecked
attributeoption
elements that have aselected
attribute
:valid
-
The
:valid
pseudo-class must match any element falling into one of the following categories:- elements that are candidates for constraint validation and that satisfy their constraints
form
elements that are not the form owner of any elements that themselves are candidates for constraint validation but do not satisfy their constraintsfieldset
elements that have no descendant elements that themselves are candidates for constraint validation but do not satisfy their constraints
:invalid
-
The
:invalid
pseudo-class must match any element falling into one of the following categories:- elements that are candidates for constraint validation but that do not satisfy their constraints
form
elements that are the form owner of one or more elements that themselves are candidates for constraint validation but do not satisfy their constraintsfieldset
elements that have of one or more descendant elements that themselves are candidates for constraint validation but do not satisfy their constraints
:in-range
-
The
:in-range
pseudo-class must match all elements that are candidates for constraint validation, have range limitations, and that are neither suffering from an underflow nor suffering from an overflow. :out-of-range
-
The
:out-of-range
pseudo-class must match all elements that are candidates for constraint validation, have range limitations, and that are either suffering from an underflow or suffering from an overflow. :required
-
The
:required
pseudo-class must match any element falling into one of the following categories: :optional
-
The
:optional
pseudo-class must match any element falling into one of the following categories: :read-only
:read-write
-
The
:read-write
pseudo-class must match any element falling into one of the following categories, which for the purposes of Selectors are thus considered user-alterable: [CSS3-SELECTORS]input
elements to which thereadonly
attribute applies, and that are mutable (i.e., that do not have thereadonly
attribute specified and that are not disabled)textarea
elements that do not have areadonly
attribute, and that are not disabled- elements that are editing hosts or editable and are neither
input
elements nortextarea
elements
The
:read-only
pseudo-class must match all other html elements. :dir(ltr)
-
The
:dir(ltr)
pseudo-class must match all elements whose directionality is 'ltr'. :dir(rtl)
-
The
:dir(rtl)
pseudo-class must match all elements whose directionality is 'rtl'.
Another section of this specification defines the target element used with the :target
pseudo-class.
This specification does not define when an element matches the :lang()
dynamic
pseudo-class, as it is defined in sufficient detail in a language-agnostic fashion in the
Selectors specification. [CSS3-SELECTORS]