2012-05-31 10 views
7

Chcę tabeli, która jest 100%, jeśli strona, która może zawierać dowolną liczbę kolumn, dynamicznie tworzone. Każda kolumna może zawierać bardzo długie słowa, tak długie, że wszystkie mogą nie zmieścić się na jednej stronie. Aby to naprawić, użyłem table-layout: fixed, dzięki czemu wszystkie kolumny tabeli były widoczne na stronie. Problem polega na tym, że nadal chcę, aby szerokość każdej kolumny była dynamiczna, więc jeśli kolumna ma krótkie słowa, powinna być krótsza niż ta z długim słowem.Tabela z kolumnami dynamicznymi, ale układ poprawiony

Przykład: jsfiddle.

Tabela 1 zawsze pokazuje wszystkie kolumny, ale gdy strona jest wystarczająco szeroka, łamie słowo, mimo że w innych kolumnach jest wolne miejsce.

Tabela 2 działa poprawnie, gdy strona jest szersza niż kolumny, ale pierwsza kolumna wypycha inne kolumny z ekranu/do innych obiektów, gdy okno jest mniejsze.

Czy istnieje sposób, aby to wszystko uzyskać? Tabela, która zawsze zawiera wszystkie kolumny i kolumny, które nie są szersze niż muszą być dopasowane? Chcę, żeby łamała te słowa, jeśli musi, a nie przepełniać stół.

Mogę zaakceptować rozwiązanie js/jquery, ale jeśli jest to możliwe, najlepiej użyć CSS.

Edit:

Mały stolik: Uwaga: asasdasdasdasdasdasdasdasdasdasdasd jest jeden słowo, które jest skrócony, ponieważ tabela nie może być większy niż ten.

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

Duży stół: Uwaga: wszystkie kolumny nie są jednakowej wielkości, najlepiej zwiększają one z pustych przestrzeni równo rozłożone.

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

co rozumiem, że chcesz oblewanie tekstem, gdy istnieje duże dane w komórce i gdy dane jest krótki powinien pasować bez białe przestrzenie? – MSUH

+0

@MSUH Edytowałem swój post, aby spróbować i wyjaśnić. Chcę zawinąć nawet długie słowa, jeśli są zbyt długie. Jeśli pozostało wolne miejsce, najlepiej byłoby równomiernie rozprowadzić je na stołach. – olofom

Odpowiedz

1

Jeśli dobrze rozumiem to może być punktem wyjścia:

var tds; 

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

    tds = $("td"); 

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

}); 
+0

Problem z tym rozwiązaniem polega na ustawieniu szerokości na wartość piksela i nie wiem, ile kolumn będzie i jak szeroki powinien być. Może być 20 kolumn o szerokości stołu 768px, mogą być dwie kolumny o szerokości tablicy równej 1080px ... i ten JS można bardzo łatwo zrobić z CSS: 'table # t2 td {max-width: 300px; } ':) – olofom

+0

Czy mógłbyś obliczyć liczbę kolumn w tabeli i szerokość ekranu lub dokumentu, i zastąpić max-szerokość: 100 pikseli z tą proporcją? to może być rozwiązanie? –

+0

Nie jestem pewien, czy to zadziała. Rozważmy ten scenariusz: mam 10 kolumn i 1000 pikseli szerokości. Pierwsze 9 kolumn wymaga tylko 10 pikseli, a 10 może z łatwością korzystać z 910 pikseli. Jaka powinna być maksymalna szerokość? Mogą one również wynosić 1/10. Więc maksymalna szerokość powinna wynosić 910px, a może 100px? – olofom

0

Przede wszystkim usunąć "table-layout: fixed" własność.

Wypróbuj poniższy kod, to powinno działać idealnie w przypadku:

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

Przepraszamy, ale to nie zadziała. http://stackoverflow.com/a/14765961/1872046 –

Powiązane problemy