最近写了一个登录弹出框,背景需要配上黑色布罩,黑色布罩使用position: fixed,基于浏览器整个窗口定位,加上黑色背景,代码大致如下:
.curtain-container {
position: fixed;
left: 0;
top: 0;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, 0.39);
z-index: 1;
}
登录框使用position: absolute,被配上了 transform: translateX(-50%) translateY(-50%) 居中,然后在登录组件中引入了幕布组件,这引发了一个问题:
因为登录组件使用了 transform,导致了幕布组件基于登录组件定位了,刚好vue3有个新特性,可以将某组件移动到特性的元素下:
<teleport to="#app">
<div class="curtain-container">
</div>
</teleport>
因为幕布实际渲染后不在登录组件下,因此也就不受 transform 影响了。