diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/float-4.txt b/Tests/LibWeb/Layout/expected/block-and-inline/float-4.txt new file mode 100644 index 00000000000..717fef8df2e --- /dev/null +++ b/Tests/LibWeb/Layout/expected/block-and-inline/float-4.txt @@ -0,0 +1,30 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x60 [BFC] children: not-inline + BlockContainer <(anonymous)> at (0,0) content-size 800x0 children: inline + TextNode <#text> + BlockContainer at (8,8) content-size 780x0 children: inline + TextNode <#text> + BlockContainer at (9,9) content-size 50x50 floating [BFC] children: inline + line 0 width: 39.21875, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 5, rect: [14,9 39.21875x17.46875] + "Left1" + TextNode <#text> + TextNode <#text> + BlockContainer at (737,9) content-size 50x50 floating [BFC] children: inline + line 0 width: 48.3125, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 6, rect: [738,9 48.3125x17.46875] + "Right1" + TextNode <#text> + TextNode <#text> + BlockContainer at (61,9) content-size 50x50 floating [BFC] children: inline + line 0 width: 41.6875, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 5, rect: [65,9 41.6875x17.46875] + "Left2" + TextNode <#text> + TextNode <#text> + BlockContainer at (685,9) content-size 50x50 floating [BFC] children: inline + line 0 width: 50.78125, height: 17.46875, bottom: 17.46875, baseline: 13.53125 + frag 0 from TextNode start: 0, length: 6, rect: [685,9 50.78125x17.46875] + "Right2" + TextNode <#text> + TextNode <#text> diff --git a/Tests/LibWeb/Layout/input/block-and-inline/float-4.html b/Tests/LibWeb/Layout/input/block-and-inline/float-4.html new file mode 100644 index 00000000000..7edc25fc787 --- /dev/null +++ b/Tests/LibWeb/Layout/input/block-and-inline/float-4.html @@ -0,0 +1,29 @@ + + + + + + +
Left1
+
Right1
+
Left2
+
Right2
+ + diff --git a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp index ca9ccd280b4..162aba75307 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockFormattingContext.cpp @@ -950,10 +950,11 @@ void BlockFormattingContext::layout_floating_box(Box const& box, BlockContainer if (!line_builder) y += side_data.y_offset; + auto top_margin_edge = y - box_state.margin_box_top(); side_data.all_boxes.append(adopt_own(*new FloatingBox { .box = box, .offset_from_edge = offset_from_edge, - .top_margin_edge = y - box_state.margin_box_top(), + .top_margin_edge = top_margin_edge, .bottom_margin_edge = y + box_state.content_height() + box_state.margin_box_bottom(), })); side_data.current_boxes.append(*side_data.all_boxes.last()); @@ -971,7 +972,7 @@ void BlockFormattingContext::layout_floating_box(Box const& box, BlockContainer // If the new box was inserted below the bottom of the opposite side, // we reset the other side back to its edge. - if (y > other_side_data.y_offset) + if (top_margin_edge > other_side_data.y_offset) other_side_data.clear(); };