【问题标题】:Chrome and it's handling of %sChrome 和它正在处理 %s
【发布时间】:2012-03-21 02:35:46
【问题描述】:

当使用百分比 (%) 来确定我的元素大小时,Chrome 显然更喜欢用数学方法来制定自己的规则。

我的理解是80+20加起来就是100;对?好的。 Chrome 也明白这一点。但是,如果我们用不同的方式写出相同的方程会怎样。例如:(78 + 1 + 1) + (18 + 1 + 1) 你得到了什么?是100吗?是的,我也是。

那么有人可以告诉我为什么 Chrome 不这么认为吗?

取两个元素并将它们并排浮动。然后,将width:20% 应用于一个元素,将width:80% 应用于其余元素。您会注意到页面(或容器)的 100% 已被两个元素并排占用。但是,让我们保持简单,在每个元素的两侧添加仅 1% 的填充。这意味着一个元素将具有width:18%; padding:1%,而另一个元素将具有width:78%; padding:1%。理论上,这仍然应该有相同的结果:页面(或容器)的 100% 被两个元素并排占据。但在 Chrome 中,情况并非如此。不够用。

证据在布丁中:jsfiddle(如果您使用 Chrome,您会注意到细微差别)。

这很令人沮丧,因为当所有这些加起来时,尤其是在并排使用大量元素的情况下,它真的会使布局失控。我知道通过创建子元素来处理填充和/或边距,我们可以避免这种情况,但这可能会导致使用原本多余的标记。

我只需要解释一下为什么 Chrome 会有这种行为(也许它完全是一个 Webkit 的东西,我还没有测试过)。

【问题讨论】:

  • 它看起来像一个舍入错误。如果您慢慢调整大小,您会注意到它会跳动一点。我怀疑 Chrome 会分别将 1% 的每一个四舍五入,所以当总宽度为 240 像素时,你最终会得到 4 块 2 像素的填充,最后留下 4 像素的间隙。
  • 是的,绝对是一个四舍五入的“错误”。或者更确切地说,WebKit 似乎明白没有小数像素这样的东西,如果你做了一些导致它以小数像素结束的事情,它就会截断到最接近的整个像素。这很容易通过选择一个固定的容器宽度来证明,该宽度均匀地分布在所有使用的百分比上,而不会生成任何小数部分。例如:jsfiddle.net/XcA4F/2
  • Webkit 自 2012 年 5 月起与 subpixel rendering 合作。

标签: css google-chrome webkit


【解决方案1】:

这是bug

【讨论】:

    【解决方案2】:

    我通过更改 chrome 的 webkit 边距解决了我的问题,例如我用过:

    -webkit-margin-start:-5%;

    【讨论】:

      【解决方案3】:

      在浮动元素周围放置一个包装器,隐藏溢出(以防万一)。然后在未正确四舍五入的 div 上,使用 calc(X% + 1px) 解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 2013-12-12
        • 2014-09-08
        • 1970-01-01
        相关资源
        最近更新 更多