我有really simple page使用照片作为全屏幕背景。我正在使用以下内容来定义它:
body {
background-image: url('../Images/Backgrounds/Hillside.jpg') ;
background-size: cover;
margin: 0px;
}
显然,图片在更改页面后需要一段时间才能加载,因此我实现了一个点头jQuery $.load()
来更新内容,而不会产生整页重新加载的开销。
不幸的是,当新内容导致页面长度发生变化时,firefox似乎有问题。 Firefox正确地意识到背景图像的比例必须改变并适当地重新绘制内容div后面的页面 - 但是不会重新绘制页面的其余部分 - 因此它看起来像2个不同缩放的图像是重叠。
调整窗口大小或进行重新绘制会修复它。不幸的是,我无法截取屏幕截图,因为它从未显示过问题 - 可能是它在幕后重现。
要演示此问题,请访问该网站,缩小浏览器窗口,以便内容强制滚动条。使用菜单更改URL。与页面的其余部分相比,查看主要内容背后的图片(关于我们和样本广告是长页面,联系我们/价格很短)。
如何强制firefox进行完整重绘?我想我正在寻找相当于WinForm的Me.Invalidate()
。有更好的方法来制作背景图片吗?
注意:我缩小/降低了照片以减少文件大小,但还没有花费很多时间 - 我知道它可以更好。
修改 环境:FF9.0.1 Win7 Ultimate x64。
重现的步骤:
答案 0 :(得分:1)
我发现问题可能与您的问题有关。将其添加到您的stylehseet:
html, body {min-height:100%;}
你知道,background-size:cover;
仅涵盖身体的物理尺寸。假设您的body
实际上只有400px的内容,但您的窗口高度为1000px。浏览器首先对400px高background-size:cover;
应用body
,然后它会看到窗口中有600px的空间,并且可以进一步应用背景;在这种情况下,平铺/重复它。通过给html / body一个100%的最小高度,如上所述,你的身体将始终填充可用的高度。
答案 1 :(得分:1)
我有两种解决方案。
首先是加载新内容,请执行以下操作:
document.body.backgroundSize = 'auto';
document.body.backgroundSize = 'cover';
告诉它重新计算封面区域。
第二个非常hacky,字面上只是告诉FF重新应用所有样式。
for(var ss = 0, len = document.styleSheets.length; ss < len; ss++) {
document.styleSheets[ss].disabled = true;
document.styleSheets[ss].disabled = false;
}
那就是说,我也会将此报告为FF的错误(如果您还没有,或者系统中不存在)。