【发布时间】:2015-09-04 15:23:13
【问题描述】:
在旧报纸中,文章标题如果超过三行,通常会像这样(picture):
|RACKET KINGPINS |
| ARE ROUNDED UP |
| IN BOMB KILLING|
即第一行的对齐方式是左对齐,第二居中,第三右对齐。同样,对于跨越两行的标题,第一个将左对齐,第二个右对齐。对于单行,标题将居中。
我一直在尝试为我正在研究的主题模仿这个,但问题是,我如何将线条彼此分开?每个帖子的标题当然不包含任何实际的硬编码换行符,而是根据宽度限制自动换行,所以我不能只寻找换行符来分割 DOM 的innerHTML。
那么你会怎么做呢?
(如果不清楚,我欢迎 JavaScript 解决方案)
【问题讨论】:
-
“在旧报纸上” ...他们事先知道换行符在哪里。实现这一点并不难。但是,如果您希望这种情况动态发生,则会出现一些问题 - 其中第一个问题显然是,对于正常流动的文本,换行符甚至不会发生,就像您在小示例中所使用的那样,因为第一行还有足够的空间让“ARE”也出现在该行……
-
[contd.] ...所以你要么必须事先插入换行符,要么在这些“组”单词之间有不间断的空格,否则你不会得到 首先以特定方式在三行中分配单词。您当然可以尝试使用 JavaScript 创建类似的内容——例如,尝试将文本拆分为长度大致相等的三部分,仅基于纯字符数,或者考虑字符对应的更复杂的解决方案。字宽也是如此。
-
好的,如果我要实现这样的东西,我会先在空白处分割文本,然后放置每个“单词”(加上可选的尾随标点符号,如逗号或句点)到它自己的
span元素中(通过JS,或者已经在服务器端)。然后(在浏览器中)循环遍历所有这些元素,并将当前元素的.offsetTop值与前一个元素的值进行比较——如果它们不同,则当前元素显然在下一行。收集了哪些单词在一个“行”上的信息后,很容易将它们放入其他容器元素中 […] -
[…],每行一个容器,并对其应用不同的文本对齐值。甚至可以更进一步,使用
.offsetWidth测量每个单词的实际宽度,并尝试应用一些高级数学来查看是否可以找到更理想的单词在行上的分布(这样你就不会' t 结束让我们说两行“长”行,第三行只有一个词)。此外,如果要超过三行,还可以对中间的行应用不同的 padding-left 值,这样居中的文本就不会使它们看起来都相似…… -
谢谢,可以这样解决!如果没有其他人这样做,可能会输入我的解决方案并将其添加为答案。
标签: javascript html css dom text-align