View Transitions API:动画元素被遮挡,如何使其置于顶层?
解决View Transitions API动画元素被遮挡的问题
你观察得没错——设置view-transitions-name后,浏览器会为每个命名元素生成独立的过渡容器,这些容器的默认堆叠顺序会导致动画中的元素被其他命名元素的过渡层遮挡。要让当前动画元素置于顶层,只需通过View Transition的伪元素自定义堆叠层级:
在样式中添加以下规则,为目标元素的过渡层设置更高的z-index:
::view-transition-group(div) { z-index: 1000; }
原理说明
View Transition API会创建一系列伪元素层级:::view-transition是顶层容器,内部每个命名元素对应::view-transition-group(<name>),再包含::view-transition-old(<name>)和::view-transition-new(<name>)。通过给目标元素的::view-transition-group设置更高的z-index,就能让它的过渡层覆盖其他命名元素的过渡层。
修改后的完整代码
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Overlapping elements</title> <style> * { box-sizing: border-box; } body { display: grid; grid-template-columns: 10vw 10vw; gap: 1em; } div { view-transition-name: div; grid-column: 1; width: 10vw; height: 10vh; background-color: hotpink; } article { view-transition-name: article; grid-column: 2; width: 10vw; height: 10vh; background-color: forestgreen; } .grow { view-transition-name: div; position: fixed; left: 25vw; top: 25vh; width: 50vw; height: 50vh; background-color: hotpink; } /* 新增规则:提升div过渡层的堆叠层级 */ ::view-transition-group(div) { z-index: 1000; } </style> </head> <body> <div></div> <article></article> <button>click me</button> <script> document.querySelector("button").addEventListener("click", () => { document.startViewTransition(() => { const element = document.createElement("section"); element.classList.add("grow"); document.body.appendChild(element); document.querySelector("div").remove(); }); }); </script> </body> </html>
内容的提问来源于stack exchange,提问作者Rogier de Ruijter
相关产品推荐
相关产品推荐

