diff options
6 files changed, 37 insertions, 6 deletions
diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs index 07831f8dbf8..493c5a1c714 100644 --- a/components/layout_2020/positioned.rs +++ b/components/layout_2020/positioned.rs @@ -626,8 +626,19 @@ impl HoistedAbsolutelyPositionedBox { ) }; positioning_context.layout_collected_children(layout_context, &mut new_fragment); + + // Any hoisted boxes that remain in this positioning context are going to be hoisted + // up above this absolutely positioned box. These will necessarily be fixed position + // elements, because absolutely positioned elements form containing blocks for all + // other elements. If any of them have a static start position though, we need to + // adjust it to account for the start corner of this absolute. + positioning_context.adjust_static_position_of_hoisted_fragments_with_offset( + &new_fragment.content_rect.start_corner, + ); + for_nearest_containing_block_for_all_descendants .extend(positioning_context.for_nearest_containing_block_for_all_descendants); + new_fragment } } diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index d39c79550ed..acbf476370f 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -31605,6 +31605,19 @@ {} ] ], + "static-fixed-inside-abspos.html": [ + "e3c3aa450d42505557b1f3eefd0aee8ea63fa4d6", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "static-inside-inline-block.html": [ "327e8e6dacdeabb4d2d57ab700d80f966ccde76b", [ diff --git a/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-001.html.ini b/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-001.html.ini deleted file mode 100644 index 334022baff7..00000000000 --- a/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[hypothetical-dynamic-change-001.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-002.html.ini b/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-002.html.ini deleted file mode 100644 index 5541b847967..00000000000 --- a/tests/wpt/meta/css/css-position/hypothetical-dynamic-change-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[hypothetical-dynamic-change-002.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-position/position-fixed-scroll-nested-fixed.html.ini b/tests/wpt/meta/css/css-position/position-fixed-scroll-nested-fixed.html.ini deleted file mode 100644 index 2903ed8c405..00000000000 --- a/tests/wpt/meta/css/css-position/position-fixed-scroll-nested-fixed.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-fixed-scroll-nested-fixed.html] - expected: FAIL diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/static-fixed-inside-abspos.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-fixed-inside-abspos.html new file mode 100644 index 00000000000..e3c3aa450d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-fixed-inside-abspos.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<title>Static position fixed inside static position absolute</title> +<link rel="author" title="Martin Robinson" href="mrobinson@igalia.com"> +<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div style="display: absolute; width: 100px; height: 100px; background: green;"> + <div style="position: absolute; width: 50px; height: 50px; margin-left: 50px; margin-top: 50px; background: red;"> + <div style="position: fixed; width: 50px; height: 50px; background: green;"></div> + </div> +</div> |