1. Introduction
This section is not normative.
Tests
This section is not normative, it does not need tests.
A selector is a boolean predicate that takes an element in a tree structure and tests whether the element matches the selector or not.
These expressions may be used for many things:
-
directly on an element to test whether it matches some criteria,
such as in the
element.matches()function defined in [DOM] -
applied to an entire tree of elements
to filter it into a set of elements that match the criteria,
such as in the
document.querySelectorAll()function defined in [DOM] or the selector of a CSS style rule. - used "in reverse" to generate markup that would match a given selector, such as in HAML or Emmet.
Selectors Levels 1, 2, and 3 are defined as the subsets of selector functionality defined in the CSS1, CSS2.1, and Selectors Level 3 specifications, respectively. This module defines Selectors Level 4.
1.1. Module Interactions
Tests
Tests not needed for this section.
This module replaces the definitions of and extends the set of selectors defined for CSS in [SELECT] and [CSS21].
Pseudo-element selectors, which define abstract elements in a rendering tree, are not part of this specification: their generic syntax is described here, but, due to their close integration with the rendering model and irrelevance to other uses such as DOM queries, they will be defined in other modules.
2. Selectors Overview
This section is non-normative, as it merely summarizes the following sections.
Tests
This section is not normative, it does not need tests.
A selector represents a structure. This structure can be used as a condition (e.g. in a CSS rule) that determines which elements a selector matches in the document tree, or as a flat description of the HTML or XML fragment corresponding to that structure.
Selectors may range from simple element names to rich contextual representations.
The following table summarizes the Selector syntax:
| Pattern | Represents | Section | Level |
|---|---|---|---|
*
| any element | § 5.2 Universal selector | 2 |
E
| an element of type E | § 5.1 Type (tag name) selector | 1 |
E:not(s1, s2, …)
| an E element that does not match either compound selector s1 or compound selector s2 | § 4.3 The Negation (Matches-None) Pseudo-class: :not() | 3/4 |
E:is(s1, s2, …)
| an E element that matches compound selector s1 and/or compound selector s2 | § 4.2 The Matches-Any Pseudo-class: :is() | 4 |
E:where(s1, s2, …)
| an E element that matches compound selector s1 and/or compound selector s2 but contributes no specificity. | § 4.4 The Specificity-adjustment Pseudo-class: :where() | 4 |
E:has(rs1, rs2, …)
| an E element, if there exists an element that matches either of the relative selectors rs1 or rs2, when evaluated with E as the anchor elements | § 4.5 The Relational Pseudo-class: :has() | 4 |
E.warning
| an E element belonging to the class warning
(the document language specifies how class is determined).
| § 6.6 Class selectors | 1 |
E#myid
| an E element with ID equal to myid.
| § 6.7 ID selectors | 1 |
E[foo]
| an E element with a foo attribute
| § 6.1 Attribute presence and value selectors | 2 |
E[foo="bar"]
| an E element whose foo attribute value is
exactly equal to bar
| § 6.1 Attribute presence and value selectors | 2 |
E[foo="bar" i]
| an E element whose foo attribute value is
exactly equal to any (ASCII-range) case-permutation of bar
| § 6.3 Case-sensitivity | 4 |
E[foo="bar" s]
| an E element whose foo attribute value is
identical to bar
| § 6.3 Case-sensitivity | 4 |
E[foo~="bar"]
| an E element whose foo attribute value is
a list of whitespace-separated values, one of which is
exactly equal to bar
| § 6.1 Attribute presence and value selectors | 2 |
E[foo^="bar"]
| an E element whose foo attribute value
begins exactly with the string bar
| § 6.2 Substring matching attribute selectors | 3 |
E[foo$="bar"]
| an E element whose foo attribute value
ends exactly with the string bar
| § 6.2 Substring matching attribute selectors | 3 |
E[foo*="bar"]
| an E element whose foo attribute value
contains the substring bar
| § 6.2 Substring matching attribute selectors | 3 |
E[foo|="en"]
| an E element whose foo attribute value is
a hyphen-separated list of values beginning with en
| § 6.1 Attribute presence and value selectors | 2 |
E:dir(ltr)
| an element of type E with left-to-right directionality (the document language specifies how directionality is determined) | § 7.1 The Directionality Pseudo-class: :dir() | 4 |
E:lang(zh, "*-hant")
| an element of type E tagged as being either in Chinese (any dialect or writing system) or otherwise written with traditional Chinese characters | § 7.2 The Language Pseudo-class: :lang() | 2/4 |
E:any-link
| an E element being the source anchor of a hyperlink | § 8.1 The Hyperlink Pseudo-class: :any-link | 4 |
E:link
| an E element being the source anchor of a hyperlink of which the target is not yet visited | § 8.2 The Link History Pseudo-classes: :link and :visited | 1 |
E:visited
| an E element being the source anchor of a hyperlink of which the target is already visited | § 8.2 The Link History Pseudo-classes: :link and :visited | 1 |
E:target
| an E element being the target of the current URL | § 8.3 The Target Pseudo-class: :target | 3 |
E:scope
| an E element being a scoping root | § 8.4 The Reference Element Pseudo-class: :scope | 4 |
E:active
| an E element that is in an activated state | § 9.2 The Activation Pseudo-class: :active | 1 |
E:hover
| an E element that is under the cursor, or that has a descendant under the cursor | § 9.1 The Pointer Hover Pseudo-class: :hover | 2 |
E:focus
| an E element that has user input focus | § 9.3 The Input Focus Pseudo-class: :focus | 2 |
E:focus-within
| an E element that has user input focus or contains an element that has input focus. | § 9.5 The Focus Container Pseudo-class: :focus-within | 4 |
E:focus-visible
| an E element that has user input focus, and the UA has determined that a focus ring or other indicator should be drawn for that element | § 9.4 The Focus-Indicated Pseudo-class: :focus-visible | 4 |
E:enabled
| a user interface element E that is enabled or disabled, respectively | § 12.1.1 The :enabled and :disabled Pseudo-classes | 3 |
E:read-writeE:read-only
| a user interface element E that is user alterable, or not | § 12.1.2 The Mutability Pseudo-classes: :read-only and :read-write | 3-UI/4 |
E:placeholder-shown
| an input control currently showing placeholder text | § 12.1.3 The Placeholder-shown Pseudo-class: :placeholder-shown | 3-UI/4 |
E:default
| a user interface element E that is the default item in a group of related choices | § 12.1.5 The Default-option Pseudo-class: :default | 3-UI/4 |
E:checkedE:uncheckedE:indeterminate
| a user interface element E that is checked/selected (for instance a radio-button or checkbox), unchecked, or in an indeterminate state (neither checked nor unchecked) | § 12.2 Input Value States | 3 |
E:validE:invalid
| a user-input element E that meets, or doesn’t, its data validity semantics | § 12.3.1 The Validity Pseudo-classes: :valid and :invalid | 3-UI/4 |
E:in-rangeE:out-of-range
| a user-input element E whose value is in-range/out-of-range | § 12.3.2 The Range Pseudo-classes: :in-range and :out-of-range | 3-UI/4 |
E:requiredE:optional
| a user-input element E that requires/does not require input | § 12.3.3 The Optionality Pseudo-classes: :required and :optional | 3-UI/4 |
E:user-invalid
| a user-altered user-input element E with incorrect input (invalid, out-of-range, omitted-but-required) | § 12.3.4 The User-interaction Pseudo-classes: :user-valid and :user-invalid | 4 |
E:root
| an E element, root of the document | § 13.1 :root pseudo-class | 3 |
E:empty
| an E element that has no children (neither elements nor text) except perhaps white space | § 13.2 :empty pseudo-class | 3 |
E:nth-child(n [of S]?)
| an E element, the n-th child of its parent matching S | § 13.3.1 :nth-child() pseudo-class | 3/4 |
E:nth-last-child(n [of S]?)
| an E element, the n-th child of its parent matching S, counting from the last one | § 13.3.2 :nth-last-child() pseudo-class | 3/4 |
E:first-child
| an E element, first child of its parent | § 13.3.3 :first-child pseudo-class | 2 |
E:last-child
| an E element, last child of its parent | § 13.3.4 :last-child pseudo-class | 3 |
E:only-child
| an E element, only child of its parent | § 13.3.5 :only-child pseudo-class | 3 |
E:nth-of-type(n)
| an E element, the n-th sibling of its type | § 13.4.1 :nth-of-type() pseudo-class | 3 |
E:nth-last-of-type(n)
| an E element, the n-th sibling of its type, counting from the last one | § 13.4.2 :nth-last-of-type() pseudo-class | 3 |
E:first-of-type
| an E element, first sibling of its type | § 13.4.3 :first-of-type pseudo-class | 3 |
E:last-of-type
| an E element, last sibling of its type | § 13.4.4 :last-of-type pseudo-class | 3 |
E:only-of-type
| an E element, only sibling of its type | § 13.4.5 :only-of-type pseudo-class | 3 |
E F
| an F element descendant of an E element | § 14.1 Descendant combinator ( ) | 1 |
E > F
| an F element child of an E element | § 14.2 Child combinator (>) | 2 |
E + F
| an F element immediately preceded by an E element | § 14.3 Next-sibling combinator (+) | 2 |
E ~ F
| an F element preceded by an E element | § 14.4 Subsequent-sibling combinator (~) | 3 |
Note: Some Level 4 selectors (noted above as "3-UI") were introduced in [CSS3UI].
Tests
- css3-modsel-1.xml (visual test) (source)
- css3-modsel-10.xml (visual test) (source)
- css3-modsel-100.xml (visual test) (source)
- css3-modsel-100b.xml (visual test) (source)
- css3-modsel-101.xml (live test) (source)
- css3-modsel-101b.xml (live test) (source)
- css3-modsel-102.xml (live test) (source)
- css3-modsel-102b.xml (visual test) (source)
- css3-modsel-103.xml (live test) (source)
- css3-modsel-103b.xml (live test) (source)
- css3-modsel-104.xml (visual test) (source)
- css3-modsel-104b.xml (visual test) (source)
- css3-modsel-105.xml (live test) (source)
- css3-modsel-105b.xml (live test) (source)
- css3-modsel-106.xml (live test) (source)
- css3-modsel-106b.xml (live test) (source)
- css3-modsel-107.xml (visual test) (source)
- css3-modsel-107b.xml (visual test) (source)
- css3-modsel-108.xml (live test) (source)
- css3-modsel-108b.xml (live test) (source)
- css3-modsel-109.xml (live test) (source)
- css3-modsel-109b.xml (live test) (source)
- css3-modsel-11.xml (visual test) (source)
- css3-modsel-110.xml (live test) (source)
- css3-modsel-110b.xml (live test) (source)
- css3-modsel-111.xml (visual test) (source)
- css3-modsel-111b.xml (visual test) (source)
- css3-modsel-112.xml (live test) (source)
- css3-modsel-112b.xml (live test) (source)
- css3-modsel-113.xml (visual test) (source)
- css3-modsel-113b.xml (visual test) (source)
- css3-modsel-114.xml (visual test) (source)
- css3-modsel-114b.xml (visual test) (source)
- css3-modsel-115.xml (live test) (source)
- css3-modsel-115b.xml (live test) (source)
- css3-modsel-116.xml (live test) (source)
- css3-modsel-116b.xml (live test) (source)
- css3-modsel-117.xml (live test) (source)
- css3-modsel-117b.xml (live test) (source)
- css3-modsel-118.xml (visual test) (source)
- css3-modsel-119.xml (visual test) (source)
- css3-modsel-120.xml (visual test) (source)
- css3-modsel-121.xml (visual test) (source)
- css3-modsel-122.xml (live test) (source)
- css3-modsel-123.xml (visual test) (source)
- css3-modsel-123b.xml (visual test) (source)
- css3-modsel-124.xml (visual test) (source)
- css3-modsel-124b.xml (visual test) (source)
- css3-modsel-125.xml (live test) (source)
- css3-modsel-125b.xml (live test) (source)
- css3-modsel-126.xml (live test) (source)
- css3-modsel-126b.xml (live test) (source)
- css3-modsel-127.xml (live test) (source)
- css3-modsel-127b.xml (live test) (source)
- css3-modsel-128.xml (live test) (source)
- css3-modsel-128b.xml (live test) (source)
- css3-modsel-129.xml (live test) (source)
- css3-modsel-129b.xml (live test) (source)
- css3-modsel-13.xml (visual test) (source)
- css3-modsel-130.xml (visual test) (source)
- css3-modsel-130b.xml (visual test) (source)
- css3-modsel-131.xml (visual test) (source)
- css3-modsel-131b.xml (visual test) (source)
- css3-modsel-132.xml (visual test) (source)
- css3-modsel-132b.xml (visual test) (source)
- css3-modsel-133.xml (visual test) (source)
- css3-modsel-133b.xml (visual test) (source)
- css3-modsel-134.xml (live test) (source)
- css3-modsel-134b.xml (live test) (source)
- css3-modsel-135.xml (live test) (source)
- css3-modsel-135b.xml (live test) (source)
- css3-modsel-136.xml (live test) (source)
- css3-modsel-136b.xml (live test) (source)
- css3-modsel-137.xml (visual test) (source)
- css3-modsel-137b.xml (visual test) (source)
- css3-modsel-138.xml (visual test) (source)
- css3-modsel-138b.xml (visual test) (source)
- css3-modsel-139.xml (visual test) (source)
- css3-modsel-139b.xml (visual test) (source)
- css3-modsel-14.xml (visual test) (source)
- css3-modsel-140.xml (visual test) (source)
- css3-modsel-140b.xml (visual test) (source)
- css3-modsel-141.xml (live test) (source)
- css3-modsel-141b.xml (live test) (source)
- css3-modsel-142.xml (live test) (source)
- css3-modsel-142b.xml (live test) (source)
- css3-modsel-143.xml (live test) (source)
- css3-modsel-143b.xml (live test) (source)
- css3-modsel-144.xml (visual test) (source)
- css3-modsel-145a.xml (visual test) (source)
- css3-modsel-145b.xml (visual test) (source)
- css3-modsel-146a.xml (visual test) (source)
- css3-modsel-146b.xml (visual test) (source)
- css3-modsel-147a.xml (visual test) (source)
- css3-modsel-147b.xml (visual test) (source)
- css3-modsel-148.xml (live test) (source)
- css3-modsel-149.xml (live test) (source)
- css3-modsel-149b.xml (live test) (source)
- css3-modsel-14b.xml (live test) (source)
- css3-modsel-14c.xml (visual test) (source)
- css3-modsel-14d.xml (visual test) (source)
- css3-modsel-14e.xml (visual test) (source)
- css3-modsel-15.xml (visual test) (source)
- css3-modsel-150.xml (visual test) (source)
- css3-modsel-151.xml (live test) (source)
- css3-modsel-152.xml (live test) (source)
- css3-modsel-153.xml (visual test) (source)
- css3-modsel-154.xml (live test) (source)
- css3-modsel-155.xml (live test) (source)
- css3-modsel-155a.xml (live test) (source)
- css3-modsel-155b.xml (live test) (source)
- css3-modsel-155c.xml (live test) (source)
- css3-modsel-155d.xml (live test) (source)
- css3-modsel-156.xml (live test) (source)
- css3-modsel-156b.xml (live test) (source)
- css3-modsel-156c.xml (live test) (source)
- css3-modsel-157.xml (live test) (source)
- css3-modsel-158.xml (live test) (source)
- css3-modsel-159.xml (manual test) (source)
- css3-modsel-15b.xml (live test) (source)
- css3-modsel-16.xml (manual test) (source)
- css3-modsel-160.xml (live test) (source)
- css3-modsel-161.xml (manual test) (source)
- css3-modsel-166.xml (visual test) (source)
- css3-modsel-166a.xml (visual test) (source)
- css3-modsel-167.xml (visual test) (source)
- css3-modsel-167a.xml (visual test) (source)
- css3-modsel-168.xml (live test) (source)
- css3-modsel-168a.xml (live test) (source)
- css3-modsel-169.xml (live test) (source)
- css3-modsel-169a.xml (live test) (source)
- css3-modsel-17.xml (manual test) (source)
- css3-modsel-170.xml (live test) (source)
- css3-modsel-170a.xml (live test) (source)
- css3-modsel-170b.xml (live test) (source)
- css3-modsel-170c.xml (live test) (source)
- css3-modsel-170d.xml (live test) (source)
- css3-modsel-171.xml (visual test) (source)
- css3-modsel-172a.xml (live test) (source)
- css3-modsel-172b.xml (live test) (source)
- css3-modsel-173a.xml (live test) (source)
- css3-modsel-173b.xml (live test) (source)
- css3-modsel-174a.xml (visual test) (source)
- css3-modsel-174b.xml (visual test) (source)
- css3-modsel-175a.xml (live test) (source)
- css3-modsel-175b.xml (live test) (source)
- css3-modsel-175c.xml (live test) (source)
- css3-modsel-176.xml (live test) (source)
- css3-modsel-177a.xml (manual test) (source)
- css3-modsel-177b.xml (live test) (source)
- css3-modsel-178.xml (live test) (source)
- css3-modsel-179.xml (live test) (source)
- css3-modsel-179a.xml (visual test) (source)
- css3-modsel-18.xml (manual test) (source)
- css3-modsel-180a.xml (visual test) (source)
- css3-modsel-181.xml (visual test) (source)
- css3-modsel-182.xml (visual test) (source)
- css3-modsel-183.xml (visual test) (source)
- css3-modsel-184a.xml (live test) (source)
- css3-modsel-184b.xml (live test) (source)
- css3-modsel-184c.xml (live test) (source)
- css3-modsel-184d.xml (live test) (source)
- css3-modsel-184e.xml (live test) (source)
- css3-modsel-184f.xml (live test) (source)
- css3-modsel-18a.xml (manual test) (source)
- css3-modsel-18b.xml (manual test) (source)
- css3-modsel-18c.xml (manual test) (source)
- css3-modsel-19.xml (manual test) (source)
- css3-modsel-19b.xml (manual test) (source)
- css3-modsel-2.xml (visual test) (source)
- css3-modsel-20.xml (manual test) (source)
- css3-modsel-21.xml (manual test) (source)
- css3-modsel-21b.xml (visual test) (source)
- css3-modsel-21c.xml (visual test) (source)
- css3-modsel-22.xml (visual test) (source)
- css3-modsel-25.xml (visual test) (source)
- css3-modsel-27.xml (visual test) (source)
- css3-modsel-27a.xml (visual test) (source)
- css3-modsel-27b.xml (visual test) (source)
- css3-modsel-28.xml (visual test) (source)
- css3-modsel-28b.xml (visual test) (source)
- css3-modsel-29.xml (visual test) (source)
- css3-modsel-29b.xml (visual test) (source)
- css3-modsel-3.xml (visual test) (source)
- css3-modsel-30.xml (visual test) (source)
- css3-modsel-31.xml (visual test) (source)
- css3-modsel-32.xml (visual test) (source)
- css3-modsel-33.xml (visual test) (source)
- css3-modsel-34.xml (visual test) (source)
- css3-modsel-35.xml (visual test) (source)
- css3-modsel-36.xml (visual test) (source)
- css3-modsel-37.xml (visual test) (source)
- css3-modsel-38.xml (visual test) (source)
- css3-modsel-39.xml (visual test) (source)
- css3-modsel-39a.xml (visual test) (source)
- css3-modsel-39b.xml (visual test) (source)
- css3-modsel-39c.xml (visual test) (source)
- css3-modsel-3a.xml (visual test) (source)
- css3-modsel-4.xml (visual test) (source)
- css3-modsel-41.xml (visual test) (source)
- css3-modsel-41a.xml (visual test) (source)
- css3-modsel-42.xml (visual test) (source)
- css3-modsel-42a.xml (visual test) (source)
- css3-modsel-43.xml (visual test) (source)
- css3-modsel-43b.xml (visual test) (source)
- css3-modsel-44.xml (visual test) (source)
- css3-modsel-44b.xml (visual test) (source)
- css3-modsel-44c.xml (visual test) (source)
- css3-modsel-44d.xml (visual test) (source)
- css3-modsel-45.xml (visual test) (source)
- css3-modsel-45b.xml (visual test) (source)
- css3-modsel-45c.xml (visual test) (source)
- css3-modsel-46.xml (visual test) (source)
- css3-modsel-46b.xml (visual test) (source)
- css3-modsel-47.xml (visual test) (source)
- css3-modsel-48.xml (live test) (source)
- css3-modsel-49.xml (live test) (source)
- css3-modsel-5.xml (visual test) (source)
- css3-modsel-50.xml (visual test) (source)
- css3-modsel-51.xml (visual test) (source)
- css3-modsel-52.xml (visual test) (source)
- css3-modsel-53.xml (visual test) (source)
- css3-modsel-54.xml (live test) (source)
- css3-modsel-55.xml (live test) (source)
- css3-modsel-56.xml (live test) (source)
- css3-modsel-57.xml (visual test) (source)
- css3-modsel-57b.xml (visual test) (source)
- css3-modsel-59.xml (live test) (source)
- css3-modsel-6.xml (visual test) (source)
- css3-modsel-60.xml (live test) (source)
- css3-modsel-61.xml (manual test) (source)
- css3-modsel-62.xml (manual test) (source)
- css3-modsel-63.xml (manual test) (source)
- css3-modsel-64.xml (manual test) (source)
- css3-modsel-65.xml (manual test) (source)
- css3-modsel-66.xml (manual test) (source)
- css3-modsel-66b.xml (visual test) (source)
- css3-modsel-67.xml (visual test) (source)
- css3-modsel-7.xml (visual test) (source)
- css3-modsel-70.xml (visual test) (source)
- css3-modsel-72.xml (visual test)