2012-06-29 12 views
168

Zważywszy na następujące znaczenie, jak mogę użyć CSS do wymuszenia jednej komórki (wszystkich komórek w kolumnie), aby dopasować ją do szerokości zawartości w niej, a nie rozciągać (co jest domyślnym zachowaniem)?Dopasuj szerokość komórki do treści

<style type="text/css"> 
td.block 
{ 
border: 1px solid black; 
} 
</style> 
<table style="width: 100%;"> 
<tr> 
    <td class="block">this should stretch</td> 
    <td class="block">this should stretch</td> 
    <td class="block">this should be the content width</td> 
</tr> 
</table> 

EDIT: Zdaję sobie sprawę, mogłem ciężko kod szerokość, ale wolałbym nie robić, jak treść, która trafi w tej kolumnie jest dynamiczna.

Patrząc na obrazek poniżej, pierwszy obraz jest tym, co produkuje znacznik. Drugi obraz jest tym, czego chcę.

enter image description here

+0

Nie rozumiem twojego pytania. Czy chcesz ograniczyć ostatnią kolumnę do określonej szerokości? – MetalFrog

+5

@diEcho Myślałem, że to było dość jasne. Dodam zdjęcie lub dwa. – Mansfield

+0

Możliwy duplikat [autowidth kolumny tabeli CSS] (https://stackoverflow.com/questions/4757844/css-table-column-autowidth) – Vadzim

Odpowiedz

310

Nie jestem pewien, czy rozumiem pytanie, ale wezmę ukłucie na niego. JSfiddle of the example.

HTML:

<table style="width: 100%;"> 
<tr> 
    <td class="block">this should stretch</td> 
    <td class="block">this should stretch</td> 
    <td class="block">this should be the content width</td> 
</tr> 
</table> 

CSS:

td{ 
    border:1px solid #000; 
} 

tr td:last-child{ 
    width:1%; 
    white-space:nowrap; 
} 
+1

dlaczego piszesz '

' zamiast '
' – diEcho

+9

@diEcho Nie napisałem tej części, która pochodziła z kodu przykładowego. Bez względu na to, złą praktyką jest używanie atrybutu width na elementach. W tym krótkim przykładzie wewnętrzny kod CSS jest w porządku, ale powinien zostać wyodrębniony do pliku, jeśli jest to kod na poziomie produkcyjnym. – MetalFrog

+30

Czystszym sposobem na wykonanie tej IMO byłoby zdefiniowanie stylu o nazwie "nostretch" (lub coś w tym stylu), a następnie wystarczy zdefiniować nostretch w CSS, aby miał szerokość: 1% i nowrap. Wówczas ostatni TD miałby "class =" blok rozdzielający "". W ten sposób możesz "niwelować" dowolną komórkę. –

26

Ustawianie

max-width:100%; 
white-space:nowrap; 

rozwiąże Twój problem.

+2

Próbowałem go na firefoxie i nie działało. – Adam

1

Ustawienie szerokości CSS na 1% lub 100% elementu zgodnie ze wszystkimi specyfikacjami, jakie mogłem znaleźć, jest powiązane z rodzica. Chociaż Blink Rendering Engine (Chrome) i Gecko (Firefox) w momencie pisania wydają się radzić sobie z tym 1% lub 100% (sprawiają, że kolumny kurczą się lub kolumna wypełnia wolne miejsce), to nie jest to gwarantowane zgodnie ze wszystkimi specyfikacjami CSS Mógłbym go znaleźć, by poprawnie go wyrenderować.

Jedną z możliwości jest zastąpienie stół CSS4 Flex div:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

To działa w nowych przeglądarkach tj IE11 + patrz tabela na dole artykułu.

1

Dla mnie jest to najlepszy AutoFit i AUTORESIZE dla tabeli i jej kolumn (użyć CSS! ... ważne tylko wtedy, gdy nie można bez)

.myclass table { 
    table-layout: auto !important; 
} 

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th { 
    width: auto !important; 
} 

Nie określić szerokość css dla tabeli lub dla kolumn tabeli. Jeśli zawartość tabeli jest większa, zostanie przekroczony rozmiar ekranu.

Powiązane problemy