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;