Как отображать узкие неразрывные пробелы в HTML для Windows?

На французском языке типографика требует использования узких неразрывных пробелов (U + 202F) в разных местах («Comme ça!»).

Очевидно, ни один браузер в Windows не поддерживает это, и вместо этого все они отображают странный символ. Это работает в большинстве браузеров Mac OS X, а также Linux.

Кто-нибудь знает, как заставить браузеры Windows правильно его отображать?

(Я предполагаю, что это ошибка Windows, а не ошибка браузера, поскольку Firefox и Safari поддерживают ее, если она не в Windows).

Ответов (6)

Решение

Хммм ... нет. Если единственная проблема заключается в том, что   (U + 2009) все еще ломается, я предпочитаю использовать:

<span style = "white-space: nowrap"> & thinsp; </span>

для исправления взлома. Почему?

  • Поскольку французский штраф фактически использует почти фиксированную ширину от одной шестой до одной четвертой кадратина (от 0,166 до 0,25 примерно, когда стандартное пространство составляет 0,5 примерно). Выбор ширины зависит от подхода, уже присутствующего в глифы, определенные в данном шрифте.

  • Шрифты предназначены для регулировки ширины своего тонкого пространства (U + 2009): если эти шрифты были созданы французскими типографами (для рендеринга французского), подход (или промежутки между буквами в словах) уже, чем в шрифтах, разработанных для английского языка: это связано с тем, что французские тексты обычно содержат больше букв, чем эквивалентные английские тексты (например, печатная Библия), и, чтобы избежать увеличения количества печатных страниц, глифы во французских шрифтах были сделаны немного более узкими и с сокращенным подходом; чтобы компенсировать это сокращение, размер французского штрафа был увеличен. (Часто говорят, что U + 2009 составляет одну пятую кадратина, то есть примерно 0,2, но это неверно, поскольку это значение является разумным медианным значением, которое должно эффективно корректироваться в шрифтах в соответствии с их дизайном).

  • В английском языке с английской типографикой межсимвольные промежутки уже достаточно велики, чтобы оправдать тот факт, что в текстах рядом с большинством двойных знаков препинания не используются тонкие пробелы . Однако, если французский язык отображается шрифтом с использованием английской типографии (которая имеет большие межсимвольные промежутки), штраф должен быть уже и должен быть уменьшен до 1/6 кадратина.

  • Так что да, U + 2009 ( &thinsp;в репозитории SGML) немного настраивается, в зависимости от шрифтов.

  • Кроме того, это может быть частично оправдано (когда используется полное выравнивание, когда ширина увеличена не только для обычных межсловных пространств, но также и для всех промежутков между символами и нормальными или `` точными '' пробелами (но другие четырехугольные пробелы ДОЛЖНЫ НЕ регулируйте их ширину: они действительно зафиксированы).

Когда вы визуализируете документ, макет страницы которого уже предварительно вычислен (с известными шрифтами и с точными показателями), тонкое пространство (U + 2009) уже то, что вам нужно (потому что вам не придется беспокоиться о нарушении поведения.

К сожалению, Unicode забыл назначить этим четырёхпространствам U + 2000..U + 2006 (и тонкому пространству U + 2009) неразрывное поведение в свойствах разрыва строки.

Единственный способ исправить это (только для текстовых документов) для Unicode - это добавить еще один символ, а именно U + 202F (УЗКИЙ НЕПРЕРЫВНЫЙ ПРОБЕЛ) в Unicode 5.1, которому позже было присвоено символическое имя SGML "nnbsp" для ссылки на символы (но отображение этой именованной символьной сущности в U + 202F не является частью какого-либо стандарта HTML или XML, поэтому эту именованную сущность также не следует использовать, если только ваш документ не определяет ее явно во встроенном DTD!)

Но, к сожалению, большинство браузеров забыли применить это дополнение и зачем оно было нужно: они предполагают, что символ должен быть в шрифтах, но это явно не так.

ВСЕМ браузерам СЛЕДУЕТ рассматривать U + 202F как неразрывный (это уже так, даже если они не знают символ в своей внутренней копии UCD).

Однако браузеры НЕ ДОЛЖНЫ зависеть от того факта, что U + 202F определено в шрифте, вместо этого они ДОЛЖНЫ предоставлять откат к U + 2009 (THIN SPACE) при его рендеринге каждый раз, когда U + 202F не отображается в текущем шрифте. , но U + 2009 отображается одним и тем же шрифтом (обычно так бывает со многими шрифтами).

Так что это проблема в средствах визуализации HTML (то есть браузерах); Я также думаю, что это больше, чем просто проблема шрифтов, это действительно ОШИБКА браузеров (а не ошибка или ограничение в шрифтах), если они не предоставляют такие резервные варианты для пробелов. Конечно, все новые шрифты должны сопоставлять U + 202F с тем же глифом, что и U + 2009.

Учитывая, что тонкое пространство (U + 2009 или &thinsp; ) очень хорошо поддерживается многими шрифтами и имеет правильную ширину для рендеринга французских текстов со шрифтами, сделанными с французскими типографскими метриками, или для рендеринга английских текстов, сделанных с английскими типографскими метриками, это должно действительно будет правильным резервным вариантом для использования каждый раз, когда узкое неразрывное пространство недоступно!

Вы можете идеально имитировать желаемое поведение U + 202F в HTML, просто используя U + 2009 и сделав его неразрывным с помощью CSS «white-space: nowrap». Это всегда будет лучше, чем изменение font-size для отображения псевдополупространства (потому что это неверно со многими шрифтами, для которых он все еще будет слишком большим, а также потому, что это не работает должным образом в промежутках текста, которые иметь цветной фон: изменение размера шрифта изменяет высоту строки).

Поэтому, пожалуйста, используйте этот код вместо этого в своих документах HTML или SVG (сохраняйте U + 202F только для текстовых документов):

<span style = "white-space: nowrap"> & thinsp; </span>

Вы можете сохранить эту последовательность в повторно используемом шаблоне, который вы можете назвать Template:nnbsp в MediaWiki, например, для включения его на свои страницы как {{nnbsp}} .

Обратите внимание, что по-прежнему предпочтительнее ссылаться на тонкое пространство символически, &thinsp; а не навязывать точную кодовую точку Unicode, например &#x2009; : именованный объект может быть переназначен средством визуализации или в соответствии с предпочтениями пользователя на другое рабочее пространство.

Обратите внимание, что MS-word действительно использует U + 2009, а не U + 202F для представления собственного штрафа . Это правильно, учитывая, что документы Word имеют предварительно вычисленный макет, и учитывая, что MS-Word обеспечивает локально неразрывное поведение при вычислении макета страницы. Документы Word не являются текстовыми документами.

  • Пример рендеринга (с использованием цветов фона, чтобы показать, что высота строки не изменена, но, к сожалению, этот сайт не позволяет устанавливать цвета фона, за исключением <code>таких разделов, как здесь, в которых используются моноширинные шрифты):

Exemple de « fine » insécable française correctement codée !

  • Же без в <code>контейнере не отображает цвета фона, но это не использовать обычные пропорциональные шрифты, так что тонкие пространство эффективно визуализируются как тонкие:

Exemple de «штрафной» непонятного французского языка; исправление codée!

  • Пример использования &#x202F;(NNBSP, который обычно не поддерживается в большинстве шрифтов, но в конечном итоге может работать с вашим текущим браузером и шрифтами, установленными в вашей системе, такими как DejaVu Sans ):

Exemple de «штрафного» непокорного французского языка; исправление codée!

  • Пример использования &#x2006;(SIXTH OF CADRATIN, может работать, но может быть слишком узким для ваших шрифтов и может не демонстрировать свойство неразрывности):

Exemple de «штрафной» непонятного французского языка; исправление codée! (хммм ... не совсем)

  • Пример использования &nbsp;(который почти всегда слишком велик):

Exemple de «штрафного» непокорного французского языка; исправление codée! (хм ... не совсем)

Вы могли бы это сделать, но это не идеально.

<span style="font-size:50%;"> </span>

Вы можете нажать Ctrl + shift + 2 в редакторе WYSIWYG, таком как CKEditor, а затем перейти в исходный HTML-вид.

Худший из взломов:

<span style="margin:-0.08em">&nbsp;</span>

Почему не просто так &#x202F;?

Я немного покопался, и это действительно похоже на проблему со шрифтом. FileFormatInfo очень полезен для решения проблем Unicode в целом, и он включает страницу со списком шрифтов, поддерживающих этот конкретный символ . Существует даже инструмент Flash (щелкните внутри синего поля на странице со списком поддерживаемых шрифтов, чтобы перейти к нему - я не могу создать правильный URL-адрес по какой-то причине), который перечисляет все ваши локально установленные шрифты и показывает этот символ для каждого из них. .