pub enum Component<'i, Impl: SelectorImpl<'i>> {
Show 38 variants Combinator(Combinator), ExplicitAnyNamespace, ExplicitNoNamespace, DefaultNamespace(Impl::NamespaceUrl), Namespace(Impl::NamespacePrefix, Impl::NamespaceUrl), ExplicitUniversalType, LocalName(LocalName<'i, Impl>), ID(Impl::Identifier), Class(Impl::Identifier), AttributeInNoNamespaceExists { local_name: Impl::LocalName, local_name_lower: Impl::LocalName, }, AttributeInNoNamespace { local_name: Impl::LocalName, operator: AttrSelectorOperator, value: Impl::AttrValue, case_sensitivity: ParsedCaseSensitivity, never_matches: bool, }, AttributeOther(Box<AttrSelectorWithOptionalNamespace<'i, Impl>>), Negation(Box<[Selector<'i, Impl>]>), FirstChild, LastChild, OnlyChild, Root, Empty, Scope, NthChild(i32i32), NthLastChild(i32i32), NthCol(i32i32), NthLastCol(i32i32), NthOfType(i32i32), NthLastOfType(i32i32), FirstOfType, LastOfType, OnlyOfType, NonTSPseudoClass(Impl::NonTSPseudoClass), Slotted(Selector<'i, Impl>), Part(Box<[Impl::Identifier]>), Host(Option<Selector<'i, Impl>>), Where(Box<[Selector<'i, Impl>]>), Is(Box<[Selector<'i, Impl>]>), Any(Impl::VendorPrefixBox<[Selector<'i, Impl>]>), Has(Box<[Selector<'i, Impl>]>), PseudoElement(Impl::PseudoElement), Nesting,
}
Expand description

A CSS simple selector or combinator. We store both in the same enum for optimal packing and cache performance, see [1].

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1357973

Variants

Combinator(Combinator)

ExplicitAnyNamespace

ExplicitNoNamespace

DefaultNamespace(Impl::NamespaceUrl)

Namespace(Impl::NamespacePrefix, Impl::NamespaceUrl)

ExplicitUniversalType

LocalName(LocalName<'i, Impl>)

ID(Impl::Identifier)

Class(Impl::Identifier)

AttributeInNoNamespaceExists

Fields

local_name: Impl::LocalName
local_name_lower: Impl::LocalName

AttributeInNoNamespace

Fields

local_name: Impl::LocalName
value: Impl::AttrValue
case_sensitivity: ParsedCaseSensitivity
never_matches: bool

AttributeOther(Box<AttrSelectorWithOptionalNamespace<'i, Impl>>)

Negation(Box<[Selector<'i, Impl>]>)

Pseudo-classes

FirstChild

LastChild

OnlyChild

Root

Empty

Scope

NthChild(i32i32)

NthLastChild(i32i32)

NthCol(i32i32)

NthLastCol(i32i32)

NthOfType(i32i32)

NthLastOfType(i32i32)

FirstOfType

LastOfType

OnlyOfType

NonTSPseudoClass(Impl::NonTSPseudoClass)

Slotted(Selector<'i, Impl>)

The ::slotted() pseudo-element:

https://drafts.csswg.org/css-scoping/#slotted-pseudo

The selector here is a compound selector, that is, no combinators.

NOTE(emilio): This should support a list of selectors, but as of this writing no other browser does, and that allows them to put ::slotted() in the rule hash, so we do that too.

See https://github.com/w3c/csswg-drafts/issues/2158

Part(Box<[Impl::Identifier]>)

The ::part pseudo-element. https://drafts.csswg.org/css-shadow-parts/#part

Host(Option<Selector<'i, Impl>>)

The :host pseudo-class:

https://drafts.csswg.org/css-scoping/#host-selector

NOTE(emilio): This should support a list of selectors, but as of this writing no other browser does, and that allows them to put :host() in the rule hash, so we do that too.

See https://github.com/w3c/csswg-drafts/issues/2158

Where(Box<[Selector<'i, Impl>]>)

The :where pseudo-class.

https://drafts.csswg.org/selectors/#zero-matches

The inner argument is conceptually a SelectorList, but we move the selectors to the heap to keep Component small.

Is(Box<[Selector<'i, Impl>]>)

The :is pseudo-class.

https://drafts.csswg.org/selectors/#matches-pseudo

Same comment as above re. the argument.

Any(Impl::VendorPrefixBox<[Selector<'i, Impl>]>)

Has(Box<[Selector<'i, Impl>]>)

The :has pseudo-class.

https://www.w3.org/TR/selectors/#relational

PseudoElement(Impl::PseudoElement)

An implementation-dependent pseudo-element selector.

Nesting

A nesting selector:

https://drafts.csswg.org/css-nesting-1/#nest-selector

NOTE: This is a lightningcss addition.

Implementations

Returns true if this is a combinator.

Returns the value as a combinator if applicable, None otherwise.

Whether this component is valid after a pseudo-element. Only intended for sanity-checking.

Trait Implementations

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more
Serialize self in CSS syntax, writing to dest.
Serialize self in CSS syntax and return a string. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.