固定位置不起作用就像绝对一样工作[关闭]

Posted

技术标签:

【中文标题】固定位置不起作用就像绝对一样工作[关闭]【英文标题】:Position fixed not working is working like absolute [closed] 【发布时间】:2016-04-26 04:48:46 【问题描述】:

我的问题很简单。我正在处理移动版本的页面,我们希望将“snag it”黄色按钮固定在底部,但位置固定不起作用,它像绝对位置一样工作,我不知道为什么。

我正在工作的页面:https://www.thechivery.com/products/everything-is-j-ok-tee

谢谢, 路易斯

【问题讨论】:

.content-container 类上使用-webkit-transform:translate3d(0,0,0) 会抛出fixed 定位上下文,并且定位相对于声明转换的类而不是视口。见this SO answer。删除该规则,您的固定元素将正常工作。 这是一个超级简单的小提琴,演示了转换如何破坏fixed 定位:jsfiddle.net/p7oy6fL4 嘿伙计,这正是你说的!你不想回答,所以我可以选择你的答案吗?谢谢! 在父元素上添加 'filter' 属性也会导致这种情况。 【参考方案1】:

这里的问题在于您的 .content-container 包装类,它的 CSS 声明为 webkit-transform: translate3d(0,0,0)。转换声明,如this answer illustrates,将定位上下文从视口更改为旋转元素,这实质上意味着您的fixed 元素的行为就像它是绝对定位的一样。这是一个示例,显示了转换后的div 内的固定元素与div 之外的固定元素之间的区别。

.rotate 
  transform: rotate(30deg);
  background: blue;
  width: 300px;
  height: 300px;
  margin: 0 auto;

.fixed 
  position: fixed;
  background: red;
  padding: 10px;
  color: white;
  top: 50px;
<div class="rotate">
  <div class="fixed"> I am fixed inside a rotated div.</div>
</div>
<div class="fixed"> I am fixed outside a rotated div.</div>

为了让一切正常工作,您需要从 .content-container 中删除 transform3d 声明。

【讨论】:

只是想补充一点,“透视”属性也会触发这个错误。如果您将来遇到此问题,最简单的诊断方法是将元素向上拖过它的每个祖先,直到它开始表现 - 然后在有问题的元素上查找可疑属性。 谢谢!我不知道这是什么东西......多么奇怪。 如果我们不应用那个css,那么元素就会消失并再次出现。如何在不遇到此问题的情况下避免这种情况? ***.com/questions/9807620/… will-change 似乎具有与更改上下文相同的效果。 @DanEastwell 正确,will-change 创建 a stacking context 就像 transform 一样。【参考方案2】:

对于任何想知道这是否是浏览器错误的人。显然不是,它遵循当前的 W3C 规范。奇怪的是,起初浏览器之间只是不一致(在某些情况下它按预期工作),然后它们都开始遵循违反直觉的 W3C 规则。如果这实际上是预期的逻辑,某些实现问题的副作用或只是愚蠢的遗漏,似乎没有明确的解释。

此外,position: fixed 不仅被 transform 破坏,还被 filterperspective 属性破坏,如 here 所述。

请参阅:https://www.w3.org/TR/css-transforms-1/#propdef-transform 和 https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 和 https://github.com/w3c/csswg-drafts/issues/913 了解有关此问题的更多信息。

【讨论】:

只是想添加:backdrop-filter 祖先的属性也会弄乱position: fixed 对我来说也是背景滤镜【参考方案3】:

在我的情况下,问题是由父级上的 transformoverflow: auto; 混合引起的。

我创建了一个新的子元素,并在其上移动了 overflow 属性。

分离这两个属性解决了这个问题。

【讨论】:

【参考方案4】:

这是一个特定于移动设备的问题。我以前遇到过这个问题。一般来说,移动浏览器,尤其是较旧的浏览器,会限制使用固定定位,因为它会占用屏幕上的太多空间。

http://bradfrost.com/blog/mobile/fixed-position/

【讨论】:

我在 iPhone 6 的设备仿真模式下使用 Google Chrome 时遇到了这个问题(它也发生在 google chrome 上的所有其他设备上),但是谢谢,我会检查这个链接! 所指的文章是在 2011 年发布的。即使这个答案是在 2016 年发布的,它也已经过时了。是的,仍然有一些移动浏览器无法处理它(非常旧,尤其是 Opera Mini),但 Opera Mini 和其他此类用户必须习惯于在狂野的网络上获得相当糟糕的体验。查看 caniuse.com 了解当前(以及在某种程度上是历史)情况。 我不知道为什么你的票数如此之低。我的“高科技”iPhone + 最后一个 ios chrome 无法正确处理position:fixed;,我正在到处寻找解决方案,但没有找到任何可靠的解决方案。是的,我们在 2018 年。

以上是关于固定位置不起作用就像绝对一样工作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

当位置为绝对时,onPress 事件在动画视图中不起作用

固定定位在 Safari 7 中不起作用

CSS 问题 - Box 上方的链接(位置:绝对)在 IE + Opera 中不起作用

地理位置有时不起作用[关闭]

Android:关闭位置时,Google Fused Location 不起作用

位置服务关闭和打开时地理定位不起作用