Supported Selectors

Support

  • (*) parsing supported, not implemented
  • (X) fully supported, implemented
  • (/) No support planned

Selectors

Name Support Test Case Section Test File
Type X testSelector testSelector can match a element given it’s tagName tests/css_selector.cc
Attribute X testSelector testSelector can match a element by it’s attributes only tests/css_selector.cc
ID X testSelector testSelector can match a element by it’s id only tests/css_selector.cc
Class X testSelector testSelector can match a element by it’s class and not match on a non class tests/css_selector.cc
Universal X testSelector testSelector can match a universal selector tests/css_selector.cc
Nesting X parseCSS can parse a CSS sheet, parseCSS can parse multiple selectors nested parseCSS can parse a nested CSS rule without a &, parseCSS can parse a the parent of a nested CSS rule, parseCSS can parse a nested CSS rule with a pseudo element, parseCSS can parse a parent CSS rule with a property in between sub-classes, multi selector test tests/css_parser.cc
& Nesting X parseCSS can parse a CSS sheet, parseCSS can parse multiple selectors nested parseCSS can parse a nested CSS rule without a &, parseCSS can parse a the parent of a nested CSS rule, parseCSS can parse a nested CSS rule with a pseudo element, parseCSS can parse a double nested CSS rule with a pseudo element and &, parseCSS can parse a nested CSS rule with a &, parseCSS can parse a parent CSS rule with a property in between sub-classes, multi selector test tests/css_parser.cc

Combined

Name Support Test Case Section Test File
Child Combined X testSelector testSelector can match a child combined tests/css_selector.cc
Next-Sibling Combined X testSelector testSelector can match a next sibling combined tests/css_selector.cc
Descendant Combinator X testSelector testSelector can match a descendant combinator tests/css_selector.cc
Subsequent-Sibling Combinator X testSelector testSelector can match a subsequent-sibling combinator tests/css_selector.cc

Pseudo Classes

Name Support Test Case Section Test File Note
:active Will be added when links are
:any-link Will be added when links are
:autofill Will be added when inputs are added
:buffering Videos are not currently supported
:checked X testSelector testSelector can match a element with a pseudo class tests/css_selector.cc
:default Will be added when inputs are added
:defined
:dir()
:disabled X testSelector testSelector can match a element with a pseudo class tests/css_selector.cc
:empty Will be added when inputs are added
:enabled X testSelector testSelector can match a element with a pseudo class tests/css_selector.cc
:first / Will not be supported, currently there are no plans to support printing
:first-child X testSelector testSelector can match a element with first-child tests/css_selector.cc
:first-of-type X testSelector testSelector can match a element with first-of-type tests/css_selector.cc
:focus
:focus-visible
:focus-within
:fullscreen Videos are not currently supported
:future
:has-slotted
:has() X testSelector testSelector can match a :has() selector with a child combinator, testSelector can match a :has() selector with a next-sibling combinator, testSelector can match a :has() selector with a subsequent-sibling combinator, testSelector can match a :has() selector with a decendent combinator tests/css_selector.cc
:host
:host-context()
:host()
:hover
:in-range Will be added when inputs are added
:indeterminate Will be added when inputs are added
:invalid Will be added when inputs are added
:is() X testSelector testSelector can match :is() selectors tests/css_selector.cc
:lang()
:last-child X testSelector testSelector can match a element with last-child tests/css_selector.cc
:last-of-type X testSelector testSelector can match a element with last-of-type tests/css_selector.cc
:left / Will not be supported, currently there are no plans to support printing
:local-link / Doesn’t make sense to add because all links will be local
:modal
:muted Videos are not currently supported
:not() X testSelector testSelector can match :not() selectors tests/css_selector.cc
:nth-child() X testSelector testSelector can match a :nth-child(even|odd), testSelector can match a :nth-child(A), testSelector can match a :nth-child(An), testSelector can match a :nth-child(An+B), testSelector can match a :nth-child(An+B of type), testSelector can match a :nth-child(n+B), testSelector can match a :nth-child(A of type), testSelector can match a :nth-child(An of type), testSelector can match a :nth-child(n+B of type) tests/css_selector.cc when A is 0 it is changed to a 1, the only case this will cause breaking behavior is if you are trying :nth-child(0n+B) which is the same as calling :nth-child(B). This behavior applies to all nth-*
:nth-last-child() X testSelector testSelector can match a :nth-last-child(even|odd), testSelector can match a :nth-last-child(A), testSelector can match a :nth-last-child(An), testSelector can match a :nth-last-child(An+B), testSelector can match a :nth-last-child(n+B), testSelector can match a :nth-last-child(An+B of type), testSelector can match a :nth-last-child(A of type), testSelector can match a :nth-last-child(An of type), testSelector can match a :nth-last-child(n+B of type) tests/css_selector.cc
:nth-last-of-type() X testSelector testSelector can match a :nth-last-of-type(even|odd), testSelector can match a :nth-last-of-type(A), testSelector can match a :nth-last-of-type(An), testSelector can match a :nth-last-of-type(An+B), testSelector can match a :nth-last-of-type(n+B), tests/css_selector.cc
:nth-of-type() X testSelector testSelector can match a :nth-of-type(even|odd), testSelector can match a :nth-of-type(A), testSelector can match a :nth-of-type(An), testSelector can match a :nth-of-type(An+B), testSelector can match a :nth-of-type(n+B), tests/css_selector.cc
:only-child X testSelector testSelector can match :only-child tests/css_selector.cc
:only-of-type X testSelector testSelector can match :only-of-type tests/css_selector.cc
:open
:optional
:out-of-range Will be added when inputs are added
:past
:paused Videos are not currently supported
:picture-in-picture Videos are not currently supported
:placeholder-shown Will be added when inputs are added
:playing Videos are not currently supported
:popover-open
:read-only X testSelector testSelector can match :read-only normal element, testSelector can match :read-only on a radio input, testSelector can match :read-only on a readonly text input, testSelector can match :read-only on a disabled text input, testSelector can match :read-only on a readonly textarea, testSelector can match :read-only on a disabled textarea tests/css_selector.cc
:read-write X testSelector testSelector can match :read-write on a text input, testSelector can match :read-write on a textarea, testSelector can match :read-write on a contenteditable div tests/css_selector.cc
:required X testSelector testSelector can match a element with a pseudo class tests/css_selector.cc
:right / Will not be supported, currently there are no plans to support printing
:root X testSelector testSelector can match :root tests/css_selector.cc
:scope
:seeking Videos are not currently supported
:stalled Video and Audio are not currently supported
:state() Shadow DOM
:target
:target-current
:target-within
:user-invalid
:user-valid
:valid
:visited
:volume-locked Video and Audio are not currently supported
:where() X testSelector testSelector can match :where() selectors tests/css_selector.cc

