views:

924

answers:

4

Is there a way to hide table rows without affecting the overall table width? I've got some javascript that shows/hides some table rows, but when the rows are set to "display: none;" the table with shringk to fit the contents of the visible rows.

+5  A: 

If you are looking to preserve the overall width of the table, you can check it prior to hiding a row, and explicitly set the width style property to this value:

table.style.width = table.clientWidth + "px";
table.rows[3].style.display = "none";

However, this may cause the individual columns to reflow when you hide the row. A possible way to mitigate this is by adding a style to your table:

 table {
  table-layout: fixed;
 }
levik
...until you resize the window, then the table's fixed width doesn't reflow any more, because it's now a fixed pixel width...
ijw
+1  A: 

For reference, levik's solution works perfectly. In my case, using jQuery, the solution looked something like this:

$('#tableId').width($('#tableId').width());
Wilco
+2  A: 

In CSS, table-layout: fixed; on your table instructs the browser to honor the sizes you've specified for heights and widths. This generally suppresses auto-resizing by the browser unless you haven't given any hints as to the preferred sizes of your rows and columns.

pcorcoran
thanks for providing explanation of the behaviour
garrow
A: 

You can do it using pure HTML

<table border="1">
<colgroup>
    <col width="150px" />
    <col width="10px"  />
    <col width="220px" />
</colgroup>
<tr>
    <td valign="top">1</td>
    <td> </td>
    <td>2</td>
</tr>
<tr>
    <td>3</td>
    <td> </td>
    <td>4</td>
</tr>
</table>
labilbe