Automatic update from web-platform-tests WebKit export of https://bugs.webkit.org/show_bug.cgi?id=295009 -- wpt-commits: 2d623bd1ab81ec5cc998ffd485860bdc14a61272 wpt-pr: 54345
76 lines
2.1 KiB
HTML
76 lines
2.1 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<title>CSS Anchor Positioning: basic last successful position fallback on pseudo-elements</title>
|
|
<link rel="author" title="Kiet Ho" href="mailto:kiet.ho@apple.com">
|
|
|
|
<link rel="help" href="https://drafts.csswg.org/css-anchor-position/#last-successful-position-fallback">
|
|
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="support/test-common.js"></script>
|
|
|
|
<style>
|
|
#container {
|
|
position: relative;
|
|
width: 400px;
|
|
height: 400px;
|
|
background: teal;
|
|
}
|
|
#anchor {
|
|
position: relative;
|
|
top: 100px;
|
|
left: 100px;
|
|
width: 100px;
|
|
height: 100px;
|
|
background: red;
|
|
anchor-name: --a;
|
|
}
|
|
#anchored::before {
|
|
position-anchor: --a;
|
|
/*
|
|
We can't use position-area, since there's no way to access offsetTop of
|
|
pseudo-elements to check for position. Instead, we have to use anchor()
|
|
and check the computed inset values.
|
|
*/
|
|
bottom: anchor(top);
|
|
left: anchor(left);
|
|
position-try-fallbacks: flip-block;
|
|
position: absolute;
|
|
width: 100px;
|
|
height: 200px;
|
|
background: lime;
|
|
content: "";
|
|
}
|
|
</style>
|
|
|
|
<div id="container">
|
|
<div id="anchor"></div>
|
|
<div id="anchored"></div>
|
|
</div>
|
|
|
|
<script>
|
|
promise_test(async () => {
|
|
await waitUntilNextAnimationFrame();
|
|
await waitUntilNextAnimationFrame();
|
|
const anchoredStyle = getComputedStyle(anchored, "::before");
|
|
assert_equals(anchoredStyle.top, "200px");
|
|
}, "Starts rendering with flip-block");
|
|
|
|
promise_test(async () => {
|
|
anchor.style.top = "150px";
|
|
await waitUntilNextAnimationFrame();
|
|
await waitUntilNextAnimationFrame();
|
|
const anchoredStyle = getComputedStyle(anchored, "::before");
|
|
assert_equals(anchoredStyle.top, "250px");
|
|
}, "No successful position, keep flip-block");
|
|
|
|
promise_test(async () => {
|
|
anchor.style.top = "200px";
|
|
await waitUntilNextAnimationFrame();
|
|
await waitUntilNextAnimationFrame();
|
|
const anchoredStyle = getComputedStyle(anchored, "::before");
|
|
assert_equals(anchoredStyle.top, "0px");
|
|
}, "Base position without fallback now successful");
|
|
</script>
|
|
|