Conoce a Fred El es una mesa:
<table border="1" style="width: 100%;">
<tr>
<td>This cells has more content</td>
<td>Less content here</td>
</tr>
</table>
El departamento de Fred tiene la extraña costumbre de cambiar de tamaño, por lo que aprendió a ocultar parte de su contenido para no empujar a todas las demás unidades y empujar la sala de estar de la Sra. Whitford al olvido:
<table border="1" style="width: 100%; white-space: nowrap; table-layout: fixed;">
<tr>
<td style="overflow: hidden; text-overflow: ellipsis">This cells has more content</td>
<td style="overflow: hidden; text-overflow: ellipsis">Less content here</td>
</tr>
</table>
Esto funciona, pero Fred tiene la persistente sensación de que si su celda derecha (a la que ha apodado Celldito) cede un poco de espacio, su celda izquierda no se truncará la mayor parte del tiempo. ¿Puedes salvar su cordura?
En resumen: ¿cómo pueden desbordarse las celdas de una tabla de manera uniforme, y solo cuando han renunciado a todo su espacio en blanco?
html
css
overflow
tablelayout
s4y
fuente
fuente
Respuestas:
http://jsfiddle.net/7CURQ/
fuente
<col>
s en lugar de anteponer los anchos a los<td>
estilos: jsfiddle.net/7CURQ/64¡Creo que tengo una solución que no es JavaScript! Mejor tarde que nunca, ¿cierto? Después de todo, esta es una excelente pregunta y Google está por todas partes. No quería conformarme con una solución de JavaScript porque encuentro que la leve fluctuación de las cosas que se mueven después de cargar la página es inaceptable.
Caracteristicas :
Cómo funciona : dentro de la celda de la tabla, coloque dos copias del contenido en dos elementos diferentes dentro de un elemento contenedor relativamente posicionado. El elemento espaciador está posicionado estáticamente y, como tal, afectará el ancho de las celdas de la tabla. Al permitir que el contenido de la celda espaciadora se ajuste, podemos obtener el ancho de "mejor ajuste" de las celdas de la tabla que estamos buscando. Esto también nos permite usar el elemento en posición absoluta para restringir el ancho del contenido visible al del padre relativamente posicionado.
Probado y trabajando en: IE8, IE9, IE10, Chrome, Firefox, Safari, Opera
Imágenes del resultado :
JSFiddle : http://jsfiddle.net/zAeA2/
Ejemplo de HTML / CSS :
fuente
title
lugar dedata-spacer
obtener información sobre herramientas al pasar el mouse sobre :)Me he enfrentado al mismo desafío hace unos días. Parece que Lucifer Sam encontró la mejor solución.
Pero noté que debería duplicar el contenido en el elemento espaciador. Pensé que no era tan malo, pero también me gustaría aplicar una
title
ventana emergente para el texto recortado. Y significa que el texto largo aparecerá por tercera vez en mi código.Aquí propongo acceder al
title
atributo del:after
pseudo-elemento para generar un espaciador y mantener limpio el HTML.Funciona en IE8 +, FF, Chrome, Safari, Opera
http://jsfiddle.net/feesler/HQU5J/
fuente
Si Javascript es aceptable, preparé una rutina rápida que podría usar como punto de partida. Intenta dinámicamente adaptar el ancho de las celdas utilizando el ancho interno de un tramo, en reacción a los eventos de cambio de tamaño de la ventana.
Actualmente se supone que cada celda normalmente obtiene el 50% del ancho de la fila, y colapsará la celda derecha para mantener la celda izquierda en su ancho máximo para evitar el desbordamiento. Podría implementar una lógica de equilibrio de ancho mucho más compleja, dependiendo de sus casos de uso. Espero que esto ayude:
Marcado para la fila que utilicé para probar:
JQuery que conecta el evento de cambio de tamaño:
fuente
Hay una solución mucho más fácil y más elegante.
Dentro de la celda de la tabla a la que desea aplicar el truncamiento, simplemente incluya un contenedor div con css table-layout: fixed. Este contenedor ocupa todo el ancho de la celda de la tabla principal, por lo que incluso actúa de manera receptiva.
Asegúrese de aplicar el truncamiento a los elementos en la tabla.
Funciona desde IE8 +
y css:
aquí hay un Fiddle que funciona https://jsfiddle.net/d0xhz8tb/
fuente
El problema es el 'diseño de tabla: fijo' que crea columnas de ancho fijo y espaciado uniformemente. Pero deshabilitar esta propiedad css matará el desbordamiento de texto porque la tabla se volverá lo más grande posible (y luego se notará que se desborda).
Lo siento, pero en este caso Fred no puede tener su pastel y comérselo ... a menos que el propietario le dé a Celldito menos espacio para trabajar, Fred no puede usar el suyo ...
fuente
Podrías intentar "ponderar" ciertas columnas, como esta:
También puede probar algunos ajustes más interesantes, como usar columnas de 0% de ancho y usar alguna combinación de la
white-space
propiedad CSS.Tienes la idea.
fuente
Sí, diría que thirtydot lo tiene, no hay forma de hacerlo a menos que use un método js. Estás hablando de un conjunto complejo de condiciones de representación que tendrás que definir. Por ejemplo, qué sucede cuando ambas celdas se están volviendo demasiado grandes para sus apartamentos, tendrá que decidir quién tiene prioridad o simplemente darles un porcentaje del área y si están demasiado ocupados, ambos ocuparán esa área y solo si uno tiene un espacio en blanco. estira las piernas en la otra celda, de cualquier manera no hay forma de hacerlo con css. Aunque hay algunas cosas bastante funky que la gente hace con CSS que no he pensado. Aunque realmente dudo que puedas hacer esto.
fuente
Al igual que la respuesta samplebias, una vez más, si Javascript es una respuesta aceptable, hice un complemento jQuery específicamente para este propósito: https://github.com/marcogrcr/jquery-tableoverflow
Para usar el complemento simplemente escriba
Ejemplo completo: http://jsfiddle.net/Cw7TD/3/embedded/result/
Ediciones:
fuente
Use algún truco css, parece que
display: table-column;
puede venir a rescatarlo:JSFiddle: http://jsfiddle.net/blai/7u59asyp/
fuente
Simplemente agregue las siguientes reglas a su
td
:Ejemplo:
PD: si desea establecer un ancho personalizado para otra
td
propiedad de usomin-width
.fuente
Esta pregunta aparece en Google, así que en mi caso, utilicé el fragmento css de https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ pero aplicarlo al td NO dio El resultado deseado.
Tuve que agregar una etiqueta div alrededor del texto en el td y los puntos suspensivos finalmente funcionaron.
Código HTML abreviado;
CSS abreviado;
fuente
Compruebe si "nowrap" resuelve el problema hasta cierto punto. Nota: nowrap no es compatible con HTML5
fuente
white-space: nowrap
tiene el mismo efecto que elnowrap
atributo (y lo estoy usando en el ejemplo). Agregarlo aquí no cambia nada, por lo que puedo decir.puede establecer el ancho de la celda derecha al mínimo del ancho requerido, luego aplicar overflow-hidden + text-overflow al interior de la celda izquierda, pero Firefox tiene errores aquí ...
aunque, parece, flexbox puede ayudar
fuente
He estado trabajando recientemente en eso. Echa un vistazo a esta prueba jsFiddle , pruébalo tú mismo cambiando el ancho de la tabla base para verificar el comportamiento).
La solución es incrustar una tabla en otra:
¿Fred ahora está contento con la expansión de Celldito?
fuente
No sé si esto ayudará a alguien, pero resolví un problema similar especificando tamaños de ancho específicos en porcentaje para cada columna. Obviamente, esto funcionaría mejor si cada columna tiene contenido con un ancho que no varía demasiado.
fuente
Tuve el mismo problema, pero necesitaba mostrar varias líneas (donde
text-overflow: ellipsis;
falla). Lo resuelvo usando untextarea
interior ayTD
luego lo estilizo para que se comporte como una celda de tabla.fuente
Dado que 'table-layout: fixed' es el requisito de diseño esencial, que esto crea columnas no ajustables espaciadas uniformemente, pero que necesita hacer celdas de diferentes porcentajes de ancho, ¿tal vez establecer el 'colspan' de sus celdas en un múltiplo?
Por ejemplo, usando un ancho total de 100 para cálculos de porcentajes fáciles y diciendo que necesita una celda del 80% y otra del 20%, considere:
Por supuesto, para columnas de 80% y 20%, puede establecer el colspan de celda de ancho del 100% en 5, el 80% en 4 y el 20% en 1.
fuente
td
s?