diff options
Diffstat (limited to 'testing/web-platform/tests/css/css-anchor-position/anchor-scroll-position-try-010.html')
-rw-r--r-- | testing/web-platform/tests/css/css-anchor-position/anchor-scroll-position-try-010.html | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-position-try-010.html b/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-position-try-010.html new file mode 100644 index 0000000000..133649c720 --- /dev/null +++ b/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-position-try-010.html @@ -0,0 +1,95 @@ +<!DOCTYPE html> +<title>Tests position fallback with initially out-of-viewport anchor in vertial-lr rtl</title> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-anchor-1/#scroll"> +<link rel="help" href="https://drafts.csswg.org/css-anchor-1/#fallback-apply"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/test-common.js"></script> + +<style> +body { + margin: 0; + width: 200vw; + height: 200vh; +} + +html { + writing-mode: vertical-lr; + direction: rtl; +} + +#anchor { + anchor-name: --a; + width: 100px; + height: 100px; + margin-block-start: 100vb; + margin-inline-start: 100vi; + background: orange; +} + +#anchored { + position: fixed; + width: 100px; + height: 100px; + background: green; + anchor-default: --a; + position-try-options: --pf1, --pf2, --pf3; + inset-block-start: anchor(--a end); + inset-inline-start: anchor(--a end); +} + +@position-try --pf1 { + inset: auto; + inset-block-end: anchor(--a start); + inset-inline-start: anchor(--a end); +} +@position-try --pf2 { + inset: auto; + inset-block-start: anchor(--a end); + inset-inline-end: anchor(--a start); +} +@position-try --pf3 { + inset: auto; + inset-block-end: anchor(--a start); + inset-inline-end: anchor(--a start); +} +</style> + +<div id="anchor"></div> +<div id="anchored"></div> + +<script> +promise_test(async () => { + await waitUntilNextAnimationFrame(); + assert_fallback_position(anchored, anchor, 'bottom'); + assert_fallback_position(anchored, anchor, 'left'); +}, 'Should use the last fallback position initially'); + +promise_test(async () => { + // Scroll left to have enough space right to the anchor, but not enough above. + document.documentElement.scrollLeft = 250; + document.documentElement.scrollTop = -150; + await waitUntilNextAnimationFrame(); + assert_fallback_position(anchored, anchor, 'right'); + assert_fallback_position(anchored, anchor, 'bottom'); +}, 'Should use the third fallback position with enough space right'); + +promise_test(async () => { + // Scroll up to have enough space above the anchor, but not enough right. + document.documentElement.scrollLeft = 150; + document.documentElement.scrollTop = -250; + await waitUntilNextAnimationFrame(); + assert_fallback_position(anchored, anchor, 'left'); + assert_fallback_position(anchored, anchor, 'top'); +}, 'Should use the second fallback position with enough space above'); + +promise_test(async () => { + // Scroll up and right to have enough space on both axes. + document.documentElement.scrollLeft = 250; + document.documentElement.scrollTop = -250; + await waitUntilNextAnimationFrame(); + assert_fallback_position(anchored, anchor, 'right'); + assert_fallback_position(anchored, anchor, 'top'); +}, 'Should use the first fallback position with enough space right and above'); +</script> |