在Chrome浏览器中为一个DIV添加CSS3旋转后,背景附着属性fixed会出现问题。

23
我的background-attachment:fixed工作得很好。但是当我在DIV上定义CSS3 rotate并向下滚动时,background-attachment:fixed停止工作。

请查看这个http://jsfiddle.net/P3jS4/
我现在正在使用chrome18
当您删除旋转CSS时,background-attachment:fixed就能正常工作了。
请访问http://jsfiddle.net/P3jS4/2

1
你没有解释你想要实现什么,所以很难帮助你。 - Enrique Moreno Tent
1
我目前还没有解决方案,但似乎问题不是 fixed 属性,而是 repeat-y 属性,因为在 y 轴上似乎背景没有被重复。请比较 Chrome 和 Firefox 上的 这个 fiddle。这似乎是 Chrome 的渲染 bug。 - ScottS
1
同样的问题在Safari中也会发生,所以这是一个WebKit的bug。无论是否有赏金,我认为没有人能帮助你解决这个问题(除非他们去修复实际的WebKit bug)。这在Firefox 12中似乎也存在问题(我将-webkit-改为了-moz-)。也许你应该尝试使用JavaScript来实现这个效果。 - thirtydot
4
这是一个有趣的问题。我觉得它值得关注。 - Koba
我确认这是 WebKit 的 bug。 - Bud Damyanov
显示剩余9条评论
5个回答

8

这不是一个bug。

您正在尝试做一些规范尚未定义的事情。评论中写道:

变换中固定的背景会发生什么?它们应该完全忽略变换,因为即使被变换,对象也应该像“窗口”一样运作,通过该窗口可以查看原始形式的固定背景。

问题在于“fixed”是相对于视口(浏览器窗口)而言的,而不是父元素。视口不会旋转,只有一个视口。

由于规范尚未决定正确的方法,因此我们不知道您所说的“不起作用”是什么意思。如果其他浏览器中“起作用”,那是因为它们已经做出了判断,而没有等待规范更新。您应该更新您的问题以反映您想要的行为,而不是它是否“起作用”。

在这个阶段期望浏览器修复是没有意义的,因为您正在规范之外工作。我的建议是通过以下方法之一修改您的代码,以便遵循规范:

  • 使用img标签而不是背景
  • 使用canvas或SVG
  • 在绘图程序中旋转背景
  • 将背景放在旋转元素后面的元素上

如果以上方法都无法使用,也没有其他解决方法,那么你的答案就是不能实现。

更新:我刚刚意识到我链接的规范已经被新版本取代,新版本澄清了预期行为:

固定背景会受到指定给根元素的任何变换的影响,而不受其他变换的影响。

因此,具有固定背景的元素仍然像是一个“窗口”, 可以查看固定在视口上的图像,并且元素上的变换会影响窗口,而不是背景。另一方面,对根元素进行变换仍然会影响页面上的所有内容,而不是除了固定背景之外的所有内容。

假设你所说的“不起作用”是指背景不旋转,那么在符合规范的浏览器中,你所做的事情是行不通的。


从比较Chrome和Firefox之间的这个fiddle来看,问题并不是旋转。固定背景没有repeat-y。图像应该在视口的y轴上重复,就像Firefox一样,但在Chrome中却没有,所以我认为它仍然应该被称为一个bug。规范上有趣的信息。 - ScottS
好的,问题并没有提到repeat-y,但如果这确实是问题的话,那么解决方案可能是fiddle在background快捷方式中使用了错误的参数顺序。虽然一些浏览器支持缺少/重新排序的参数,但我发现在实践中这是一个坏主意。我会在安装了Chromium后再确认。 - SpliFF
我应该澄清一下 - 旋转是一个问题,因为添加它似乎会破坏固定背景元素中的repeat-y。 - ScottS
@SpliFF 如果这不是一个 bug,那么就有解决方案。 - sandeep
+1 我最近的回答中使用了你的最后一个方法,谢谢。唯一的缺点是未旋转的内容(即在旋转元素后面)无法与其完全交互(例如 Google 地图)。一旦 CSS3 Masks 发展起来,那可能会是一个更好的解决方案。干杯! - arttronics

3

我有一个可行的解决方案,可以同时使用固定旋转变换。

这个信息考虑到它们不能同时工作,但让我们让它们分别工作。

一旦在图像下面有一些真实内容,那么它将防止该图像的右下角接触浏览器视口的右下角,这是使用fixed值的最后有效位置。因为在那之后就是虚无之地

