Растягивает ли `text-align: justify` все символы пробела равномерно? - PullRequest
2 голосов
/ 10 января 2020

В стандарте Unicode есть несколько горизонтальных символов пробела за пределами обычного и неразрывного пробела. Я пытался использовать некоторые из них с text-align: justify, и мне кажется , что результат был неравномерным: «обычные» пробелы, кажется, растягиваются слишком легко, в то время как другие пробелы едва растягиваются все. Например: в отрывках, выровненных по левому краю, я легко могу определить нечетное пространство, в оправданном - не так, в зависимости от того, сколько требуется растянуть линию.

Отсюда возникает вопрос: как веб-движки распределяют «полоса оправдания» поперек пробелов различных символов? Что думают алгоритмы, скажем, о «идеография c пространство» , «среднее математическое пространство» и т. Д.?

Ответы [ 3 ]

2 голосов
/ 20 января 2020

Не совсем ответ, но немного смысла для вашей мельницы.

Стиль выравнивания текста (выравнивание текста) в веб-браузерах - ошибка c. Чтобы узнать подробности, вам нужно взглянуть на код. По состоянию на январь 2020 года мой Chrome браузер, похоже, не реализовывал ничего, кроме автоматического с использованием функции воспроизведения в https://www.w3schools.com/cssref/css3_pr_text-justify.asp

Если вы хотите проверить интервал, попробуйте наложить 1 сетка на образец текста. Стандартный интервал между словами 1/3 em. Алгоритм Кнута пытается от 2/9 до 1/2 em. Компьютерные экраны труднее читать, и вы не платите за бумагу. Даже неровный правый текст установлен шире, чем 1/3 em. При предположении, проверяющем несколько страниц, кажется, что оно составляет 1/2 em

В хорошем обосновании используются как межсимвольный, так и межсловный интервал (примечание: Кнут избегает межсимвольного интервала) Алгоритмы для этого ну не тривиально. В старые добрые времена, когда процессор '486 был быстрым процессором, и настольная публикация (НЕ MS word ...) становилась все более самостоятельной, перезапись большого блока текста, когда вы вносили изменения в начале, была причиной go для кофе. Словом, годами просто добавлялись лишние целые пробелы. Сейчас я не пользователь слов, поэтому не могу сказать, повысили ли они свою игру.

Мой личный опыт: экранный текст с лидирующим 25% (12pt на 15, 16 на 20) шрифтом с засечками , с минимальной длиной строки 35 символов, авто переносы выглядят терпимыми, и НАМНОГО лучше, чем неровная справа.

Дальнейшее чтение:

https://onlinelibrary.wiley.com/doi/abs/10.1002/spe.4380111102 - только если вы платите. Дональд Э. Кнут и Майкл Ф. Пласс, Программное обеспечение - практика и опыт 11 (1981) 1119-1184 DOI: 10.1002 / spe.4380111102, также доступный в Digital Typography, Ch. 3, с. 67–155. Попробуйте свою местную университетскую библиотеку.

Дональд Э. Кнут и Майкл Ф. Пласс, Программное обеспечение - практика и опыт 11 (1981) 1119-1184 DOI: 10.1002 / spe.4380111102, также доступный в Digital Typography, Ch. 3, с. 67–155.

См. Также: http://defoe.sourceforge.net/folio/knuth-plass.html

0 голосов
/ 21 января 2020

Как мне объяснил знающий человек на Reddit :

У меня есть только легкий доступ к базе кодов моргания, и это оправдывает kSpaceCharacter, kTabulationCharacter, kNewlineCharacter и kNoBreakSpaceCharacter (0x0020, 0x0009, 0x000A, 0x00A0). Функция называется NGInlineLayoutAlgorithm::ApplyJustify.

Насколько я могу судить по некоторым очень коротким тестам, похоже, что она одинакова и в Firefox.

Далее :

Я обнаружил, как это работает и в гекконах, и это довольно сложно. Существует длинный список «ломающихся» символов, которые зависят от того, отображается ли страница на японском, китайском или другом языке. Для не-jp / zh языков он работает почти точно так же, как мигает.

Вы можете найти его здесь . aLangIsCJ в основном означает, если это китайский или японский документ.

0 голосов
/ 17 января 2020

@ Игнат Инсаров, у вас есть text-align: justify; Я думаю, что это -> решение поможет вам. здесь я дал несколько типов text-align-last , которые вы можете примерить на свой контент, я думаю text-align-last: center; может быть полезным,

text-align: justify;
text-align-last: center;
/*OR*/
text-align-last: end;
/*OR*/
text-align-last: left;
/*OR*/
text-align-last: right;
/*OR*/
text-align-last: start;
...