【问题标题】:Why does letter-spacing add a space after the last character?为什么字母间距在最后一个字符后添加一个空格?
【发布时间】:2020-02-07 07:40:13
【问题描述】:

CSS spec for letter spacing 描述 CSS letter-spacing 属性的效果如下:

此属性指定文本字符之间的间距行为。

我想知道为什么在最后一个字符之后添加一个空格,因为这不是两个字符之间的空格。

您可以在下图中看到这种情况,我增加了字母间距。您可以看到在 t 之后添加了额外的空格。此屏幕截图是在 Chrome 上拍摄的,尽管在 Firefox 中也发生了同样的事情。

在为居中文本的字母间距设置动画时,我发现这种行为特别不受欢迎。对于 3 个字符,我希望中间字符保持在同一位置,但事实并非如此。

div {
width: 150px;
text-align:center;
border: 1px solid teal;
padding: 5px;
}

span{
transition: letter-spacing 0.2s;
}

span:hover {

letter-spacing: 10px;
}
<p>Hover over the word HOT to see the letter-spacing change.</p>

<div>
  <span>HOT</span>
</div>

<p>For any word with an even number of letters, the letter after the middle space stays in the same position.</p>

<div>
  <span>SHOT</span>
</div>

什么规范中的什么措辞解释了这种行为?因为这似乎与我阅读时链接到的规范不一致。

编辑:

这与其他有关如何删除多余空间的问题不重复。这是关于该空间是否按照规范正确。了解规范如何映射到我们在浏览器中看到的行为以推理和预测事物是很重要的,因此我们可以在一定程度上确信我们正在测试的浏览器显示的行为将是和其他浏览器一样。了解什么是错误和什么不是错误也很重要,这样我们才能知道我们可以依赖和不能依赖什么,从而能够构建面向未来的解决方案。

【问题讨论】:

标签: css letter-spacing


【解决方案1】:

letter-spacing 不添加空格,它增加了文档中设置的方向远端的字母使用的空间:test https://jsfiddle.net/Lc6a2pzn 没有什么可删除的,它是字母布局的一部分

一个技巧对于单个单词/行 without punctuation可能是 direction + text-indent : https://jsfiddle.net/Lc6a2pzn/1/

b {
  letter-spacing: 1em;
  border: solid;
  display:inline-block;
}

b~b {
  text-indent:-1em;;
  direction:rtl;
}
<b>test</b>
<b>test</b>

【讨论】:

  • 但规范声明它控制字符之间的空间。很明显,我们可以找到很多 hack 来删除多余的空间,但是如何根据 Spec 的描述来解释呢?
  • @TemaniAfif 没有办法选择那个空间(它位于字母布局的内部或外部),也没有办法选择文本的最后一个字母/标点符号,或者这只是一行的最后一个字母。该规范仅描述它允许您在应用规则的标签内改变 2 个字母之间的距离:( 从一种字体到另一种字体,这个空白也可以具有与字体系列本身的设计不同的值。幸运的是,CSS 对此没有任何帮助。
  • @TemaniAfif 它让我想起了stackoverflow.com/questions/22866336/…,其中样式文本似乎太、太有限了。在某些情况下,我猜 SVG 可能是唯一可靠的选择;)
  • 我不确定您是否从我的措辞中认为我认为添加了空格 character。就我的问题而言,“添加一个空格”、“添加另一个空格”、“增加现有空间的宽度”都是等效的。我的问题不是关于如何删除空间,请参阅我的编辑以进行澄清。
  • @MarkFisher & @TemaniAfif ,好的,CSS 样式标签元素以及最终如何在该标签中呈现字体,它从不单独设置字母样式,例如 :first-letter。任何字母都以相同的方式处理,CSS 甚至不知道字母或单词是什么。没有选择器来单独设置它们的样式 ;) 换句话说,我会理解这个问题:“为什么最后一个字母来自同一个字体系列?”我想这就是为什么我在阅读您的问题时感到困惑并可能将其视为可能重复的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多