为什么-webkit-transform:translate3d(0,0,0)与固定的孩子混在一起

Max*_*kyi 20 html css css3 css-transforms twitter-bootstrap

在过去的几个小时里,我一直在努力弄清楚一个子元素如何定位于它的父元素而不是屏幕端口,即使它被定位为"固定".非常幸运的是,我偶然发现提到-webkit-transform: translate3d(0, 0, 0)父母可能会让事情变得糟糕.我正在使用bootstrap框架,因此他们确实将此属性放在.navbar-fixed-top父元素之一的类上.一旦我将其移除,孩子就开始重新定位视口.所以我有两个问题:

  1. 为什么-webkit-transform: translate3d(0, 0, 0)要做这些讨厌的事情?
  2. 为什么bootstrap家伙把这个属性放在.navbar-fixed-top课堂上?

更新
好吧,似乎我找到了第二个问题的答案.这是提交消息:

应用translate3d到modal,navbar-fixed和affix来对抗浏览器重绘

以下是第二个问题的答案:

对于变换,除了none之外的任何计算值都会导致创建堆叠上下文和包含块.该对象充当固定定位后代的包含块.

Dan*_*eld 12

关于你的第一个问题:

您正在使用转换.这就是导致问题的原因.

看看规范:变换渲染模型

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

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