Considere el siguiente ejemplo: ( demostración en vivo aquí )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
El resultado es: width = 139
y los puntos suspensivos no aparecen.
¿Que me estoy perdiendo aqui?
width
yheight
en la tabla, las celdas siempre se usan como ancho y alto mínimos . ¡Las celdas de la tabla son diferentes!Respuestas:
Aparentemente, agregando:
resuelve el problema también.
Otra posible solución es establecer
table-layout: fixed;
la tabla, y también establecerlawidth
. Por ejemplo: http://jsfiddle.net/fd3Zx/5/fuente
display: table-cell
(el valor predeterminado para lostd
elementos) no aceptan un ancho.display: block;
tipo de derrotas el propósito de usar una tabla. Me gusta latable-layout: fixed;
opción, funcionó bien para mí.table-layout:fixed
distribuye el ancho de las columnas de una manera menos inteligente. ¿Hay otra opción que asigne el ancho de columna de la misma maneratable-layout: normal
y, sin embargo, muestre los puntos suspensivos correctamente?También es importante poner
En la tabla que contiene, por lo que también funciona bien en IE9 (si utiliza max-width).
fuente
Como se dijo antes, puede usar,
td { display: block; }
pero esto anula el propósito de usar una tabla.Puede usar,
table { table-layout: fixed; }
pero tal vez desee que se comporte de manera diferente para algunas columnas.Entonces, la mejor manera de lograr lo que desea sería envolver su texto en
<div>
ay aplicar su CSS al<div>
(no al<td>
) de esta manera:fuente
Intente usar en
max-width
lugar dewidth
, la tabla seguirá calculando el ancho automáticamente.Funciona incluso en
ie11
(con el modo de compatibilidad ie8).jsfiddle .
fuente
Página de demostración
Para las tablas con ancho dinámico, encontré la siguiente forma de producir resultados satisfactorios. Cada uno
<th>
que desee tener la capacidad de texto recortado debe tener un elemento de ajuste interno que envuelva el contenido del<th>
permisotext-overflow
para trabajar.Esto hará que el ancho del elemento esté "vinculado" al ancho de la ventana gráfica (ventana del navegador) y dará como resultado un recorte de contenido receptivo. Establezca las
vw
unidades a un valor satisfactorio necesario.CSS mínimo:
Aquí hay una demostración ejecutable:
fuente
Solo ofrecí una alternativa porque tenía este problema y ninguna de las otras respuestas aquí tuvo el efecto deseado que quería. Entonces, en cambio, usé una lista. Ahora, semánticamente, la información que estaba enviando podría considerarse tanto datos tabulares como datos listados.
Así que al final lo que hice fue:
Así que básicamente
ul
estable
,li
estr
yspan
estd
.Luego, en CSS, configuro los
span
elementos para que seandisplay:block;
yfloat:left;
(prefiero esa combinacióninline-block
ya que funcionará en versiones anteriores de IE, para borrar el efecto flotante, consulte: http://css-tricks.com/snippets/css/clear- arreglar / ) y también tener las elipses:Luego, todo lo que debe hacer es establecer el
max-widths
intervalo y eso le dará a la lista una apariencia de tabla.fuente
<td><ul>...</ul></td>
)? No parece funcionar para mí :(En lugar de usar puntos suspensivos para resolver el problema de desbordamiento de texto, descubrí que una entrada deshabilitada y con estilo se veía mejor y aún permite al usuario ver y seleccionar toda la cadena si es necesario.
Parece un campo de texto pero se puede resaltar, por lo que es más fácil de usar
fuente
Verifique la
box-sizing
propiedad css de sustd
elementos. Tuve un problema con la plantilla css que lo establece enborder-box
valor. Necesitas conjuntobox-sizing: content-box
.fuente
Deja tus mesas como están. Simplemente envuelva el contenido dentro de los TD con un lapso que tenga aplicado el CSS de truncamiento.
fuente
Si no desea establecer max-width en td (como en esta respuesta ), puede establecer max-width en div:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Nota: 100% no funciona, pero 99% hace el truco en FF. Otros navegadores modernos no necesitan trucos div tontos.
fuente