¿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?


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>


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


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;

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.


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.


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


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í.


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.


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.


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>

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.


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

1

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

width:100%;
float:left;

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.