Pseudo Elements

At-rules

Name Support Test Case Section Test File Note
@charset / UTF-8/ASCII are the only encodings supported
@color-profile / Too new to support
@container
@counter-style
@font-face
@font-feature-values
@swash / Subset of @font-feature-values
@annotation / Subset of @font-feature-values
@ornaments / Subset of @font-feature-values
@stylistic / Subset of @font-feature-values
@styleset / Subset of @font-feature-values
@character-varient / Subset of @font-feature-values
@font-palette-values
@import Parsed where the first argument after @import is the url and the last non parenthesized value if present is the layer name. Inbetween the url and the layer is the media queries.
@keyframes
@layer Currently setting the layer order via @layer l1, l2; is not supported
@media
@namespace
@page / Will not be supported, currently there are no plans to support printing
@position-try Use this document to check support of features
@property
@scope Implementing this would cause some overhead
@starting-style
@supports / Use this document to check support of features
@view-transition This is useful but will not be implemented until later

Functions

Types

Name Support Values Note
AnyHover X None, Hover
AnyPointer X None, Fine, Coarse
Orientation X Landscape, Portrait
ColorScheme X Light, Dark
Contrast X NoPreference, More, Less
ReducedMotion X NoPreference, Reduce
ReducedTranparency X NoPreference, Reduce
Update X Fast, Slow

Media Queries

Name Support Usage Note
any-hover X window.setMouse(AnyPointer::Fine) Will be set to AnyHover::Hover if AnyPointer is not AnyPointer::None, default AnyHover::Hover
any-pointer X window.setMouse(AnyPointer::Coarse) Default AnyPointer::Fine
aspect-ratio X window.getAspectRatio() Derived from width and height, returned as a double
color * All colors are stored as RGBA values
color-gamut * Only matches on “srgb”
color-index * Only matches on 0
device-posture * Only matches on “continuous”
display-mode * All applications will be “standalone”
dynamic-range * Only matches on “standard”
forced-colors * Only matches on “none”
grid * Only matches on 0
height X window.setHeight(int) Supports height, min-height, max-height
hover X window.setMouse(AnyPointer::Fine) Will match any-hover
inverted-colors * Only matches on “none”
monochrome * Only matches on 0
orientation X window.setOrientation(Orientation::Portrait) Defaults to Orientation::Landscape
overflow-block * Only matches on “scroll”
overflow-inline * Only matches on “scroll”
pointer X window.setMouse(AnyPointer) Will match any-pointer
prefers-color-scheme X window.setColorScheme(ColorScheme::Dark) Defaults to ColorScheme::Light
prefers-contrast X window.setContrast(Contrast::Less) Defaults to ColorScheme::NoPreference
prefers-reduced-motion X window.setReducedMotion(ReducedMotion::Reduce) Defaults to ReducedMotion::NoPreference
prefers-reduced-transparency X window.setReducedTransparency(ReducedTransparency::Reduce) Defaults to ReducedTransparency::NoPreference
resolution X window.setResolution(int) Defaults to 72dpi, accepts a int in dpi
scripting / Not needed
update X window.setUpdate(Update::Slow) Defaults to Update::Fast
video-dynamic-range * Only matches on “standard”
width X window.setWidth(int) Supports width, min-width, max-width