Wie kann ich erzwingen, dass eine lange Zeichenfolge ohne Leerzeichen umwickelt wird?

193

Ich habe einen langen String (eine DNA-Sequenz). Es enthält kein Leerzeichen.

Beispielsweise:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Was wäre der CSS-Selektor, um zu erzwingen, dass dieser Text in a html:textareaoder in a eingeschlossen wird xul:textbox?

Pierre
quelle
17
Ironischerweise reißt die Saite auch nicht im
Stapelüberlauf

Antworten:

273

für Blockelemente:

<textarea style="width:100px; word-wrap:break-word;">
  ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</textarea>

für Inline-Elemente:

<span style="width:100px; word-wrap:break-word; display:inline-block;"> 
   ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</span>

heeen
quelle
Es wird nur in IE, Safari und FF3.1 (Alpha) unterstützt.
Adam Bellaire
1
Dies funktioniert nur in einer neuen Welle von Browsern - siehe caniuse.com/#search=word-break
Michal Bernhard
9
@Michael: Die Antwort verwendet die "Zeilenumbruch" -Regel, nicht die "Wortumbruch" -Regel. Ersteres wird in fast allen heute verwendeten Browsern unterstützt . Wenn "teilweise Unterstützung" angegeben ist, scheint es, dass der "Wortbruch" -Wert für die "Zeilenumbruch" -Regel noch realisierbar ist.
Robusto
2
Die Immobilie wurde overflow-wrapseitdem in den Standards umbenannt, ist aber wrod-wrapweit verbreitet.
Ciro Santilli 法轮功 冠状 病 六四 事件 20
1
Funktioniert auch mit "display: table-cell", war in meinem Fall notwendig
César León
107

Platzieren Sie Leerzeichen mit der Breite Null an den Stellen, an denen Sie Unterbrechungen zulassen möchten. Der Raum mit der Breite Null ist &#8203;in HTML. Beispielsweise:

ACTGATCG&#8203;AGCTGAAG&#8203;CGCAGTGC&#8203;GATGCTTC&#8203;GATGATGC

Remy Blank
quelle
4
Guter Vorschlag, ich habe heute etwas Neues gelernt, danke!
Matteo Conta
2
Danke für diese Lösung. Es fiel mir schwer, so etwas in einer Tabelle zum Laufen zu bringen, und diese Lösung ist die einzige, die ich in IE, Firefox und Chrome gefunden habe.
Farinha
1
+1, dies funktioniert besser, da es mehr Fälle abdeckt, obwohl die Frage für einen bestimmten Fall war.
Montrealist
2
Alternativ können Sie das <wbr>Tag verwenden, das dem gleichen Zweck dient, eine optionale Zeilenumbruchmöglichkeit bereitzustellen.
Justisb
7
Beobachten Sie, ob Sie dies in Dingen tun, die möglicherweise kopiert und eingefügt werden.
Alex
42

Hier sind einige sehr nützliche Antworten:

Wie kann ich verhindern, dass lange Wörter mein Div brechen?

Um Ihnen Zeit zu sparen, kann dies mit CSS gelöst werden:

white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP printers */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
word-break: break-all;
emik
quelle
4
+1 dies, weil es Wortunterbrechung erwähnt: break-all; was für mich in IE9 funktioniert hat
Nick Benedict
3
word-break: break-all;war der einzige, der in Android WebView für mich funktioniert hat.
Stan
Danke für word-break: break-all;!
Lonnie Best
18

Für mich funktioniert das,

<td width="170px" style="word-wrap:break-word;">
  <div style="width:140px;overflow:auto">
    LONGTEXTGOESHERELONGDIVGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESHERELONGDIVLONGTEXTLONGTEXT
  </div>
</td>

Sie können auch ein div in einem anderen div anstelle von verwenden td. Ich habe verwendet overflow:auto, da es den gesamten Text sowohl in meinem Opera- als auch in meinem IE-Browser anzeigt.

Rani
quelle
Das hat bei mir nicht funktioniert. Ich muss die Eigenschaft "Zeilenumbruch" in div verschieben und die Eigenschaft "Überlauf" entfernen. Mit diesen Änderungen funktioniert.
Danigonlinea
12

Ich glaube nicht, dass Sie dies mit CSS tun können. Fügen Sie stattdessen bei regulären Wortlängen entlang der Zeichenfolge einen HTML-Bindestrich ein:

ACTGATCG&shy;AGCTGAAG&shy;CGCAGTGC&shy;GATGCTTC&shy;GATGATGC&shy;TGACGATG

Daraufhin wird am Ende der Zeile ein Bindestrich angezeigt, der umbrochen wird und möglicherweise Ihren Wünschen entspricht oder nicht.

Hinweis Im <textarea>Gegensatz zu Firefox scheint Safari die lange Zeichenfolge ohnehin in eine zu wickeln .

