|  | <!DOCTYPE html> | 
|  | <html class=reftest-wait> | 
|  | <title>View transitions: use snapshot containing block for absolute position</title> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> | 
|  | <link rel="author" href="mailto:bokan@chromium.org"> | 
|  | <link rel="match" href="snapshot-containing-block-absolute-ref.html"> | 
|  | <meta name="fuzzy" content="maxDifference=0-20; totalPixels=0-100"> | 
|  |  | 
|  | <script src="/common/reftest-wait.js"></script> | 
|  | <style> | 
|  | :root { | 
|  | view-transition-name: none; | 
|  | background-color: red; | 
|  | } | 
|  |  | 
|  | body { | 
|  | height: 400vh; | 
|  | } | 
|  |  | 
|  | #target { | 
|  | position: absolute; | 
|  | left: 0px; | 
|  | top: 600px; | 
|  | width: 100px; | 
|  | height: 100px; | 
|  |  | 
|  | display: flex; | 
|  | justify-content: center; | 
|  | flex-direction: column; | 
|  | align-items: center; | 
|  |  | 
|  | background: darkseagreen; | 
|  | view-transition-name: target; | 
|  | } | 
|  |  | 
|  | ::view-transition-group(target) { | 
|  | animation-duration: 50s; | 
|  | animation-play-state: paused; | 
|  | top: unset; | 
|  | left: unset; | 
|  | right: 0px; | 
|  | bottom: 0px; | 
|  | } | 
|  |  | 
|  | ::view-transition { | 
|  | position: absolute; | 
|  | left: 20px; | 
|  | top: 40px; | 
|  | width: 700px; | 
|  | height: 500px; | 
|  | background-color: limegreen; | 
|  | } | 
|  |  | 
|  | ::view-transition-old(*) { | 
|  | animation: unset; | 
|  | opacity: 1; | 
|  | } | 
|  |  | 
|  | ::view-transition-new(*) { | 
|  | animation: unset; | 
|  | opacity: 0; | 
|  | } | 
|  |  | 
|  | </style> | 
|  |  | 
|  | <div id="target">TARGET</div> | 
|  |  | 
|  | <script> | 
|  | failIfNot(document.startViewTransition, "Missing document.startViewTransition"); | 
|  |  | 
|  | async function runTest() { | 
|  | // Start the view transition at a scroll offset so that the snapshot | 
|  | // containing block differs from the initial containing block. Scroll so that | 
|  | // the target is at 0,0 so its transition group has an identity transform. | 
|  | const scrollTargetY = document.getElementById('target').offsetTop; | 
|  | window.scrollTo(0, scrollTargetY); | 
|  | let transition = document.startViewTransition(); | 
|  | await transition.ready; | 
|  | takeScreenshot(); | 
|  | } | 
|  |  | 
|  | onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); | 
|  | </script> |