当前位置:  开发笔记 > 编程语言 > 正文

css/js中的自动换行

如何解决《css/js中的自动换行》经验,为你挑选了2个好方法。

我正在寻找一种跨浏览器的方式来包装具有预定宽度的div内部没有间隔空格(例如长URL)的长文本部分.

以下是我在网络上发现的一些解决方案以及它们为什么适合我:

溢出:隐藏/自动/滚动 - 我需要在不滚动的情况下显示整个文本.div可以垂直增长,但不能水平增长.

注射和害羞; 通过js/server-side 进入字符串 - ­ 现在由FF3支持,但用­复制和粘贴URL; 在中间将无法在Safari中工作.此外,据我所知,没有一种简洁的方法来测量文本宽度,以找出最佳的字符串偏移量来添加这些字符(有一种hacky方式,请参阅下一项).另一个问题是放大Firefox和Opera很容易打破这个问题.

将文本转储到隐藏元素并测量offsetWidth - 与上面的项目相关,它需要在字符串中添加额外的字符.此外,测量长文本中所需的中断量可能很容易需要数千个昂贵的DOM插入(每个子串长度一个),这可以有效地冻结站点.

使用等宽字体 - 再次,缩放可能会弄乱宽度计算,并且文本无法自由设置样式.

看起来很有希望但不完全存在的事情:

自动换行:break-word - 它现在是CSS3工作草案的一部分,但它还没有得到Firefox,Opera或Safari的支持.如果它适用于所有浏览器,这将是理想的解决方案:(

通过js/server-side 标签注入到字符串中 - 复制和粘贴URL适用于所有浏览器,但我仍然没有很好的方法来测量放置中断的位置.此外,此标记使HTML无效.

在每个字符后添加中断 - 它比数千个DOM插入更好,但仍然不理想(将DOM元素添加到文档中会占用内存并减慢选择器查询速度等).

有没有人对如何解决这个问题有更多的想法?



1> superlogical..:

Css哟!

.wordwrap {
    white-space: pre-wrap; /* css-3 */
    white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
    white-space: -pre-wrap; /* Opera 4-6 */
    white-space: -o-pre-wrap; /* Opera 7 */
    word-wrap: break-word; /* Internet Explorer 5.5+ */ 
}

我刚刚发现这篇文章 http://www.impressivewebs.com/word-wrap-css3/

所以你应该使用

.wordwrap {  
    word-wrap: break-word;
}  

.no_wordwrap {  
    word-wrap: normal;
}  



2> Owen..:

我通常使用word-wrap想法的组合来处理这个问题.请注意,有一些变种.正如您所看到的,可能是兼容性的最佳选择.

word-wrap浏览器支持并不可怕,考虑到所有因素,Safari,Internet Explorer和Firefox 3.1(Alpha Build)都支持它(src),所以我们可能不是那么遥远.

关于服务器端的破坏,我已经非常成功地使用了这个方法(php):

function _wordwrap($text)   {
    $split = explode(" ", $text);
    foreach($split as $key=>$value)   {
        if (strlen($value) > 10)    {
            $split[$key] = chunk_split($value, 5, "​");
        }
    }
    return implode(" ", $split);
}

基本上,对于超过10个字符的单词,我将它们分成5个字符.这似乎适用于我已经交过的所有用例.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有