首页 > 解决方案 > 如何将非 nbsp 重新定义为 nbsp

问题描述

据我所知,只有两个不间断空格:U+a0(不间断空格)和 U+202f(窄不间断空格)。但是,还有其他空间在使用中,每个空间都有自己的用途。对于千位分隔符,Unicode 标准 5.0 建议使用 U+2009(细空间),它-'[u]nlike U+2002 to U+2008,它的宽度可以在排版中调整'-因此是正确使用的空间,使其与文本中的任何理由相匹配。(除了千位分隔符之外,它还可能有其他用途,但随后我们正在研究排版,这属于设计 SO。)

这个空格的问题是它被定义为一个分隔空格,你不希望在数字中间有分词。有没有办法重新定义一个特定的角色来改变它的行为方式,即使用一个.number { }类?据我所知,伪元素不能执行此任务,伪选择器也不能。有没有办法做到这一点?

到目前为止,我能想到的唯一解决方法是在<span class="thinsp" />每次需要空间时使用,然后根据需要定义类。例子:

HTML:

<p>
  The Earth orbits the sun some 149
  <span class="thinsp" />597<span class="thinsp" />
  870 kilometres away from the sun. Given the speed of light, which is 299
  <span class="thinsp" />792<span class="thinsp" />
  458 metres per second, … … …
</p>

CSS:

.thinsp {
   whitespace: nowrap
}
.thinsp::after {
   content: "\2009";
}

HTML但是,如果你有很多想要排版的数字,这绝对是可怕的。有没有办法重新定义 U+2009 的本质,使其不在行尾换行?

标签: htmlcssunicoderedefinition

解决方案


没有办法像 HTML/CSS 那样覆盖特定字符的换行行为。我可以为您的问题想出三种可能的解决方案:

  1. 将您的整个数字包装在元素中,并使用white-space: nowrap评论中建议的@CBroe 禁止在它们上换行。例如:<span class="number">1 234</span>
  2. 使用 Unicode 中的任何不间断空格,即 U+00A0 NO-BREAK SPACE、U+2007 图形空格或 U+202F NARROW NO-BREAK SPACE。U+00A0 和 U+202F 在双向文本算法中已被视为数字分隔符,因此它们似乎是最佳选择。
  3. 使用 THIN SPACE 后跟 U+2060 WORD JOINER 作为千位分隔符。WORD JOINER 是一个不可见的零宽度字符,除了防止在其位置换行之外没有任何语义。

推荐阅读