如何在预标签中包装文字?


719

pre 标签对于HTML中的代码块和编写脚本时调试输出非常有用,但是如何使文本自动换行而不是打印长行呢?

Answers:


1007

答案,来自此页面的CSS:

pre {
    white-space: pre-wrap;       /* Since CSS 2.1 */
    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+ */
}

7
white-space:pre-line;(和所有与浏览器兼容的版本)在某些情况下(例如,没有制表符)似乎更合适,因为它占用了行首的空间(如果有的话)
MediaVince

5
@MediaVince,pre-line折叠所有空格(不只是在行首)。 developer.mozilla.org/zh-CN/docs/Web/CSS/white-space的表格汇总了white-space值的行为。
Paul

1
word-wrap: break-word不执行问题的要求,即使在单词之间也导致换行。您可以删除该行。在现代浏览器上,您不需要任何-moz前缀或其他前缀。
Flimm


60

我发现跳过pre标签并使用空格:在div上进行预包装是更好的解决方案。

 <div style="white-space: pre-wrap;">content</div>

3
比流行的答案更容易。谢谢!
Ricky 2014年

4
在我的情况下,我想显示预格式化的文本,其中包含组成表格的标签。我使用了您的解决方案,加上我添加了monspace字体,因此所有列均对齐:style="white-space: pre-wrap; font-family:monospace;"
1

1
尽管这可能会更容易,但是在<pre>用于代码块时可能会有更多的语义价值。
Angelos Chalaris

2
我知道我迟到了这个游戏,但是为什么这个解决方案比在样式表中设置一次更好?我在一个HTML输出屏幕上需要多个div。似乎对样式表中的元素进行了一次修复即可解决所有问题。
webfrogs

1
@webfrogs是的,最好创建一个.prewrap类。
Mason240 '18


20

这就是我所需要的。它可以防止单词断断续续,但可以保留前置区域的动态宽度。

word-break: keep-all;

17

我建议忘记预言,只将其放在文本区域中。

您的缩进将保留,并且您的代码不会在路径或其他内容的中间出现单词包装。

如果要复制到剪贴板,也更容易在文本区域中选择文本范围。

以下是php的摘录,因此,如果您不在php中,则打包html特殊字符的方式会有所不同。

<textarea style="font-family:monospace;" onfocus="copyClipboard(this);"><?=htmlspecialchars($codeBlock);?></textarea>

有关如何在js中将文本复制到剪贴板的信息,请参见:如何在JavaScript中复制到剪贴板?

然而...

我只是检查了stackoverflow代码块,然后将它们包裹在<code>标记中,并用CSS包装在<pre>标记中。

code {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
}
pre {
  background-color: #EEEEEE;
  font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;
  margin-bottom: 10px;
  max-height: 600px;
  overflow: auto;
  padding: 5px;
  width: auto;
}

同样,stackoverflow代码块的内容也使用(我认为)http://code.google.com/p/google-code-prettify/

这是一个不错的设置,但我现在只使用textareas。


13
在输入之外的其他地方使用文本区域会不会在语义上不正确?对我来说似乎是一个奇怪的解决方案。
Josh M.

2
在语义上不像当“ pre”表明所包含的文本是预先格式化的,因此不需要额外的格式,而是将其原样处理时,向“ pre”标签中添加一堆格式样式一样,)我建议不要将“语义”优先于“功能”。
ekerner 2013年

1
我认为<pre>它没有任何语义含义(不同于<code>),它只是意味着应保留换行符和多个空格。
Flimm 2014年

1
它是“预格式化”的缩写。您是在暗示它实际上仅预格式化了换行符和多个空格吗?
ekerner 2014年

内容的类型应由内部标签指定,具体取决于预格式化文本的类型。我会将我的朋友带到w3c的预标记Wiki页面:w3.org/wiki/HTML/Elements/pre
joshperry

14

我结合了@richelectron和@ user1433454的答案。
它工作得很好,并保留了文本格式。

<pre  style="white-space: pre-wrap; word-break: keep-all;">

</pre>

13

您可以:

pre { white-space: normal; }

保持等宽字体但添加自动换行,或:

pre { overflow: auto; }

这将允许使用水平滚动来固定尺寸的长行。


哦,谢谢你的溢出提醒!非常适合移动显示器。
XTL 2014年

6

尝试使用

<pre style="white-space:normal;">. 

或更好地抛出CSS。


这个似乎可以在IE 7中使用,但不能在6中使用。这是唯一似乎对IE很有前途的建议...所有其他建议对其他浏览器也有好处...
topwik 2010年

没关系,一定是浏览器缓存的东西。重新启动IE 6,一切都很好。干杯。
topwik 2010年

2
该解决方案的问题在于它还会分解换行符...例如,将文本分隔为段落的所有内容都将丢失。
克里斯·W

4

使用white-space: pre-wrap和一些前缀来自动换行pre s。

不要使用,word-wrap: break-word因为这当然会把单词分成两半,这可能是您不想要的。


3

最佳跨浏览器方式对我有用,可以得到换行符并显示确切的代码或文本:(chrome,Internet Explorer,Firefox)

CSS:

xmp{ white-space:pre-wrap; word-wrap:break-word; }

HTML:

<xmp> your text or code </xmp>

对我来说很棒:-)
Wesley Tuzza

7
从HTML 3.2开始不推荐使用xmp,xmp已从HTML5中完全删除,并且从一开始就无法正常工作。在各种浏览器中实现的方式不一致。
PeterToTheThird,2015年

使用空格:预包装;和自动换行:断词;在我的CSS中,保留(json)代码段的缩进,而前行将其删除。(Chrome)
Peter Visser

1

以下内容帮助了我:

pre {
    white-space: normal;
    word-wrap: break-word;
}

谢谢


3
我认为最好使用white-space: pre-wrap;它,因为它尊重空白空间
Ivan Ferrer Villa

-1

<pre>-元素代表“预格式化文本”,旨在保持其标签之间的文本(或其他)的格式。因此,它实际上没有inteded有内自动自动换行或换行符<pre>-Tag

元素中的文本以固定宽度的字体(通常为Courier)显示,并且保留空格和换行符

资料来源:w3schools.com,由我自己强调。


它只是说明了一个事实,即可以自动包装预标签中的文本,尽管这并不是预标签自动包装的目的。
rob_st

这是对作者问题的唯一正确答案。任何其他答案或可能的“解决方案”都鼓励误用<pre>元素。本质上,如果您想将type放在<pre>元素内并进行换行,请改用<p>标记,并使用CSS类以任何您喜欢的方式对其进行样式设置。
马库斯

我不确定为什么人们会觉得提供这种“我比你聪明”的建议会有所帮助。不可以,<p>标记不适合替换:它既不保留空格也不保留换行符。<pre>标记对于保留换行符很有用,但是有时有必要添加额外的换行,就像任何代码编辑器都可以保留换行并向长行添加换行一样。
dwk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.