【问题标题】:Odd effect of letter-spacing on element width字母间距对元素宽度的奇怪影响
【发布时间】:2012-08-02 09:43:45
【问题描述】:

我会假设在两个字符跨度上将字母间距设置为 -1px 会将其宽度减少 1px。但是,请在 Chrome 中查看以下内容:

span.style.fontSize=48
48
span.textContent="99"
"99"
span.style.letterSpacing=0
0
span.offsetWidth
16
span.style.letterSpacing="-1px"
"-1px"
span.offsetWidth
14

将 letter-spacing 设置为 -1px 会使宽度减少 2px 而不是 1。

如果在您尝试将其与 text-align: center 对齐时,它不会导致字母间距为 -1px 的文本略微偏离中心,那么这可能不太重要。

CSS 规范似乎清楚地表明,字母间距应该会影响 个字母之间的间距。然而,似乎至少在 Chrome 中,一些概念起点和文本的第一个字符之间的间距也被压缩了。

对此有什么想法或想法吗? IE 10 表现出相同的行为。一个错误?还是对规范的误读?

【问题讨论】:

  • 如果你有三个字母,宽度不会减少-2px(每个字母-1px,不包括端点之一)?
  • 在 Chrome 中,三个字母的字符串,宽度减少了 3px,而不是预期的 (?) 2px。
  • 那可能是 Chrome 中的一个错误。

标签: css


【解决方案1】:

行为

我同意规范相当明确地说明了这一点。引用this page

字母间距不得应用于开头或结尾 行。

但是,Win 7 上的 this fiddle 向我显示,在 Chrome、IE9 和 Firefox 上,所有在最后一个字母之后应用的像素减少了(Firefox 显示我从一个开始在与边界的间隙中开始的像素较少),这似乎违反了它没有应用于行尾。结果是字符串中每个字符的总宽度似乎都减少了 1px。

因此,它似乎在任何浏览器中都无法正常工作,letter-spacing 是否为 instead a positive number 也无关紧要。

可能是“最佳”解决方法

padding-right: 1pxletter-spacing: -1px 添加到span 以抵消as seen in this fiddle 的问题。

可选解决方法::after 伪元素

spanletter-spacing: -1px 上输入以下as seen in this fiddle

span:after {content:''; display: inline-block; width: 1px;}

最后的想法

上述任何一种解决方案可能会或可能不会帮助解决 text-align: center 计算中的差异,因为这似乎部分取决于基于显示宽度的中心 1px 舍入,如拉伸this fiddle) 的宽度。

【讨论】:

  • 感谢您提供最丰富的答案。填充解决方案似乎对我不起作用,但起作用的是margin-left: -0.5px。不过,这似乎是浏览器中的一个错误,奇怪的是 Chrome 和 IE 中会存在相同的错误。
  • 作为一年前答案的注释:这也发生在移动浏览器中,至少是 Android 上的 Chrome。我的问题涉及溢出:隐藏剪切最后一位字母,并且“最佳”解决方法修复了它。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2019-03-16
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多