Как мне переопределить не-NBSP, чтобы быть NBSP - PullRequest
0 голосов
/ 25 февраля 2020

Насколько мне известно, только два неразрывных пробела: U + a0 (пространство без разрывов) и U + 202f (узкое пространство без разрывов). Тем не менее, существуют другие используемые пространства, каждое со своим собственным использованием. В качестве разделителя тысяч Unicode Standard 5.0 рекомендует использовать U + 2009 (тонкий пробел), который - «[u] не похож на U + 2002 на U + 2008, его ширина может быть скорректирована при наборе текста» - и, следовательно, является правильным пространством для использования, чтобы он соответствовал любым обоснованиям, приведенным в тексте. (Он также может иметь другое применение, кроме как разделитель тысяч, но затем мы углубимся в типографику, которая относится к дизайну SO.)

Проблема с этим пробелом состоит в том, что он определяется как пробел, и вы не хотите, чтобы слово разрывалось в середине числа. Есть ли способ переопределить определенный символ c, чтобы изменить его поведение, то есть с классом .number { }? Насколько я знаю, псевдоэлементы не могут выполнять эту задачу, равно как и псевдо-селекторы. Есть ли способ выполнить sh это?

На данный момент я могу подумать только об использовании <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, чтобы не переносить в конце строки?

1 Ответ

0 голосов
/ 26 февраля 2020

Нет способа переопределить поведение разрыва строки для указанных c символов, подобных HTML / CSS. Я могу придумать три возможных решения вашей проблемы:

  1. Оберните все числа в элементы и запретите разрывы строк на них с помощью white-space: nowrap, как @CBroe, предложенный в комментариях. Например: <span class="number">1 234</span>
  2. Используйте любое из неразрывных пробелов в Unicode, то есть U + 00A0 ПРОСТРАНСТВЕННОЕ ПРОСТРАНСТВО, U + 2007 РИСУНОЧНОЕ ПРОСТРАНСТВО или U + 202F УЗЕЛОВОЕ ПРОРЫВНОЕ ПРОСТРАНСТВО. U + 00A0 и U + 202F уже рассматриваются как числовые c разделители в алгоритме двунаправленного текста, поэтому они кажутся лучшим выбором.
  3. Используйте THIN SPACE, а затем U + 2060 WORD JOINER в качестве разделителя тысяч , WORD JOINER - это невидимый символ нулевой ширины, у которого нет семантики, кроме предотвращения разрыва строки в его позиции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...