implicit-stacking-context.html (2502B)
1 <!DOCTYPE html> 2 <html class="test-wait"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>Implicit stacking context</title> 7 </head> 8 <script src="/dom/events/scrolling/scroll_support.js"></script> 9 <style> 10 main { 11 display: flex; 12 flex-direction: row; 13 } 14 article { 15 flex: 1; 16 max-width: 200px; 17 margin: 30px; 18 font-size: 30px; 19 background: green; 20 border: 2px solid black; 21 } 22 section { 23 flex: 1; 24 overflow: auto; 25 border-radius: 200px 20%; 26 corner-shape: squircle; 27 max-height: 200px; 28 background: grey; 29 padding: 10px; 30 } 31 ul { 32 contain: view-transition; 33 } 34 li { 35 padding: 10px; 36 background: yellow; 37 color: black; 38 border: 1px solid purple; 39 list-style: none; 40 } 41 body { 42 display: flex; 43 flex-direction: column; 44 } 45 header { 46 display: flex; 47 justify-content: flex-start; 48 } 49 main > *, li { 50 view-transition-name: match-element; 51 } 52 53 ::view-transition-group(*) { 54 animation-duration: 150ms; 55 } 56 </style> 57 <!-- crbug.com/426218225 --> 58 <body> 59 <main> 60 <article class="shuffle"> 61 Lorem, ipsum dolor sit amet consectetur adipisicing elit. 62 Illo alias dolore deleniti quas enim, ullam quidem dolorum, dolor vitae 63 doloribus quam quis consequuntur eum dicta, animi quisquam maiores 64 asperiores perspiciatis? 65 </article> 66 <section class="shuffle"> 67 <ul> 68 <li>Item A</li> 69 <li>Item B</li> 70 <li>Item C</li> 71 <li>Item D</li> 72 </ul> 73 </section> 74 </main> 75 </body> 76 <script> 77 const iteration_count = 2; 78 async function runTest(iteration) { 79 const vt1 = document.startViewTransition(() => { 80 const main = document.querySelector("main"); 81 const first = main.querySelector('.shuffle'); 82 const last = main.querySelector('.shuffle:last-child'); 83 main.insertBefore(last, first); 84 }); 85 86 const ul = document.querySelector("ul"); 87 88 const vt2 = ul.startViewTransition(() => { 89 const first = ul.querySelector('li'); 90 const last = ul.querySelector('li:last-child'); 91 ul.insertBefore(last, first); 92 }); 93 94 Promise.all([vt1.finished, vt2.finished]).then(() => { 95 if (++iteration == iteration_count) { 96 document.documentElement.classList.remove('test-wait'); 97 } else { 98 runTest(iteration); 99 } 100 }); 101 } 102 103 window.onload = async () => { 104 await waitForCompositorReady(); 105 runTest(0); 106 }; 107 </script> 108 </html>