diff --git a/Tests/LibWeb/Layout/expected/flex-item-with-intrinsic-aspect-ratio.txt b/Tests/LibWeb/Layout/expected/flex-item-with-intrinsic-aspect-ratio.txt new file mode 100644 index 0000000000..ffac888f15 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/flex-item-with-intrinsic-aspect-ratio.txt @@ -0,0 +1,4 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x200 children: not-inline + Box at (0,0) content-size 400x200 flex-container(column) children: not-inline + ImageBox at (0,0) content-size 400x200 flex-item children: not-inline diff --git a/Tests/LibWeb/Layout/input/flex-item-with-intrinsic-aspect-ratio.html b/Tests/LibWeb/Layout/input/flex-item-with-intrinsic-aspect-ratio.html new file mode 100644 index 0000000000..5b5077f46e --- /dev/null +++ b/Tests/LibWeb/Layout/input/flex-item-with-intrinsic-aspect-ratio.html @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 4fd235ee53..f2636de719 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -614,7 +614,9 @@ void FlexFormattingContext::determine_flex_base_size_and_hypothetical_main_size( && item.used_flex_basis.type == CSS::FlexBasis::Content && has_definite_cross_size(item.box)) { // flex_base_size is calculated from definite cross size and intrinsic aspect ratio - return resolved_definite_cross_size(item) * item.box->intrinsic_aspect_ratio().value(); + if (is_row_layout()) + return inner_cross_size(item.box) * item.box->intrinsic_aspect_ratio().value(); + return inner_cross_size(item.box) / item.box->intrinsic_aspect_ratio().value(); } // C. If the used flex basis is content or depends on its available space, @@ -724,7 +726,9 @@ Optional FlexFormattingContext::transferred_size_suggestion(FlexItem if (item.box->has_intrinsic_aspect_ratio() && has_definite_cross_size(item.box)) { auto aspect_ratio = item.box->intrinsic_aspect_ratio().value(); // FIXME: Clamp cross size to min/max cross size before this conversion. - return resolved_definite_cross_size(item) * aspect_ratio; + if (is_row_layout()) + return resolved_definite_cross_size(item) * aspect_ratio; + return resolved_definite_cross_size(item) / aspect_ratio; } // It is otherwise undefined.