背景中心与铬(错误)

时间:2011-06-23 12:31:41

标签: css google-chrome safari background-image

我的背景图片居中,Chrome显示偏移一个像素。

CSS

#container { 
    background: url("images/header.jpg") no-repeat scroll 50% transparent;
    width: 100%
}
#header {
    width: 986px;
    margin: 100px auto 0 auto;
}

HTML

<html>
<body>
    <div id="container">
        <div id="header">centered content</div>
    </div>
</body>
</html>

我想这与不同浏览器如何处理CSS中center的{​​{1}} - 或50%属性有关:

enter image description here

是否有已知的(simple)hack或替代方法来解决此问题?后台容器为100%宽。

7 个答案:

答案 0 :(得分:5)

如果您可以输出比浏览器窗口更宽的图像,则应该修复它。

如果在此处找到解决方案 - http://philfreo.com/blog/fixing-safaris-1px-background-image-centering-problem/

答案 1 :(得分:3)

对我来说,这就是诀窍:

@media screen and (-webkit-min-device-pixel-ratio:0) { 

html {
    margin-left: 1px;
}

}

我会在几天前发现这个解决方案后立即发布此解决方案的链接。 在同一篇文章中,那个人说问题是容器宽度的奇数或偶数。 无论如何,这解决了我的问题。

答案 2 :(得分:1)

如果您将背景图像宽度设为奇数(987px),则所有浏览器的定位将保持一致。这似乎是违反直觉的,但似乎总是在没有任何CSS黑客的情况下为我解决问题。

答案 3 :(得分:0)

图像实际上是986px吗?我找到修复它的最简单方法是确保图像的宽度是偶数。

您可以做的另一件事是在背景图像中添加一个2px缓冲区(以保持宽度为偶数)以说明该偏移。只要您向每一侧添加一个px以保持均匀,就不应该在浏览器中查看图像。

答案 4 :(得分:0)

尝试调整浏览器的大小以查看它是如何工作的......我们在这里讨论的是像素,如果窗口的宽度均匀,那就没关系,否则像素必须在某个地方丢失。

答案 5 :(得分:0)

我认为背景图像的宽度也是986像素?然后这个效果也应该在左侧可见,但转过来。

我建议从容器中删除背景图片并将其添加到标题中:

#container {
    width: 100%;
}
#header {
    width: 986px;
    background: url("images/header.jpg") no-repeat scroll 50% transparent;
    margin: 100px auto 0 auto;
}

答案 6 :(得分:0)

我使用以下CSS来修复webkit上的问题。如果没有启用JS,它的工作原理是浏览器可能是全屏的,因此webkit上的视口宽度将是一个奇数

<强> CSS

@media screen and (-webkit-min-device-pixel-ratio:0) { 
    html {
        margin-left: 1px;
    }
    html.evenWidth {
        margin-left: 0px;
    }
}

JavaScript(jquery)

$(document).ready(function {
var oWindow = $(window),
htmlEl = $('html');

function window_width() {
    if(oWindow.width() % 2 == 0) {
        htmlEl.addClass('evenWidth');
    } else {
        htmlEl.removeClass('evenWidth');
    }
}

$(document).ready(function(){
    window_width();
    $(window).resize(window_width);
});