diff --git a/Libraries/LibWeb/Layout/FlexFormattingContext.cpp b/Libraries/LibWeb/Layout/FlexFormattingContext.cpp index 98c151d9d0..1dec4f6af4 100644 --- a/Libraries/LibWeb/Layout/FlexFormattingContext.cpp +++ b/Libraries/LibWeb/Layout/FlexFormattingContext.cpp @@ -22,6 +22,14 @@ CSSPixels FlexFormattingContext::get_pixel_width(FlexItem const& item, CSS::Size CSSPixels FlexFormattingContext::get_pixel_height(FlexItem const& item, CSS::Size const& size) const { + if (is_row_layout()) { + // NOTE: In a row layout, after we've determined the main size, we use that as the available width + // for any intrinsic sizing layout needed to resolve the height. + auto available_width = item.main_size.has_value() ? AvailableSize::make_definite(item.main_size.value()) : AvailableSize::make_indefinite(); + auto available_height = AvailableSize::make_indefinite(); + auto available_space = AvailableSpace { available_width, available_height }; + return calculate_inner_height(item.box, available_space, size); + } return calculate_inner_height(item.box, m_available_space.value(), size); } diff --git a/Tests/LibWeb/Layout/expected/flex/row-item-with-intrinsic-keyword-for-height.txt b/Tests/LibWeb/Layout/expected/flex/row-item-with-intrinsic-keyword-for-height.txt new file mode 100644 index 0000000000..94bfd3f645 --- /dev/null +++ b/Tests/LibWeb/Layout/expected/flex/row-item-with-intrinsic-keyword-for-height.txt @@ -0,0 +1,20 @@ +Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] children: not-inline + BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 52 0+0+0] [BFC] children: not-inline + Box at [8,8] flex-container(row) [8+0+0 80 0+0+712] [8+0+0 36 0+0+8] [FFC] children: not-inline + BlockContainer at [8,8] flex-item [0+0+0 71.109375 0+0+0] [0+0+0 36 0+0+0] [BFC] children: inline + frag 0 from TextNode start: 0, length: 7, rect: [8,8 62.796875x18] baseline: 13.796875 + "foo bar" + frag 1 from TextNode start: 8, length: 3, rect: [8,26 27.203125x18] baseline: 13.796875 + "baz" + TextNode <#text> (not painted) + BlockContainer at [79.109375,8] flex-item [0+0+0 8.890625 0+0+0] [0+0+0 10 0+0+0] [BFC] children: not-inline + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x52] + PaintableBox (Box) [8,8 80x36] + PaintableWithLines (BlockContainer
.item1) [8,8 71.109375x36] + TextPaintable (TextNode<#text>) + PaintableWithLines (BlockContainer
.item2) [79.109375,8 8.890625x10] + +SC for Viewport<#document> [0,0 800x600] [children: 1] (z-index: auto) + SC for BlockContainer [0,0 800x52] [children: 0] (z-index: auto) diff --git a/Tests/LibWeb/Layout/input/flex/row-item-with-intrinsic-keyword-for-height.html b/Tests/LibWeb/Layout/input/flex/row-item-with-intrinsic-keyword-for-height.html new file mode 100644 index 0000000000..8892b6ea98 --- /dev/null +++ b/Tests/LibWeb/Layout/input/flex/row-item-with-intrinsic-keyword-for-height.html @@ -0,0 +1,19 @@ +
foo bar baz
\ No newline at end of file