preタグでテキストをラップするにはどうすればよいですか?


720

pre タグは、HTMLのコードブロックやスクリプトの作成中の出力のデバッグに非常に役立ちますが、1行の長い行を出力する代わりに、テキストをワードラップする方法を教えてください。

回答:


1009

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;(およびすべてのブラウザー互換フレーバー)は、行の先頭のスペースを
取り除い

5
@MediaVince、pre-line(行の最初だけでなく)すべての空白を折りたたみます。 developer.mozilla.org/en-US/docs/Web/CSS/white-spaceには、white-space値の動作をまとめた表があります。
Paul

1
word-wrap: break-word質問が求めていることを行わず、単語間でも行の折り返しが発生します。その行を削除できます。最新のブラウザでは、-mozまたはその他の接頭辞は必要ありません。
Flimm 2017年


60

preタグをスキップして空白を使用する:divのpre-wrapがより良い解決策であることがわかりました。

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

3
一般的な回答よりも簡単です。ありがとう!
リッキー

4
私の場合、テーブルを構成するためのタブを含む、事前にフォーマットされたテキストを表示したいと思いました。私はあなたのソリューションを使用し、すべての列が揃うようにmonspaceフォントを追加しました:style="white-space: pre-wrap; font-family:monospace;"
Jan

1
これの方が簡単かもしれませんが、<pre>コードブロックに使用する方が意味的な価値があるかもしれません。
Angelos Chalaris

2
私はこのゲームに遅れていることを知っていますが、このソリューションがスタイルシートで一度設定するよりも優れているのはなぜですか?これを必要とする1つのHTML出力画面に複数のdivがあります。スタイルシートの要素を1つ修正するだけですべての問題が修正されるようです。
webfrogs

1
@webfrogsはい、.prewrapクラスを作成するのが最善です。
Mason240 2018

36

最も簡潔に言うと、これによりコンテンツは単語を壊さずに「pre」タグの内側にラップされます。乾杯!

pre {
  white-space: pre-wrap;
  word-break: keep-all
}

こちらのライブ例をご覧ください


20

これが私が必要としたものです。それは単語が壊れないようにしましたが、前領域で動的な幅を許可しました。

word-break: keep-all;

17

私はプリを忘れて、それをテキストエリアに置くことをお勧めします。

インデントはそのまま残り、コードはパスまたは何かの途中でワードラップされません。

クリップボードにコピーする場合は、テキスト領域でテキスト範囲を選択するのも簡単です。

以下はphpの抜粋なので、phpを使用していない場合は、htmlの特殊文字をパックする方法が異なります。

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

jsでクリップボードにテキストをコピーする方法については、JavaScriptでクリップボードにコピーする方法を参照してください

しかしながら...

私は単にstackoverflowコードブロックを調べて、それらがcssで<pre>タグでラップされた<code>タグでラップしています...

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ページを紹介し
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

nevermindは、ブラウザのキャッシングであったに違いありません。IE 6を再起動し、すべてが順調です。乾杯。
topwik 2010

2
このソリューションの問題は、改行文字も溶解することです...たとえば、テキストの段落への分離は失われます。
クリスW.

4

white-space: pre-wrap内でpreの自動改行に使用するいくつかの接頭辞。

word-wrap: break-wordもちろんこれは単語を半分にするので使用しないでください。これはおそらくあなたが望まないものです。


3

Best Cross Browser Wayは、改行を取得して正確なコードまたはテキストを表示するために私に役立ちました(chrome、インターネットエクスプローラー、Firefox)

CSS:

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

HTML:

<xmp> your text or code </xmp>

私にとっては
うまくいった

7
xmpはHTML 3.2から非推奨になり、HTML5から完全に削除されており、当初は適切に機能していませんでした。さまざまなブラウザ間で一貫して実装されていませんでした。
PeterToTheThird

空白の使用:プリラップ。ワードラップ:ブレークワード。私のCSSでは、(json)スニペットのインデントを保持し、前の行でこれを削除します (Chrome)
Peter Visser 2017


-1

<pre>-elementは、「プリフォーマットされたテキスト」の略で、そのタグの間のテキスト(または何でも)の書式設定を維持することを意図しています。したがって、実際に中に自動ワードラップや改行を持ってintededされていません<pre>-Tag

要素内のテキストは固定幅フォント(通常はCourier)で表示され、スペースと改行の両方が保持されます

出典:w3schools.com、自分で作成したものに重点を置いています。


これは、プリタグの自動折り返しの意図ではありませんが、プレタグ内のテキストを自動折り返すことが可能であることを示しています。
rob_st 2018

これが著者の質問に対する唯一の正しい回答です。その他の答えや可能な「解決策」は、<pre>要素の誤用を助長します。基本的に、<pre>要素内にタイプを入れて折り返す場合は、代わりに<p>タグを使用して、CSSクラスで好きなようにスタイルを設定します。
マーカス

この種の「私はあなたより賢い」というアドバイスをすることが人々に役立つと思う理由がわかりません。いいえ、<p>タグは適切な置き換えではありません。空白や改行は保持されません。<pre>タグは改行を保持するのに役立ちますが、コードエディターが改行を保持し、長い行に折り返しを追加する場合と同じように、折り返しを追加する必要がある場合があります。
dwk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.