diff --git a/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-inline-style.txt b/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-inline-style.txt new file mode 100644 index 0000000000..4aa2d67800 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/css-pseudo-element-should-not-be-affected-by-inline-style.txt @@ -0,0 +1,11 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (1,1) content-size 798x120 children: not-inline + BlockContainer at (10,10) content-size 780x102 children: not-inline + BlockContainer at (11,11) content-size 100x100 children: not-inline + BlockContainer <(anonymous)> at (12,12) content-size 50x50 children: inline + line 0 width: 0, height: 21.835937, bottom: 21.835937, baseline: 16.914062 + frag 0 from TextNode start: 0, length: 0, rect: [12,12 0x21.835937] + "" + TextNode <#text> + BlockContainer at (12,64) content-size 98x0 children: inline + TextNode <#text> diff --git a/Tests/LibWeb/Layout/input/css-pseudo-element-should-not-be-affected-by-inline-style.html b/Tests/LibWeb/Layout/input/css-pseudo-element-should-not-be-affected-by-inline-style.html new file mode 100644 index 0000000000..53776c903d --- /dev/null +++ b/Tests/LibWeb/Layout/input/css-pseudo-element-should-not-be-affected-by-inline-style.html @@ -0,0 +1,13 @@ +
diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 22969ff8ff..61aea66ad2 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -821,7 +821,7 @@ RefPtr StyleComputer::resolve_unresolved_style_value(DOM::Element& e return {}; } -void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Vector const& matching_rules, CascadeOrigin cascade_origin, Important important) const +void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Optional pseudo_element, Vector const& matching_rules, CascadeOrigin cascade_origin, Important important) const { for (auto const& match : matching_rules) { for (auto const& property : verify_cast(match.rule->declaration()).properties()) { @@ -837,7 +837,7 @@ void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& e } } - if (cascade_origin == CascadeOrigin::Author) { + if (cascade_origin == CascadeOrigin::Author && !pseudo_element.has_value()) { if (auto const* inline_style = verify_cast(element.inline_style())) { for (auto const& property : inline_style->properties()) { if (important != property.important) @@ -907,7 +907,7 @@ ErrorOr StyleComputer::compute_cascaded_values(StyleProperties& style, DOM // Then we apply the declarations from the matched rules in cascade order: // Normal user agent declarations - cascade_declarations(style, element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::No); + cascade_declarations(style, element, pseudo_element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::No); // FIXME: Normal user declarations @@ -915,17 +915,17 @@ ErrorOr StyleComputer::compute_cascaded_values(StyleProperties& style, DOM element.apply_presentational_hints(style); // Normal author declarations - cascade_declarations(style, element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::No); + cascade_declarations(style, element, pseudo_element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::No); // FIXME: Animation declarations [css-animations-1] // Important author declarations - cascade_declarations(style, element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::Yes); + cascade_declarations(style, element, pseudo_element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::Yes); // FIXME: Important user declarations // Important user agent declarations - cascade_declarations(style, element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::Yes); + cascade_declarations(style, element, pseudo_element, matching_rule_set.user_agent_rules, CascadeOrigin::UserAgent, Important::Yes); // FIXME: Transition declarations [css-transitions-1] diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.h b/Userland/Libraries/LibWeb/CSS/StyleComputer.h index 71d09e1a40..02778bd73d 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.h +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.h @@ -111,7 +111,7 @@ private: Vector author_rules; }; - void cascade_declarations(StyleProperties&, DOM::Element&, Vector const&, CascadeOrigin, Important important) const; + void cascade_declarations(StyleProperties&, DOM::Element&, Optional, Vector const&, CascadeOrigin, Important) const; void build_rule_cache(); void build_rule_cache_if_needed() const;