【问题标题】:Why does `transform` break `position: fixed`?为什么`transform`会破坏`position:fixed`?
【发布时间】:2015-03-25 06:42:25
【问题描述】:

实际上我已经找到了导致问题的原因。我现在的问题是为什么将transform 添加到您的html, body 会破坏position: fixed?

原来的问题

最简单的 CSS 任务对我来说似乎失败了:position: fixed 不会保持元素相对于视点的位置。考虑以下样式表:

.stay-there-dammit {
  position: fixed;
  right: 0px;
  left: 0px;
  z-index: 1030;
}

页面第一次加载,定位正确。但是对视口的任何更改(例如滚动或调整大小)都不会影响.stay-there-dammit 元素的定位。可以这么说,它不会使自己的位置适应新的视口。

奇怪的是this site 显示了position: fixed 应该如何工作,实际上可以在我的浏览器中正常工作,没有任何问题!

所以问题是:有什么东西会破坏固定定位吗?

顺便说一句。我使用 Bootstrap 3。

更新:

似乎是某些第三方应用程序在html,body 上设置的转换破坏了position: fixed。这是我必须删除的内容:

html, body {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3, mirror=1);
  -webkit-transform: scale(1, 1);
     -moz-transform: scale(1, 1);
      -ms-transform: scale(1, 1);
       -o-transform: scale(1, 1);
          transform: scale(1, 1);
}

以下问题似乎解决了同样的问题:

Positions fixed doesn't work when using -webkit-transform

但是为什么?

【问题讨论】:

  • 对我来说很好,发布一个 jsfiddle
  • 一个jsfiddle可以工作@DavidXu!问题是我的页面上是否有任何内容可能会破坏它。该页面已加载了 CSS,我无法将其粘贴/模拟到单个 jsfiddle 中!
  • 如果你想知道这个问题的答案,你需要发布一个例子来演示这个问题。
  • @Zaqx 如果可以的话,我会的!问题是是否存在任何可能破坏样式的已知问题。
  • @DavidXu 谢谢,但如果您不知道任何可能破坏样式的已知问题,我会让其他人出现。而且我不可能给你公司网站的链接。

标签: html css twitter-bootstrap


【解决方案1】:

关于为什么,meyer 对此article 的快速引用:

即使对于已设置为 position:fixed 的后代元素,转换后的元素也会创建一个包含块。换句话说,转换后元素的固定位置后代的包含块是转换后的元素,而不是视口

这是自 2011 年以来一直存在的一种古怪行为。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2013-06-25
相关资源
最近更新 更多