Блог Андрія Огороднікова Хто з мечем до нас прийде, від меча й загине.

К вопросу о переносах

30.04.2017, 08:55

Есть очень большой и напряженный вопрос в такой значимой сегодня сфере как веб-типографика. т.е. как оформлен текст на сайтах. Ни для кого не секрет, что верстка веб-страницы во многом наследует верстку книжную, типографскую, разумеется, в гораздо более упрощенном виде. Однако же, комфортное чтение, особенно длинных текстов, штука очень важная и в реале, и в виртуале. И равномерность распределения слов и знаков в тексте играет только на руку комфорту. Вот поэтому издревле в книгопечатании использовали переносы слов по слогам (чаще всего). Это и эстетично, и практично, например, с точки зрения экономии бумаги…

С некоторых пор я на своих сайтах применяю выравнивание текста по ширине и инициирую переносы слов по слогам. В стандартных случаях это делается так:

 <style> p {text-align: justify; hyphens: auto;} </style>
 <p lang="ru">А тут много текста текста текста</p>

Все было бы хорошо, если бы не загвоздка с переносами. Самый популярный браузер мира Гугл Хром по праву сильного игнорирует сие (58 версия, только что проверил), даже если вделать в стили вот такое — стандартный абзац моего блога со всеми перестраховками:

p {
	text-align: justify;
	text-indent: 27px;
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	-ms-hyphens: auto;
	hyphens: auto;
}

Естественно, такая ситуация неприемлема, в особенности на малых разрешениях экрана, когда из-за отсутствия переносов пробелы между длинными словами могут достигать космических масштабов (или, в случае выравнивания текста по левому краю — значительных неровных пустот справа, кому что не нравится :))

Решение как обычно простое: 1) игнорировать и наслаждаться в Мозиллах и даже IE, не говоря уж про Safari. 2) Задействовать вездесущий java-script, точнее его величественную библиотеку jQuery. JS на самом деле не просто рекомендует браузеру делать что-то, а «заставляет» делать против его воли, это очень мощный инструмент.. и как всякая мощь — со своими побочными эффектами, но сейчас не об этом, но и об этом.

Итак, я специально удостоверился, что на этом заглушечном блогике в стилях hyphens не проставлен, поэтому, ради эксперимента, мы можем приготовить два одинаковых рыбных абзаца. К одному применим стандартные стили, к другому нестандартный джава-скрипт (универсальный для укр. и рус., но не специфичный, хотя для веба достаточно).

Давайте выделим это уместной случаю svg-шной миллиметровкой:

[hyphens]

При запуске проекта так. Широко используемый и на кириллице. Использованием lorem ipsum обязан древнеримскому философу цицерону, ведь именно. Том языке, который планируется использовать. Наиболее распространенных слов самым известным рыбным текстом является знаменитый lorem ipsum обязан. Является знаменитый lorem ipsum на том языке, который планируется. Трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.. Отношения к обитателям водоемов разной частотой, имеется разница. Отношения к обитателям водоемов обязан древнеримскому. Языке, который планируется использовать при оценке качества восприятия. Применили в различных языках те или иные. Нагрузку ему нести совсем необязательно на латыни и зла средневековый. Благодаря чему появляется возможность получить более.

[java-script]

При запуске проекта так. Широко используемый и на кириллице. Использованием lorem ipsum обязан древнеримскому философу цицерону, ведь именно. Том языке, который планируется использовать. Наиболее распространенных слов самым известным рыбным текстом является знаменитый lorem ipsum обязан. Является знаменитый lorem ipsum на том языке, который планируется. Трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.. Отношения к обитателям водоемов разной частотой, имеется разница. Отношения к обитателям водоемов обязан древнеримскому. Языке, который планируется использовать при оценке качества восприятия. Применили в различных языках те или иные. Нагрузку ему нести совсем необязательно на латыни и зла средневековый. Благодаря чему появляется возможность получить более.

В Мозилле (Seamonkey, Firefox) оба способа работают одинаково хорошо. В самом свежем Хроме — 58 н. д. м. — работает только js (скрин). Что, собственно, и ожидалосЪ. Казалось бы лютый win? Как посмотреть. Если мы скопируем текст первого абзаца и вставим его в произвольный текстовый редактор, все будет отлично, слова останутся словами. Если скопируем второй — мы скопируем слова вместе с т. н. «мягкими» переносами. Получится вот так… А что видит поисковик? ..работу которых игнорировать нынче невозможно…

Кроме того, второй способ работает с некоторой задержкой, сначала текст загружается а потом преобразуется. Это заметно, в особых случаях может приводить к «скачкам» экрана, когда отформатированный текст уменьшится по высоте… Вот так вот. Решаем сами, применять или нет. Или стоит дождаться, когда и Хром снизойдет до переносов?

Существует и еще одна проблема, так сказать обратная, когда нужно запретить переносы, например, сокращений и аббревиатур, е.в.п.о.я. А также разнообразных связанных цифр и слов, 500 гр, 1000 м итд. Несть числа вариантам — от предлогов до инициалов… В этом случае, скрипт в нужных местах html-кода должен расставлять неразрывный пробел — &nbsp;. Можно в особо пиковых случаях ставить его вручную, можно воспользоваться каким-то онлайн сервисом и надеяться, что сервис не напортачит, а если напортачит, то портачку можно будет приметить и выправить.

Конечно, как я уже говорил, веб прощает и даже требует немало упрощений. Если мы возьмем верстку для печати, то в таковой активно применяется более десятка разнообразных неразрывных пробелов, все они важны с точки зрения красоты готового текста — в журнале или книге. Я бы, например, с удовольствием отделял знаки препинания самым тончайшим нп, потому что иногда они неприятно сливаются с текстом в зависимости от шрифта… Не слишком размахивал пробел между инициалами, отделял бы плюсики и минусики, тире в интервалах, типа 128—855. В том, что мы имеем сейчас в веб-типографике это невозможно. Мы упираемся в пиксель, а не в волос или любое другое аналоговое значение реального, а не цифрового мира.