diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs index e5695655296..e04f24e9c85 100644 --- a/components/layout_2020/flow/mod.rs +++ b/components/layout_2020/flow/mod.rs @@ -1142,12 +1142,15 @@ fn solve_inline_margins_for_in_flow_block_level( pbm: &PaddingBorderMargin, inline_size: Length, ) -> (Length, Length) { - let available = containing_block.inline_size - pbm.padding_border_sums.inline - inline_size; - match (pbm.margin.inline_start, pbm.margin.inline_end) { - (LengthOrAuto::Auto, LengthOrAuto::Auto) => (available / 2., available / 2.), - (LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => (available - end, end), - (LengthOrAuto::LengthPercentage(start), _) => (start, available - start), - } + let free_space = containing_block.inline_size - pbm.padding_border_sums.inline - inline_size; + let margin_inline_start = match (pbm.margin.inline_start, pbm.margin.inline_end) { + (LengthOrAuto::Auto, LengthOrAuto::Auto) => Length::zero().max(free_space / 2.), + (LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => { + Length::zero().max(free_space - end) + }, + (LengthOrAuto::LengthPercentage(start), _) => start, + }; + (margin_inline_start, free_space - margin_inline_start) } /// State that we maintain when placing blocks. diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 206c345fd72..f70d2aa346b 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -73328,6 +73328,19 @@ {} ] ], + "margin-auto-on-block-box.html": [ + "1afc98a91322feab5fe249b34c26274468fb0b22", + [ + null, + [ + [ + "/css/CSS2/margin-padding-clear/margin-auto-on-block-box-ref.html", + "==" + ] + ], + {} + ] + ], "margin-backgrounds-002.xht": [ "75c0211ca4b9c541eddb4b2698efd185574f0df4", [ @@ -365406,6 +365419,10 @@ "287a58e369391edd2c3c3c6bcb6c5da4292ecb80", [] ], + "margin-auto-on-block-box-ref.html": [ + "efc41cff10c179da1a3cfe0da1cfea72530fa7d9", + [] + ], "margin-border-padding-001-ref.xht": [ "0578570aaef4f6b46557feb12b7368e0008dbb5b", [] diff --git a/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box-ref.html b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box-ref.html new file mode 100644 index 00000000000..efc41cff10c --- /dev/null +++ b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box-ref.html @@ -0,0 +1,54 @@ + + +
+ XXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +\ No newline at end of file diff --git a/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box.html b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box.html new file mode 100644 index 00000000000..1afc98a9132 --- /dev/null +++ b/tests/wpt/tests/css/CSS2/margin-padding-clear/margin-auto-on-block-box.html @@ -0,0 +1,78 @@ + + +