Peter Hilton
quelle
Wow, wusste nicht mal davon. Ordentlich!
Daniel Schaffer
Das wusste ich auch nicht. Doppelt ordentlich!
Karl
11

Verwenden Sie eine CSS-Methode, um das Umbrechen einer Zeichenfolge ohne Leerzeichen zu erzwingen. Drei Methoden:

1) Verwenden Sie die CSS-Leerraum-Eigenschaft. Um Browser-Inkonsistenzen abzudecken, müssen Sie dies auf verschiedene Arten deklarieren. Fügen Sie also einfach Ihre lange Zeichenfolge in ein Element auf Blockebene ein (z. B. div, pre, p) und geben Sie diesem Element das folgende CSS:

some_block_level_tag {
    white-space: pre;           /* CSS 2.0 */
    white-space: pre-wrap;      /* CSS 2.1 */
    white-space: pre-line;      /* CSS 3.0 */
    white-space: -pre-wrap;     /* Opera 4-6 */
    white-space: -o-pre-wrap;   /* Opera 7 */
    white-space: -moz-pre-wrap; /* Mozilla */
    white-space: -hp-pre-wrap;  /* HP Printers */
    word-wrap: break-word;      /* IE 5+ */
}

2) Verwenden Sie das Force-Wrap-Mixin von Compass .

3) Ich habe mich auch nur damit befasst und denke, dass es auch funktionieren könnte (aber ich muss die Browserunterstützung vollständiger testen):

.break-me {
    word-wrap: break-word;
    overflow-wrap: break-word;
}

Referenz: Inhalt umbrechen

Graeck
quelle
Ja, die Nummer 3 dort funktioniert in allen modernen Browsern und sogar in älteren IE6 +.
Graeck
1
# 3 funktioniert nur, wenn es Möglichkeiten gibt, mit Worten zu brechen. Eine zu lange Zeichenfolge wird nicht unterbrochen (getestet in Chrome 52.0.2743.82).
Kollapsar
8

Mein Weg (wenn es keinen geeigneten Weg gibt, Sonderzeichen einzufügen) über CSS:

-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;

Wie hier zu finden: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ mit einigen zusätzlichen Recherchen, die dort zu finden sind.

Ben
quelle
5

Um word-wrap:break-word;für mich arbeiten zu können, musste ich sicherstellen, dass das displayauf eingestellt blockwar und dass die Breite für das Element eingestellt war. In Safari musste es ein pTag haben und das widthmusste gesetzt werden ex.

innerurge
quelle
3

Wenn Sie PHP verwenden, funktioniert die Wordwrap-Funktion gut dafür: http://php.net/manual/en/function.wordwrap.php

Die CSS-Lösung word-wrap: break-word;scheint nicht in allen Browsern konsistent zu sein.

Andere serverseitige Sprachen haben ähnliche Funktionen - oder können von Hand erstellt werden.

So funktioniert die PHP-Zeilenumbruchfunktion:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

$wrappedstring = wordwrap($string,50,"&lt;br&gt;",true);

Dies umschließt die Zeichenfolge mit 50 Zeichen mit einem <br> -Tag. Der Parameter 'true' erzwingt das Schneiden der Zeichenfolge.

Dave
quelle
Sie können diese Lösung mit Remys Lösung mischen, um Leerzeichen mit der Breite Null einzufügen: Zeilenumbruch ($ longtext, 5, "& # 8203;", true);
MV.
3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

quelle
3

Verwenden <wbr>tag:

ACTGATCG<wbr>AGCTGAAG<wbr>CGCAGTGC<wbr>GATGCTTC<wbr>GATGATGC

Ich denke, dies ist besser als die Verwendung von Leerzeichen mit einer Breite von Null, &#8203;was beim Kopieren des Textes zu Problemen führen kann.

warvariuc
quelle
2

In einem Fall, in dem die Tabelle keine feste Größe hat, hat die folgende Zeile für mich funktioniert:

style="width:110px; word-break: break-all;"
Rakpan
quelle
1

Nur das Setzen widthund Hinzufügen floathat bei mir funktioniert :-)

width:100%;
float:left;
TechBrush.Org
quelle
Es ist eine vollständige und einfache Antwort. Ich denke, dass der Typ, der dieses Problem ursprünglich gepostet hat, die Breite verwenden sollte: 100%; mit Schwimmer: links; Ein Element, das diese Zeichenfolge und sein Problem enthält, wird behoben. Warum ist diese Antwort dann nicht relevant?
TechBrush.Org
weil der Typ, der dieses Problem gepostet hat, nicht glaubt, dass Ihre Lösung vor fünf Jahren funktioniert hat.
Pierre
2
Ja, aber in diesem Forum geht es nicht nur um diesen Typen, sondern auch um dieses Forum, und andere Leute, die mit ähnlichen Problemen wie ich heute konfrontiert sind, können ebenfalls davon profitieren.
TechBrush.Org