CSS:position:fixed of position:absolute

Mik*_*ail 26 css webkit google-chrome css3 openlayers

我遇到了一些非常奇怪的行为,并且在我测试过的每个浏览器中都是不一致的.

我的布局非常复杂,但主要问题在于:

<div id="drop">
  <div id="header"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

#dropposition:absolutez-index:100
#headerposition:fixed; top:60px;

当我开始向下滚动时,Chrome会忽略该position:fixed规则.如果我从上面删除上述两种样式中的任何一种,#drop则Chrome开始position:fixed遵守该规则.

无法让它在Ubuntu Chrome 23.0.1271.97上运行,并在Mac Chrome 25.0.1364.99上看到相同的行为.我的朋友使用Ubuntu Chrome 25.0.1364.68测试版,它可以正常使用.我在firefox上测试过它有点工作(有其他症状)

有没有人听说过这个错误?或者任何人都可以重现它?

编辑

我正在使用openlayers map作为另一个div,position:fixed如果我删除该层或者至少将其更改为display:none那么这个奇怪的bug就会消失.

编辑

注意到在出现此错误时,如果我来回更改缩放级别,则位置会自行调整为正确的行为.对我来说,这表明webkit问题无法在滚动上执行某些内部回调函数.

另一个非常奇怪的事情是,我内部有一些链接,#header如果我只是点击预期的位置它们工作,即使div没有出现在那里.总的来说,我注意到只有渲染被打破了.如果在任何时候我强制浏览器通过调整窗口大小,或更改缩放,或只是选择全部来重新渲染,那么标题栏会跳转到正确的位置,但不会保持固定.

Dan*_*eld 26

您在评论中提到OpenLayers使用CSS转换.既然如此:

具有固定定位的元素将变为相对于具有变换的元素 - 而不是相对于视口

看看规范:变换渲染模型

为'transform'属性指定"none"以外的值会在应用它的元素处建立新的局部坐标系.

看看这个FIDDLE在WebKit浏览器看到这个在行动

.wpr
{
    width: 200px;
    height:1000px;
    background: pink;
    position:relative;
    margin: 0 200px;
    -webkit-transform: translateX(0);
    transform: translateX(0);
}
.fixed
{
    width: 200px;
    height:200px;
    margin: 50px;
    position: fixed;    
    top:0;
    left:0;
    background: aqua;
}
Run Code Online (Sandbox Code Playgroud)

  • 你刚刚把我从可能最糟糕的噩梦中救了出来:),我正在使用 bootstrap affix 并且也在父容器上使用转换,我将摆脱转换并使用 jquery animate :) (2认同)
  • 谢谢你,只是想补充一点,即使是 `will-change:transform` 也会触发这种行为(在最新的 chrome 中) (2认同)

She*_*ric -6

首先,在你的里面放一些东西,div因为空的东西表现得很奇怪。fixed那么,将 a 放入an中你期望得到什么absolute?显然,没有人知道你的 div 的参考点是什么fixed。应该是它父母的立场吗?哪个不随滚动而变化,或者页面位置发生变化?尝试使用完全有意义且有明确定义的东西,因为如果你在 Chrome 中修复它,那么在其他浏览器中会发生什么?您真的喜欢对所有这些进行测试吗?

我想你的 s 需要做一点小小的改变,div以便将fixeddiv 从其中拉出absolute或将absolutediv 移到其他地方。

  • 在 OP 中我只显示了 DOM,没有显示内容。每个 div 中都有子标签和文本。“fixed”不需要参考点。所有规范都表明它引用浏览器窗口。下次在请求更多信息时请使用评论而不是答案。 (6认同)