992 Stimmen

Wie bringe ich Text in einem Pre-Tag unter?

pre Tags sind sehr nützlich für Codeblöcke in HTML und zum Debuggen von Ausgaben beim Schreiben von Skripten, aber wie bringe ich den Text dazu, umzubrechen, anstatt eine lange Zeile auszudrucken?

21voto

ekerner Punkte 5354

Ich schlage vor, das Pre zu vergessen und es einfach in ein Textfeld zu setzen.

Die Einrückung bleibt erhalten, und Ihr Code wird nicht in der Mitte eines Pfades oder ähnlichem umbrochen.

Es ist auch einfacher, einen Textbereich in einem Textbereich auszuwählen, wenn Sie ihn in die Zwischenablage kopieren möchten.

Das Folgende ist ein php-Auszug, wenn Sie also nicht in php arbeiten, wird die Art und Weise, wie Sie die html-Sonderzeichen verpacken, variieren.

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

Informationen zum Kopieren von Text in die Zwischenablage in js finden Sie hier: Wie kann ich in JavaScript in die Zwischenablage kopieren? .

Aber...

Ich habe mir gerade die Stackoverflow-Codeblöcke angesehen und sie sind in einem <code>-Tag verpackt, der in einem <pre>-Tag mit css verpackt ist ...

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;
}

Außerdem wird der Inhalt der Stackoverflow-Codeblöcke syntaktisch hervorgehoben, indem (ich glaube) http://code.google.com/p/google-code-prettify/ .

Es ist eine nette Einrichtung, aber Im nur gehen mit textareas für jetzt.

18 Stimmen

Wäre es nicht semantisch falsch, Textbereiche für etwas anderes als Eingaben zu verwenden? Das scheint mir eine seltsame Lösung zu sein.

3 Stimmen

Nicht so semantisch inkorrekt wie das Hinzufügen einer Reihe von Formatierungsstilen zu einem "pre"-Tag, wenn "pre" darauf hindeutet, dass der enthaltene Text vorformatiert ist und daher keine zusätzliche Formatierung erfordert und eher so zu nehmen ist, wie er ist ;) Ich schlage vor, der "Semantik" nicht den Vorrang vor der "Funktionalität" zu geben.

1 Stimmen

Ich glaube nicht, dass <pre> irgendeine semantische Bedeutung hat (im Gegensatz zu <code> ), bedeutet dies lediglich, dass Zeilenumbrüche und mehrere Leerzeichen beibehalten werden sollen.

21voto

user1433454 Punkte 329

Das ist es, was ich brauchte. Es hielt die Wörter vom Brechen ab und ermöglichte eine dynamische Breite im Vorspannbereich.

word-break: keep-all;

18voto

Bobby Jack Punkte 15195

Sie können entweder:

pre { white-space: normal; }

um die Schriftart Monospace beizubehalten, aber den Zeilenumbruch hinzuzufügen, oder:

pre { overflow: auto; }

die eine feste Größe mit horizontalem Bildlauf für lange Zeilen ermöglicht.

0 Stimmen

Oh, danke für den Hinweis auf den Überlauf! Großartig für mobile Displays.

9voto

FryingggPannn Punkte 362

使用方法 white-space: pre-wrap und Herstellerpräfixe für den automatischen Zeilenumbruch innerhalb pre s.

Nicht verwenden word-wrap: break-word denn dadurch wird ein Wort einfach in zwei Hälften geteilt, was Sie wahrscheinlich nicht wollen.

7voto

Eduardo Campañó Punkte 6770

Versuchen Sie es mit

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

Oder werfen Sie besser CSS.

0 Stimmen

Dieser scheint im IE 7 zu funktionieren, aber nicht im IE 6. Dies ist der einzige Vorschlag, der für den IE vielversprechend schien... alle anderen Vorschläge waren für andere Browser gut...

0 Stimmen

Nevermind muss ein Browser-Caching-Ding gewesen sein. neu gestartet IE 6 und alles ist gut. cheers.

2 Stimmen

Das Problem bei dieser Lösung ist, dass sie auch Zeilenumbrüche auflöst... So geht z.B. jede Trennung des Textes in Absätze verloren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X