¿Cómo envuelvo texto sin espacios en blanco dentro de un <td>?

89

He usado:

word-break:break-all;
table-layout:fixed;

y el texto se ajusta en Chrome pero no en Firefox.

Actualización: decidí cambiar el diseño para que no necesitara la envoltura; intentar solucionar una corrección / pirateo de CSS estaba resultando demasiado frustrante y lento.

FunLovinCoder
fuente

Respuestas:

202

Prueba esto, creo que esto funcionará para algo como "AAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGG" producirá

AARRRRRRRRRRRRRRRRRRRR
RRGGGGGGGGGGGGGGGGGGGG
G

He tomado mi ejemplo de un par de sitios web diferentes en Google. He probado esto en ff 5.0, IE 8.0 y Chrome 10.

.wrapword {
    white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
    white-space: -webkit-pre-wrap;          /* Chrome & Safari */ 
    white-space: -pre-wrap;                 /* Opera 4-6 */
    white-space: -o-pre-wrap;               /* Opera 7 */
    white-space: pre-wrap;                  /* CSS3 */
    word-wrap: break-word;                  /* Internet Explorer 5.5+ */
    word-break: break-all;
    white-space: normal;
}
<table style="table-layout:fixed; width:400px">
    <tr>
        <td class="wrapword">
        </td>
    </tr>
</table>
Stirling
fuente
10
¡¡Ay!! Esto obligará a romper CUALQUIER palabra en puntos arbitrarios incluso cuando no sea necesario. ¿Existe una solución alternativa para que estas palabras de interrupción SOLO cuando sea necesario no exceder el ancho del contenedor? Es decir, para que funcione de la forma en que se supone que funciona "word-wrap: break-wird" en primer lugar si no tiene errores.
matteo
1
@matteo, esta respuesta me funcionó mejor por esa misma razón: stackoverflow.com/a/18706058/234132
dochoffiday
2
El problema de ruptura de fuerza se puede resolver conword-break: break-word;
user1721713
1
Me apunté a desbordamiento de pila sólo para como esto
Falky
24

Utilice CSS3 word-wrap: break-word;. También funciona en navegadores basados ​​en WebKit (Safari, Chrome).

Actualización : Olvidé, el elemento en cuestión debe, sin embargo, estar implícita o explícitamente posicionado como elemento fijo o mostrarse como elemento de bloque. Para las celdas de la tabla ( td), use display: inline-block;.

BalusC
fuente
1
Probé ambos (por separado), pero desafortunadamente arruinaron bastante el formato de la tabla.
FunLovinCoder
Mi mal uso display: inline-block;.
BalusC
13

Aquí hay una versión avanzada de lo que pidió OP.

A veces, lo que sucede es que nuestro cliente quiere que demos '-' después del salto de palabra hasta el final de la línea.

Me gusta

AAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBB

romper a

AAAAAAAAAAAAAAAAAAAAAAA-
BBBBBBBBB

Por lo tanto, hay una nueva propiedad CSS si es compatible, generalmente compatible con los navegadores más recientes.

.dont-break-out {

  /* These are technically the same, but use both */
  overflow-wrap: break-word;
  word-wrap: break-word;

  -ms-word-break: break-all;
  /* This is the dangerous one in WebKit, as it breaks things wherever */
  word-break: break-all;
  /* Instead use this non-standard one: */
  word-break: break-word;

  /* Adds a hyphen where the word breaks, if supported (No Blink) */
  -ms-hyphens: auto;
  -moz-hyphens: auto;
  -webkit-hyphens: auto;
  hyphens: auto;

}

Estoy usando este.

Espero que alguien tenga una demanda como esta.

Rahul
fuente
11

Para un diseño de tabla automático, intente diseñar el td en cuestión combinando los atributos max-width y word-wrap.

P.ej: <td style="max-width:175px; word-wrap:break-word;"> ... </td>

Probado en Firefox 32, Chrome 37 e IE11.

XDM
fuente
No entiendo por qué, pero solo funciona con max-widthy no con width. No obstante, la mejor solución para mí, porque no divide las palabras en puntos arbitrarios.
Raziel
También es molesto que los porcentajes no funcionen
yfeleke hace
4

Puede inyectar manualmente espacios de ancho cero (& # 8203;) para crear puntos de ruptura.

Kingjeffrey
fuente
1
También hay una etiqueta HTML no estándar <wbr>[para "salto de palabra"]. Aquí está el soporte del navegador para esto y la &#8203;solución: quirksmode.org/oddsandends/wbr.html
kingjeffrey
3

Establezca un ancho de columna para la tdetiqueta.

Rana negra
fuente
0

Creo que este es un problema de larga data en Firefox, que se remonta a Mozilla y Netscape. Apuesto a que estaba teniendo problemas con la visualización de URL largas. Creo que es un problema con el motor de renderizado en lugar de algo que se puede solucionar con CSS, sin algunos trucos desagradables.

Tiene sentido cambiar el diseño.

Sin embargo, esto parecía esperanzador: http://hacks.mozilla.org/2009/06/word-wrap/

Dunxd
fuente
0

Estoy usando Angular para mi proyecto y logré resolver esto con un filtro simple:

Modelo:

<td>{{string | wordBreak}}</td>

Filtrar:

app.filter('wordBreak', function() {
    return function(string) {
        return string.replace(/(.{1})/g, '$1​');
    }
})

No puede verlo, pero después $1hay un espacio invisible (gracias @kingjeffrey por la sugerencia), que habilitó los saltos de palabras para las celdas de la tabla.

Jeffrey Roosendaal
fuente
-1

Una forma ligeramente pirateada de hacer esto es procesando el texto para agregar espacio entre cada letra. Reemplace los espacios con &nbsp;Luego use el atributo css de espaciado de letras para reducir los espacios.

Lo sé, es un truco ... pero si NADA más funciona, debería ajustarse sin problemas.

Armstrongest
fuente
2
Es tan hacky, tan interrumpir la indexación correcta y tan difícil de implementar que no debería ser una respuesta en absoluto :-)
Cápsula