69

如果用户在没有任何空格或空白的情况下输入长行,它将通过比当前元素更宽来破坏格式。就像是:

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈…………………… ..................................................... ………………………………………………………………………………………………………………………………………………

我试过只wordwrap()在 PHP 中使用,但问题是如果有链接或其他一些有效的 HTML,它就会中断。

CSS 中似乎有一些选项,但它们都不适用于所有浏览器。请参阅 IE 中的自动换行。

你怎么解决这个问题?

4

14 回答 14

121

在 CSS3 中:

word-wrap:break-word
于 2010-10-18T11:19:04.970 回答
43

我试图解决同样的问题,我在这里找到了解决方案:

http://perishablepress.com/press/2010/06/01/wrapping-content/

解决方案:向容器中添加以下 CSS 属性

div {
    white-space: pre;           /* CSS 2.0 */
    white-space: pre-wrap;      /* CSS 2.1 */
    white-space: pre-line;      /* CSS 3.0 */
    white-space: -pre-wrap;     /* Opera 4-6 */
    white-space: -o-pre-wrap;   /* Opera 7 */
    white-space: -moz-pre-wrap; /* Mozilla */
    white-space: -hp-pre-wrap;  /* HP Printers */
    word-wrap: break-word;      /* IE 5+ */
}

我们的想法是全部使用它们,以便您获得更好的跨浏览器兼容性

希望这可以帮助

于 2011-09-25T09:54:58.140 回答
17

我喜欢使用overflow: autoCSS 属性/值配对。这将以您期望的方式呈现父对象。如果父项中的文本太宽,则滚动条会出现在对象本身内。这将使结构保持您希望的外观,并为查看者提供滚动查看更多内容的能力。

编辑:与overflow: auto相比的好处overflow: scroll是,auto滚动条仅在存在溢出内容时才会出现。使用scroll,滚动条始终可见。

于 2008-12-12T17:12:20.747 回答
7

我没有亲自使用过它,但Hyphenator看起来很有希望。

另请参阅相关(可能重复)问题:

于 2008-12-12T17:30:29.620 回答
6

我很惊讶没有人提到我最喜欢的解决这个问题的方法之一,即<wbr>(可选换行符)标签。它在浏览器中得到了很好的支持,并且基本上告诉浏览器它可以在必要时插入换行符。还有相关的零宽度空格字符,&#8203;含义相同。

对于提到的用例,在网页上显示用户评论,我假设已经有一些输出格式来防止注入攻击等。所以很容易在太长的单词或链接中的<wbr>每个字符中添加这些标签N.

这在您需要控制输出格式时特别有用,而 CSS 并不总是允许您这样做。

于 2012-12-23T03:16:32.547 回答
5

我会将帖子放在一个 div 中,该 div 具有固定宽度设置溢出以滚动(或根据内容完全隐藏)。

就像:

#post{
    width: 500px;
    overflow: scroll;
}

但这只是我。

编辑:正如cLFlaVA指出的那样......最好使用autothen scroll。我同意他的看法。

于 2008-12-12T17:10:19.253 回答
2

没有“完美”的 HTML/CSS 解决方案。

解决方案要么隐藏溢出(即滚动或只是隐藏)或扩展以适应。没有魔法。

问:如何将一个 100 厘米宽的物体放入只有 99 厘米宽的空间中?

答:你不能。

你可以阅读断词

编辑

请查看此解决方案 如何使用 css 应用换行/延续样式和代码格式

或者

如何防止长词破坏我的div?

于 2008-12-12T17:21:03.773 回答
0

我通过没有像这样固定我的右侧边栏来躲避这个问题:P

于 2008-12-12T17:06:11.463 回答
0

这是我在 ASP.NET 中所做的:

  1. 在空格上拆分文本字段以获取所有单词
  2. 迭代单词以查找长度超过一定数量的单词
  3. 插入每 x 个字符(例如每 25 个字符。)

我查看了其他基于 CSS 的方法,但没有找到任何可以跨浏览器工作的方法。

于 2008-12-12T17:11:29.797 回答
0

根据乔恩的建议,我创建的代码:

public static string WrapWords(string text, int maxLength)
    {
        string[] words = text.Split(' ');
        for (int i = 0; i < words.Length; i++)
        {
            if (words[i].Length > maxLength) //long word
            {
                words[i] = words[i].Insert(maxLength, " ");
                //still long ?
                words[i]=WrapWords(words[i], maxLength);
            }
        }
        text = string.Join(" ", words);
        return (text);
    }
于 2009-11-07T19:28:48.537 回答
0

我不想仅仅为了断字而在我的页面中添加库。然后我写了一个简单的函数,我在下面提供,希望它对人们有所帮助。

(它打破了 15 个字符,并在其间应用了“& shy;”,但您可以在代码中轻松更改)

//the function:
BreakLargeWords = function (str)
{
    BreakLargeWord = function (word)
    {
        var brokenWords = [];
        var wpatt = /\w{15}|\w/igm;
        while (wmatch = wpatt.exec(word))
        {
            var brokenWord = wmatch[0];
            brokenWords.push(brokenWord);
            if (brokenWord.length >= 15) brokenWords.push("&shy;");
        }
        return brokenWords.join("");
    }

    var match;
    var word = "";
    var words = [];
    var patt = /\W/igm;
    var prevPos = 0;
    while (match = patt.exec(str))
    {
        var pos = match.index;
        var len = pos - prevPos;
        word = str.substr(prevPos, len);

        if (word.length > 15) word = BreakLargeWord(word);

        words.push(word);
        words.push(match[0]);
        prevPos = pos + 1;
    }
    word = str.substr(prevPos);
    if (word.length > 15) word = BreakLargeWord(word);
    words.push(word);
    var text = words.join("");
    return text;
}

//how to use
var bigText = "Why is this text this big? Lets do a wrap <b>here</b>! aaaaaaaaaaaaa-bbbbb-eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
var goodText = BreakLargeWords(bigText);
于 2013-09-04T23:09:12.270 回答
0

将零宽度空格 ( &#8203;) 添加到字符串中,它将换行。

这是一个 Javacript 示例:

let longWordWithOutSpace = 'pneumonoultramicroscopicsilicovolcanoconiosis';
// add &#8203; between every character to make it wrap
longWordWithOutSpace.split('').join('&#8203;');
于 2017-06-22T23:00:28.323 回答
-1

我已经发布了一个解决方案,它使用 JavaScript 和一个简单的正则表达式来打破长词,这样就可以在不破坏您的网站布局的情况下对其进行包装。

使用 CSS 和 JavaScript 换行

于 2010-01-11T13:22:19.853 回答
-2

我知道这是一个非常古老的问题,因为我遇到了同样的问题,所以我寻找了一个简单的解决方案。正如在第一篇文章中提到的,我决定使用 php-function 自动换行。

有关信息,请参阅以下代码示例;-)

<?php
    $v = "reallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglinkreallyreallyreallylonglink";
    $v2 = wordwrap($v, 12, "<br/>", true);
?>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <table width="300" border="1">
            <tr height="30">
                <td colspan="3" align="center" valign="top">test</td>
            </tr>
            <tr>
                <td width="100"><a href="<?php echo $v; ?>"><?php echo $v2; ?></a></td>
                <td width="100">&nbsp;</td>
                <td width="100">&nbsp;</td>
            </tr>
        </table>
    </body>
</html>

希望这可以帮助。

于 2011-09-09T15:01:35.097 回答