这里是fiddle

这个更新的fiddle显示了旋转方向相反。

根据我们关于您精确需求的讨论,我现在有您要找的东西。这种方法是完全重写的,使用了蒙版效果和旋转,使内部图像保持不旋转......但那也可以有它自己的旋转!这里是带有许多解释CSS的 NEW Fiddle
状态更新:我的所有答案都不正确,因为我没有意识到OP的完整要求。目前,使用固定图像的旋转是一种非标准方法,之前通过链接info进行了讨论。也许jQuery视差方法适用于这个独特而具有挑战性的要求。

你给HTML标签旋转,这绝不是一个好主意。 - sandeep
HTML标签对其上的旋转元素并不介意。这样做不好的原因是什么? - arttronics
如果您旋转HTML,则HTML内部的所有内容也会旋转。 - sandeep
这就是为什么我有一个包装器,你把所有东西放在里面。这个包装器是一个带有类名“horizon”的div,它重新校准了网页内容。在html和body标签上放置具有样式的类是很常见的,这与已经存在于许多网页中的内容没有区别。这个新鲜的想法是可以无错误验证的标记。 - arttronics
请查看我的 Fiddle 示例。我想要一个效果,即 DIV 旋转但不是其中的图像。这就是为什么我给我的 .pic DIV 添加了 -webkit-transform: rotate(-10deg); 来获得这种效果。 - sandeep
你的两个 fiddle 都没有旋转图片,它们都是水平的。哪一个 fiddle? - arttronics

2

最新进展的新答案:2012年7月4日


我有一个正在进行中的 jsFiddle 项目,希望与您分享并尽早发布

它可以为您提供如何实现这种特定风格的想法。

特别是,它具有视差效果。

请注意,在未完成的演示中,图像可以在

中以不同的方式设置(它被设置为固定和重复),例如使用CSS3的containcover来为其显示的内容提供不同的视差效果。

由于此对象从未旋转/反向旋转,因此不会导致浏览器CPU负荷,因此它不仅限于图像,任何静态内容都可以使用。

jsFiddle 截图(缩小后捕获):
下面的图像故意显示了掩码,它应该与背景颜色匹配。对于某些浏览器,可以使用CSS3的border-image属性而不是有色掩码(因为黄色掩码实际上是边框!)。 enter image description here


示例1:
这是一个jsFiddle,其中调整了掩码、不透明度和额外填充(以便部分查看预期内容)。

enter image description here


示例2:
这是一个jsFiddle,与上面相同,使用CSS3 cover方法显示内容,以说明整个网页的冲孔效果。

enter image description here


我需要很快回到这个项目。在此期间,请随意使用此早期作品。干杯!


0

我认为你需要做的是删除 background: ...fixed 0 0; 属性,这样可以使图像在旋转时不丢失,同时也不会在滚动时消失。这个问题的解决方案可以参考 this;或者你可以制作一个矩形图像,里面有一个透明的旋转矩形。这将是你想要实现的 CSS 图像技巧。


-2
将背景属性更改为内容属性。
.pic{
    background:url(http://cssglobe.com/lab/angled/img.jpg) fixed 0 0;
    height:300px;
    -webkit-transform: rotate(-10deg);
    border:1px solid green;
}

.pic{
    content:url(http://cssglobe.com/lab/angled/img.jpg) fixed 0 0;
    height:300px;
    -webkit-transform: rotate(-10deg);
    border:1px solid green;
}​

Sandeep,这个答案是正确的答案。我的答案使用了很多CSS,不是很好,但{content:url}确实有效!我会根据这个解决方案更新fiddle。 - arttronics
我的修改需要等待。所以这里是更新后的 jsFiddle,版本为 100!提醒:仅限使用 Chrome 浏览器。 - arttronics
@arttronics--如果我看一下你所说的答案fiddle,我发现它在Chrome中的行为并不像Firefox中的this fiddle那样。图片会滚动(不应该),而且图片没有在父级元素内旋转,导致左上角和右下角出现红色边角。Firefox的实现方式正是sandeep希望Chrome展示的方式。 - ScottS
感谢ScottS澄清了OP想要的内容,因为我认为我已经提供了预期的内容。此外,我正在专门为Chrome 18版本而不是Firefox工作,这使得我的尝试和努力变得毫无意义。确保OP想要在滚动div内包含的固定背景下使用旋转效果。如果新想法奏效,我会尝试并回复。 - arttronics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接