diff --git a/Tests/LibWeb/Layout/expected/flex/flex-item-on-row-with-intrinsic-size.txt b/Tests/LibWeb/Layout/expected/flex/flex-item-on-row-with-intrinsic-size.txt new file mode 100644 index 00000000000..0a1fe5fc243 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/flex/flex-item-on-row-with-intrinsic-size.txt @@ -0,0 +1,15 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x8 children: not-inline + Box
at (8,8) content-size 784x8 flex-container(row) [FFC] children: not-inline + BlockContainer <(anonymous)> (not painted) [BFC] children: inline + TextNode <#text> + ImageBox at (8,8) content-size 8x8 flex-item children: not-inline + BlockContainer <(anonymous)> (not painted) [BFC] children: inline + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x600] + PaintableWithLines (BlockContainer) [8,8 784x8] + PaintableBox (Box
) [8,8 784x8] + ImagePaintable (ImageBox) [8,8 8x8] diff --git a/Tests/LibWeb/Layout/input/flex/flex-item-on-row-with-intrinsic-size.html b/Tests/LibWeb/Layout/input/flex/flex-item-on-row-with-intrinsic-size.html new file mode 100644 index 00000000000..d9631cea095 --- /dev/null +++ b/Tests/LibWeb/Layout/input/flex/flex-item-on-row-with-intrinsic-size.html @@ -0,0 +1,2 @@ +
+ diff --git a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 637c3235beb..9c0978e5d0f 100644 --- a/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -621,19 +621,19 @@ void FlexFormattingContext::determine_flex_base_size_and_hypothetical_main_size( // in the various helpers that calculate the intrinsic sizes of a flex item, // e.g. calculate_min_content_main_size(). - if (item.used_flex_basis->has()) { + if (item.used_flex_basis->has()) return calculate_max_content_main_size(item); - } return calculate_fit_content_main_size(item); }(); - // AD-HOC: This is not mentioned in the spec, but if the item has an aspect ratio, - // we may need to adjust the main size in these ways: - // - using stretch-fit main size if the flex basis is indefinite and there is no cross size to resolve the ratio against. + // AD-HOC: This is not mentioned in the spec, but if the item has an aspect ratio, we may need + // to adjust the main size in these ways: + // - using stretch-fit main size if the flex basis is indefinite, there is no + // intrinsic size and no cross size to resolve the ratio against. // - in response to cross size min/max constraints. if (item.box->has_natural_aspect_ratio()) { - if (!item.used_flex_basis_is_definite && !has_definite_cross_size(item)) { + if (!item.used_flex_basis_is_definite && !item.box->has_natural_width() && !item.box->has_natural_height() && !has_definite_cross_size(item)) { item.flex_base_size = inner_main_size(m_flex_container_state); } item.flex_base_size = adjust_main_size_through_aspect_ratio_for_cross_size_min_max_constraints(child_box, item.flex_base_size, computed_cross_min_size(child_box), computed_cross_max_size(child_box));