在 CSS 里很多位置布局都是相对于容器的。但是 position: fixed;
比较直白,只相对于窗口,通常不会被干扰。但是我最近就遇到了这么个问题:
transform:scale(1);
position:fixed; right:10px; bottom:10px;
这不对呀,我明明写的是 position: fixed;
为啥没用呢?
于是我一个一个翻看父元素的 CSS 布局属性,发现一个 Modal 库有个奇怪的 transform: scale(1);
。这个属性没有任何视觉的效果,显然是动画执行之后留下的。然而在技术实现上,即使是 scale(1)
和 translateX(0)
这种没有任何效果的 transform
,也会重建一个坐标系,导致内部元素的 position:fixed
不再相对于窗口,而是相对于这个 transform
元素。
这是不是某个浏览器实现的缺陷呢?实际测试 Firefox 和 Chrome 都是一样的效果。这也许是一个 Web 标准中比较含糊的灰色区域。
解决方法比较简单粗暴,把 transform: scale(1)
改成 transform: unset
即可。在实践中,尽量避免对比较大的容器使用 transform
,比如 Sidebar 和 Modal。如果要用的话,则要确保子元素不会用到 position: fixed
,比如一些 Popup。
发表回复