Cómo evitar que el texto en una celda de tabla se ajuste

285

¿Alguien sabe cómo puedo evitar que el texto en una celda de la tabla se ajuste? Esto es para el encabezado de una tabla, y el encabezado es mucho más largo que los datos debajo de él, pero necesito que se muestre en una sola línea. Está bien si la columna es muy ancha.

El HTML de mi tabla (simplificada) se ve así:

<table>
  <thead>
    <tr>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
    </tr>
  </tbody>
</table>

El título en sí está envuelto en un div dentro del th etiqueta por razones relacionadas con el JavaScript en la página.

La tabla está saliendo con los encabezados envolviendo varias líneas. Esto parece suceder solo cuando la tabla es lo suficientemente ancha, ya que el navegador está tratando de evitar el desplazamiento horizontal. En mi caso, sin embargo, quiero desplazamiento horizontal.

¿Algunas ideas?

pkaeding
fuente

Respuestas:

485

Echa un vistazo a la white-spacepropiedad, usada así:

th {
    white-space: nowrap;
}

Esto obligará a que el contenido se <th>muestre en una línea.

Desde la página vinculada, aquí están las diferentes opciones para white-space:

normal
Este valor dirige a los agentes del usuario a colapsar secuencias de espacios en blanco y romper líneas según sea necesario para llenar cuadros de líneas.

pre
Este valor evita que los agentes del usuario colapsen secuencias de espacio en blanco. Las líneas solo se rompen en los caracteres de línea nueva conservados.

nowrap
Este valor contrae el espacio en blanco como 'normal', pero suprime los saltos de línea dentro del texto.

pre-wrap
Este valor evita que los agentes del usuario colapsen secuencias de espacio en blanco. Las líneas se dividen en los caracteres de línea nueva conservados y, según sea necesario, para llenar los cuadros de línea.

línea previa
Este valor dirige a los agentes de usuario a colapsar secuencias de espacio en blanco. Las líneas se dividen en los caracteres de línea nueva conservados y, según sea necesario, para llenar los cuadros de línea.

Owen
fuente
8
no funciona para el campo de entrada y el botón en la misma celda. lugares al azar a continuación.
Doomsknight
16
Tableelemento debe tener table-layout:fixed;para que esto funcione.
daniloquio
@Doomsknight ¿Encontraste una manera de lograrlo con un campo de entrada y otro elemento en la misma celda?
loveNoHate
espacio en blanco: pre; era lo que necesitaba ya que -28.04 estaba envuelto entre el - y el 28.04
Brent
1
@Doomsknight Tuve el mismo problema con una casilla de verificación y lo resolví actualizando el CSS coninput { display: inline; }
Programster
66
<th nowrap="nowrap">

o

<th style="white-space:nowrap;">

o

<th class="nowrap">
<style type="text/css">
.nowrap { white-space: nowrap; }
</style>
Grant Wagner
fuente
66
Tenga en cuenta que nowrapha quedado en desuso. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Use hojas de estilo en su lugar.
wisbucky
Nota. Si se usa descuidadamente, este atributo puede dar como resultado celdas excesivamente anchas.
ArifMustafa
1
@wisbucky ¿Cómo se "usan hojas de estilo"?
rogerdpack
22

Hay al menos dos formas de hacerlo:

Use el atributo nowrap dentro de la etiqueta "td":

<th nowrap="nowrap">Really long column heading</th>

Use espacios no rompibles entre sus palabras:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Sergey Golovchenko
fuente
66
Tenga en cuenta que nowrapha quedado en desuso. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Use hojas de estilo en su lugar.
wisbucky
6

Llegué a esta pregunta con la necesidad de evitar el ajuste de texto en el guión.

Así es como lo hice:

<td><nobr>Table Text</nobr></td>

Referencia:

Cómo evitar el salto de línea en guiones en todos los navegadores

cssyphus
fuente
Vale la pena señalar que la nobretiqueta no es estándar, como se señala en la respuesta aceptada vinculada en esta respuesta: stackoverflow.com/a/8755071/4257
pkaeding
Muy bien. Tu punto es bien recibido. Leí todos esos comentarios, noté la experiencia de los comentaristas correspondientes e hice una llamada de juicio. El guión es un poco complicado. (Nota: la pregunta que ha vinculado en su comentario es la misma que he vinculado en mi respuesta)
cssyphus
Sí, estaba destinado a ser la misma pregunta. Solo quería asegurarme de que la advertencia se publicara aquí en caso de que alguien encontrara esta respuesta en el futuro, y no se molestara en leer la referencia vinculada.
pkaeding
1

Para Usar con React / Material UI

En caso de que se pregunte cómo funciona esto para la interfaz de usuario de material al construir en React, así es como agrega esto a su <TableHead>componente:

<TableHead style={{ whiteSpace: 'nowrap'}}>
Davis Jones
fuente