`text-align: justify` 是否均匀拉伸所有白色 space 字符?

Does `text-align: justify` stretch all white space characters evenly?

除了通常的 space 和不间断的 space,Unicode 标准中还有几个水平 white space characters。我尝试将其中一些与 text-align: justify 一起使用,在我看来 结果不均匀:«通常» spaces 似乎太容易拉伸,而其他 spaces 几乎不拉伸。例如:在左对齐的段落中,我可以很容易地发现一个奇怪的 en-space,在 justified 中——不是这样,这取决于一行需要的拉伸量。

因此问题来了:网络引擎如何在各种白色 space 字符之间分配 «对齐拉伸»?算法是怎么想的,比如说,«象形文字 space»«中等数学 space»,等等在?

@Ignat Insarov 您已经使用 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;

不是真正的答案,而是您工厂的一些谷物。

Web 浏览器中的文本对齐样式 (text-justify) 不稳定。要查找详细信息,您需要查看代码。截至 2020 年 1 月,我的 Chrome 浏览器似乎除了自动使用 https://www.w3schools.com/cssref/css3_pr_text-justify.asp

上的 'play' 功能外没有实现任何功能

如果您想检查间距,请尝试在文本样本上叠加一个 1 em 的网格。标准字间距为 1/3 em。 Knuth 的算法尝试 2/9 到 1/2 em。电脑屏幕更难阅读,而且您不用为纸张付费。即使是参差不齐的右侧文本也设置为比 1/3 em 宽。查了几页猜测,好像是 1/2 em

良好的理由同时使用字符间和单词间间距。(注意:Knuth 避免字符间间距)要做到这一点的算法并不简单。在过去糟糕的日子里,'486 是一个快速的处理器,桌面出版(不是 MS word ...)正在进入它自己的时代,当你在开始时做出改变时重排一大块文本是选择的理由咖啡。 Word,多年来,只是增加了额外的整个空间。我现在不是 word 用户,所以不能说他们是否升级了他们的游戏。

我的个人经验:屏幕文本有 25% 的行距(12pt 在 15 上,16 在 20 上),衬线字体,最小行长度为 35 个字符,自动断字看起来可以接受,比破烂好得多对。

延伸阅读:

https://onlinelibrary.wiley.com/doi/abs/10.1002/spe.4380111102 -- 除非您付费,否则只能抽象。 Donald E. Knuth 和 Michael F. Plass,Software - Practice and Experience 11 (1981) 1119-1184 DOI:10.1002/spe.4380111102,也可在 Digital Typography,Ch. 3,第 67-155 页。试试你当地的大学图书馆。

Donald E. Knuth 和 Michael F. Plass,Software - Practice and Experience 11 (1981) 1119-1184 DOI:10.1002/spe.4380111102,也可在 Digital Typography,Ch. 3,第 67–155 页。

也看到这个:http://defoe.sourceforge.net/folio/knuth-plass.html

正如一位知识渊博的人向我解释的那样on Reddit:

I only have easy access to the blink code base and in that it justifies on kSpaceCharacter, kTabulationCharacter, kNewlineCharacter, and kNoBreakSpaceCharacter (0x0020, 0x0009, 0x000A, 0x00A0). The function is called NGInlineLayoutAlgorithm::ApplyJustify.

As far as I can tell from some very brief tests it looks like it is the same in Firefox as well.

Further:

I found how it works in gecko as well and it is quite complicated. There is a long list of "breaking" characters that depend on if the page is rendered in Japanese, Chinese, or a different language. For non-jp/zh languages it works almost exactly as blink.

You can find it here. aLangIsCJ basically means if it is a Chinese or Japanese document.