diff options
4 files changed, 62 insertions, 9 deletions
diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs index fe14cd4bb37..fd0fc6bc745 100644 --- a/components/layout_2020/flow/mod.rs +++ b/components/layout_2020/flow/mod.rs @@ -641,9 +641,6 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context( let computed_block_size = style.content_block_size(); let start_margin_can_collapse_with_children = pbm.padding.block_start == Au::zero() && pbm.border.block_start == Au::zero(); - let end_margin_can_collapse_with_children = pbm.padding.block_end == Au::zero() && - pbm.border.block_end == Au::zero() && - computed_block_size.is_auto(); let mut clearance = None; let parent_containing_block_position_info; @@ -745,6 +742,17 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context( )); } } + + let collapsed_through = collapsible_margins_in_children.collapsed_through && + pbm.padding_border_sums.block == Au::zero() && + block_size_is_zero_or_auto(computed_block_size, containing_block) && + block_size_is_zero_or_auto(style.min_block_size(), containing_block); + block_margins_collapsed_with_children.collapsed_through = collapsed_through; + + let end_margin_can_collapse_with_children = collapsed_through || + (pbm.padding.block_end == Au::zero() && + pbm.border.block_end == Au::zero() && + computed_block_size.is_auto()); if end_margin_can_collapse_with_children { block_margins_collapsed_with_children .end @@ -753,12 +761,6 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context( content_block_size += collapsible_margins_in_children.end.solve().into(); } - block_margins_collapsed_with_children.collapsed_through = collapsible_margins_in_children - .collapsed_through && - pbm.padding_border_sums.block == Au::zero() && - block_size_is_zero_or_auto(computed_block_size, containing_block) && - block_size_is_zero_or_auto(style.min_block_size(), containing_block); - let block_size = containing_block_for_children.block_size.auto_is(|| { content_block_size .clamp_between_extremums(min_box_size.block, max_box_size.block) diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index e0e408d0f6a..a608f04a5b0 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -67438,6 +67438,19 @@ {} ] ], + "margin-collapse-clear-011.xht": [ + "fed7bef25c532d02e38f9d2b58644f10958d72ad", + [ + null, + [ + [ + "/css/CSS2/margin-padding-clear/margin-collapse-clear-011-ref.xht", + "==" + ] + ], + {} + ] + ], "margin-collapse-min-height-001.xht": [ "2c6936244308faced1e79c5115950a8b5a7079e5", [ @@ -374459,6 +374472,10 @@ "f9c8c4c765f75eb1135f9c723e90de5b34b18010", [] ], + "margin-collapse-clear-011-ref.xht": [ + "2611de9f4a9310475172e775c4b18db81567bcfc", + [] + ], "margin-collapse-min-height-001-ref.xht": [ "f86d2b201f6a488b5d875b61fab075497d88d08c", [] diff --git a/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011-ref.xht b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011-ref.xht new file mode 100644 index 00000000000..2611de9f4a9 --- /dev/null +++ b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011-ref.xht @@ -0,0 +1,13 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Reftest Reference</title> + <link rel="author" title="Oriol Brufau" href="obrufau@igalia.com"/> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/> + </head> + <body style="font: 25px/1 Ahem"> + <div style="margin-bottom: 1em">X</div> + <div style="color: cyan;">X</div> + <div style="color: magenta">X</div> + </body> +</html> diff --git a/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011.xht b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011.xht new file mode 100644 index 00000000000..fed7bef25c5 --- /dev/null +++ b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-collapse-clear-011.xht @@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Margin Collapsing with Clearance</title> + <link rel="author" title="Oriol Brufau" href="obrufau@igalia.com"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#flow-control"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#collapsing-margins"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#floats"/> + <link rel="match" href="margin-collapse-clear-011-ref.xht"/> + <meta name="assert" content="The magenta X appears below the cyan X due to clearance"/> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"/> + </head> + <body style="font: 25px/1 Ahem"> + <div style="margin-bottom: 1em">X</div> + <div style="float: left; color: cyan;">X</div> + <div style="margin-bottom: 1em; height: 0px;"> + <div style="margin-bottom: -1em;"></div> + </div> + <div style="clear: both; color: magenta">X</div> + </body> +</html> |