Открыть сервис

Невидимый пробел в типографике и вёрстке

Невидимый пробел — типографский знак, который при отображении текста не имеет видимого глифа, но занимает определённую позицию в строке и влияет на разбиение текста на слова, переносы и выравнивание. К этой категории относят несколько разных символов Юникода: неразрывный пробел (U+00A0), узкий неразрывный пробел (U+202F), «нулевой пробел» (U+200B), «пробел нулевой ширины без разрыва» (U+FEFF, он же BOM) и некоторые другие. Их объединяет одно: в обычном просмотре они не видны или почти не видны, но влияют на поведение текста при обработке.

Назначение и основные виды

Пробельные символы делятся на две группы: те, что создают видимый интервал, и те, что служат только для управления разбиением строки.

СимволКодШиринаРазрыв строки
Обычный пробелU+0020стандартнаяразрешён
Неразрывный пробелU+00A0стандартнаязапрещён
Узкий неразрывный пробелU+202Fузкаязапрещён
Нулевой пробелU+200Bнулеваяразрешён
Пробел нулевой ширины без разрываU+FEFFнулеваязапрещён

Неразрывный пробел используется, чтобы не разрывать смысловые пары: «5 кг», «г. Москва», «И. И. Иванов». Нулевой пробел (zero-width space) позволяет указать браузеру или вёрстке возможную точку переноса внутри длинного слова, не добавляя видимого интервала. Символ U+FEFF исторически применяется как маркер порядка байтов (BOM) в начале файла.

История

Практика неразрывной связи слов существует с эпохи наборного металлического набора: наборщик ставил шпацию, которая не давала паре слов разойтись по разным строкам. В цифровую эпоху эти приёмы были формализованы в стандартах кодирования. Неразрывный пробел вошёл в набор символов ISO 8859-1 (Latin-1) в 1980-х годах, а затем был унаследован Юникодом. Нулевые пробелы появились позднее — в связи с потребностями вёрстки сложных языков (тайского, японского), где слова не разделяются обычными пробелами, и для управления переносами в веб-типографике.

Применение

Типографика и вёрстка

В профессиональной вёрстке невидимые пробелы решают несколько задач:

  • удержание вместе числа и единицы измерения («100 км», «20 %»);
  • оформление инициалов и сокращений;
  • разбиение длинных URL и технических строк без видимых разрывов;
  • выравнивание в таблицах, где нужен точный контроль ширины.

В русской типографике принято отделять неразрывным пробелом инициалы от фамилии, числа от единиц, знаки № и § от цифр.

Веб и программирование

В HTML обычные последовательности пробелов схлопываются в один, поэтому для точного контроля применяют сущности   (неразрывный пробел), ​ (нулевой пробел) и аналоги. В CSS ширину пробелов регулируют свойства word-spacing и white-space. В языках программирования невидимые символы часто становятся источником ошибок: компилятор или интерпретатор может не распознать строку, скопированную из веб-страницы, где вместо обычного пробела стоит U+00A0. Это регулярно встречается при копировании кода из документации и чатов.

Безопасность и подделки

Невидимые символы применяются в атаках типа «homograph» и в подделке доменных имён: визуально одинаковые адреса могут вести на разные сайты. Также их используют для обхода фильтров и автоматических проверок — например, вставляя нулевые символы внутрь запрещённых слов. Поэтому современные системы нормализации текста удаляют или приводят к единому виду такие символы.

Проблемы и обнаружение

Главная сложность невидимых пробелов — их незаметность для человека. Ошибки проявляются косвенно: строка не переносится там, где должна, поиск не находит слово, скрипт падает с невнятной ошибкой. Для диагностики используют:

  • режим отображения непечатаемых символов в текстовых редакторах;
  • утилиты и онлайн-сервисы, показывающие коды символов;
  • регулярные выражения для поиска и замены (например, замена U+00A0 на обычный пробел);
  • нормализацию Юникода (формы NFC/NFKC), которая приводит совместимые символы к каноническому виду.

«Невидимый пробел для иллюстрации стим»

В контексте интерфейса Steam (торговой платформы компании Valve) невидимые символы встречаются в оформлении профилей, названий предметов и описаний. Пользователи применяют нулевые и неразрывные пробелы, чтобы:

  • создавать пустые строки и отступы в описаниях, где обычные пробелы схлопываются;
  • формировать визуально «пустые» имена или названия предметов;
  • выравнивать текст в оформлении страницы профиля.

Отдельная тема — так называемые «невидимые» или «пустые» предметы и символы в инвентаре, которые используются как элементы оформления. Поскольку такие символы не отображаются, их присутствие в имени может вводить в заблуждение при обмене, поэтому торговые площадки и сама платформа применяют фильтры и правила, ограничивающие подобные приёмы. Для иллюстрации работы невидимого пробела в интерфейсе Steam достаточно сравнить строку с обычным пробелом и строку с U+00A0: внешне они совпадают, но ведут себя по-разному при переносе и поиске.

Интересные факты

  • Символ U+FEFF в начале файла может ломать работу скриптов, если программа не ожидает BOM.
  • Неразрывный пробел иногда выглядит как обычный, но не даёт браузеру перенести строку, из-за чего на узких экранах появляется горизонтальная прокрутка.
  • В некоторых системах нулевой пробел используется для разметки переносов в длинных словах, например в немецком или финском языках.
  • Копирование текста из PDF нередко переносит вместе с ним невидимые символы, которые затем мешают поиску.

Критика и ограничения

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

Источники: стандарт Юникод (Unicode Standard), документация MDN Web Docs, спецификация HTML, материалы по русской типографике, документация платформы Steam.