2012-05-31 28 views
7

Quiero una tabla que sea 100% si la página puede contener cualquier cantidad de columnas, creadas dinámicamente. Cada columna puede contener palabras muy largas, por lo que es posible que no todas quepan en una página. Para solucionar esto, utilicé table-layout: fixed, lo que hizo visibles todas las columnas de la tabla en la página. El problema es que todavía quiero que el ancho de cada columna sea dinámico, de modo que si una columna tiene palabras cortas, debería ser más corta que la que tiene la palabra larga.Tabla con columnas dinámicas pero diseño fijo

Ejemplo: jsfiddle.

La Tabla 1 muestra siempre todas las columnas, pero cuando la página es lo suficientemente ancha, rompe la palabra aunque haya espacio libre en otras columnas.

La tabla 2 funciona bien cuando la página es más ancha que las columnas pero la primera columna empuja las otras columnas fuera de la pantalla/a otros objetos cuando la ventana es más pequeña.

¿Hay alguna manera de obtenerlo todo? ¿Una tabla que siempre contiene todas las columnas y columnas que no son más anchas de lo que deben ser para ajustarse? Quiero que rompa las palabras si tiene que desbordar la mesa.

Podría aceptar una solución js/jquery pero si es posible con css es preferible.

Editar:

Pequeña mesa: Nota: asasdasdasdasdasdasdasdasdasdasdasd es uno palabra que se acorta debido a que la tabla no puede ser mayor que este.

+--------------------+----------+---------+ 
|asasdasdasdasdasdasd|qweqweqweq|zxczxczxc| 
|asdasdasdasdasd  |   |   | 
+--------------------+----------+---------+ 

Gran mesa: Nota: todas las columnas no son de igual tamaño, preferiblemente que aumentan con espacios vacíos igualmente distribuido.

+--------------------------------------+-------------+------------+ 
|asasdasdasdasdasdasdasdasdasdasdasd |qweqweqweq |zxczxczxc | 
+--------------------------------------+-------------+------------+ 
+0

lo que entiendo es que desea ajuste de texto cuando no hay datos de gran tamaño en la célula y cuando los datos se corta debe encajar en ningún espacios en blanco? – MSUH

+0

@MSUH Edité mi publicación para intentar aclarar. Quiero incluso palabras largas para envolver si son demasiado largas. Si queda espacio, lo mejor sería distribuirlo equitativamente en las mesas. – olofom

Respuesta

1

Si entiendo que esto podría ser un punto de partida:

var tds; 

$("table").each(function() { 

    tds = $("td"); 

    for(var x = 0; x < tds.length; x++){ 
     tds.eq(x).css('max-width', '100px'); 
    } 

}); 
+0

El problema con esta solución es que establece el ancho en un valor de píxel y no sé cuántas columnas habrá y qué ancho deben ser. Puede haber 20 columnas con un ancho de tabla de 768px, puede haber dos columnas con un ancho de tabla de 1080px ... y este JS podría hacerse con CSS muy fácilmente: 'table # t2 td {max-width: 300px; } ':) – olofom

+0

¿Podría calcular el número de columna en una tabla y el ancho de pantalla o documento, y sustituir ancho máximo: 100px con esta proporción? esto podría ser una solución? –

+0

No estoy seguro de que funcione. Considere este escenario: tengo 10 columnas y 1000px de ancho. Las primeras 9 columnas solo necesitan 10px cada una y la décima puede usar fácilmente 910px. ¿Cuál debería ser el ancho máximo? También podrían ser 1/10 de cada uno. ¿Entonces el ancho máximo debería ser 910px o quizás 100px? – olofom

0

En primer lugar eliminar el "table-layout: fijo" propiedad.

Pruebe el siguiente código, esto debería funcionar perfectamente en su caso:

$(document).ready(function(){ 

$("table").find('tr').children('td').each(function() { 
    var wdth = $(this).html().length + 10; 
    $(this).css({ 'padding-right': '10px' }, { 'width': wdth + 'px' }); 
    }); 
});  
+0

Disculpe, pero eso no va a funcionar. http://stackoverflow.com/a/14765961/1872046 –

Cuestiones relacionadas