Html 位置:固定和转换-如何返回正常的固定行为?

Html 位置:固定和转换-如何返回正常的固定行为?,html,css,css-position,transform,Html,Css,Css Position,Transform,我使用transform:translateZ(0)作为移动修复(我需要不断渲染div)。 但是transform创建了另一个上下文,现在我的fixeddiv的高度取决于父级高度,而不是视口高度,因为没有transform 我需要转换,但我也需要一个正常的固定的行为。我该怎么办?关于这个“问题”,Chrome上有很多bug报告。我自己在编写粘性插件时也遇到过同样的问题,但事实证明这实际上是正常的行为。这是因为transform使用它自己的坐标系来根据。基本上,元素获得了相对于其自身固定位置的固定

我使用
transform:translateZ(0)作为移动修复(我需要不断渲染div)。
但是
transform
创建了另一个上下文,现在我的
fixed
div的高度取决于父级高度,而不是视口高度,因为没有
transform


我需要
转换
,但我也需要一个正常的
固定的
行为。我该怎么办?

关于这个“问题”,Chrome上有很多bug报告。我自己在编写粘性插件时也遇到过同样的问题,但事实证明这实际上是正常的行为。这是因为
transform
使用它自己的坐标系来根据。基本上,元素获得了相对于其自身固定位置的固定位置。不幸的是,你对此无能为力

可能的解决方案

解决问题的一种方法是给“粘性”元素一个相对于文档的
绝对位置。然后用JavaScript重新定位元素。大致如下:

var element = document.getElementById('element');

window.addEventListener('scroll', function() {
    requestAnimationFrame(setTop);
});

function setTop() {
    element.style.top = window.pageYOffset;
}

这样,元素的行为就好像它有一个固定的位置,而您仍然可以毫无问题地使用
transform
属性。

关于这个“问题”,Chrome上有很多错误报告。我自己在编写粘性插件时也遇到过同样的问题,但事实证明这实际上是正常的行为。这是因为
transform
使用它自己的坐标系来根据。基本上,元素获得了相对于其自身固定位置的固定位置。不幸的是,你对此无能为力

可能的解决方案

解决问题的一种方法是给“粘性”元素一个相对于文档的
绝对位置。然后用JavaScript重新定位元素。大致如下:

var element = document.getElementById('element');

window.addEventListener('scroll', function() {
    requestAnimationFrame(setTop);
});

function setTop() {
    element.style.top = window.pageYOffset;
}

这样,元素的行为就好像它有一个固定的位置,而您仍然可以毫无问题地使用
transform
属性。

请确切解释为什么需要使用
translateZ(0)
translateZ(0)
强制Chrome Android正确地重新绘制div。当Chrome Android地址栏出现或隐藏时,它允许div具有适当的高度在固定位置的元素上使用
translateZ
是不可能的。我为您的问题添加了一个可能的解决方案。请确切解释为什么需要使用
translateZ(0)
translateZ(0)
强制Chrome Android正确地重新绘制div。当Chrome Android地址栏出现或隐藏时,它允许div具有适当的高度在固定位置的元素上使用
translateZ
是不可能的。我为你的问题增加了一个可能的解决办法。