Как стать автором
Обновить

Комментарии 24

По поводу первого примера: союз "и" практически никогда не должен "отлепляться" от последующего слова (за очень редким исключением). Предлоги так точно нужно переносить вместе со словом, к которому они относятся. Мне кажется, проблему "висячих" союзов и предлогов проще решать неразрывными пробелами. Особенно с таким зоопарком устройств, когда заранее неизвестно какой ширины будет блок с контентом.

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

function my_title_filter($title) {
	//замена двойного пробела на неразрывный
	$title = str_replace('  ', ' ', $title);

	return $title;
}

add_filter('the_title', 'my_title_filter');

Двойной пробел как неразрывный при наборе слов, которые должны быть «вместе» на строке, выглядит ещё хуже. Уж лучше тогда как в Латехе использовать тильду (~) в качестве символа неразрывного пробела. В наборе обычных текстов она практически не используется, при этом гораздо нагляднее, чем двойной пробел.

Я руководствовался в первую очередь "обратной совместимостью". Если скрипт не отработает, то в html ничего критичного не произойдёт, т.к. двойной пробел будет считаться за один.

Да, двойной пробел не очень нагляден, особенно если следующее слово в редакторе переносится на другую строку. Но ничего другого в голову тогда не пришло, а теперь как-то устаканилось.

Знак тильды спорное решение, потому что нужно переключать раскладку, либо пользоваться комбинациями. По трудозатратам получается равносильно вводу неразрывного пробела Alt+255.

А что означает "если скрипт не отработает"? Это же пхп, а не клиентский жс, если он не отработает, то пользователь вообще ничего не увидит. Кроме того, можно было бы организовать подстановку неразрывных пробелов по словарю и/или регуляркам.

В приведённом выше примере с Wordpress подразумевается, что фильтр "зашит" в functions.php темы, а не оформлен отдельным плагином. При смене темы фильтр может потеряться.

То есть вы поленились написать плагин, захардкодили фильтр в тему, а теперь этим оправдываетесь?

Безотносительно, замена по словарю всё равно обратно совместима.

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

Двойной пробел остаётся совместим с кодом для прохода по словарю. Но проход по словарю приставок не решит проблему с другими "висячими", такими, как единицы измерения, указание диапазонов. Также довольно часто требуется, чтобы два слова были неразлучны при любой ширине блока с текстом и нужно какое-то ручное редактирование. Может в этом холиваре всплывёт какая-нибудь умная идея для решения проблемы. Неразрывный пробел нужен, но доступ к нему через комбинации уж очень трудозатратный.

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

Если нужна именно автоматизация, то рабочим решением будет скрипт с подключением к LLM и необходимая предобработка через неё. Ошибки будут, но не больше чем при работе того же редактора.

Подключать LLM ради того, чтобы предлог не отрывался от последующего слова - это уже полный оверкилл. В любом языке количество предлогов будет не больше сотни. Написать функцию замены сможет даже школьник.

Тут да, вы правы, в этой задаче LLM будет лишней.

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

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

Нормальные типографы для русского языка, которые убирали висячие строки, заменяли кавычки на лапки и ёлки, дефисы на тире где надо и т.д., появились лет так 20 назад. Без всяких там LLM.

Для неразрывного пробела есть символ U+00A0, который прекрасно вводится с помощью типографской раскладки. Уже много лет пользуюсь, и не представляю себе, как без неё люди-то живут :). Кроме пробела, там ещё много полезных символов.

Но дальше начинается интересное. Например, есть такой «конструктор сайтов» Тильда. Так вот, там программисты специально постарались, чтобы неразрывный пробел автомагически преобразовывался в обычный, а чтобы ввести именно неразрывный пробел, надо набрать #nbsp;. Что?!11 В каком бреду вообще можно было такое придумать?

И Adobe тоже отличились, вот уж от кого не ожидал. Привычный ⌥+пробел не работает, надо ⌘+⌥+X. Зачем так извращаться? Ну ладно, свой шорткат — понимаю, не у всех раскладка есть. Но чужой-то зачем ломать?

или договорится с редактором чтобы он сразу ставил неразрывный пробел alt + 0160.
также можно ему перех сохранением подсказывать места где пропустил (по словарю)

Конкретно это правило вполне можно использовать в проде - хуже-то не будет. Большинству браузеров будет лучше, а Сафари продолжит скакать как и раньше.

Я забыл, как в типографике называется такая ошибка. Вроде «висячие слова». Но я не уверен.

Это называется "вдовы". Одинокие слова на последней строчке параграфа. Это не только в заголовках некрасиво.

А еще бывают "сироты" -- это одинокие строчки (и даже две или три) которые переползают на новую страницу или колонку (ну или остаются на предыдущей странице или колонке). За таким тоже надо следить.

А еще бывают "колодцы". Это когда на нескольких строчках подряд пробелы между словами выстраиваются вертикально (это действительно выглядит как колодец). Как с этим бороться в веб-верстке пока не придумано (по крайне мере не придумано мной).

Спасибо за ликбез, полезная информация!

Обратите внимание на полосу прокрутки браузера. Если модальное окно закрыто — она есть, когда оно открыто — полоса убирается. Такое поведение достигается с помощью значение hidden для свойства overflow, добавленного к элементу <body>. Убирая и добавляя полосу прокрутки, браузеры смещают контент на её ширину. Следовательно, он «прыгает».

Решить эту проблему теперь просто.

Эту "проблему" и раньше "решить" было не особо сложно. Достаточно просто верстать нормально, а не как шизики. Какой-то поехавший придумал однажды, что у body ОБЯЗАТЕЛЬНО НУЖНО УБРАТЬ ПРОКРУТКУ при открытии модалки. Зачем? Что мешает растянуть поверх абсолютно позиционируемый оверлэй, который закрывает весь контент и уже на нём выводить модалку? Какую религиозную проблему такое решение затрагивает?

В целом есть, конечно, и прикольные штуки, вроде того же "text-wrap: balance" (который не понятно что мешало сделать дефольным для заголовков), но по большому счёту ощущение, что стадию когда CSS становился с новыми версиями лучше мы уже прошли и теперь становится, в целом, хуже. Правила становятся всё более запутанными, то как работают некоторые свойства становится всё более специфичным, сейчас уже всё это держать в уме не реально, хотя по сути-то это должен быть простой инструмент...

Если они SCSS начнут в CSS тянуть, это в такого монстра превратится, что и представить стрёмно.

Вложенность селектор, то есть нестинг, ещё не очень хорошо поддерживается. Очень не рекомендую использовать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий