diff --git a/Tests/LibWeb/Text/expected/css/small-aspect-ratio.txt b/Tests/LibWeb/Text/expected/css/small-aspect-ratio.txt
new file mode 100644
index 00000000000..1bfe75352f4
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/css/small-aspect-ratio.txt
@@ -0,0 +1 @@
+element height: 10px
diff --git a/Tests/LibWeb/Text/input/css/small-aspect-ratio.html b/Tests/LibWeb/Text/input/css/small-aspect-ratio.html
new file mode 100644
index 00000000000..5c5b20088f3
--- /dev/null
+++ b/Tests/LibWeb/Text/input/css/small-aspect-ratio.html
@@ -0,0 +1,11 @@
+
+
diff --git a/Userland/Libraries/LibWeb/Layout/Box.cpp b/Userland/Libraries/LibWeb/Layout/Box.cpp
index 97cf4061d2d..b1aeb1a691b 100644
--- a/Userland/Libraries/LibWeb/Layout/Box.cpp
+++ b/Userland/Libraries/LibWeb/Layout/Box.cpp
@@ -93,7 +93,7 @@ Optional Box::preferred_aspect_ratio() const
if (ratio.is_degenerate())
return {};
- return CSSPixelFraction(CSSPixels(ratio.numerator()), CSSPixels(ratio.denominator()));
+ return CSSPixelFraction(ratio.numerator(), ratio.denominator());
}
}
diff --git a/Userland/Libraries/LibWeb/PixelUnits.h b/Userland/Libraries/LibWeb/PixelUnits.h
index a3718c04e74..65aa2663c7e 100644
--- a/Userland/Libraries/LibWeb/PixelUnits.h
+++ b/Userland/Libraries/LibWeb/PixelUnits.h
@@ -320,6 +320,20 @@ public:
VERIFY(denominator != 0);
}
+ template
+ constexpr CSSPixelFraction(F numerator, F denominator = 1)
+ {
+ if (CSSPixels::nearest_value_for(denominator) == 0) {
+ numerator = numerator / denominator;
+ denominator = 1;
+ }
+
+ m_numerator = CSSPixels(numerator);
+ m_denominator = CSSPixels(denominator);
+
+ VERIFY(denominator != 0);
+ }
+
constexpr operator CSSPixels() const
{
i64 wide_value = m_numerator.raw_value();