diff --git a/Tests/LibWeb/Layout/expected/css-degenerate-aspect-ratio.txt b/Tests/LibWeb/Layout/expected/css-degenerate-aspect-ratio.txt
new file mode 100644
index 00000000000..bd12f55c7c8
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/css-degenerate-aspect-ratio.txt
@@ -0,0 +1,16 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+ BlockContainer at (0,0) content-size 800x33 [BFC] children: not-inline
+ BlockContainer
at (8,8) content-size 784x17 children: not-inline
+ BlockContainer at (8,8) content-size 784x17 children: inline
+ frag 0 from TextNode start: 0, length: 22, rect: [8,8 186.515625x17] baseline: 13.296875
+ "Pass if we don't crash"
+ TextNode <#text>
+ BlockContainer <(anonymous)> at (8,25) content-size 784x0 children: inline
+ TextNode <#text>
+
+ViewportPaintable (Viewport<#document>) [0,0 800x600]
+ PaintableWithLines (BlockContainer) [0,0 800x33]
+ PaintableWithLines (BlockContainer) [8,8 784x17]
+ PaintableWithLines (BlockContainer
) [8,8 784x17]
+ TextPaintable (TextNode<#text>)
+ PaintableWithLines (BlockContainer(anonymous)) [8,25 784x0]
diff --git a/Tests/LibWeb/Layout/input/css-degenerate-aspect-ratio.html b/Tests/LibWeb/Layout/input/css-degenerate-aspect-ratio.html
new file mode 100644
index 00000000000..fad8ebbf439
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/css-degenerate-aspect-ratio.html
@@ -0,0 +1,5 @@
+
Pass if we don't crash
diff --git a/Userland/Libraries/LibWeb/Layout/Box.cpp b/Userland/Libraries/LibWeb/Layout/Box.cpp
index bf48595e9ca..97cf4061d2d 100644
--- a/Userland/Libraries/LibWeb/Layout/Box.cpp
+++ b/Userland/Libraries/LibWeb/Layout/Box.cpp
@@ -85,7 +85,15 @@ Optional
Box::preferred_aspect_ratio() const
auto computed_aspect_ratio = computed_values().aspect_ratio();
if (computed_aspect_ratio.use_natural_aspect_ratio_if_available && natural_aspect_ratio().has_value())
return natural_aspect_ratio();
- return computed_aspect_ratio.preferred_ratio.map([](CSS::Ratio const& ratio) { return CSSPixelFraction(CSSPixels(ratio.numerator()), CSSPixels(ratio.denominator())); });
+
+ if (!computed_aspect_ratio.preferred_ratio.has_value())
+ return {};
+
+ auto ratio = computed_aspect_ratio.preferred_ratio.release_value();
+ if (ratio.is_degenerate())
+ return {};
+
+ return CSSPixelFraction(CSSPixels(ratio.numerator()), CSSPixels(ratio.denominator()));
}
}