diff --git a/Tests/LibWeb/Text/expected/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.txt b/Tests/LibWeb/Text/expected/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.txt
new file mode 100644
index 00000000000..7730d44c831
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.txt
@@ -0,0 +1,2 @@
+ The box is not visible.
+The box is now visible.
diff --git a/Tests/LibWeb/Text/input/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.html b/Tests/LibWeb/Text/input/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.html
new file mode 100644
index 00000000000..7bb45d6895c
--- /dev/null
+++ b/Tests/LibWeb/Text/input/IntersectionObserver/observe-box-inside-container-with-scrollable-overflow.html
@@ -0,0 +1,49 @@
+
+
+
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp
index 2b150fcf30d..24ab9f97cac 100644
--- a/Userland/Libraries/LibWeb/DOM/Element.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Element.cpp
@@ -875,8 +875,10 @@ JS::NonnullGCPtr Element::get_client_rects() const
const_cast(document()).update_paint_and_hit_testing_properties_if_needed();
Gfx::AffineTransform transform;
+ if (auto const* paintable_box = this->paintable_box())
+ transform = Gfx::extract_2d_affine_transform(paintable_box->transform());
CSSPixelPoint scroll_offset;
- for (auto const* containing_block = this->paintable_box(); containing_block; containing_block = containing_block->containing_block()) {
+ for (auto const* containing_block = paintable()->containing_block(); containing_block; containing_block = containing_block->containing_block()) {
transform = Gfx::extract_2d_affine_transform(containing_block->transform()).multiply(transform);
scroll_offset.translate_by(containing_block->scroll_offset());
}