我正在寻找一种跨浏览器的方式来包装具有预定宽度的 div 内没有中断空格(例如长 URL)的长文本部分。
这里有一些解决方案,我在网络上发现的,为什么他们不为我工作:
- 溢出:隐藏/自动/滚动- 我需要在不滚动的情况下显示整个文本。div 可以垂直增长,但不能水平增长。
- 注射 通过 js / 服务器端进入字符串- 现在 FF3 支持,但复制和粘贴带有 的 URL 在中间将无法在 Safari 中工作。此外,据我所知,没有一种干净的方法可以测量文本宽度来找出将这些字符添加到的最佳字符串偏移量(有一种很笨的方法,请参阅下一项)。另一个问题是放大 Firefox 和 Opera 可以轻松打破这一点。
- 将文本转储到隐藏元素并测量 offsetWidth - 与上述项目相关,它需要在字符串中添加额外的字符。此外,测量一长段文本中所需的中断数量很容易需要数千次昂贵的 DOM 插入(每个子字符串长度一个),这可能会有效地冻结站点。
- 使用等宽字体- 同样,缩放会扰乱宽度计算,并且无法自由设置文本样式。
看起来很有希望但并不完全存在的事情:
- word-wrap : break-word - 它现在是 CSS3 工作草案的一部分,但 Firefox、Opera 或 Safari 尚不支持它。如果它适用于今天的所有浏览器,这将是理想的解决方案:(
- 通过 js/ 服务器端将 <wbr> 标签注入字符串- 复制和粘贴 URL 可以在所有浏览器中使用,但我仍然没有一个很好的方法来衡量在哪里放置中断。此外,此标记使 HTML 无效。
- 在每个字符后添加中断- 这比数千个 DOM 插入要好,但仍然不理想(将 DOM 元素添加到文档会占用内存并减慢选择器查询等)。
有没有人对如何解决这个问题有更多的想法?