如何删除视网膜显示器上这些元素之间的单个像素 space?

How can I remove the single pixel space between these elements on retina displays?

http://jsfiddle.net/36ykrp9x/5/

HTML

<div class="container">
     <button>O</button><button>O</button>
</div>

CSS

.container {
    width: 100%;
    background-color: rgb(120, 200, 200);
    text-align: center;
}
button {
    border: 0;
    width: 3rem;
    height: 3rem;
    opacity: 0.8;
    background-color: gray;
}

上面的代码最能捕捉到我有兴趣解决的视觉错误。我应该注意到,这似乎不会影响 Firefox 或 Safari 的最新版本。我目前使用的是 Chrome 39。如果您使用的是视网膜显示器和 Chrome 的最新版本并且还没有看到元素之间的细线,请尝试稍微调整 window 的大小.按钮之间的细线会闪烁。

出于我的目的,层次结构中按钮组上方至少有一个元素具有 100% 的宽度,并且按钮必须在其中水平居中。按钮本身的不透明度必须介于 0 和 1 之间。它们可以是 div,或与此相关的任何其他元素 - 但我确实尝试过其他元素并发现问题仍然存在。

不幸的是,在 fixed-width 元素中将按钮组居中似乎无法解决我的问题,因为 fixed-width 按钮组最终必须 also 以某种方式居中,这似乎使问题复活。微调边距会导致重叠,这对于具有这种不透明度的元素来说更为明显 - 这实际上并不比首先有间隙更好。

值得注意的是,确实使用 background-color: rgba(r,g,b,a) 解决了大多数意图和目的的问题,但我很想在没有它的情况下解决这个问题,如果只是为了看到这是可能的。

我对涉及 JavaScript 的解决方案不是特别感兴趣。我运气不好吗?

根据您提供的信息以及我自己使用 Google Chrome 的经验,我认为这是 Chrome 中的一个浏览器错误,考虑到它仅出现在 Retina 屏幕上的 Chrome 中,其他浏览器(如 Safari 和 Firefox)不会出现该问题。您的 HTML 和 CSS 看起来很完美,所以我看不出这里有问题。

您还可以通过在最新版本的 Opera(在您的 Retina 显示屏上)中进行检查来验证这是浏览器渲染问题,因为 Opera 现在使用与 Chrome 相同的 Blink 渲染引擎(这是从 Webkit 分叉)。如果 Opera 表现出同样的问题,那么它是一个引擎问题,应该记录为一个错误。

除非其他人找到解决方法,否则我通常倾向于尽可能单独留下浏览器呈现错误,这样您就不会在您的网站中破解代码,并且当错误被修复时,您不会不必对您的网站做任何事情。

问题出在 jsfiddle.net。我在视网膜上的 Chrome 40 中有相同的 1 个像素 space。试试这个:http://dabblet.com/gist/c0068a79fc0268482ee1 或以下代码,直接加载:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
.container {
    width: 100%;
    background-color: rgb(120, 200, 200);
    text-align: center;
}
button {
    border: 0;
    width: 3rem;
    height: 3rem;
    opacity: 0.8;
    background-color: gray;
}    
</style>
</head>

<body>
  <div class="container">
     <button>O</button><button>O</button>
  </div>    
</body>
</html>