使用-webkit-transform时,固定的位置不起作用

iSe*_*nne 151 html css positioning rotation

我使用-webkit-transform(和-moz-transform/-o-transform)来旋转div.还有固定的位置,所以div与用户一起缩小.

在Firefox中它工作正常,但在基于webkit的浏览器中,它已经破碎了.使用-webkit-transform后,固定的位置不再起作用!怎么可能?

小智 89

CSS转换规范解释了这种行为.具有变换的元素充当固定位置后代的包含块,因此位置:固定在具有变换的某些内容下不再具有固定行为.

它们在应用于同一元素时确实有效; 元素将被定位为固定,然后进行转换.

  • 这是唯一有用且正确的答案.停止翻译父元素并翻译固定元素所属的子元素.这是我的小提琴:[JSFIDDLE](https://jsfiddle.net/daFalk/zremdore/1/) (9认同)
  • 如果我想转换固定元素怎么办? (2认同)

Kyl*_*yle 81

经过一番研究,出现了一个错误报告的Chromium网站上关于这个问题,到目前为止Webkit的浏览器无法对这两种效应一起在同一时间呈现.

我建议在样式表中添加一些仅使用Webkit的CSS,并将转换后的div作为图像并将其用作背景.

@media screen and (-webkit-min-device-pixel-ratio:0) {
  /* Webkit-specific CSS here (Chrome and Safari) */

  #transformed_div {
    /* styles here, background image etc */
  }
}
Run Code Online (Sandbox Code Playgroud)

所以现在你必须以老式的方式去做,直到Webkit浏览器赶上FF.

编辑:截至10/24/2012,该错误尚未解决.


这似乎不是一个错误,而是规范的一个方面,因为这两个效果需要单独的坐标系和堆叠顺序.如本答案所述.

  • 更多年后,仍未解决.很伤心. (30认同)
  • 2017年8月30日,队长的日志.我们也遇到了奇怪的异常现象,这是很久以前其他船长所描述的.仍有待实施解决方案. (23认同)
  • 坐下来观看 - 我打赌它会活到10周年纪念日 (13认同)
  • 根据[这个答案](http://stackoverflow.com/a/15256339/215384),它不是一个bug,而是规范的一部分. (9认同)
  • 这是我父亲的父亲警告过我的错误。 (6认同)
  • 2019年1月:这个错误仍然很强烈 (5认同)
  • 伙计们,我们已经到了10岁了! (5认同)
  • 当你来 SO 寻找答案时,这正是你不希望看到的评论线程。 (5认同)
  • 第2个千年第19年的第3个月,仍未解决 (4认同)
  • 2018年2月:我们似乎遇到了某种古老的技术,没有人可以解释 (3认同)
  • 2019 年 10 月(距离 11 月还剩 1 天)签到。我以为我要疯了。9.5 年后这个问题还没有得到修复,这一事实令人难以置信。 (3认同)
  • 这个错误给我带来的麻烦比 2020 年 3 月 26 日的冠状病毒大流行还要多! (3认同)
  • 2017年7月底 - 他们仍然不知道我是一个苏联间谍,铬`translate3d`与`fixed`仍然无法正常工作.注销. (2认同)
  • 2019年9月! (2认同)
  • 9年零9个月。我们已经很接近了! (2认同)
  • 2021年了,bug还没有解决 (2认同)
  • 现在是 2022 年 (2认同)

Jay*_*son 7

对于那些发现他们的背景图片在Chrome中消失的人,因为背景附件存在同样的问题:已修复; - 这是我的解决方案:

// run js if Chrome is being used
if(navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
    // set background-attachment back to the default of 'scroll'
    $('.imagebg').css('background-attachment', 'scroll');

    // move the background-position according to the div's y position
    $(window).scroll(function(){

        scrollTop = $(window).scrollTop();
        photoTop = $('.imagebg').offset().top;
        distance = (photoTop - scrollTop);
        $('.imagebg').css('background-position', 'center ' + (distance*-1) + 'px');

    });
}  
Run Code Online (Sandbox Code Playgroud)


def*_*gra 6

2016年8月,固定位置和动画/变换仍然是一个问题.对我有用的唯一解决方案是为子元素创建一个需要更长时间的动画.

  • 不!这仍然是一个问题......提出问题的人可能已经找到了另一种解决方案 - 但我发现这个问题是有原因的. (4认同)

yck*_*art 5

对我有用的东西(有点hacky)是position:sticky

.fixed {
     position: sticky;
}
Run Code Online (Sandbox Code Playgroud)

  • http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit嗯是的。但是似乎没有很好的支持 (5认同)