2012-05-31 12 views
7

Voglio una tabella 100% se la pagina può contenere un numero qualsiasi di colonne, create dinamicamente. Ogni colonna può contenere parole molto lunghe, a tal punto che potrebbero non rientrare in una sola pagina. Per risolvere questo ho usato table-layout: fixed che ha reso visibili tutte le colonne della tabella sulla pagina. Il problema è che voglio comunque che la larghezza di ogni colonna sia dinamica, in modo che se una colonna abbia parole brevi dovrebbe essere più corta di quella con la parola lunga.Tabella con colonne dinamiche ma layout fisso

Esempio: jsfiddle.

Tabella 1 mostra sempre tutte le colonne ma quando la pagina è sufficientemente ampia interrompe la parola anche se ci sono spazi liberi in altre colonne.

La tabella 2 funziona correttamente quando la pagina è più ampia delle colonne ma la prima colonna spinge le altre colonne fuori dallo schermo/su altri oggetti quando la finestra è più piccola.

C'è un modo per ottenere tutto? Una tabella che contiene sempre tutte le colonne e le colonne che non sono più larghe di quelle che devono essere adattate? Voglio che rompa le parole se deve piuttosto che traboccare il tavolo.

Potrei accettare una soluzione js/jquery ma se è possibile con css che è preferibile.

Edit:

Tavolino: Nota: asasdasdasdasdasdasdasdasdasdasdasd è uno parola che viene accorciato perché la tabella non può essere più grande di questo.

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

Grande tavolo: Nota: tutte le colonne non sono di dimensioni uguali, preferibilmente aumentano con spazi vuoti equamente distribuita.

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

quello che ho capito è che si vuole avvolgere il testo in presenza di grandi quantità di dati nella cella e quando i dati è breve dovrebbe in sintonia con nessun spazi bianchi? – MSUH

+0

@MSUH Ho modificato il mio post per cercare di chiarire. Voglio anche lunghe parole da avvolgere se sono troppo lunghe. Se c'è spazio, il migliore sarebbe distribuirlo uniformemente sui tavoli. – olofom

risposta

1

Se ho ben capito questo potrebbe essere un punto di partenza:

var tds; 

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

    tds = $("td"); 

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

}); 
+0

Il problema con questa soluzione è che si imposta la larghezza su un valore di pixel e non so quante colonne ci saranno e quanto dovrebbero essere ampie. Potrebbero esserci 20 colonne con una larghezza della tabella di 768px, potrebbero esserci due colonne con la larghezza della tabella di 1080px ... e questo JS potrebbe essere fatto con CSS molto facilmente: 'table # t2 td {max-width: 300px; } ':) – olofom

+0

Puoi calcolare il numero di colonne in una tabella e la larghezza dello schermo o del documento, e sostituire la larghezza massima: 100px con questa proporzione? questa potrebbe essere una soluzione? –

+0

Non sono sicuro che funzionerà. Considera questo scenario: ho 10 colonne e 1000px in larghezza. Le prime 9 colonne richiedono solo 10px ciascuna e il 10 può facilmente utilizzare 910px. Quale dovrebbe essere la larghezza massima? Potrebbero anche essere 1/10 ciascuno. Quindi la larghezza massima dovrebbe essere 910px o forse 100px? – olofom

0

Prima di tutto rimuovere il "table-layout: fixed" proprietà.

Provate il seguente codice, questo dovrebbe funzionare perfettamente nel vostro 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

Spiacente, ma non funzionerà. http://stackoverflow.com/a/14765961/1872046 –

Problemi correlati