Как сделать узкие неразрывные пробелы в HTML для Windows? - PullRequest
29 голосов
/ 27 февраля 2009

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

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

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

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

Ответы [ 5 ]

57 голосов
/ 15 октября 2009

Хммм ... нет. Если единственной проблемой является тот факт, что   (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) неразрывное поведение в свойствах разрыва строки.

Единственный способ исправить это в Юникоде (только для простых текстовых документов) - это добавить еще один символ, а именно U + 202F (NARROW NRE-BREAKING SPACE) в 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». Это всегда будет лучше, чем изменение размера шрифта для отображения псевдо-полупространства (потому что это неверно для многих шрифтов, для которых это все равно будет слишком большим, а также потому, что это не работает, как ожидается, в интервалах текста, которые иметь цветной фон: изменение размера шрифта изменяет высоту строки).

Поэтому, пожалуйста, используйте этот код вместо этого в ваших документах 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> разделах, подобных здесь, которые используют моноширинные шрифты):

<i>Exemple de «&thinsp;fine&thinsp;» insécable française correctement codée&thinsp;!</i>

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

Пример de «& thinsp; fine & thinsp;» inssecable française & thinsp ;; Код исправления & Thinsp;!

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

Пример de «& # x202F; fine & # x202F;» insécable française & # x202F ;; Код исправления & # x202F;!

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

Пример de «& # x2006; fine & # x2006;» insécable française & # x202F ;; Код исправления & # x2006;! (хммм ... не совсем)

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

Пример «прекрасного» безупречного франшизы; Код исправления! (хм ... не совсем)

3 голосов
/ 27 февраля 2009

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

1 голос
/ 27 февраля 2009

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

0 голосов
/ 25 сентября 2016

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

0 голосов
/ 27 февраля 2009

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

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