mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-21 00:38:56 +00:00
LibWeb/CSS: Parse and use nested style rules
For example, this: ```css .foo { color: red; &:hover { color: green; } } ``` now has the same effect as this: ```css .foo { color: red; } .foo:hover { color: green; } ``` CSSStyleRule now has "absolutized selectors", which are its selectors with any `&`s resolved. We use these instead of the "real" selectors when matching them, meaning the style computer doesn't have to know or care about where the selector appears in the CSS document.
This commit is contained in:
parent
74c448d744
commit
53f99e51f8
Notes:
github-actions[bot]
2024-10-17 18:57:13 +00:00
Author: https://github.com/AtkinsSJ
Commit: 53f99e51f8
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1842
Reviewed-by: https://github.com/awesomekling
8 changed files with 345 additions and 10 deletions
|
@ -213,6 +213,8 @@ public:
|
|||
QualifiedName& qualified_name() { return value.get<QualifiedName>(); }
|
||||
|
||||
String serialize() const;
|
||||
|
||||
SimpleSelector absolutized(SimpleSelector const& selector_for_nesting) const;
|
||||
};
|
||||
|
||||
enum class Combinator {
|
||||
|
@ -229,6 +231,8 @@ public:
|
|||
// but it is more understandable to put them together.
|
||||
Combinator combinator { Combinator::None };
|
||||
Vector<SimpleSelector> simple_selectors;
|
||||
|
||||
CompoundSelector absolutized(SimpleSelector const& selector_for_nesting) const;
|
||||
};
|
||||
|
||||
static NonnullRefPtr<Selector> create(Vector<CompoundSelector>&& compound_selectors)
|
||||
|
@ -240,6 +244,9 @@ public:
|
|||
|
||||
Vector<CompoundSelector> const& compound_selectors() const { return m_compound_selectors; }
|
||||
Optional<PseudoElement> pseudo_element() const { return m_pseudo_element; }
|
||||
NonnullRefPtr<Selector> relative_to(SimpleSelector const&) const;
|
||||
bool contains_the_nesting_selector() const { return m_contains_the_nesting_selector; }
|
||||
NonnullRefPtr<Selector> absolutized(SimpleSelector const& selector_for_nesting) const;
|
||||
u32 specificity() const;
|
||||
String serialize() const;
|
||||
|
||||
|
@ -251,6 +258,7 @@ private:
|
|||
Vector<CompoundSelector> m_compound_selectors;
|
||||
mutable Optional<u32> m_specificity;
|
||||
Optional<Selector::PseudoElement> m_pseudo_element;
|
||||
bool m_contains_the_nesting_selector { false };
|
||||
|
||||
void collect_ancestor_hashes();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue