diff --git a/Tests/LibWeb/Layout/expected/transform-calc-length-values.txt b/Tests/LibWeb/Layout/expected/transform-calc-length-values.txt
new file mode 100644
index 0000000000..8068691ead
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/transform-calc-length-values.txt
@@ -0,0 +1,3 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+ BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline
+ BlockContainer
at (9,9) content-size 100x100 children: not-inline
diff --git a/Tests/LibWeb/Layout/input/transform-calc-length-values.html b/Tests/LibWeb/Layout/input/transform-calc-length-values.html
new file mode 100644
index 0000000000..c8fb1b3f24
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/transform-calc-length-values.html
@@ -0,0 +1,8 @@
+
diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
index 85aa19a9ca..021b49c22b 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
@@ -442,7 +442,7 @@ Vector StyleProperties::transformations() const
if (transformation_value->is_calculated()) {
auto& calculated = transformation_value->as_calculated();
if (calculated.resolves_to_length()) {
- dbgln("FIXME: Unable to resolve length with no layout node! {}", calculated.to_string());
+ values.append(CSS::LengthPercentage { calculated });
} else if (calculated.resolves_to_percentage()) {
values.append({ calculated.resolve_percentage().value() });
} else if (calculated.resolves_to_number()) {
diff --git a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp
index 123e35dc38..796cd2c44c 100644
--- a/Userland/Libraries/LibWeb/Painting/StackingContext.cpp
+++ b/Userland/Libraries/LibWeb/Painting/StackingContext.cpp
@@ -238,14 +238,10 @@ void StackingContext::paint_internal(PaintContext& context) const
Gfx::FloatMatrix4x4 StackingContext::get_transformation_matrix(CSS::Transformation const& transformation) const
{
auto count = transformation.values.size();
- auto value = [this, transformation](size_t index, Optional reference_length = {}) -> float {
+ auto value = [this, transformation](size_t index, CSS::Length const& reference_length = CSS::Length::make_px(0)) -> float {
return transformation.values[index].visit(
[this, reference_length](CSS::LengthPercentage const& value) -> double {
- if (reference_length.has_value()) {
- return value.resolved(m_box, reference_length.value()).to_px(m_box).to_float();
- }
-
- return value.length().to_px(m_box).to_float();
+ return value.resolved(m_box, reference_length).to_px(m_box).to_float();
},
[this](CSS::AngleOrCalculated const& value) {
return value.resolved(m_box).to_degrees() * M_DEG2RAD;