有没有什么好方法可以用纯HTML和CSS截断文本,以使动态内容可以适合于固定宽度和高度的布局?
我一直在通过 逻辑 宽度(即盲目猜测的字符数)来截断服务器端,但是由于“w”比“i”宽,所以这往往不是最佳选择,并且还要求我重新猜测(并不断调整)每个固定宽度的字符数。理想情况下,截断将在浏览器中发生,该浏览器知道渲染文本的 _物理_宽度。
我发现IE的text-overflow:ellipsis
属性完全可以满足我的要求,但是我需要它能够跨浏览器。该属性似乎是(某种程度上)标准的,但是Firefox不支持。我发现了各种基于的变通办法hidden`,但是它们要么不显示省略号(我希望用户知道内容被截断了),要么一直显示(即使内容未被截断了)。
有没有人能以固定的布局适合动态文本,或者通过逻辑宽度将服务器端截断功能与我现在想要的一样好?
更新: Firefox 7text-overflow:ellipsis
现在已受支持。好极了!我的原始答案是历史记录。
请注意,此技术还可以防止使用innerHTML
Firefox中的属性更新JavaScript中节点的内容。解决方法请参阅本文结尾。
CSS
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
-moz-binding: url('assets/xml/ellipsis.xml#ellipsis');
}
ellipsis.xml
文件内容
<?xml version="1.0"?>
<bindings
xmlns="http://www.mozilla.org/xbl"
xmlns:xbl="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<binding id="ellipsis">
<content>
<xul:window>
<xul:description crop="end" xbl:inherits="value=xbl:text"><children/></xul:description>
</xul:window>
</content>
</binding>
</bindings>
更新节点内容
要以可在Firefox中正常工作的方式更新节点的内容,请使用以下命令:
var replaceEllipsis(node, content) {
node.innerHTML = content;
// use your favorite framework to detect the gecko browser
if (YAHOO.env.ua.gecko) {
var pnode = node.parentNode,
newNode = node.cloneNode(true);
pnode.replaceChild(newNode, node);
}
};
请参阅Matt Snider的帖子以获取有关其工作原理的解释
问题内容: 如何在Python中将字符串截断为75个字符? 这是用JavaScript完成的方式: 问题答案:
问题内容: 我正在尝试从服务器获取JSON响应,并且当字符串长度达到约5525个字符时,响应字符串似乎总是被截断。 我还通过使用HttpEntity并读取响应流进行了尝试。但这也会在大约该长度处截断字符串。 请让我知道如何处理此问题。创建此文章时,我将其作为参考。 http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-rest
问题内容: 有没有人比显而易见的解决方案/库更复杂的解决方案/库,用于使用JavaScript截断字符串并在末尾添加省略号: 问题答案: 现在您可以执行以下操作: 如果“更复杂”是指在字符串的最后一个单词边界处截断,那么这可能就是您想要的: 现在您可以执行以下操作: 如果您不想扩展本机对象,则可以使用:
问题内容: 我有一列字符串,每个字符串中都有一个城市,州和数字。 不仅限于此,但我想知道如何截断此列中的数字并仅显示城市和州,或者甚至更好地截断这些数字,然后将城市和州作为一个单独的列。 对于所有不同的记录,该列始终采用相同的格式。 谢谢! 问题答案: 没有为您做所有的工作… City:列的子字符串,从位置0到第一次出现逗号-1. State:列的子字符串,从第一次出现逗号后的2个位置到下一个空格
根据指定的长度截断字符串。 确定字符串的 length 是否大于 num。 返回截断所需长度的字符串,用 '...' 附加到结尾或原始字符串。 const truncateString = (str, num) => str.length > num ? str.slice(0, num > 3 ? num - 3 : num) + '...' : str; truncateString('
问题内容: 我正在尝试在字符串过滤器中使用此方法: 我希望这 还有这个 那是减去字符串的字符。 另外,假定过滤器在低于限制的第一个单词边界处剪切,例如 我很确定这应该与这些步骤一起使用 从终止符中减去终止符中的字符数 验证该字符串是否长于计算出的限制,或者将其保留不变 在计算的限制以下找到字符串中的最后一个空格字符以获取单词边界 如果找不到最后一个空格,则在最后一个空格处剪切字符串或计算出的限制