2012-05-31 10 views
7

Ich möchte eine Tabelle, die 100% ist, wenn die Seite, die beliebig viele Spalten enthalten kann, dynamisch erstellt wird. Jede Spalte kann sehr lange Wörter enthalten, so lange, dass sie nicht alle auf eine Seite passen. Um dies zu beheben, benutzte ich table-layout: fixed, wodurch alle Spalten der Tabelle auf der Seite sichtbar wurden. Das Problem ist, dass ich immer noch möchte, dass die Breite jeder Spalte dynamisch ist, so dass, wenn eine Spalte kurze Wörter hat, diese kürzer sein sollte als die mit dem langen Wort.Tabelle mit dynamischen Spalten aber Layout fixiert

Beispiel: jsfiddle.

Tabelle 1 zeigt immer alle Spalten an, aber wenn die Seite breit genug ist, unterbricht sie das Wort, obwohl in anderen Spalten noch Platz ist.

Tabelle 2 funktioniert einwandfrei, wenn die Seite breiter als die Spalten ist, aber die erste Spalte die anderen Spalten aus dem Bildschirm/auf andere Objekte verschiebt, wenn das Fenster kleiner ist.

Gibt es einen Weg, um alles zu bekommen? Eine Tabelle, die immer alle Spalten und Spalten enthält, die nicht breiter sind als sie sein müssen? Ich möchte, dass es die Worte bricht, wenn es den Tisch nicht überschwemmt.

Ich könnte eine js/jquery Lösung akzeptieren, aber wenn es mit CSS möglich ist, ist das vorzuziehen.

Edit:

Kleiner Tisch: Hinweis: asasdasdasdasdasdasdasdasdasdasdasd ist ein Wort, das verkürzt wird, da die Tabelle nicht als diese größer sein kann.

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

Große Tabelle: Hinweis: alle Spalten sind nicht gleich groß, vorzugsweise erhöhen sie mit leeren Räumen gleichmäßig verteilt.

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

Was ich verstehe, ist, dass Sie Textumbruch wünschen, wenn große Daten dort in der Zelle ist, und wenn Daten kurz ist, sollte es mit nicht passen weiße Räume? – MSUH

+0

@MSUH Ich habe meinen Beitrag bearbeitet und versucht zu klären. Ich möchte sogar lange Wörter umwickeln, wenn sie zu lang sind. Wenn noch Platz ist, ist es am besten, sie gleichmäßig auf den Tischen zu verteilen. – olofom

Antwort

1

Wenn ich verstehe dies ein Ausgangspunkt sein könnte:

var tds; 

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

    tds = $("td"); 

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

}); 
+0

Das Problem mit dieser Lösung ist, dass Sie die Breite auf einen Pixelwert setzen und ich weiß nicht, wie viele Spalten es sein wird und wie breit sie sein sollten. Es könnte 20 Spalten mit einer Tabellenbreite von 768px geben, es könnte zwei Spalten mit der Tabellenbreite von 1080px geben ... und diese JS könnte sehr einfach mit CSS gemacht werden: 'table # t2 td {max-width: 300px; } ':) – olofom

+0

Können Sie die Anzahl der Spalte in einer Tabelle und die Breite des Bildschirms oder Dokuments berechnen, und Max-Breite: 100px mit diesem Anteil ersetzen? Das könnte eine Lösung sein? –

+0

Ich bin mir nicht sicher, dass das funktionieren wird. Betrachten Sie dieses Szenario: Ich habe 10 Spalten und 1000 px in der Breite. Die ersten 9 Spalten benötigen jeweils nur 10px, und die 10. kann 910px problemlos verwenden. Was sollte die maximale Breite sein? Sie könnten auch jeweils 1/10 betragen. Also sollte die maximale Breite 910px oder vielleicht 100px sein? – olofom

0

Vor allem entfernen Sie das "table-layout: fixed" Eigenschaft.

Versuchen Sie den folgenden Code, sollte dies perfekt in Ihrem Fall:

$(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

Entschuldigung, aber das wird nicht funktionieren. http://stackoverflow.com/a/14765961/1872046 –

Verwandte Themen