【发布时间】:2010-09-19 20:47:44
【问题描述】:
pre 标签对于 HTML 中的代码块和在编写脚本时调试输出非常有用,但是我如何使文本自动换行而不是打印出一长行呢?
【问题讨论】:
pre 标签对于 HTML 中的代码块和在编写脚本时调试输出非常有用,但是我如何使文本自动换行而不是打印出一长行呢?
【问题讨论】:
<pre> 有效,但代码有<code> 标签。
【讨论】:
如果您使用 prism 或任何代码格式库,则需要修改展位前置和代码标签,如下所示:
pre {
overflow-x: auto !important;
white-space: pre-wrap !important; /* Since CSS 2.1 */
white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
white-space: -pre-wrap !important; /* Opera 4-6 */
white-space: -o-pre-wrap !important; /* Opera 7 */
word-wrap: break-word !important; /* Internet Explorer 5.5+ */
}
code{
white-space: normal !important;
}
【讨论】:
答案,来自 CSS 中的this page:
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+ */
}
【讨论】:
white-space:pre-line;(以及所有与浏览器兼容的风格)在某些情况下(例如没有标签)似乎更合适,因为它占用了行首的空间(如果有的话)跨度>
pre-line 折叠所有空格(不仅仅是在行首)。 developer.mozilla.org/en-US/docs/Web/CSS/white-space 有一个表格总结了 white-space 值的行为。
word-wrap: break-word 没有做问题所要求的,它会导致换行甚至在单词之间发生。您可以删除该行。在现代浏览器上,您不需要任何 -moz 或其他前缀。
word-wrap: break-word 是我可以让 Gmail Notifier Pro 分行的唯一方法(而且它不会将单词分成两半)。这意味着该程序似乎使用了较旧的 IE 引擎。请参阅此处确认这是 IE 5.5-7(不是 5.5+,Mozilla 说)中的 white-space 替换:developer.mozilla.org/pt-BR/docs/Web/CSS/overflow-wrap。
white-space: pre-wrap alone works fine in all browsers,不再需要支持所有那些旧浏览器了。
最简洁地说,这会强制内容包含在 pre 标记内而不会破坏单词。
pre {
white-space: pre-wrap;
word-break: keep-all
}
【讨论】:
word-wrap: break-word; 可以解决此问题。
这非常适合在pre-tag 中换行和保留空白:
pre {
white-space: pre-wrap;
}
【讨论】:
word-wrap: break-word;。
使用white-space: pre-wrap 和一些前缀在pres 内自动换行。
不要使用word-wrap: break-word,因为这当然会将一个单词分成两半,这可能是您不想要的。
【讨论】:
我结合了@richelectron 和@user1433454 的答案。
它工作得很好,并保留了文本格式。
<pre style="white-space: pre-wrap; word-break: keep-all;">
</pre>
【讨论】:
最好的跨浏览器方式对我有用,可以换行并显示准确的代码或文本:(chrome、internet explorer、Firefox)
CSS:
xmp{ white-space:pre-wrap; word-wrap:break-word; }
HTML:
<xmp> your text or code </xmp>
【讨论】:
<pre>-Element 代表“预格式化文本”,旨在保持其标签之间的文本(或其他)格式。因此,它实际上并不打算在 <pre>-Tag 中自动换行或换行
元素中的文本以固定宽度字体(通常是 Courier)显示,并且它同时保留空格和换行符。
source: w3schools.com,强调我自己做的。
【讨论】:
元素。本质上,如果你想将 type 放在元素中并让它换行,请改用标签,并使用 CSS 类以任何你喜欢的方式设置样式。
标签不是合适的替代品:它既不保留空格也不保留换行符。
标记可用于保留换行符,但有时需要添加额外的换行,就像任何代码编辑器都可能保留换行符并为长行添加换行一样。
我建议忘记 pre 并将其放在 textarea 中。
您的缩进将保留,并且您的代码不会在路径或其他东西的中间进行自动换行。
如果您想复制到剪贴板,也更容易在文本区域中选择文本范围。
以下是 php 摘录,所以如果你不在 php 中,那么你打包 html 特殊字符的方式会有所不同。
<textarea style="font-family:monospace;" onfocus="copyClipboard(this);"><?=htmlspecialchars($codeBlock);?></textarea>
有关如何在 js 中将文本复制到剪贴板的信息,请参阅:How do I copy to the clipboard in JavaScript?。
不过……
我刚刚检查了 stackoverflow 代码块,它们包含在
标签中的 标签中,并带有 css ...
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。
【讨论】:
<pre> 没有任何语义意义(不像<code>),它只是意味着应该保留换行符和多个空格。
这是我需要的。它可以防止单词中断,但允许在前置区域中使用动态宽度。
word-break: keep-all;
【讨论】:
我发现跳过 pre 标记并在 div 上使用 white-space: pre-wrap 是更好的解决方案。
<div style="white-space: pre-wrap;">content</div>
【讨论】:
style="white-space: pre-wrap; font-family:monospace;"
<pre> 用于代码块可能会有更多的语义价值。
以下对我有帮助:
pre {
white-space: normal;
word-wrap: break-word;
}
谢谢
【讨论】:
white-space: pre-wrap; 更好,因为它尊重空格
尝试使用
<pre style="white-space:normal;">.
或者最好扔 CSS。
【讨论】:
您可以:
pre { white-space: normal; }
保持等宽字体但添加自动换行,或者:
pre { overflow: auto; }
这将允许固定大小的长行水平滚动。
【讨论】: