html - 对于 chrome 61 中具有全尺寸内部 div 的子像素边框,是否有解决方法?

标签 html css google-chrome

编辑:已证实这是 61 中的错误,他们将在 62 稳定之前修复 https://bugs.chromium.org/p/chromium/issues/detail?id=763402

在最新的 chrome 更新中,我发现我的一些亚像素边框在两侧丢失了。他们站在哪一边是不一致的。我把问题归结为这个

<pre>
legend:
    pink: 1px border inner uses 100px//no problem
    salmon: .5px border inner uses 99% //no problem
    orange: .5px border inner uses 99px //no problem
    blue: .5px border inner uses 100% //missing borders consistant sides
    green: .5px border inner uses 100px //missing borders consistant sides
</pre>

<div style="border:solid 1px black; width:100px; height:100px;">
    <div style="width:100px; height:100px; background:lightpink"> </div>
</div>

<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:99%; height:99%; background:salmon"></div>
</div>

<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:99px; height:99px; background:orange"></div>
</div>

<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:100%; height:100%; background:lightblue"></div>
</div>


<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:100px; height:100px; background:lightgreen"></div>
</div>

<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:100px; height:100px; background:lightgreen"></div>
</div>

<br />

<div style="border:solid .5px black; width:100px; height:100px;">
    <div style="width:100px; height:100px; background:lightgreen"></div>
</div>

jsfiddle https://jsfiddle.net/arrowplum/qmvx8obn/

有人看到我哪里做错了吗?如果没有,是否有解决方法?

请注意,这些示例在 Chrome 60、safari 和 firefox 中都很好

如果你对 fiddle 过敏,这里有一个截图: subpixel screenshot

编辑:@brian17han 添加了一个适用于 chrome 但会破坏 safari 和 firefox 的解决方法 https://jsfiddle.net/arrowplum/qt0m7f2p/

brian17than fix on safari

EDIT2:将 padding 修改为 .1px 然后适用于 safari、chrome 和 firefox,但视网膜显示器上的 firefox 除外,它在内部和外部之间显示半像素空间。 Firefox retina

最佳答案

我不清楚 Chrome 61 的行为与旧版本不同的原因。

但是,这里有一个快速的解决方案。您可以将 padding 添加到您的容器并将 padding 设置为与您的 border-width 相同的大小。 如果您希望容器的宽度高度100px带边框,则需要设置容器为 box-sizing: border-box;。否则,您的容器大小将为 100px + border-width

已编辑:我添加了另一个使用 box-shadow: inset 模拟边框的解决方案。

div.padding-container {
  border: solid .5px black;
  width: 100px;
  height: 100px;
  box-sizing: border-box;
  padding: .5px;
}

div.padding-container div.inner {
  width: 100%;
  height: 100%;
  background: lightblue;
}

div.with-inner-border {
  width: 100px;
  height: 100px;
  box-sizing: border-box;
  background-color: lightyellow;
  
  padding: 1px;
  -webkit-box-shadow: inset 0px 0px 0px 1px black;
  -moz-box-shadow: inset 0px 0px 0px 1px black;
  box-shadow: inset 0px 0px 0px 1px black;
}
<div class="padding-container">
  <div class="inner"></div>
</div>
<br/>
<div class="with-inner-border">
<div><p>hdafsljkdfs jklasdf jl kads  jlk afsd jklfsad l jkfdsa ljkas</p></div>
</div>

关于html - 对于 chrome 61 中具有全尺寸内部 div 的子像素边框,是否有解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102739/

相关文章:

jquery - HTML5 : Canvas circle is oval because of width and height

javascript - 单页 Angular 应用程序中的 body 填充

php - 制作画廊页面的最佳方式

javascript - Chrome 控制台中的奇怪行为

html - 将不同类别的对象放在同一行中

javascript - 将鼠标悬停在图像上,图像下方的图像不透明度和标题颜色发生变化......当标题变成两行时,它会破坏格式

html - 我的相对 Div 不会显示背景颜色或图像

css - 仅使用 CSS 显示隐藏列表(无 JavaScript)

javascript - 检测 WebView 内的可用内存

html - 插入下拉菜单时表格单元格中出现额外的空白