¿Cómo puedo forzar una cadena larga sin ningún espacio en blanco para envolverla?

193

Tengo una cadena larga (una secuencia de ADN). No contiene ningún carácter de espacio en blanco.

Por ejemplo:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

¿Cuál sería el selector CSS para forzar que este texto se envuelva en una html:textareao en una xul:textbox?

Pierre
fuente
17
Irónicamente la cadena no se rompe en el desbordamiento de la pila sea ...
splattne

Respuestas:

273

para elementos de bloque:

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

para elementos en línea:

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

heeen
fuente
Solo es compatible con IE, Safari y FF3.1 (alfa).
Adam Bellaire
1
esto funciona solo en una nueva ola de navegadores - vea caniuse.com/#search=word-break
Michal Bernhard
9
@Michael: La respuesta usa la regla de "ajuste de palabra", no la de "salto de palabra"; el primero es compatible como se usa en casi todos los navegadores usados ​​hoy en día. Cuando se indica "soporte parcial", parece que el valor de "palabra de interrupción" para la regla de "ajuste de palabra" sigue siendo viable.
Robusto
2
La propiedad fue renombrada overflow-wrapdesde entonces en los estándares, pero wrod-wrapestá ampliamente implementada.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
También funciona con "display: table-cell", era necesario en mi caso
César León
107

Coloque espacios de ancho cero en los puntos donde desea permitir descansos. El espacio de ancho cero está &#8203;en HTML. Por ejemplo:

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

Remy Blank
fuente
44
Buena sugerencia, he aprendido algo nuevo hoy, ¡gracias!
Matteo Conta
2
Gracias por esta solución Estaba teniendo dificultades para que algo como esto funcionara dentro de una tabla, y esta solución es la única que encontré que funciona en IE, Firefox y Chrome.
Farinha
1
+1, esto funciona mejor ya que cubre más casos, aunque la pregunta era para un caso más particular.
montrealist
2
Alternativamente, podría usar la <wbr>etiqueta, que tiene el mismo propósito de proporcionar una oportunidad opcional de salto de línea.
justisb
77
Observe si hace esto en cosas que podrían copiarse y pegarse.
alex
42

Aquí hay algunas respuestas muy útiles:

¿Cómo evitar que palabras largas rompan mi div?

para ahorrarle tiempo, esto se puede resolver 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;
emik
fuente
44
+1 esto porque menciona el salto de palabra: descanso todo; que funcionó para mí en IE9
Nick Benedict
3
word-break: break-all;fue el único que funcionó en Android WebView para mí.
Stan
Gracias por usted word-break: break-all;!
Lonnie Best
18

Para mí esto funciona

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

También puede usar un div dentro de otro div en lugar de td. Solía overflow:auto, ya que muestra todo el texto tanto en mi navegador Opera como en mi IE.

Rani
fuente
Esto no funcionó para mí. Tengo que mover la propiedad "word-wrap" a div y eliminar la propiedad "overflow". Con estos cambios, funciona.
danigonlinea
12

No creo que puedas hacer esto con CSS. En cambio, a 'longitudes de palabra' regulares a lo largo de la cadena, inserte un guión suave HTML:

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

Esto mostrará un guión al final de la línea, donde se ajusta, lo que puede o no ser lo que desea.

Tenga en cuenta que Safari parece envolver la cadena larga de <textarea>todos modos, a diferencia de Firefox.

Peter Hilton
fuente
Wow, ni siquiera sabía eso. ¡Ordenado!
Daniel Schaffer
Yo tampoco sabía sobre eso. Doble Neat!
Karl
11

Use un método CSS para forzar el ajuste de una cadena que no tenga espacios en blanco. Tres métodos:

1) Use la propiedad de espacio en blanco CSS. Para cubrir las inconsistencias del navegador, debe declararlo de varias maneras. Así que simplemente coloque su cadena muuuuuuuuu en algún elemento de nivel de bloque (por ejemplo, div, pre, p) y dele a ese elemento el siguiente 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) usa el mixin de forzado y envoltura de Compass .

3) También estaba investigando esto y creo que también podría funcionar (pero necesito probar el soporte del navegador más completamente):

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

Referencia: contenido de envoltura

Graeck
fuente
Sí, el # 3 funciona en todos los navegadores modernos e incluso en IE6 + anteriores.
Graeck
1
# 3 solo funciona si hay oportunidades para romper con palabras. Una cadena demasiado larga no se rompe (probado en Chrome 52.0.2743.82).
collapsar el
8

Mi camino a seguir (cuando no hay una forma adecuada de insertar caracteres especiales) a través de 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;

Como se encuentra aquí: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ con algunas investigaciones adicionales que se encuentran allí.

Ben
fuente
5

Para word-wrap:break-word;trabajar para mí, tenía que asegurarme de que displayestaba configurado en block, y que el ancho estaba establecido en el elemento. En Safari, tenía que tener una petiqueta y widthhabía que configurarlo ex.

embestir
fuente
3

Si está utilizando PHP, la función wordwrap funciona bien para esto: http://php.net/manual/en/function.wordwrap.php

La solución CSS word-wrap: break-word; no parece ser coherente en todos los navegadores.

Otros lenguajes del lado del servidor tienen funciones similares, o pueden construirse a mano.

Así es como funciona la función de wordwrap PHP:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

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

Esto envuelve la cadena a 50 caracteres con una etiqueta <br>. El parámetro 'verdadero' obliga a cortar la cadena.

Dave
fuente
Puede mezclar esta solución con la solución de Remy para insertar espacios de ancho cero: wordwrap ($ longtext, 5, "& # 8203;", verdadero);
MV.
3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

fuente
3

Usar <wbr>etiqueta:

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

Creo que esto es mejor que usar un espacio de ancho cero &#8203;que podría causar problemas al copiar el texto.

warvariuc
fuente
2

En un caso donde la tabla no es de tamaño fijo, la siguiente línea funcionó para mí:

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

solo configurar widthy agregar floatfuncionó para mí :-)

width:100%;
float:left;
TechBrush.Org
fuente
Es una respuesta completa y fácil, creo que el tipo que publicó este problema originalmente debería usar ancho: 100%; con flotador: izquierda; en el elemento que contiene esa cadena y su problema se resolverá. entonces, ¿por qué esta respuesta no es relevante?
TechBrush.Org
porque ese tipo que publicó este problema no cree que su solución funcionó hace cinco años.
Pierre
2
Sí, pero este foro no se trata solo de ese tipo, sino también de este foro y otras personas que enfrentan problemas similares como yo hoy también pueden beneficiarse de lo mismo.
TechBrush.Org