.test) [8,8 784x105.21875]
+ TextPaintable (TextNode<#text>)
diff --git a/Tests/LibWeb/Layout/input/calc-font-size-with-percentages.html b/Tests/LibWeb/Layout/input/calc-font-size-with-percentages.html
new file mode 100644
index 0000000000000000000000000000000000000000..66c32e5d8829967fbaf3232831a1489a9e300383
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/calc-font-size-with-percentages.html
@@ -0,0 +1,5 @@
+
i resolved enough of percentages, no?
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
index f7470d5f7a68ac454ef36450e2f22a66656678a0..b17ed0446b69ad46c54f12e2e553aceb920d4328 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
@@ -1764,7 +1764,11 @@ RefPtr
StyleComputer::compute_font_for_style_values(DOM::Elemen
} else if (font_size.is_length()) {
maybe_length = font_size.as_length().length();
} else if (font_size.is_calculated()) {
- maybe_length = font_size.as_calculated().resolve_length(length_resolution_context);
+ if (font_size.as_calculated().contains_percentage()) {
+ maybe_length = font_size.as_calculated().resolve_length_percentage(length_resolution_context, Length::make_px(parent_font_size()));
+ } else {
+ maybe_length = font_size.as_calculated().resolve_length(length_resolution_context);
+ }
}
if (maybe_length.has_value()) {
font_size_in_px = maybe_length.value().to_px(length_resolution_context);
diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
index 503d9e08378845bb70607c5e34e343460c62492a..ad3c00cf767c81afe332eeb6554435f2c58183b9 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp
@@ -2371,30 +2371,24 @@ Optional CalculatedStyleValue::resolve_length(Layout::Node const& layout
Optional CalculatedStyleValue::resolve_length_percentage(Layout::Node const& layout_node, Length const& percentage_basis) const
{
- auto result = m_calculation->resolve(Length::ResolutionContext::for_layout_node(layout_node), percentage_basis);
-
- return result.value().visit(
- [&](Length const& length) -> Optional {
- return length;
- },
- [&](Percentage const& percentage) -> Optional {
- return percentage_basis.percentage_of(percentage);
- },
- [&](auto const&) -> Optional {
- return {};
- });
+ return resolve_length_percentage(Length::ResolutionContext::for_layout_node(layout_node), percentage_basis);
}
Optional CalculatedStyleValue::resolve_length_percentage(Layout::Node const& layout_node, CSSPixels percentage_basis) const
{
- auto result = m_calculation->resolve(Length::ResolutionContext::for_layout_node(layout_node), Length::make_px(percentage_basis));
+ return resolve_length_percentage(Length::ResolutionContext::for_layout_node(layout_node), Length::make_px(percentage_basis));
+}
+
+Optional CalculatedStyleValue::resolve_length_percentage(Length::ResolutionContext const& resolution_context, Length const& percentage_basis) const
+{
+ auto result = m_calculation->resolve(resolution_context, percentage_basis);
return result.value().visit(
[&](Length const& length) -> Optional {
return length;
},
[&](Percentage const& percentage) -> Optional {
- return Length::make_px(CSSPixels(percentage.value() * percentage_basis) / 100);
+ return percentage_basis.percentage_of(percentage);
},
[&](auto const&) -> Optional {
return {};
diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
index 58a59b8f1358c4ec89a16e786011cdf9894cecd5..137894b039c13e9ecb1dbe3e5ea6246dcd35dc50 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
+++ b/Userland/Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.h
@@ -95,6 +95,7 @@ public:
Optional resolve_length(Layout::Node const& layout_node) const;
Optional resolve_length_percentage(Layout::Node const&, Length const& percentage_basis) const;
Optional resolve_length_percentage(Layout::Node const&, CSSPixels percentage_basis) const;
+ Optional resolve_length_percentage(Length::ResolutionContext const&, Length const& percentage_basis) const;
bool resolves_to_percentage() const { return m_resolved_type.matches_percentage(); }
Optional resolve_percentage() const;