Комментарии 14
с книжным форматированием.
Честно говоря, книжное форматирование — это растяжение пробелов + переменная ширина одинаковых букв + переносы + слова, подобранные автором и редактором в таком порядке, чтобы переносов было не больше двух подряд + висячая пунктуация.
Когда браузер этому научится, все издательства будут верстать в браузере.
Казалось бы, при чем тут автор и редактор, если все это в программах верстки и так работает, для любых размеров текта по ширине и размеру кегля? Автоматизированные переносы в них работают 100500 лет как. И да, они в основном используют растягивание пробелов, но совершенно не "переменную ширина одинаковых букв". Оно не идеально, но при явных огрехах таких систем ручные мягкие переносы делает верстальщик книги, но никак не редактор с автором. Кстати мягкие переносы есть и в web, это html-entity ­, которые, впрочем, тоже можно расставлять автоматически на основе морфологии
Казалось бы, при чем тут автор и редактор, если все это в программах верстки и так работает, для любых размеров текта по ширине и размеру кегля?
Потому что автоматизированные переносы работают плохо, создают больше 2 переносов подряд. А растягивать пробелы очень опасно: может получиться плохой результат. Поэтому-то и используется микротипографика, которая позволяет масштабировать все буквы по ширине.
Оно не идеально, но при явных огрехах таких систем ручные мягкие переносы делает верстальщик книги, но никак не редактор с автором.
Задача не в том, чтобы расставить переносы, это и автомат умеет. Задача — избавиться от переносов.
Потому что автоматизированные переносы работают плохо, создают больше 2 переносов подряд.
Вы давно в программах верстки работали? Да пусть даже не совсем верстки, а к примеру Corel Draw? Автоматизированные переносы в них настраиваются, в том числе, чтобы не делать более указанного числа переносов подряд, минимальных висячек, минимальной длины слова и все такое.
![](https://habrastorage.org/getpro/habr/upload_files/332/841/af2/332841af2566d7c510885c3a968fc5ba.png)
Вот так ваш комментарий выглядит в браузере с переносами и выравниванием по ширине.
В Опере работает только выравнивание, переносов нет.
Имхо, выравнивание по ширине и все эти переносы - это все какое-то устаревшее. Перенос рубит слово на двое и заставляет "разрывать внимание" переходя глазами со конца строки в начало следующей. А выравнивание по ширине делает абзац сливающимся, легче сбиться со строки. Неровный правый край текста как раз избавляет от этого. Поэтому мне уже с экрана читать веб стало приятнее, чем бумажные книги, где как раз текст выравнен с обеих сторон. И если мне сегодня пришлось бы что-то много записывать в тетрадке, я б не переносил слова, а выравнивал свою писанину только слева.
А рваная и драная правая сторона текста вас устраивает? Переносы - да, согласен, ломать слово через колено не надо. Но выравнивание нужно. Точнее, опция выравнивания в браузерах нужна. Пусть каждый настроит так, как ему удобнее. Пусть хоть по центру выровняет, прости господи.
А для того, чтобы текст не сливался в кашу, умные люди давным-давно придумали абзацы.
Здесь уже высказали правомерное сомнение об удобстве и целесообразности выравнивания текста по ширине на странице. Но, это дело вкуса.
Меня интересует иное - реализация механизма автором скрипта.
Явно, что предложенный скрипт будет тормозным и не будет обрабатывать динамически создаваемое содержимое. Также явно не хватает фильтра необрабатываемых элементов.
Набросал для примера автору свой вариант скрипта, лишенный указанных недостатков. Но, не проверял. Хотя по идее должен работать:
// ==UserScript==
// @name P-justify-hyphens
// @version 0.1
// @description try to take over the world!
// @match https://www.rbc.ru/*
// @match https://lenta.ru/*
// @match https://habr.com/*
// @run-at document-start
// @grant unsafeWindow
// ==/UserScript==
(function () {
'use strict';
var css = document.createElement('style');
css.innerHTML += [
`*:not(img):not(svg):not([class*=\"icon\"]):not([class*=\"ico\"]):not([class*=\"button\"]):not([class*=mjx])`+
`:not([class*=vjs]):not([class*=fa]):not([class*=ms-Button-icon]):not([class*=bb])`+
`:not([class*=icon]):not([class*=ll]):not(i):not([role*=button]):not([type*=button]):not([class*=btn])`+
`:not([class*=button]):not([class*=button] span),`+
`[class*="text"]:not([class*=fa]) {`,
`-moz-hyphens: auto !important;`,
`-ms-hyphens: auto !important;`,
`-webkit-hyphens: auto !important;`,
`text-align: justify !important;`,
`}`
].join("\n");
document.documentElement.appendChild(css);
}) ();
Как отформатировать текст в Интернет по ширине с переносами