我正在创建基于用户在文本区域中输入的评论字段。但是当我使用<pre>标签时,我无法使其在评论视图中正确换行。
如果有更好的方法,我并不固执于使用<pre>标签。我选择使用它的唯一原因是为了保留用户添加的换行和空格。
我注意到<pre>中有一个名为“width”的属性,但W3将其注释为已弃用,并且仅在若干字符后才会断行,这也不理想(在IE中根本不起作用)。
有什么建议吗?
我正在创建基于用户在文本区域中输入的评论字段。但是当我使用<pre>标签时,我无法使其在评论视图中正确换行。
如果有更好的方法,我并不固执于使用<pre>标签。我选择使用它的唯一原因是为了保留用户添加的换行和空格。
我注意到<pre>中有一个名为“width”的属性,但W3将其注释为已弃用,并且仅在若干字符后才会断行,这也不理想(在IE中根本不起作用)。
有什么建议吗?
通常的方法是将输入中的单个换行符转换为“<br />”。(双换行符通常会引入新的“<p>”元素。)但这并不包括多个空格字符; 如果需要保留它们,可以将每个两个空格的序列替换为一个空格和一个不间断空格(' '、' \xA0' 或 '  ' 作为字符参考)。
有一种 CSS 的方法可以保留字面意义上的换行符和空格,但在行长度太短时仍然进行换行:
white-space: pre-wrap;
然而,在CSS 2.1和CSS 3中,该属性值在其原始名称下不被所有浏览器支持。 Webkit(Safari,Chrome)会自动识别它;要使其在其他流行浏览器上工作,您需要添加以下代码:
white-space: -moz-pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
'word-wrap' 是针对 IE 的,因为它总是有自己的做事方式。
跨浏览器最佳实现方式(chrome、Internet Explorer、Firefox)。它已经为我工作,可以获得换行符并显示精确的文本:
CSS:
xmp{ white-space:pre-wrap; word-wrap:break-word; }
HTML:
<xmp> your text or code </xmp>
xmp
在生成长串连续项目的一次性任务中表现完美,无论浏览器渲染如何,pre
都会导致从生成的输出中剪切和粘贴时出现严重问题。 - SexxLuthoroverflow:auto
来显示像SO上这样的pre
元素:<pre style="overflow:auto">Loremipsumdolorsitamet,consecteturadipisicingelit,seddoeiusmodtemporincididuntutlaboreetdoloremagnaaliqua.Utenimadminimveniam,quisnostrudexercitationullamcolaborisnisiutaliquipexeacommodoconsequat.Duisauteiruredolorinreprehenderitinvoluptatevelitessecillumdoloreeufugiatnullapariatur.Excepteursintoccaecatcupidatatnonproident,suntinculpaquiofficiadeseruntmollitanimidestlaborum.</pre>
pre
元素仅适用于预格式化文本,如源代码或纯文本文件。因此,您最好添加HTML换行符(br
元素)或甚至段落(p
元素)。文件名:whitespace.prewrap.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lorem Ipsum. Cicero.</title>
<style>
pre {
white-space: pre-wrap; /* Allows for wrapping while preserving whitespace */
}
</style>
</head>
<body>
<h1>Lorem Ipsum. Cicero.</h1>
<pre>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum. Donec in efficitur leo. Maecenas non diam cursus, imperdiet massa eget, pellentesque ipsum. Curabitur ut nibh et quam accumsan tempus at in urna. Sed at eleifend purus.
</pre>
</body>
</html>