Quiero usar CSS text-overflow
en una celda de la tabla, de modo que si el texto es demasiado largo para caber en una línea, se recortará con puntos suspensivos en lugar de ajustarse a varias líneas. es posible?
Intenté esto:
td {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Pero white-space: nowrap
parece que el texto (y su celda) se expande continuamente hacia la derecha, empujando el ancho total de la tabla más allá del ancho de su contenedor. Sin él, sin embargo, el texto continúa ajustando varias líneas cuando llega al borde de la celda.
overflow
bien. Intenta poner un div en la celda y diseñar ese div.Respuestas:
Para recortar texto con puntos suspensivos cuando desborda una celda de la tabla, deberá establecer la
max-width
propiedad CSS en cadatd
clase para que funcione el desbordamiento. No se requieren divisiones de diseño adicionalesPara diseños receptivos; use la
max-width
propiedad CSS para especificar el ancho mínimo efectivo de la columna, o simplemente usemax-width: 0;
para una flexibilidad ilimitada. Además, la tabla que contiene necesitará un ancho específico, por lo generalwidth: 100%;
, y las columnas tendrán su ancho establecido como porcentaje del ancho totalHistórico: para IE 9 (o menos) necesita tener esto en su HTML, para solucionar un problema de representación específico de IE
fuente
width: 100%;
ymin-width: 1px;
la celda siempre será lo más ancha posible y solo usará puntos suspensivos para truncar el texto cuando sea necesario (no cuando el ancho del elemento alcance un cierto tamaño), esto es muy útil para diseños receptivos.display: table-cell
hecho, pero no cuandomax-width
se define en porcentaje (%). Probado en FF 32table-layout: fixed
el elemento condisplay: table
hará el trucoEspecificar un
max-width
ancho fijo o no funciona para todas las situaciones, y la tabla debe ser fluida y espaciar automáticamente sus celdas. Para eso están las mesas.Use esto: http://jsfiddle.net/maruxa1j/
HTML:
CSS:
Funciona en IE9 y otros navegadores.
fuente
<span>
elementos.display: block
no lo hizo¿ Por qué sucede esto?
Parece que esta sección en w3.org sugiere que el desbordamiento de texto solo se aplica a elementos de bloque :
El MDN dice lo mismo .
Este jsfiddle tiene su código (con algunas modificaciones de depuración), que funciona bien si se aplica a un en
div
lugar de atd
. También tiene la única solución alternativa en la que pude pensar rápidamente, envolviendo el contenido deltd
en undiv
bloque contenedor . Sin embargo, eso me parece un marcado "feo", así que espero que alguien más tenga una mejor solución. El código para probar esto se ve así:fuente
En caso de que no desee establecer el ancho fijo en nada
La solución a continuación le permite tener un contenido de celda de tabla que es largo, pero no debe afectar el ancho de la tabla principal ni la altura de la fila principal. Por ejemplo, donde desea tener una tabla
width:100%
que todavía aplique la función de tamaño automático a todas las demás celdas. Útil en cuadrículas de datos con la columna "Notas" o "Comentario" o algo así.Agregue estas 3 reglas a su CSS:
Formatee HTML como este en cualquier celda de la tabla que desee desbordamiento de texto dinámico:
Además, aplique el deseado
min-width
(o ninguno) a la celda de la tabla.Por supuesto, el violín: https://jsfiddle.net/9wycg99v/23/
fuente
max-width: X
, ahora pueden ser más anchas. Pensé que esto se debe a que sedisplay: flex
está utilizando, pero loParece que si especificas
table-layout: fixed;
en eltable
elemento, entonces tus estilostd
deberían tener efecto. Sin embargo, esto también afectará el tamaño de las celdas.Sitepoint analiza un poco los métodos de diseño de tabla aquí: http://reference.sitepoint.com/css/tableformatting
fuente
Si solo desea que la tabla se diseñe automáticamente
Sin usar
max-width
, o anchos de columna de porcentaje, otable-layout: fixed
etc.https://jsfiddle.net/tturadqq/
Cómo funciona:
Paso 1: solo deja que el diseño automático de la tabla haga lo suyo.
Cuando hay una o más columnas con mucho texto, reducirá las otras columnas tanto como sea posible, luego envolverá el texto de las columnas largas:
Paso 2: Envuelva el contenido de la celda en un div, luego configure ese div en
max-height: 1.1em
(el 0.1em adicional es para caracteres que se muestran un poco por debajo de la base de texto, como la cola de 'g' y 'y')
Paso 3: Establecer
title
en los divsEsto es bueno para la accesibilidad, y es necesario para el pequeño truco que usaremos en un momento.
Paso 4: agregue un CSS
::after
en el divEsta es la parte difícil. Establecemos un CSS
::after
, concontent: attr(title)
, luego lo colocamos encima del div y establecemostext-overflow: ellipsis
. Lo he coloreado de rojo aquí para que quede claro.(Observe cómo la columna larga ahora tiene puntos suspensivos)
Paso 5: establece el color del texto div en
transparent
¡Y hemos terminado!
fuente
<a>
lugar de<div>
dentro de la celda de la tabla. Agregarword-break: break-all;
resuelve el problema. Ejemplo: jsfiddle.net/de0bjmqvCuando está en porcentaje de ancho de tabla, o no puede establecer un ancho fijo en la celda de la tabla. Puedes aplicar
table-layout: fixed;
para que funcione.fuente
Envuelva el contenido de la celda en un bloque flexible. Como beneficio adicional, la celda se ajusta automáticamente al ancho visible.
fuente
white-space: nowrap;
a lachild
clase.Resolví esto usando un div absolutamente posicionado dentro de la celda (relativo).
Eso es. Luego puede agregar un valor top: al div o centrarlo verticalmente:
Para obtener algo de espacio en el lado derecho, puede reducir un poco el ancho máximo.
fuente
Esto funcionó en mi caso, tanto en Firefox como en Chrome:
fuente
Esta es la versión que funciona en IE 9.
http://jsfiddle.net/s27gf2n8/
fuente