Come posso forzare una stringa lunga senza alcuno spazio da avvolgere?


194

Ho una lunga corda (una sequenza di DNA). Non contiene caratteri di spazi bianchi.

Per esempio:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Quale sarebbe il selettore CSS per forzare questo testo da racchiudere in un html:textareao in un xul:textbox?


17
Ironia della sorte la stringa non si rompe neanche in Stack Overflow ...
splattne

Risposte:


272

per elementi a blocchi:

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

per elementi in linea:

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


1
È supportato solo in IE, Safari e FF3.1 (alfa).
Adam Bellaire,

1
funziona solo con una nuova ondata di browser - vedi caniuse.com/#search=word-break
Michal Bernhard

9
@Michael: la risposta usa la regola "parola-a capo", non quella "parola-pausa"; il primo è supportato come utilizzato in quasi tutti i browser utilizzati oggi. Laddove viene indicato "supporto parziale", sembra che il valore "break-word" per la regola "a capo automatico" sia ancora praticabile.
Robusto,

2
La proprietà è stata ribattezzata da overflow-wrapallora negli standard, ma wrod-wrapè ampiamente implementata.
Ciro Santilli 20 冠状 病 六四 事件 法轮功

1
Funziona anche con "display: table-cell", nel mio caso era necessario
César León,

107

Posizionare spazi di larghezza zero nei punti in cui si desidera consentire le interruzioni. Lo spazio di larghezza zero è &#8203;in HTML. Per esempio:

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


4
Buon consiglio, ho imparato qualcosa di nuovo oggi, grazie!
Matteo Conta,

2
Grazie per questa soluzione Stavo facendo fatica a far funzionare qualcosa del genere all'interno di un tavolo, e questa soluzione è l'unica che ho trovato funziona su Internet Explorer, Firefox e Chrome.
Farinha,

1
+1, funziona meglio in quanto copre più casi, anche se la domanda era per un caso più particolare.
montrealista

2
In alternativa, è possibile utilizzare il <wbr>tag, che ha lo stesso scopo di fornire un'opportunità di interruzione di riga facoltativa.
justisb,

7
Guarda se lo fai in cose che potrebbero essere copiate e incollate.
alex

42

Ecco alcune risposte molto utili:

Come impedire alle parole lunghe di interrompere il mio div?

per risparmiare tempo, questo può essere risolto con css:

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;

4
+1 questo perché menziona break-word: break-all; che ha funzionato per me in IE9
Nick Benedict l'

3
word-break: break-all;è stato l'unico che ha funzionato in Android WebView per me.
Stan,

Grazie per word-break: break-all;!
Lonnie Best

18

Per me questo funziona,

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

Puoi anche usare un div all'interno di un altro div invece di td. Ho usato overflow:auto, in quanto mostra tutto il testo sia nei miei browser Opera che IE.


Questo non ha funzionato per me. Devo spostare la proprietà "a capo automatico" in div e rimuovere la proprietà "troppo pieno". Con queste modifiche, funziona.
danigonlinea,

12

Non credo che tu possa farlo con i CSS. Invece, a 'lunghezze di parole' regolari lungo la stringa, inserisci un trattino soft HTML:

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

Questo mostrerà un trattino alla fine della linea, dove si avvolge, che può essere o meno quello che vuoi.

Nota Safari sembra avvolgere la lunga stringa in un modo <textarea>, a differenza di Firefox.


Wow, non lo sapevo nemmeno. ! Neat
Daniel Schaffer,

Non lo sapevo neanche io. Doppio pulito!
Karl

11

Utilizzare un metodo CSS per forzare l'avvolgimento di una stringa che non ha spazi bianchi. Tre metodi:

1) Utilizzare la proprietà dello spazio bianco CSS. Per coprire le incoerenze del browser, devi dichiararlo in diversi modi. Quindi inserisci la tua stringa looooong in un elemento a livello di blocco (ad esempio, div, pre, p) e dai a quell'elemento il seguente 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) utilizzare il mixin avvolgente forzato di Compass .

3) Stavo solo esaminando questo e penso che potrebbe anche funzionare (ma ho bisogno di testare il supporto del browser in modo più completo):

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

Riferimento: contenuto a capo


Sì, il n. 3 funziona in tutti i browser moderni e anche in IE6 + precedente.
Prendi il

1
# 3 funziona solo se ci sono opportunità per rompere le parole. Una stringa troppo lunga non si rompe (testato su Chrome 52.0.2743.82).
collapsar

8

La mia strada da percorrere (quando non esiste un modo appropriato per inserire caratteri speciali) tramite 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;

Come trovato qui: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ con alcune ricerche aggiuntive che si possono trovare lì.


5

Per word-wrap:break-word;funzionare per me, ho dovuto assicurarmi che displayfosse impostato su blocke che la larghezza fosse impostata sull'elemento. In Safari, doveva avere un ptag e widthdoveva essere impostato ex.


3

Se stai usando PHP, la funzione wordwrap funziona bene per questo: http://php.net/manual/en/function.wordwrap.php

La soluzione CSS word-wrap: break-word;non sembra essere coerente su tutti i browser.

Altre lingue lato server hanno funzioni simili o possono essere costruite a mano.

Ecco come funziona la funzione di wordwrap PHP:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Questo avvolge la stringa di 50 caratteri con un tag <br>. Il parametro 'true' forza il taglio della stringa.


Puoi mescolare questa soluzione con la soluzione di Remy per inserire spazi di larghezza zero: wordwrap ($ longtext, 5, "& # 8203;", true);
MV.

3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

3

Usa <wbr>tag:

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

Penso che sia meglio che usare uno spazio di larghezza zero &#8203;che potrebbe causare problemi quando copi il testo.


2

Nel caso in cui la tabella non sia di dimensioni fisse, la riga sotto ha funzionato per me:

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

1

solo l'impostazione widthe l'aggiunta ha floatfunzionato per me :-)

width:100%;
float:left;

È una risposta semplice e completa, penso che il ragazzo che ha pubblicato questo problema originariamente dovrebbe usare larghezza: 100%; con galleggiante: a sinistra; sull'elemento che contiene quella stringa e il suo problema verrà risolto. allora perché questa risposta non è rilevante?
TechBrush.Org

perché quel ragazzo che ha pubblicato questo problema non pensa che la tua soluzione abbia funzionato cinque anni fa.
Pierre,

2
Sì, ma questo forum non riguarda solo quel ragazzo, ma riguarda anche questo forum e altre persone che affrontano problemi simili come me oggi possono trarre beneficio dallo stesso.
TechBrush.Org
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.