diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs index 9c4d9b562ee..03c50e5a807 100644 --- a/components/layout_2020/flow/mod.rs +++ b/components/layout_2020/flow/mod.rs @@ -733,10 +733,13 @@ fn layout_in_flow_replaced_block_level<'a>( let mut clearance = Length::zero(); if let Some(ref mut sequential_layout_state) = sequential_layout_state { + sequential_layout_state.adjoin_assign(&CollapsedMargin::new(margin.block_start)); sequential_layout_state.collapse_margins(); clearance = sequential_layout_state.calculate_clearance(ClearSide::from_style(style)); - sequential_layout_state - .advance_block_position(pbm.border.block_sum() + pbm.padding.block_sum() + size.block); + sequential_layout_state.advance_block_position( + pbm.border.block_sum() + pbm.padding.block_sum() + size.block + clearance, + ); + sequential_layout_state.adjoin_assign(&CollapsedMargin::new(margin.block_end)); }; let content_rect = Rect { @@ -756,7 +759,7 @@ fn layout_in_flow_replaced_block_level<'a>( pbm.padding, pbm.border, margin, - Length::zero(), + clearance, block_margins_collapsed_with_children, ) } diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 7e58dc6fc77..c8a75b98977 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -61742,6 +61742,35 @@ {} ] ], + "clear-on-replaced-element.html": [ + "e5566b38326da17455d54c3d06d498f72bc4c693", + [ + null, + [ + [ + "/css/CSS2/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 2 + ], + [ + 0, + 1500 + ] + ] + ] + ] + } + ] + ], "clear-with-top-margin-after-cleared-empty-block.html": [ "5d0fba7981f3f688b22442c1e8bef2ff8b146f5e", [ diff --git a/tests/wpt/tests/css/CSS2/floats-clear/clear-on-replaced-element.html b/tests/wpt/tests/css/CSS2/floats-clear/clear-on-replaced-element.html new file mode 100644 index 00000000000..e5566b38326 --- /dev/null +++ b/tests/wpt/tests/css/CSS2/floats-clear/clear-on-replaced-element.html @@ -0,0 +1,34 @@ + +
Test passes if there is a filled green square and no red.
+