`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 页。
正如一位知识渊博的人向我解释的那样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.
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.
除了通常的 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 页。
正如一位知识渊博的人向我解释的那样on Reddit:
I only have easy access to the blink code base and in that it justifies on
kSpaceCharacter
,kTabulationCharacter
,kNewlineCharacter
, andkNoBreakSpaceCharacter
(0x0020
,0x0009
,0x000A
,0x00A0
). The function is calledNGInlineLayoutAlgorithm::ApplyJustify
.As far as I can tell from some very brief tests it looks like it is the same in Firefox as well.
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.