diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs index 98a62302264..577070fbdab 100644 --- a/components/layout_2020/flow/mod.rs +++ b/components/layout_2020/flow/mod.rs @@ -250,7 +250,8 @@ fn calculate_inline_content_size_for_block_level_boxes( BlockLevelBox::OutOfFlowFloatBox(ref mut float_box) => { let size = float_box .contents - .outer_inline_content_sizes(layout_context, writing_mode); + .outer_inline_content_sizes(layout_context, writing_mode) + .max(ContentSizes::zero()); let style_box = &float_box.contents.style().get_box(); Some((size, style_box.float, style_box.clear)) }, @@ -259,14 +260,17 @@ fn calculate_inline_content_size_for_block_level_boxes( } => { let size = sizing::outer_inline(&style, writing_mode, || { contents.inline_content_sizes(layout_context, style.writing_mode) - }); + }) + .max(ContentSizes::zero()); // A block in the same BFC can overlap floats, it's not moved next to them, // so we shouldn't add its size to the size of the floats. // Instead, we treat it like an independent block with 'clear: both'. Some((size, Float::None, Clear::Both)) }, BlockLevelBox::Independent(ref mut independent) => { - let size = independent.outer_inline_content_sizes(layout_context, writing_mode); + let size = independent + .outer_inline_content_sizes(layout_context, writing_mode) + .max(ContentSizes::zero()); Some((size, Float::None, independent.style().get_box().clear)) }, }