【发布时间】:2013-09-14 11:41:56
【问题描述】:
目前我正在尝试处理网页上以 cols 显示的文本。
事实上我正在尝试模拟CSS3 Multiple Columns。
我从包含所有文本的一列开始,使用Hyphenator.js 来提高文本质量,然后我想在第一条不可见行处拆分并将文本添加到新的浮动 div。我想这样做,直到我没有未显示的文本。
我面临的问题是,布局是流畅的,我不知道如何获得特定的文本行。
我首先提取 css 属性 line-height、使用 overflow: hidden; 隐藏较长文本的父 div 的 height 和 text-div 的 height。但是现在我被卡住了,因为我无法确定一行中有多少个单词。
我还尝试使用正则表达式将文本拆分为句子。并一个接一个地添加,直到 div 的高度对于周围的高度来说太大了。但是有了这个我没有Hyphenator.js的好处。
这是我的html的摘录:
<div class="col col_2">
<div class="col_content">
<h1>Lorem Ipsum dolor sit amet</h1>
<div class="text">
<div class="start_col hyphenate">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,
</div>
</div>
</div>
</div>
处理完成后start_col将被隐藏,以在用户调整窗口大小时使用原始文本。
这是我用来将文本拆分成句子的正则表达式:
var sentences = $(this).text().replace(/\.+/g,'.|').replace(/\?/g,'?|').replace(/\!/g,'!|').split("|");
var temp = [];
for(var i = 0; i < sentences.length; i++)
{
var sentence = $.trim(sentences[i]);
if(sentence !== "")
temp.push(sentence);
sentences = temp;
}
但就像我之前写的那样,我无法从 Hyphenator.js 中受益。
如果我在某些方面不清楚,我会很乐意解释更多。
【问题讨论】:
-
我在某处读过,您可以将每个单词包装在
span中,然后开始添加它们的宽度,直到下一个跨度超过容器的宽度。那是一行文字。不过,不知道它是否有很大帮助。 -
@JakubMichálek:谢谢小费。我会仔细看看的。但听起来我必须做一些复杂的计算,我不太确定如果所有文本列在调整大小后重新计算会发生什么。
-
另一个简化计算的技巧是首先将文本除以列数,然后检查你离了多少,最后来回移动单词(或跨度)直到你快乐的。但我个人认为这是降级的一个很好的例子——现代浏览器知道 css 列和连字符,旧浏览器只得到一列文本。
-
@Tobias Kun:所以我们在谈论“渐进式增强”与“优雅降级”!?从我的角度来看,使用过时浏览器的用户可能有这样做的理由。将所有最新功能带到他们的旧浏览器中并不是作者的工作。您知道有多少旧网站使用“报纸(多栏)布局”?这是有原因的,因为如果没有浏览器支持所需的 CSS 功能,您将无法完成此操作,至少无法以令人满意的方式完成。顺便说一句:您想支持哪些“旧”浏览器?
-
@Tobias Kun:好的,事情变得更清楚了......! ;-) 但事实仍然是 无法以可承受的成本实现这一目标! 另请参阅 Using CSS multi-column layouts。作为专业人士,您应该能够决定什么时候有意义,什么时候没有意义。恕我直言,在这种情况下绝对不是!即使您找到了 JS 解决方案,如果 JS 被停用/禁用怎么办?每向前迈出一步,你就会后退两步,因为你不断地制造新的问题。 ;-)
标签: javascript jquery css regex multiple-columns